cabebfc862fd93efd2d61081ac9c9dbb1a6336c4
2 # -*- coding: utf-8 -*-
6 # configuration (codes d'accès à la base MS-SQL)
7 sys
.path
.append('/home/thomas/public_html/')
10 # pour savoir quel objet interroger : Routes
11 from routes
import Mapper
12 from routes
.middleware
import RoutesMiddleware
15 from jinja
.exceptions
import TemplateNotFound
16 from objet
import ObjetInconnu
18 # TODO : ajouter un middleware de cache (beaker, basé sur REQUEST_URI quand la methode est GET)
19 # from beaker.middleware import CacheMiddleware
21 # formats de sortie autorisés, et content-type correspondant
22 formats
= { 'xml': 'application/xml', 'html': 'text/html', 'txt': 'text/plain', 'json': 'application/json', 'rss': 'application/rss+xml', 'debug': 'text/plain' }
25 # les routes RESTful (cf http://routes.groovie.org/manual.html#restful-services)
27 mapper
.resource('demlog','demlog')
28 mapper
.resource('comlog','comlog')
29 mapper
.resource('demdep','demdep')
30 mapper
.resource('comdep','comdep')
31 mapper
.resource('dempub','dempub')
32 mapper
.resource('compub','compub')
33 mapper
.resource('comare','comare')
34 mapper
.resource('comarei','comare:(impl)',controller
='comare') # pour les comarexxx où xxx est un code d'implantation
35 mapper
.resource('comsre','comsre')
36 mapper
.resource('comsrei','comsre:(impl)',controller
='comsre')
37 mapper
.resource('comxre','comxre') # comxre = comare + comsre
38 mapper
.resource('comxrei','comxre:(impl)',controller
='comxre')
39 mapper
.resource('dem','dem')
40 mapper
.resource('com','com')
41 mapper
.resource('utilisateur','utilisateur')
42 mapper
.resource('fournisseur','fournisseur')
45 from document
import demlog
, comlog
, demdep
, comdep
, dempub
, compub
, comare
, comsre
, comxre
, dem
, com
46 from utilisateur
import utilisateur
47 from fournisseur
import fournisseur
49 def dispatcher(environ
, start_response
):
50 """dispatch vers la bonne methode du bon objet, et retour WSGI"""
51 results
= environ
['wsgiorg.routing_args'][1] # résultat du middleware Routes
53 # On cherche l'objet puis la méthode
54 target_class
= globals()[results
['controller']]
55 method
= getattr(target_class
,results
['action'])
57 # Si erreur pendant la recherche, on renvoie un 501
58 start_response("501 Not Implemented", [('Content-type', 'text/html; charset=utf-8')])
59 return '<html><body><h2>501 objet ou action invalide</h2></body></html>' # <pre>%s: %s\n%s</pre></body></html>' % ( sys.exc_info()[0] , sys.exc_info()[1] , traceback.format_exc())
61 # On lance la méthode et on renvoie le résultat
62 type, output
= method(target_class(environ
))
63 start_response("200 OK", [('Content-type', formats
[type] + "; charset=utf-8")])
64 return output
.encode('utf-8')
65 # gestion des problèmes possibles pendant l'exécution
66 except ObjetInconnu
, type:
67 start_response("404 Not Found", [('Content-type', 'text/html; charset=utf-8')])
68 return '<html><body><h2>404 %s inexistant</h2></body></html>' % type
69 except TemplateNotFound
, template
:
70 start_response("415 Unsupported Media Type", [('Content-type', 'text/html; charset=utf-8')])
71 return '<html><body><h2>415 format non supporté (%s inexistant)</h2></body></html>' % template
73 start_response("500 INTERNAL ERROR", [('Content-type', 'text/html; charset=utf-8')])
74 return '<html><body><h2>500 erreur lors du traitement</h2><pre>%s: %s\n%s</pre></body></html>' % ( sys
.exc_info()[0] , sys
.exc_info()[1] , traceback
.format_exc())
77 # application() sera lancée par mod_wsgi : on route et on dispatche
78 application
= RoutesMiddleware( dispatcher
, mapper
)