# -*- python -*- import __main__, dbagg, logging, iso8601, time, dbagg.web class SeenVisitedPage(dbagg.web.AggPage): templateFile = 'seen_visited.html.tmpl' default_max_age = 12.0 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_max_age(self, request): return float(request.args.get('max_age', [self.default_max_age])[0]) def wmfactory_since(self, request): since = request.args.get('since', [None])[0] if since is not None: return since max_age = self.wmfactory_max_age(request) return iso8601.ctime(time.time() - (60*60*max_age)) def wmfactory_sources(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_meta, items WHERE items_meta.item=items.id AND ( (items_meta.name='visited_at' OR items_meta.name='shown_at') AND items_meta.value IS NOT null ) AND items_meta.value > %s ORDER BY items_meta.value 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 = SeenVisitedPage(conn=__main__.conn, \ sources=__main__.sources, \ items=__main__.items)