# pour savoir quel objet interroger : Routes
from routes import Mapper
from routes.middleware import RoutesMiddleware
-# et analyse de query_string (TODO: etudier parse au lieu de cgi)
-from cgi import parse_qs
+# et analyse des paramètres (POST et query_string) pour filtrage
+from paste.request import parse_formvars
# pour chercher les données sur MS-SQL
from pymssql import connect
mapper.resource('comdep','comdep')
mapper.resource('dempub','dempub')
mapper.resource('compub','compub')
-# TODO à étudier pour permettre les comarexxx
mapper.resource('comare','comare')
+# pour les comarexxx où xxx est un code d'implantation
+mapper.resource('comarei','comare:(impl)',controller='comare')
mapper.resource('comsra','comsre')
+mapper.resource('comsrai','comsre:(impl)',controller='comsre')
+mapper.resource('dem','dem')
+mapper.resource('com','com')
class objetsql(object):
"""objet de base : dispose d'un accès à MS-SQL (lire les données) et d'un accès à jinja (rendu des données)"""
output = template.render(documents)
return self.outputformat, output
+ def show_debug(self):
+ return 'txt', '%s' % self.environ
+
def show(self):
id = int(self.environ['wsgiorg.routing_args'][1]['id'])
self.cursor.execute("select top 1 * from auf_v_acces_demcom where code like '%s' and numero = %d" % (self.code_document, id))
output = template.render(document)
return self.outputformat, output
+class dem(document):
+ def __init__(self, environ):
+ super(dem, self).__init__(environ, code_document = 'DEM-%')
+
+class com(document):
+ def __init__(self, environ):
+ super(com, self).__init__(environ, code_document = 'COM-%')
+
class demlog(document):
def __init__(self, environ):
super(demlog, self).__init__(environ, code_document = 'DEM-LOG-AUF')
def __init__(self, environ):
super(compub, self).__init__(environ, code_document = 'COM-PUB-AUF')
-# TODO : voir la possibilité d'appel de comsre/sn1.rss
class comsre(document):
def __init__(self, environ):
- super(comsre, self).__init__(environ, code_document = 'COM-SRE-%')
+ # est-ce un appel de comsre ou comsrexxx (avec xxx = implantation)
+ impl = environ['wsgiorg.routing_args'][1].get('impl','%')
+ super(comsre, self).__init__(environ, code_document = 'COM-SRE-%s' % impl)
class comare(document):
def __init__(self, environ):
- super(comare, self).__init__(environ, code_document = 'COM-ARE-%')
-
+ impl = environ['wsgiorg.routing_args'][1].get('impl','%')
+ super(comare, self).__init__(environ, code_document = 'COM-ARE-%s' % impl)
def dispatcher(environ, start_response):
- """sera lancée par mod_wsgi"""
- if environ.has_key('QUERY_STRING'):
- environ['org.auf.filters'] = parse_qs(environ['QUERY_STRING'])
- else:
- environ['org.auf.filters'] = {}
+ """dispatch vers la bonne methode du bon objet, et retour WSGI"""
+ parse_formvars(environ)
results = environ['wsgiorg.routing_args'][1]
try:
target_class = globals()[results['controller']]
start_response("404 NOT FOUND", [('Content-type', 'text/plain')])
return 'erreur lors du traitement\n%s: %s\n%s' % ( sys.exc_info()[0] , sys.exc_info()[1] , traceback.format_exc())
+# application qui sera lancée par mod_wsgi : on route et on dispatche
application = RoutesMiddleware( dispatcher, mapper)
+# TODO : ajouter un middleware de cache (beaker)
#
return result_dict
import re
-p = re.compile('(dem|com)-(...)-auf',re.IGNORECASE)
+p = re.compile('(dem|com)-(...)-(...)',re.IGNORECASE)
def coda2rest(value):
- """Traduit un nom CODA en l'objet correspodant, par exemple DEM-LOG-AUF en demlog"""
+ """Traduit un nom CODA vers la base REST correspodante,
+ par exemple DEM-LOG-AUF en demlog ou COM-ARE-VN3 en comarevn3"""
m = p.search(value)
if m == None: return value
- return m.group(1).lower() + m.group(2).lower()
+ if m.group(3).lower() == 'auf':
+ return m.group(1).lower() + m.group(2).lower()
+ else:
+ return m.group(1).lower() + m.group(2).lower() + m.group(3).lower()