1
2
3 import os
4 from xml.sax.saxutils import escape
5
6 from bridge import Element, Attribute
7 from bridge.common import ATOM10_PREFIX, ATOMPUB_PREFIX, XML_PREFIX, XML_NS, \
8 ATOM10_NS, ATOMPUB_NS, XHTML1_NS, XHTML1_PREFIX, atom_as_attr, atom_as_list, \
9 atom_attribute_of_element, xhtml_as_attr, xhtml_as_list, xhtml_attribute_of_element
10
11 from amplee.utils import generate_uuid_uri, get_isodate
12 from amplee.error import MemberMediaError
13 from amplee.atompub.member import MediaMember
14 from amplee.atompub.member.helper import MemberHelper
15
17 - def __init__(self, collection, source=None, abs_path=None,
18 resource_id_generator=None, slug=None, ext=u'xhtml',
19 media_type=u'application/xhtml+xml', inline_content=True,
20 entry_id_creator=None, **kwargs):
21 MediaMember.__init__(self, collection, media_type=media_type)
22
23 meta_only = not inline_content
24 doc = Element.load(abs_path)
25
26 if callable(entry_id_creator):
27 id = entry_id_creator(seed=filename)
28 else:
29 id = generate_uuid_uri()
30
31 resource_name = slug
32 if callable(resource_id_generator):
33 resource_name = resource_id_generator(slug)
34
35 media_id = member_id = resource_name
36 if ext:
37 media_id = u'%s.%s' % (media_id, ext)
38 if self.collection.member_extension:
39 member_id = u'%s.%s.%s' % (member_id, ext, self.collection.member_extension)
40
41 self.member_id = member_id
42 self.media_id = media_id
43
44 entry = Element(u'entry', prefix=ATOM10_PREFIX, namespace=ATOM10_NS)
45 Element(u'id', content=id, prefix=ATOM10_PREFIX, namespace=ATOM10_NS, parent=entry)
46 isodate = get_isodate()
47 Element(u'published', content=isodate, prefix=ATOM10_PREFIX,
48 namespace=ATOM10_NS, parent=entry)
49 Element(u'updated', content=isodate, prefix=ATOM10_PREFIX,
50 namespace=ATOM10_NS, parent=entry)
51 Element(u'edited', content=isodate, prefix=ATOMPUB_PREFIX,
52 namespace=ATOMPUB_NS, parent=entry)
53
54 if self.collection.xml_base:
55 Attribute(u'base', self.collection.xml_base, prefix=XML_PREFIX,
56 namespace=XML_NS, parent=entry)
57
58 meta = infos['meta']
59 if 'title' in meta:
60 Element(u'title', content=unicode(meta['title']), attributes={u'type': u'text'},
61 prefix=ATOM10_PREFIX, namespace=ATOM10_NS, parent=entry)
62
63 if 'description' in meta:
64 Element(u'summary', content=unicode(meta['description']), attributes={u'type': u'text'},
65 prefix=ATOM10_PREFIX, namespace=ATOM10_NS, parent=entry)
66
67 if 'author' in meta:
68 author = Element(u'author', prefix=ATOM10_PREFIX,
69 namespace=ATOM10_NS, parent=entry)
70 Element(u'name', content=unicode(meta['creator']), prefix=ATOM10_PREFIX,
71 namespace=ATOM10_NS, parent=author)
72
73
74 attr = {u'rel': u'edit',
75 u'href': unicode(escape("%s/%s" % (self.collection.base_edit_uri,
76 member_id))),
77 u'type': self.collection.member_media_type}
78
79 link = Element(u'link', attributes=attr, prefix=ATOM10_PREFIX,
80 namespace=ATOM10_NS, parent=entry)
81
82 try:
83 size = unicode(os.stat(abs_path).st_size)
84 except:
85 size = None
86
87 attr = {u'rel': u'edit-media',
88 u'href': unicode(escape("%s/%s" % (self.collection.base_media_edit_uri,
89 media_id))),
90 u'type': self.media_type}
91
92 link = Element(u'link', attributes=attr, prefix=ATOM10_PREFIX,
93 namespace=ATOM10_NS, parent=entry)
94
95 if 'keywords' in meta:
96 keywords = meta['keywords'].split(',')
97 for keyword in keywords:
98 Element(u'category', attributes={u'term': unicode(keyword)}, prefix=ATOM10_PREFIX,
99 namespace=ATOM10_NS, parent=entry)
100
101 if inline_content:
102 content = infos['content']
103 if content:
104 content = Element(u'content', attributes={u'type': u'xhtml'}, prefix=ATOM10_PREFIX,
105 namespace=ATOM10_NS, parent=entry)
106 Element(u'div', content=infos['content'],
107 prefix=XHTML1_PREFIX, namespace=XHTML1_NS, parent=content)
108 else:
109 Element(u'content', content=u'', attributes={u'type': u'text'}, prefix=ATOM10_PREFIX,
110 namespace=ATOM10_NS, parent=entry)
111 else:
112 attr = {u'src': unicode(escape("%s/%s" % (self.collection.base_uri, media_id))),
113 u'type': self.media_type}
114 content = Element(u'content', attributes=attr, prefix=ATOM10_PREFIX,
115 namespace=ATOM10_NS, parent=entry)
116
117 self.entry = entry
118