Esempio n. 1
0
def iteration_time(request,iteration):
    its = get_iterations()
    it = [it for it in its if it[1]['name']==iteration][0]
    start_date = it[1]['start date'].date()
    end_date = it[1]['end date'].date()
    tf = get_fns(recurse=True)
    hours = [os.path.join(os.path.dirname(t),'hours.json') for t in tf]
    agg={} ; persons={} ; ptasks={}
    for h in hours:
        tid = '/'.join(os.path.dirname(h).split('/')[2:])
        if not os.path.exists(h): continue
        md = loadmeta(h)
        for stmp,data in md.items():
            stmp = datetime.datetime.strptime(stmp,'%Y-%m-%d').date()
            if not (stmp>=start_date and stmp<=end_date): continue
            for person,hours in data.items():
                if stmp not in agg: agg[stmp]={}
                if person not in agg[stmp]: agg[stmp][person]={}
                if person not in persons: persons[person]=0
                if person not in ptasks: ptasks[person]=[]
                persons[person]+=hours
                if tid not in ptasks[person]: ptasks[person].append(tid)
                if tid not in agg[stmp][person]: agg[stmp][person][tid]=0
                agg[stmp][person][tid]+=hours
    agg = list(agg.items())
    agg.sort(lambda i1,i2: cmp(i1[0],i2[0]))
    persons = list(persons.items())
    persons.sort(lambda i1,i2: cmp(i1[1],i2[1]),reverse=True)
    return {'persons':persons,'agg':agg,'it':it,'ptasks':ptasks,'request':request}
Esempio n. 2
0
 def test_iteration_creation(self):
     docs.add_iteration('testiter')
     rt = docs.add_task('testiter',parent=None,params={'summary':'1st test task'},tags=['chuckacha'])
     tf = docs.get_fns(iteration='testiter',flush=True)
     assert len(tf)==1
     for i in range(5):
         rt2 = docs.add_task(iteration=None,parent=rt['id'],params={'summary':'1st subtask'},tags=['subtask'])
         print(rt2)
         tf = docs.get_fns(iteration='testiter',recurse=True,flush=True)
         assert len(tf)==i+2
     t1 = docs.get_task(rt['id'],read=True)
     assert t1['id']==rt['id']
     assert t1['summary']=='1st test task'
     assert 'chuckacha' in t1['tags']
     t2 = docs.get_task(rt2['id'],read=True)
     assert t2['summary']=='1st subtask'
     assert 'subtask' in t2['tags']
Esempio n. 3
0
 def test_iteration_creation(self):
     docs.add_iteration('testiter')
     rt = docs.add_task('testiter',parent=None,params={'summary':'1st test task'},tags=['chuckacha'])
     tf = docs.get_fns(iteration='testiter',flush=True)
     assert len(tf)==1
     for i in range(5):
         rt2 = docs.add_task(iteration=None,parent=rt['id'],params={'summary':'1st subtask'},tags=['subtask'])
         print rt2
         tf = docs.get_fns(iteration='testiter',recurse=True,flush=True)
         assert len(tf)==i+2
     t1 = docs.get_task(rt['id'],read=True)
     assert t1['id']==rt['id']
     assert t1['summary']=='1st test task'
     assert 'chuckacha' in t1['tags']
     t2 = docs.get_task(rt2['id'],read=True)
     assert t2['summary']=='1st subtask'
     assert 'subtask' in t2['tags']
