ajout filtre json ; systeme de template dans .py a part master
authorThomas NOEL <thomas@new-dev.(none)>
Tue, 15 Jul 2008 09:48:24 +0000 (05:48 -0400)
committerThomas NOEL <thomas.noel@auf.org>
Tue, 15 Jul 2008 09:48:24 +0000 (05:48 -0400)
modeles/document-index.json
objet.py
rest.py
template.py [new file with mode: 0644]

index f0559da..a8f6e4e 100644 (file)
@@ -1,3 +1 @@
-
-{{ documents | jsonencode }}
-
+{{ documents | json }}
index 9434b97..8ba06d5 100644 (file)
--- a/objet.py
+++ b/objet.py
@@ -14,8 +14,7 @@
 from pymssql import connect
 
 # le système de template
-from jinja import Environment, FileSystemLoader
-ejinja = Environment(loader=FileSystemLoader('/home/thomas/public_html/modeles/'))
+from template import ejinja
 
 # le système d'analyse des variables HTTP
 from paste.request import parse_formvars
@@ -25,22 +24,6 @@ import sys
 sys.path.append('/home/thomas/public_html/')
 import rest_config
 
-# dates bien affichées dans jinja : filtre date
-import locale
-from datetime import datetime
-def do_joliedate():
-    def wrapped(env, context, value):
-        if isinstance(value, datetime):
-           locale.setlocale(locale.LC_ALL,'fr_FR.UTF-8')
-           if (value.hour + value.minute + value.second) > 0:
-                return value.strftime('%A %d %B %Y, %Hh%Mmin')
-           else:
-                return value.strftime('%A %d %B %Y')
-       else:
-           return value
-    return wrapped
-ejinja.filters['joliedate'] = do_joliedate
-
 class Objet(object):
     """Objet de base : dispose d'un accès à MS-SQL (lire les données) et d'un accès à jinja (rendu des données)"""
 
diff --git a/rest.py b/rest.py
index 668115f..5f2f1fb 100644 (file)
--- a/rest.py
+++ b/rest.py
@@ -23,7 +23,7 @@ contenttype = { 'xml': 'application/xml',
                'rss': 'application/rss+xml',
                 'html': 'text/html',
                'txt': 'text/plain',
-               'json': 'application/json',
+               'json': 'text/plain', # 'application/json',
                'csv': 'text/csv',
                'debug': 'text/plain' }
 
diff --git a/template.py b/template.py
new file mode 100644 (file)
index 0000000..1d32311
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# le système de template : jinja
+from jinja import Environment, FileSystemLoader
+ejinja = Environment(loader=FileSystemLoader('/home/thomas/public_html/modeles/'))
+
+# ajout de filtres :
+
+# dates bien affichées dans jinja : filtre date
+import locale
+from datetime import datetime
+def do_joliedate():
+    def wrapped(env, context, value):
+        if isinstance(value, datetime):
+           locale.setlocale(locale.LC_ALL,'fr_FR.UTF-8')
+           if (value.hour + value.minute + value.second) > 0:
+                return value.strftime('%A %d %B %Y, %Hh%Mmin')
+           else:
+                return value.strftime('%A %d %B %Y')
+       else:
+           return value
+    return wrapped
+
+ejinja.filters['joliedate'] = do_joliedate
+
+# json avec extension pour datetime et Decimal
+import simplejson
+from decimal import Decimal
+
+class ComplexEncoder(simplejson.JSONEncoder):
+    def default(self, obj):
+        if isinstance(obj, datetime):
+           return '%s EDT' % obj    # EDT = timezone montreal
+       elif isinstance(obj, Decimal):
+           return '%s' % obj
+       else:
+           return simplejson.JSONEncoder.default(self, obj)
+
+def do_json():
+    def wrapped(env, context, value):
+        return simplejson.dumps(value, cls=ComplexEncoder, indent=4, sort_keys=True)
+    return wrapped
+
+ejinja.filters['json'] = do_json
+