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
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
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
50 return simplejson.dumps(value,default=default)
51
52
55
56
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