# -*- python -*- import __main__, logging, iso8601, time, textile import dbagg, dbagg.web, dbagg.blog from dbagg.blog import Poster #from dbagg.blog.blosxom import BlosxomPoster from dbagg.blog.debug import DebugPoster from twisted.web import client from twisted.internet import reactor, defer from HTMLParser import HTMLParser import os, time class BlosxomPoster(Poster): entries_path = "/Users/deusx/Desktop/decafbad-entries" def __init__(self): Poster.__init__(self) self.log = logging.getLogger("%s"%self.__class__) def mreplace(self, text, map): for a, b in map: text = text.replace(a, b) return text num_map = [('0','o'),('1','a'),('2','b'),('3','c'),('4','d'),('5','e'),\ ('6','f'),('7','g'),('8','h'),('9','i')] def simple_post(self, title, content, **kwargs): new_fn = kwargs.get('name', '') if new_fn == '': new_fn = self.mreplace(str(time.time()).split(".")[0], self.num_map) if (kwargs.has_key('category')): post_path = os.path.join(self.entries_path, kwargs['category'], new_fn + ".txt") else: post_path = os.path.join(self.entries_path, new_fn + ".txt") f = open(post_path, 'w') if f: f.write(title+"\n") f.write(content+"\n") f.close() return 1 else: return 0 #poster_class = DebugPoster poster_class = BlosxomPoster class TitleGetter: def __init__(self, url): self.url = url self.deferred = None def get_title(self): client.getPage(self.url).addCallbacks(self.got_page, self.error) self.deferred = defer.Deferred() return self.deferred def got_page(self, data): self.deferred.callback(TitleExtractor().parse(data).get_title()) def error(self, reason): self.deferred.callback("none (%s)" % (reason)) class TitleExtractor(HTMLParser): def get_title(self): return self.title def parse(self, data): self.reset() self.feed(data) return self def reset(self): HTMLParser.reset(self) self._in_title = 0 self.title = "" def handle_starttag(self, tag, attrs): if tag == "title": self._in_title = 1 def handle_data(self, data): if self._in_title == 1: self.title = self.title + data def handle_endtag(self, tag): if tag == "title": self._in_title = 0 class QuickPostPage(dbagg.web.AggPage): templateFile = 'quick_post.html.tmpl' def initialize(self, *args, **kwargs): self.log = logging.getLogger("%s"%self.__class__) self.items = kwargs['items'] ### Simple request extraction methods def req_action(self, request): return request.args.get('a', request.args.get('action', ['none']))[0] def req_item_id(self, request): return request.args.get('id', [''])[0] def req_source(self, request): if request.args.get('_item', None): return request.args.get('_item').link else: return request.args.get('s', request.args.get('source', ['']))[0] def req_referer(self, request): return request.args.get('r', request.args.get('referer', ['']))[0] def req_comment(self, request): return request.args.get('c', request.args.get('comment', ['']))[0] def req_quote(self, request): if request.args.get('_item', None): return request.args.get('_item').description else: return request.args.get('q', request.args.get('quote', ['']))[0] def req_source_title(self, request): if request.args.get('_item', None): return request.args.get('_item').title else: return request.args.get('source_title', [''])[0] def req_referer_title(self, request): return request.args.get('referer_title', [''])[0] def req_entry_name(self, request): return request.args.get('entry_name', [''])[0] def req_entry_category(self, request): return request.args.get('entry_category', ['links'])[0] def req_entry_title(self, request): return request.args.get('entry_title', request.args.get('source_title', ['']))[0] def wmfactory_action(self, request): return self.req_action(request) def wmfactory_source(self, request): return self.req_source(request) def wmfactory_referer(self, request): return self.req_referer(request) def wmfactory_quote(self, request): return self.req_quote(request) def wmfactory_comment(self, request): return self.req_comment(request) def wmfactory_source_title(self, request): if request.args.get('_item', None): return request.args.get('_item').title else: tg = TitleGetter(self.req_source(request)) return tg.get_title() def wmfactory_referer_title(self, request): tg = TitleGetter(self.req_referer(request)) return tg.get_title() def wvupdate_switch(self, request, widget, data): widget.clearNode = 1 newNode = widget.getPattern(data, None) if not newNode: newNode = widget.getPattern('default', None) if not newNode: return widget.appendChild(newNode) def renderView(self, request): action = self.req_action(request) if self.req_item_id(request) != "": request.args['_item'] = self.items.get_item(self.req_item_id(request)) if action == "post": content = "" if self.req_quote(request) != "": content = content + """
%s
""" % \ (self.req_source(request), self.req_quote(request)) content = content + """
Source: """ content = content + """%s""" % \ (self.req_source(request), self.req_source_title(request)) if self.req_referer(request) != "": content = content + """ (via %s)""" % \ (self.req_referer(request), self.req_referer_title(request)) content = content + """
""" if self.req_comment(request) != "": content = content + (textile.textile(self.req_comment(request))) poster = poster_class() success = poster.simple_post(self.req_entry_title(request), content, \ category=self.req_entry_category(request), name =self.req_entry_name(request)) return dbagg.web.AggPage.renderView(self, request) ################################################################################ resource = QuickPostPage(conn=__main__.conn, \ sources=__main__.sources, \ items=__main__.items)