gestion ObjetSQLInconnuError et debug SQL dispo dans le template
[restcoda.git] / objetsql.py
CommitLineData
30e64411
TN
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3
10a46ce2
TN
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#
30e64411 12
10a46ce2 13# l'accès à MS-SQL
30e64411
TN
14from pymssql import connect
15
10a46ce2
TN
16# le système de template
17from jinja import Environment, FileSystemLoader
18ejinja = Environment(loader=FileSystemLoader('/home/thomas/public_html/templates/'))
19
20# le système d'analyse des variables HTTP
30e64411
TN
21from paste.request import parse_formvars
22
10a46ce2 23# accès à la configuration (données pour la connexion MS-SQL)
30e64411
TN
24import sys
25sys.path.append('/home/thomas/public_html/')
26import rest_config
27
10a46ce2 28
ef44a84b 29class ObjetSQL(object):
10a46ce2 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)"""
30e64411 31 def __init__(self, environ):
10a46ce2 32 """Conserve l'environnement WSGI et analyse les variables HTTP"""
30e64411
TN
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):
10a46ce2 37 """Retourne un environnement de rendu"""
30e64411
TN
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):
10a46ce2 41 """Retourne un curseur vers la base de données"""
30e64411
TN
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):
10a46ce2
TN
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)
30e64411
TN
50 if hasattr(self,'db_connect'):
51 db_connect.close()
52
ef44a84b
TN
53class ObjetSQLInconnuError(Exception):
54 def __init__(self, type):
55 self.type = type
56 def __str__(self):
57 return self.type
58