on se lance dans les middleware
authorThomas NOEL <thomas@new-dev.(none)>
Wed, 2 Jul 2008 22:38:32 +0000 (18:38 -0400)
committerThomas NOEL <thomas.noel@auf.org>
Wed, 2 Jul 2008 22:38:32 +0000 (18:38 -0400)
rest.wsgi
rest_config.py.dist [new file with mode: 0644]

index b6a0ce4..1c12508 100644 (file)
--- a/rest.wsgi
+++ b/rest.wsgi
@@ -3,45 +3,47 @@
 
 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)
@@ -64,7 +66,7 @@ class document(objetsql):
        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:
@@ -89,12 +91,13 @@ class comlog(document):
     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']
@@ -108,6 +111,7 @@ def application(environ, start_response):
         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):
@@ -122,3 +126,11 @@ 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()
+
diff --git a/rest_config.py.dist b/rest_config.py.dist
new file mode 100644 (file)
index 0000000..d031b0b
--- /dev/null
@@ -0,0 +1,8 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+host='12.34.56.78'
+user='lechef'
+password='revepo'
+database='cocodada'
+