Пример #1
0
    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})
Пример #2
0
    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())
Пример #3
0
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