Package web2py :: Package gluon :: Module serializers
[hide private]
[frames] | no frames]

Source Code for Module web2py.gluon.serializers

 1  """ 
 2  This file is part of the web2py Web Framework 
 3  Copyrighted by Massimo Di Pierro <mdipierro@cs.depaul.edu> 
 4  License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) 
 5  """ 
 6  import datetime 
 7  from storage import Storage 
 8  from html import TAG 
 9  from html import xmlescape 
10  import contrib.simplejson as simplejson 
11  import contrib.rss2 as rss2 
12   
13 -def custom_json(o):
14 if hasattr(o,'custom_json') and callable(o.custom_json): 15 return o.custom_json() 16 if isinstance(o, (datetime.date, 17 datetime.datetime, 18 datetime.time)): 19 return o.isoformat()[:19].replace('T',' ') 20 elif isinstance(o, (int, long)): 21 return int(o) 22 elif hasattr(o,'as_list') and callable(o.as_list): 23 return o.as_list() 24 elif hasattr(o,'as_dict') and callable(o.as_dict): 25 return o.as_dict() 26 else: 27 raise TypeError(repr(o) + " is not JSON serializable")
28 29
30 -def xml_rec(value, key):
31 if hasattr(value,'custom_xml') and callable(value.custom_xml): 32 return value.custom_xml() 33 elif isinstance(value, (dict, Storage)): 34 return TAG[key](*[TAG[k](xml_rec(v, '')) for k, v in value.items()]) 35 elif isinstance(value, list): 36 return TAG[key](*[TAG.item(xml_rec(item, '')) for item in value]) 37 elif hasattr(value,'as_list') and callable(value.as_list): 38 return str(xml_rec(value.as_list(),'')) 39 elif hasattr(value,'as_dict') and callable(value.as_dict): 40 return str(xml_rec(value.as_dict(),'')) 41 else: 42 return xmlescape(value)
43 44
45 -def xml(value, encoding='UTF-8', key='document'):
46 return ('<?xml version="1.0" encoding="%s"?>' % encoding) + str(xml_rec(value,key))
47 48
49 -def json(value,default=custom_json):
50 return simplejson.dumps(value,default=default)
51 52
53 -def csv(value):
54 return ''
55 56
57 -def rss(feed):
58 if not 'entries' in feed and 'items' in feed: 59 feed['entries'] = feed['items'] 60 now=datetime.datetime.now() 61 rss = rss2.RSS2(title = feed['title'], 62 link = str(feed['link']), 63 description = feed['description'], 64 lastBuildDate = feed.get('created_on', now), 65 items = [rss2.RSSItem(\ 66 title=entry['title'], 67 link=str(entry['link']), 68 description=entry['description'], 69 pubDate=entry.get('created_on', now) 70 )\ 71 for entry in feed['entries'] 72 ] 73 ) 74 return rss2.dumps(rss)
75