Changeset 695

Show
Ignore:
Timestamp:
06/18/08 15:53:23 (5 months ago)
Author:
sylvain
Message:

Starting support for tag based on pubsub nodes and atom indexes

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • oss/headstock/headstock/example/microblog/microblog/jabber/pubsub.py

    r693 r695  
    298298        return 1 
    299299 
    300     def make_entry(self, msg): 
     300    def make_entry(self, msg, node): 
    301301        uuid = generate_uuid_uri() 
    302302        entry = E.load('./entry.atom').xml_root 
     
    307307        entry.get_child('updated', ns=entry.xml_ns).xml_text = dt 
    308308        entry.get_child('content', ns=entry.xml_ns).xml_text = unicode(msg) 
     309 
     310        if node != self.pubsub_top_level_node: 
     311            tag = extract_url_trail(node) 
     312            E(u'category', namespace=entry.xml_ns, prefix=entry.xml_prefix, 
     313              attributes={u'term': unicode(tag)}, parent=entry) 
     314         
     315        print entry.xml() 
    309316        return uuid, entry 
    310317         
     
    330337                if m: 
    331338                    node, message = m.groups() 
    332                 uuid, entry = self.make_entry(message
     339                uuid, entry = self.make_entry(message, node
    333340                i = Item(id=uuid, payload=entry) 
    334341                p = Node(unicode(self.from_jid), u'pubsub.%s' % self.xmpphost, 
  • oss/headstock/headstock/example/microblog/microblog/web/application.py

    r687 r695  
    66from microblog.profile.user import EmptyUserProfile, UserProfile 
    77from microblog.web.speakup import SpeakUpWebApplication 
    8 from microblog.web.atompub import CollectionHandler, CollectionPagingHandler 
     8from microblog.web.atompub import CollectionHandler, CollectionPagingHandler,\ 
     9    CollectionTagingHandler 
    910 
    1011__all__ = ['WebApplication'] 
     
    8788    def attach_serving_collection_application(self, c, profile, d): 
    8889        profile_name = profile.username 
     90        route = '/%s' % profile_name.encode('utf-8') 
     91 
     92        controller = CollectionPagingHandler(c) 
     93        d.add('%s/paging' % route, GET=controller.GET) 
     94 
     95        controller = CollectionTagingHandler(c) 
     96        d.add('%s/tag/{tag}' % route, GET=controller.index) 
     97 
    8998        controller = CollectionHandler(c) 
    90         route = '/%s' % profile_name.encode('utf-8') 
    9199        speakup = SpeakUpWebApplication(self.base_dir, self.atompub,  
    92100                                        self.tpl_lookup, profile, controller) 
    93  
    94101        d.add('%s[/]' % route, GET=speakup.index, 
    95102              POST=controller.create) 
     
    98105              PUT=controller.replace, 
    99106              DELETE=controller.remove) 
    100  
    101         controller = CollectionPagingHandler(c) 
    102         d.add('%s/paging' % route, GET=controller.GET) 
  • oss/headstock/headstock/example/microblog/microblog/web/atompub.py

    r687 r695  
    2222 
    2323__all__ = ['AtomPubWebApplication', 'CollectionHandler', 
    24            'CollectionPagingHandler'
     24           'CollectionPagingHandler', 'CollectionTagingHandler'
    2525 
    2626class AtomPubWebApplication(object): 
     
    238238        cherrypy.response.headers['content-type'] = 'application/atom+xml;type=feed' 
    239239        return feed.xml(indent=True) 
     240 
     241class CollectionTagingHandler(object): 
     242    def __init__(self, collection): 
     243        self.collection = collection 
     244        self.cat_index = self.collection.indexers[0].retrieve('ci') 
     245 
     246    def index(self, tag): 
     247        res = self.cat_index.lookup(term=tag) 
     248        if res: 
     249            member_ids = [member_id for collection, member_id in res] 
     250            members = self.collection.reload_members_from_list(member_ids) 
     251            feed = self.collection.to_feed(members=members) 
     252            cherrypy.response.headers['etag'] = compute_etag_from_feed(feed) 
     253            cherrypy.response.headers['content-type'] = 'application/atom+xml;type=feed' 
     254            return feed.xml(indent=True) 
     255 
     256        return "No results"