Esempio n. 4
0
def iteration_commits(request,iteration,branch):
    gwu = cfg.GITWEB_URL
    its = get_iterations()
    it = [it for it in its if it[1]['name']==iteration][0]
    start_date = it[1]['start date']
    end_date = it[1]['end date']
    #print('commits on iteration %s to branch %s'%(iteration,branch))
    tf = get_fns(recurse=True)
    metas = [os.path.join(os.path.dirname(t),'meta.json') for t in tf]
    agg={} ; repos=[] ; task_data={} ; lastcommits={}
    
    for m in metas:
        tid = '/'.join(os.path.dirname(m).split('/')[2:])
        if not os.path.exists(m): continue
        md = loadmeta(m)
        if 'branchlastcommits' not in md: continue
        blc = md['branchlastcommits']

        for br,stmp in blc.items():
            if  '/' not in br:
                #print "%s has no /"%(br)
                continue
            try:
                repo,br = br.split('/')
            except ValueError:
                #print '%s has too many /'%(br)
                continue
            stmp = parsegitdate(stmp)
            if not (stmp.date()>=start_date.date() and stmp.date()<=end_date.date()):
                #print 'bad commit date %s'%stmp
                continue
            if not (branch=='all' or branch==br):
                #print 'branch mismatch %s<>%s'%(branch,br)
                continue
            if tid not in agg:
                agg[tid]={}
            if repo not in agg[tid]:
                agg[tid][repo]=[]
            agg[tid][repo].append(br)

            if tid not in task_data:
                t = get_task(tid)
                task_data[tid]=t

            if tid not in lastcommits: lastcommits[tid]=stmp
            if stmp>=lastcommits[tid]: lastcommits[tid]=stmp

            if repo not in repos: repos.append(repo)
            #print(tid,repo,br,stmp)
    agg = list(agg.items())
    def lcsort(i1,i2):
        return cmp(lastcommits[i1[0]],lastcommits[i2[0]])
    agg.sort(lcsort,reverse=True)
    return {'agg':agg,'it':it,'branch':branch,'repos':repos,'gwu':gwu,'task_data':task_data,'lastcommits':lastcommits,'request':request}
Esempio n. 5
0
def asgn(request,person=None,created=None,iteration=None,recurse=True,notdone=False,query=None,tag=None,newer_than=None,recent=False,gethours=False):
    in_tasks = get_fns(assignee=person,created=created,recurse=recurse,query=query,tag=tag,newer_than=newer_than,recent=recent)
    tasks={}
    print 'got initial ',len(in_tasks),' tasks; cycling'
    for t in in_tasks:
        print 'getting parent for %s'%t._id
        tlp = get_parent(t._id,tl=True)
        assert hasattr(t,'status'),"%s with no status"%t._id
        st = t['status']
        #print 'st of %s setting to status of tlp %s: %s'%(t._id,tlp,st) 
        print 'grouping by status'
        if st not in tasks: tasks[st]=[]

        showtask=False
        if not notdone: showtask=True
        if str(t['status']) not in cfg.DONESTATES: showtask=True
        print 'showtask'
        if showtask:
            tasks[st].append(t)

    def srt(t1,t2):
        t1ids = [int(tp) for tp in (t1._id.split('/'))]
        t2ids = [int(tp) for tp in (t2._id.split('/'))]

        t1ids.insert(0,int('priority' in t1['tags']))
        t2ids.insert(0,int('priority' in t2['tags']))
        t1idsc = copy.copy(t1ids)
        t2idsc = copy.copy(t2ids)


        while True and len(t1ids) and len(t2ids):
            t1id = t1ids.pop(0)
            t2id = t2ids.pop(0)
            #print 'comparing %s & %s which were extracted from %s, %s'%(t1id,t2id,t1idsc,t2idsc)
            rt= cmp(t1id,t2id)
            if rt!=0: break
        return rt

    for st in tasks:
        tasks[st].sort(srt,reverse=True)
    return {'tasks':tasks,'statuses':STATUSES,'request':request,'gethours':gethours}
def asgn(request,
         P,
         C,
         person=None,
         created=None,
         informed=None,
         handled_by=None,
         iteration=None,
         recurse=True,
         notdone=False,
         query=None,
         tag=None,
         newer_than=None,
         tids=None,
         recent=False,
         gethours=False):
    in_tasks = get_fns(C,assignee=person,created=created,handled_by=handled_by,informed=informed,recurse=recurse,query=query,tag=tag,newer_than=newer_than,tids=tids,recent=recent)
    tasks={}
    #print 'got initial ',len(in_tasks),' tasks; cycling'
    for td in in_tasks:
        t = Task(**td['contents'])
        t.pri = td['comb_pri']
        tlp = get_parent(t._id,tl=True)
        assert hasattr(t,'status'),"%s with no status"%t._id
        st = t.status
        if st not in tasks: tasks[st]=[]

        showtask=False
        if not notdone: showtask=True
        if str(t['status']) not in cfg.DONESTATES: showtask=True
        if showtask:
            tasks[st].append(t)

    sortmode = request.params.get('sortby','default')

    for st in tasks:
        tasks[st].sort(key=cmp_to_key(sortmodes[sortmode]),reverse=True)
    return basevars(request,P,C,{'tasks':tasks,'statuses':STATUSES,'request':request,'gethours':gethours})