# -*- python -*- import __main__, dbagg, logging, iso8601, time, dbagg.web from spambayes import hammie class BayesItemModel(dbagg.web.ItemModel): def wmfactory_trained(self, request): trained = self.item.get_meta("bayes:trained") if not trained: trained = 'none' return trained def wmfactory_score(self, request): score = self.item.get_meta("bayes:score") if score: score = "%0.3f" % (float(score)) return self.default_blank(score) class BayesIndexPage(dbagg.web.AggPage): templateFile = 'bytime_bayes.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_max(self, request): return int(request.args.get('max', ['200'])[0]) def wmfactory_offset(self, request): return int(request.args.get('offset', ['0'])[0]) def wmfactory_since(self, request): return request.args.get('since', [iso8601.ctime(time.time() - (60*60*24*1))])[0] def wmfactory_items_count(self, request): since = self.wmfactory_since(request) cursor = self.conn.cursor() cursor.execute( \ """ SELECT count(items.id) FROM items LEFT JOIN items_meta AS b ON (b.item=items.id AND b.name="hidden") WHERE (b.value IS null OR b.value='0') AND items.created>%s """, ( since ) ); count = cursor.fetchone()[0] return count 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 wvupdate_on_change(self, request, widget, data): prev_data = request.args.get('_prev_data', None) if data == prev_data: self.log.debug("On change, clear! %s == %s" % (data, prev_data)) widget.clearNode = 1 return self.log.debug("On change, show! %s == %s" % (data, prev_data)) request.args['_prev_data'] = data def wmfactory_items(self, request): max = self.wmfactory_max(request) offset = self.wmfactory_offset(request) since = self.wmfactory_since(request) curr_items = self.items.sql_iter( \ """ SELECT items.* FROM items LEFT JOIN items_meta AS t_hidden ON (t_hidden.item=items.id AND t_hidden.name="hidden") WHERE (t_hidden.value IS null OR t_hidden.value='0') AND (items.created > %s) ORDER BY items.created DESC LIMIT %s OFFSET %s """, ( since, max, offset ) ); pair_list = [] curr_source = None curr_pair = None for item in curr_items: if (curr_source is None) or (curr_source.id != item.source): if not curr_pair is None: pair_list.append(curr_pair) curr_source = self.sources.get_source(item.source) if not curr_source is None: curr_pair = { 'source':dbagg.web.SourceModel(sources=self.sources, \ items=self.items, \ source=curr_source), 'items':[] } if not ( (curr_pair is None) or \ (curr_pair['source'] is None) ) \ and not curr_source is None: curr_pair['items'].append(BayesItemModel(item=item, sources=self.sources)) return pair_list ################################################################################ resource = BayesIndexPage(conn = __main__.conn, \ sources = __main__.sources, \ items = __main__.items, \ classifier = __main__.classifier)