# -*- python -*- import __main__, dbagg, logging, iso8601, time, dbagg.web from twisted.web.woven import controller, widgets from twisted.web.util import redirectTo ################################################################################ class TrainItemPage(dbagg.web.AggPage): templateFile = "train_item.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 wmfactory_item_id(self, request): return request.args.get('id', ['none'])[0] def wmfactory_url(self, request): return request.args.get('url', ['none'])[0] def wmfactory_action(self, request): return request.args.get('action', ['none'])[0] 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.wmfactory_action(request) item_id = self.wmfactory_item_id(request) item = self.items.get_item(item_id) if (action == 'none') or (item is None): return msg = item.toMsg() ### Untrain this msg if it's already been trained trained = item.get_meta('bayes:trained') if trained is not None: self.classifier.untrain(msg, (trained=='pos')) self.log.info("Untrained item #%s (%s)" % (item.id, trained)) ### Train the message and note the category item.set_meta('bayes:trained', action) self.classifier.train(msg, (action=='pos')) self.log.info("Trained item #%s (%s)" % (item.id, action)) return dbagg.web.AggPage.renderView(self, request) ################################################################################ resource = TrainItemPage(conn=__main__.conn, \ sources=__main__.sources, \ items=__main__.items, \ classifier=__main__.classifier)