doc et commentaires
[restcoda.git] / objetsql.py
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 #
5 # Un "objetsql" dispose de tout ce qui est nécessaire pour extraire
6 # les données (accès au MS-SQL) et pour en faire le rendu final
7 # (accès au système de template)
8 #
9 # Il analyse également l'environnement WSGI afin d'en extraire
10 # les données de filtrage (extrait des arguments de l'URL, après le ?)
11 #
12
13 # l'accès à MS-SQL
14 from pymssql import connect
15
16 # le système de template
17 from jinja import Environment, FileSystemLoader
18 ejinja = Environment(loader=FileSystemLoader('/home/thomas/public_html/templates/'))
19
20 # le système d'analyse des variables HTTP
21 from paste.request import parse_formvars
22
23 # accès à la configuration (données pour la connexion MS-SQL)
24 import sys
25 sys.path.append('/home/thomas/public_html/')
26 import rest_config
27
28
29 class objetsql(object):
30 """Objet de base : dispose d'un accès à MS-SQL (lire les données) et d'un accès à jinja (rendu des données)"""
31 def __init__(self, environ):
32 """Conserve l'environnement WSGI et analyse les variables HTTP"""
33 self.environ = environ
34 parse_formvars(environ) # extraction des variables de query_string et POST
35 self.filters = environ['paste.parsed_formvars'][0].dict_of_lists() # puis traduction en dictionnaire {var1:[val1,val2], ...}
36 def template(self,template):
37 """Retourne un environnement de rendu"""
38 self.outputformat = self.environ['wsgiorg.routing_args'][1].get('format','xml')
39 return ejinja.get_template('%s.%s' % (template,self.outputformat))
40 def cursor(self):
41 """Retourne un curseur vers la base de données"""
42 if not hasattr(self,'db_connect'):
43 self.db_connect = connect(host=rest_config.host,user=rest_config.user,password=rest_config.password,database=rest_config.database)
44 if not hasattr(self,'db_cursor'):
45 self.db_cursor = self.db_connect.cursor()
46 return self.db_cursor
47 def __del__(self):
48 """Destructeur : coupe la connexion à MSSQL à la mort de l'objet"""
49 # (normalement ça se fait tout seul mais j'en suis pas sûr sûr)
50 if hasattr(self,'db_connect'):
51 db_connect.close()
52