# -*- python -*- import dbagg, logging, iso8601, time, dbagg.web from twisted.web.woven import controller, widgets from twisted.web.util import redirectTo # TODO: Need to access main_app without importing __main_ from __main__ import main_app ################################################################################ class TrackItemPage(dbagg.web.AggPage): templateFile = "track_item.html.tmpl" def initialize(self, *args, **kwargs): self.log = logging.getLogger("%s"%self.__class__) self.sources = main_app.getServiceNamed('sources') self.items = main_app.getServiceNamed('items') def wmfactory_id(self, request): return request.args.get('id', []) 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) if (action == 'none'): return for item_id in request.args.get('id', []): item = self.items.get_item(item_id) if item is not None: source = self.sources.get_source(item.source) item.set_meta(action, iso8601.ctime(time.time())) cnt = source.get_meta("item_%s_count" % action, 0) source.set_meta("item_%s_count" % action, int(cnt)+1) if action == 'visited_at': item = self.items.get_item(item_id) if item: return redirectTo(item.link, request) return dbagg.web.AggPage.renderView(self, request) ################################################################################ resource = TrackItemPage()