# -*- python -*- import __main__, dbagg, logging, iso8601, time, dbagg.web class TimeIndexPage(dbagg.web.AggPage): templateFile = 'bytime.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'] 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_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) 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) ): curr_pair['items'].append(dbagg.web.ItemModel(item=item, sources=self.sources)) return pair_list ################################################################################ resource = TimeIndexPage(conn=__main__.conn, \ sources=__main__.sources, \ items=__main__.items)