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 from languages import lazyT
11 import contrib.simplejson as simplejson
12 import contrib.rss2 as rss2
13
15 if hasattr(o,'custom_json') and callable(o.custom_json):
16 return o.custom_json()
17 if isinstance(o, (datetime.date,
18 datetime.datetime,
19 datetime.time)):
20 return o.isoformat()[:19].replace('T',' ')
21 elif isinstance(o, (int, long)):
22 return int(o)
23 elif isinstance(o, lazyT):
24 return str(o)
25 elif hasattr(o,'as_list') and callable(o.as_list):
26 return o.as_list()
27 elif hasattr(o,'as_dict') and callable(o.as_dict):
28 return o.as_dict()
29 else:
30 raise TypeError(repr(o) + " is not JSON serializable")
31
32
34 if hasattr(value,'custom_xml') and callable(value.custom_xml):
35 return value.custom_xml()
36 elif isinstance(value, (dict, Storage)):
37 return TAG[key](*[TAG[k](xml_rec(v, '')) for k, v in value.items()])
38 elif isinstance(value, list):
39 return TAG[key](*[TAG.item(xml_rec(item, '')) for item in value])
40 elif hasattr(value,'as_list') and callable(value.as_list):
41 return str(xml_rec(value.as_list(),''))
42 elif hasattr(value,'as_dict') and callable(value.as_dict):
43 return str(xml_rec(value.as_dict(),''))
44 else:
45 return xmlescape(value)
46
47
48 -def xml(value, encoding='UTF-8', key='document'):
49 return ('<?xml version="1.0" encoding="%s"?>' % encoding) + str(xml_rec(value,key))
50
51
53 return simplejson.dumps(value,default=default)
54
55
58
59
61 if not 'entries' in feed and 'items' in feed:
62 feed['entries'] = feed['items']
63 now=datetime.datetime.now()
64 rss = rss2.RSS2(title = feed['title'],
65 link = str(feed['link']),
66 description = feed['description'],
67 lastBuildDate = feed.get('created_on', now),
68 items = [rss2.RSSItem(\
69 title=entry['title'],
70 link=str(entry['link']),
71 description=entry['description'],
72 pubDate=entry.get('created_on', now)
73 )\
74 for entry in feed['entries']
75 ]
76 )
77 return rss2.dumps(rss)
78