def process_request(self, req, chrome, projects): q = 'status=new|assigned|accepted|reopened' query_param = 'all' show_myticket = 0 if not req.authname: req.authname = "anonymous" else: show_myticket = 1 query_param = req.args.get('query') if query_param == "mine": q = 'status=new|assigned|accepted|reopened&owner=$USER' elif query_param == "reported_by_me": q = 'status=new|assigned|accepted|reopened&reporter=$USER' else: query_param = "all" projs = [] for project in projects: query = Query.from_string(project["env"], q) pjdb = project["env"].get_db_cnx() try: tickets = query.execute(req) except Exception, e: debug(traceback.format_exc()) if len(tickets) == 0: continue projs.append({'name': project["name"], 'href': project["href"], 'tickets': tickets})
def process_request(self, req, chrome, projects): format = req.args.get('format') data = {} maxrows = int(req.args.get('max', 0)) t = time.localtime() fromdate = datetime(t[0], t[1], t[2], 23, 59, 59, t[6], tzinfo=utc) daysback = self.default_daysback todate = datetime(t[0], t[1], t[2], 23, 59, 59, t[6], tzinfo=utc) - timedelta(days=daysback) data['timeline'] = { 'from':fromdate, 'daysback':daysback } all_filters = [] for project in projects: for event_provider in self.event_providers: all_filters += event_provider(project['env']).get_timeline_filters(req) available_filters = Set(all_filters) filters = [] # check the request or session for enabled filters, or use default for test in (lambda f: req.args.has_key(f[0]), lambda f: req.session.get('timeline.filter.%s' % f[0], '')\ == '1', lambda f: len(f) == 2 or f[2]): if filters: break filters = [f[0] for f in available_filters if test(f)] # save the results of submitting the timeline form to the session if req.args.has_key('update'): for filter in available_filters: key = 'timeline.filter.%s' % filter[0] if req.args.has_key(filter[0]): req.session[key] = '1' elif req.session.has_key(key): del req.session[key] stop = fromdate start = todate events = [] old_href = req.href for project in projects: req.href = Href(project['href']) project_events = [] for event_provider in self.event_providers: try: for event in event_provider(project['env']).get_timeline_events(req, start, stop, filters): event_obj = self._event_data(event_provider, event) project_events.append(event_obj) except Exception, e: # cope with a failure of that provider debug(to_unicode(e)) pass for ev in project_events: title = '' url = '' message = '' try: if ev['kind'] == "wiki": try: url = WikiModule(self.compmgr).render_timeline_event(req, 'url', ev['event']) title = WikiModule(self.compmgr).render_timeline_event(req, 'title', ev['event']) version = ev['data'][0].version if version > 1: pre_version = version -1 diff_href = url + '&action=diff' message = tag('', ' ', tag.a(_('(diff)'), href=diff_href)) except Exception, e: debug(traceback.format_exc()) elif ev['kind'] == "newticket" or ev['kind'] == "reopenedticket" or ev['kind'] == "closedticket" or ev['kind'] == "editedticket": try: url = TicketModule(self.compmgr).render_timeline_event(req, 'url', ev['event']) title = TicketModule(self.compmgr).render_timeline_event(req, 'title', ev['event']) if ev['kind'] == "newticket": message = ev['data'][7] # description else: message = ev['data'][8] # comment except Exception, e: debug(traceback.format_exc())
def send_project_index(environ, start_response, parent_dir=None, env_paths=None, authname='anonymous'): req = Request(environ, start_response) req.authname = authname; if not req.authname: req.authname = "anonymous" loadpaths = [] if req.environ.get('trac.env_index_template'): tmpl_path, template = os.path.split(req.environ['trac.env_index_template']) loadpaths.insert(0, tmpl_path) else: template = 'index.html' req.hdf = HDFWrapper(loadpaths) tmpl_vars = {} if req.environ.get('trac.template_vars'): for pair in req.environ['trac.template_vars'].split(','): key, val = pair.split('=') req.hdf[key] = val if parent_dir and not env_paths: env_paths = dict([(filename, os.path.join(parent_dir, filename)) for filename in os.listdir(parent_dir)]) chrome = prepare_request(req, environ) config = get_allenv(environ, req).config need_auth = config.get('tram', 'check_auth') == 'true' auth_perm = config.get('tram', 'permission') or 'PROJECT_ACCESS' bar_color = config.get('tram', 'bar_color') or '#0b0' expand = config.get('tram', 'expand') or 'true' show_tickets_in_project_list = config.get('tram', 'show_tickets_in_project_list') or 'false' projects = get_project_list(environ, get_parent_href(req), authname=req.authname, require_auth=need_auth, permission=auth_perm) # Very simple method for calculating project activity # needs to be more advanced, tickets closed etc and per month not overall stop = time.time() t = time.localtime() start = time.mktime((t[0], t[1] - 1, t[2], t[3], t[4], t[5], t[6], t[7], t[8])) stop2 = int(stop) start2 = int(start) start = datetime(t[0], t[1], t[2], t[3], t[4], t[5], t[6], tzinfo=utc) - timedelta(30) stop = datetime(t[0], t[1], t[2], t[3], t[4], t[5], t[6], tzinfo=utc) changes = 0 changes_month = 0 max_ticket = 0 max_ticket_closed = 0 max_ticket_month = 0 max_ticket_closed_month = 0 for project in projects: if not project.has_key('env'): continue; env = project['env'] revisions = 0 try: repos = env.get_repository(req.authname) #change_list = repos.get_changesets(start, stop) try: for chgset in repos.get_changesets(start, stop): #while change_list.next(): try: revisions += 1 except Exception, e: debug(to_unicode(e)) except Exception, e: debug(to_unicode(e)) changes_month = max(changes_month, revisions) try: total_revisions = int(repos.get_youngest_rev()) except TypeError: total_revisions = 0 changes = max(changes, total_revisions) except TracError ,e: total_revisions = 0