Package amplee :: Package atompub :: Package member :: Module web
[hide private]
[frames] | no frames]

Source Code for Module amplee.atompub.member.web

  1  # -*- coding: utf-8 -*- 
  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   
16 -class XHTMLMember(MediaMember):
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