Viewing file: postit.py (3.4 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
from twisted.web import xmlrpc
from nevow import loaders, rend, inevow, static, url from store import IPostit, Post
def pptime(tt): return tt.asHumanly()
def atompptime(tt): return tt.asISO8601TimeAndDate()
class Base(rend.Page): def __init__(self, store, *args, **kwargs): super(Base, self).__init__(*args, **kwargs) self.store = store def renderHTTP(self, ctx): return self.store.transact(rend.Page.renderHTTP, self, ctx) def locateChild(self, ctx, segments): return self.store.transact(rend.Page.locateChild, self, ctx, segments)
class Main(Base): docFactory = loaders.xmlfile('postit.html') child_styles = static.File('styles/') child_images = static.File('images/')
def childFactory(self, ctx, segment): if segment == 'atom.xml': return Atom(self.store) elif segment == 'rpc2.py': return PostItRPC(self.store)
def render_title(self, ctx, data): return ctx.tag.clear()[IPostit(self.store).name] def data_get_posts(self, ctx, data): return IPostit(self.store).getPosts(15) def render_post(self, ctx, data): ctx.tag.fillSlots('tit_tit_attr', data.title) ctx.tag.fillSlots('tit_url_attr', data.url) ctx.tag.fillSlots('title', data.title) ctx.tag.fillSlots('perma_tit_attr', 'PermaLink') ctx.tag.fillSlots('perma_url_attr', url.here.add('view', data.storeID)) ctx.tag.fillSlots('id', data.storeID) ctx.tag.fillSlots('author', data.author) ctx.tag.fillSlots('data', pptime(data.created)) ctx.tag.fillSlots('content', data.content) return ctx.tag
class Atom(Base): docFactory = loaders.xmlfile('atom.xml') def beforeRender(self, ctx): inevow.IRequest(ctx).setHeader("Content-Type", "application/application+xml; charset=UTF-8") def data_getFirstPost(self, ctx, data): for post in IPostit(self.store).getPosts(1): return post
def render_modified(self, ctx, data): return ctx.tag.clear()[atompptime(data.created)] def data_get_posts(self, ctx, data): return IPostit(self.store).getPosts(15) def render_post(self, ctx, data): ctx.tag.fillSlots('title', data.title) ctx.tag.fillSlots('link', data.url) ctx.tag.fillSlots('id', data.storeID) ctx.tag.fillSlots('created', atompptime(data.created)) ctx.tag.fillSlots('modified', atompptime(data.created)) ctx.tag.fillSlots('author', data.author) ctx.tag.fillSlots('content', data.content) return ctx.tag class PostItRPC(xmlrpc.XMLRPC): """Publishes stuff"""
def __init__(self, store): xmlrpc.XMLRPC.__init__(self) self.store = store def xmlrpc_publish(self, token, url, title, desc, user): def _(): newPost = Post(store=self.store, author=user.decode('utf-8'), title=title.decode('utf-8'), url=url.decode('utf-8'), content=desc.decode('utf-8')) return newPost newPost = self.store.transact(_) return newPost.storeID
def xmlrpc_entries(self, token, count): def _(): return [(entry.url, entry.title, entry.content) for entry in IPostit(self.store).getPosts(count)] return self.store.transact(_)
|