import sys, traceback
+# configuration (codes d'accès à la base MS-SQL)
+sys.path.append('/home/thomas/public_html/')
+import rest_config
+
+# pour savoir quel objet interroger : Routes et analyse de query_string
from routes import Mapper
+from routes.middleware import RoutesMiddleware
from cgi import parse_qs
+# pour chercher les données sur MS-SQL
from pymssql import connect
+
+# pour afficher le résultat : jinja
from jinja import Environment, FileSystemLoader
from jinja.filters import stringfilter
-import re
-p = re.compile('(dem|com)-(...)-auf',re.IGNORECASE)
-
-def coda2rest(value):
- m = p.search(value)
- if m == None: return value
- return m.group(1).lower() + m.group(2).lower()
-
-@stringfilter
-def do_coda2rest(value):
- return coda2rest(value)
+# systeme de cache : beaker
+from beaker.middleware import CacheMiddleware
+# formats de sortie autorisés, et content-type correspondant
formats = { 'xml': 'application/xml', 'html': 'text/html', 'txt': 'text/plain', 'json': 'application/json', 'rss': 'application/rss+xml' }
+# les routes
mapper = Mapper()
mapper.connect(':controller/')
mapper.connect(':controller/:id', action='get')
mapper.connect(':controller/:action/:id')
mapper.create_regs(['document','demlog','comlog'])
+# objet de base : dispose d'un accès à MS-SQL (lire les données) et d'un accès à jinja (rendu des données)
class objetsql(object):
def __init__(self, environ):
- self.bd = connect(host='10.36.0.240',user='log_lec',password='123soap8',database='prodprocurement')
+ self.bd = connect(host=rest_config.host,user=rest_config.user,password=rest_config.password,database=rest_config.database)
self.cursor = self.bd.cursor()
self.jinja = Environment(loader=FileSystemLoader('/home/thomas/public_html/'))
- self.jinja.filters['coda2rest'] = do_coda2rest
self.environ = environ
if (self.environ['org.auf.filters'].has_key('format')):
self.outputformat=self.environ['org.auf.filters']['format'][0]
else:
self.outputformat='xml'
-
+
class document(objetsql):
def __init__(self, environ, code_document='%', basename_template='document'):
super(document, self).__init__(environ)
return self.outputformat, output
def get(self):
- id = int(self.environ['org.auf.routes']['id'])
+ 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))
document = dict_fetchone(self.cursor)
if document == None:
def __init__(self, environ):
super(comlog, self).__init__(environ, code_document = 'COM-LOG-AUF')
-def application(environ, start_response):
+def dispatcher(environ, start_response):
"""sera lancée par mod_wsgi"""
- results = mapper.match(environ['PATH_INFO'])
- filters = parse_qs(environ['QUERY_STRING'])
- environ['org.auf.routes'] = results
- environ['org.auf.filters'] = filters
+ if environ.has_key('QUERY_STRING'):
+ environ['org.auf.filters'] = parse_qs(environ['QUERY_STRING'])
+ else:
+ environ['org.auf.filters'] = {}
+ results = environ['wsgiorg.routing_args'][1]
try:
target_class = globals()[results['controller']]
method_name = results['action']
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 = RoutesMiddleware( dispatcher, mapper)
# utilitaires
def dict_fetchone(cursor):
result_dict[cursor.description[i][0]] = result[i]
return result_dict
+import re
+p = re.compile('(dem|com)-(...)-auf',re.IGNORECASE)
+def coda2rest(value):
+ """Traduit un nom CODA en l'objet correspodant, par exemple DEM-LOG-AUF en demlog"""
+ m = p.search(value)
+ if m == None: return value
+ return m.group(1).lower() + m.group(2).lower()
+