# -*- python -*- import __main__, dbagg, logging, iso8601, time, dbagg.web from twisted.internet import reactor from twisted.web.woven import controller, widgets from twisted.web.util import redirectTo from spambayes import hammie ################################################################################ class ScoreItemsPage(dbagg.web.AggPage): templateFile = "score_items.html.tmpl" def initialize(self, *args, **kwargs): self.log = logging.getLogger("%s"%self.__class__) self.conn = kwargs['conn'] self.sources = kwargs['sources'] self.items = kwargs['items'] self.classifier = kwargs['classifier'] def item_to_msg(self, item): return "%s ^^^ %s" % (item.title, item.description) def scoreItems(self): since = iso8601.ctime(time.time() - (60*60*24*1)) #'2003-08-12T00:00:00-05:00' self.log.info("Searching items...") shown_items = self.items.sql_iter( """ SELECT items.* FROM items LEFT JOIN items_meta AS m_score ON (m_score.item=items.id AND m_score.name="bayes:score") WHERE (items.created > %s) """, ( since ) ); # AND (m_score.value IS NULL) self.log.info("Scoring items...") for item in shown_items: msg = self.item_to_msg(item) (prob, clues) = self.classifier.score(msg, True) if prob > 0.6: self.log.info("\tScore #%s %s (%s)" % (item.id, prob, item.title)) prob = round(prob, 3) item.set_meta('bayes:score', prob) def renderView(self, request): reactor.callLater(0.1,self.scoreItems) return dbagg.web.AggPage.renderView(self, request) ################################################################################ resource = ScoreItemsPage(conn = __main__.conn, \ sources = __main__.sources, \ items = __main__.items, \ classifier = __main__.classifier)