fournisseur.show() renvoie toutes les adresses d'un fournisseur
[restcoda.git] / rest.py
CommitLineData
1795efcd
TN
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3
4import sys, traceback
5
a6627284
TN
6# configuration (codes d'accès à la base MS-SQL)
7sys.path.append('/home/thomas/public_html/')
8import rest_config
9
0a4c31d4 10# pour savoir quel objet interroger : Routes
1795efcd 11from routes import Mapper
a6627284 12from routes.middleware import RoutesMiddleware
1795efcd 13
30e64411
TN
14# Gestion des erreurs
15from jinja.exceptions import TemplateNotFound
65f02320 16from objet import ObjetInconnu
a6627284 17
30e64411 18# TODO : ajouter un middleware de cache (beaker, basé sur REQUEST_URI quand la methode est GET)
0a4c31d4 19# from beaker.middleware import CacheMiddleware
1795efcd 20
0897170c
TN
21# content-type correspondant a certains formats
22contenttype = { 'xml': 'application/xml',
23 'rss': 'application/rss+xml',
24 'html': 'text/html',
25 'txt': 'text/plain',
26 'json': 'application/json',
27 'csv': 'text/csv',
28 'debug': 'text/plain' }
1795efcd 29
0a4c31d4 30# les routes RESTful (cf http://routes.groovie.org/manual.html#restful-services)
1795efcd 31mapper = Mapper()
0a4c31d4
TN
32mapper.resource('demlog','demlog')
33mapper.resource('comlog','comlog')
34mapper.resource('demdep','demdep')
35mapper.resource('comdep','comdep')
36mapper.resource('dempub','dempub')
37mapper.resource('compub','compub')
0a4c31d4 38mapper.resource('comare','comare')
85a89d99
TN
39mapper.resource('comarei','comare:(impl)',controller='comare') # pour les comarexxx où xxx est un code d'implantation
40mapper.resource('comsre','comsre')
41mapper.resource('comsrei','comsre:(impl)',controller='comsre')
42mapper.resource('comxre','comxre') # comxre = comare + comsre
43mapper.resource('comxrei','comxre:(impl)',controller='comxre')
f6b772ed
TN
44mapper.resource('dem','dem')
45mapper.resource('com','com')
ef44a84b 46mapper.resource('utilisateur','utilisateur')
d374db4d 47mapper.resource('fournisseur','fournisseur')
1795efcd 48
30e64411
TN
49# objets disponibles
50from document import demlog, comlog, demdep, comdep, dempub, compub, comare, comsre, comxre, dem, com
ef44a84b 51from utilisateur import utilisateur
d374db4d 52from fournisseur import fournisseur
0ae81148 53
a6627284 54def dispatcher(environ, start_response):
81b8aba3 55 """dispatch vers la bonne methode du bon objet, et retour WSGI"""
30e64411 56 results = environ['wsgiorg.routing_args'][1] # résultat du middleware Routes
1795efcd 57 try:
30e64411 58 # On cherche l'objet puis la méthode
1795efcd 59 target_class = globals()[results['controller']]
0ae81148
TN
60 method = getattr(target_class,results['action'])
61 except:
6264cb94 62 # Si erreur pendant la recherche, on renvoie un 501
4bd61de2 63 start_response("501 Not Implemented", [('Content-type', 'text/html; charset=utf-8')])
6264cb94 64 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())
0ae81148 65 try:
30e64411 66 # On lance la méthode et on renvoie le résultat
1795efcd 67 type, output = method(target_class(environ))
0897170c 68 start_response("200 OK", [('Content-type', contenttype.get(type,'text/plain') + "; charset=utf-8")])
30e64411
TN
69 return output.encode('utf-8')
70 # gestion des problèmes possibles pendant l'exécution
65f02320 71 except ObjetInconnu, type:
4bd61de2 72 start_response("404 Not Found", [('Content-type', 'text/html; charset=utf-8')])
6264cb94 73 return '<html><body><h2>404 %s inexistant</h2></body></html>' % type
30e64411 74 except TemplateNotFound, template:
4bd61de2 75 start_response("415 Unsupported Media Type", [('Content-type', 'text/html; charset=utf-8')])
0ae81148 76 return '<html><body><h2>415 format non supporté (%s inexistant)</h2></body></html>' % template
1795efcd 77 except:
4bd61de2 78 start_response("500 INTERNAL ERROR", [('Content-type', 'text/html; charset=utf-8')])
0ae81148 79 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())
1795efcd
TN
80
81
30e64411
TN
82# application() sera lancée par mod_wsgi : on route et on dispatche
83application = RoutesMiddleware( dispatcher, mapper )
1795efcd 84
a6627284 85