]> git.llucax.com Git - z.facultad/75.52/sercom.git/blob - start-sercom.py
si no hay instancias de entregas activas aborto el agregar entrega al alumno.
[z.facultad/75.52/sercom.git] / start-sercom.py
1 #!/usr/bin/python
2 # vim: set et sw=4 sts=4 encoding=utf-8 foldmethod=marker :
3
4 import locale
5 locale.setlocale(locale.LC_ALL, '')
6
7 import pkg_resources
8 pkg_resources.require("TurboGears")
9
10 from turbogears import update_config, start_server
11 import cherrypy
12 cherrypy.lowercase_api = True
13 from os.path import *
14 import sys
15
16 # first look on the command line for a desired config file,
17 # if it's not on the command line, then
18 # look for setup.py in this directory. If it's not there, this script is
19 # probably installed
20 if len(sys.argv) > 1:
21     update_config(configfile=sys.argv[1],
22         modulename="sercom.config")
23 elif exists(join(dirname(__file__), "setup.py")):
24     update_config(configfile="dev.cfg",modulename="sercom.config")
25 else:
26     update_config(configfile="prod.cfg",modulename="sercom.config")
27
28 from sercom.model import InstanciaDeEntrega, Entrega, AND, hub
29 from sercom.finalizer import Finalizer
30 from threading import Thread
31 from datetime import datetime
32 import time
33 import logging
34
35 log = logging.getLogger('sercom.tester')
36
37 class Queue(object): #{{{
38     def __init__(self):
39         self.go_on = True
40     def get(self):
41         while self.go_on:
42             try:
43                 hub.begin()
44                 try:
45                     select = InstanciaDeEntrega.select(AND(
46                         InstanciaDeEntrega.q.inicio_proceso == None,
47                         InstanciaDeEntrega.q.fin <= datetime.now()))
48                     instancia = select.orderBy(InstanciaDeEntrega.q.fin)[0]
49                     n = Entrega.selectBy(instancia=instancia, fin=None).count()
50                     if n:
51                         log.debug(_(u'Esperando para procesar instancia (%s), '
52                             'faltan probar %s entregas'), instancia.shortrepr(),
53                             n)
54                         time.sleep(30)
55                         continue
56                     instancia.inicio_proceso = datetime.now()
57                 finally:
58                     hub.commit()
59                 return instancia.id
60             except IndexError:
61                 log.debug(_(u'No hay instancias de entrega sin finalizar'))
62                 time.sleep(30) # TODO config?
63             except Exception, e:
64                 if isinstance(e, SystemExit):
65                     raise
66                 log.exception('Queue: ')
67                 time.sleep(30) # TODO config?
68         return None
69 #}}}
70
71 #q = Queue()
72 #finalizer = Finalizer(name='finalizer', queue=q)
73 #t = Thread(name='finalizer', target=finalizer.run)
74 #t.start()
75
76 from sercom.controllers import Root
77
78 start_server(Root())
79