def history(request,task): t = get_task(C,task) st,op = gso('git log --follow -- %s'%(os.path.join(cfg.DATADIR,task,'task.org'))) ; assert st==0 commitsi = cre.finditer(op) for c in commitsi: cid = c.group(1) url = '%(gitweb_url)s/?p=%(docs_reponame)s;a=commitdiff;h=%(cid)s'%{'cid':cid,'gitweb_url':cfg.GITWEB_URL,'docs_reponame':cfg.DOCS_REPONAME} op = op.replace(cid,"<a href='%(url)s'>%(cid)s</a>"%{'cid':cid,'url':url}) t['summary'] = '' rt = basevars(request,P,C,{'op':op,'task':t,'request':request}) return rt
def history(request,task): t = get_task(task) st,op = gso('git log --follow -- %s'%(os.path.join(cfg.DATADIR,task,'task.org'))) ; assert st==0 commitsi = cre.finditer(op) for c in commitsi: cid = c.group(1) url = '%(gitweb_url)s/?p=%(docs_reponame)s;a=commitdiff;h=%(cid)s'%{'cid':cid,'gitweb_url':cfg.GITWEB_URL,'docs_reponame':cfg.DOCS_REPONAME} op = op.replace(cid,"<a href='%(url)s'>%(cid)s</a>"%{'cid':cid,'url':url}) t['summary'] = '' rt = {'op':op,'task':t,'request':request} return rt
def rpr(request,task,journal=False,render_only=False): t= get_task(task) if journal: vn = 'jpath' else: vn = 'path' cmd = 'emacs -batch --visit="%s" --funcall org-export-as-html-batch'%(t[vn]) st,op = gso(cmd) ; assert st==0,"%s returned %s\n%s"%(cmd,st,op) rt = open(t[vn].replace('.org','.html'),'r').read() if render_only: return rt r = Response() r.body = rt return r
def tracking(request,rng): frto = rng.split(':') ; narr=[] for tel in frto: otel = tel if tel=='lastmonth': tel = (datetime.datetime.now()-datetime.timedelta(days=30)).strftime('%Y-%m-%d') if tel=='lastweek': tel = (datetime.datetime.now()-datetime.timedelta(days=7)).strftime('%Y-%m-%d') if tel=='yesterday': tel = (datetime.datetime.now()-datetime.timedelta(days=1)).strftime('%Y-%m-%d') if tel=='today': tel = (datetime.datetime.now()).strftime('%Y-%m-%d') narr.append(tel) frto = narr st,op = gso("find %s -type f -iname 'hours.json'"%cfg.DATADIR) ; assert st==0 fnames = op.split("\n") sums={} ; tasksums={} ; tdescrs = {} ; testimates = {} for fn in fnames: tid = os.path.dirname(fn).replace(cfg.DATADIR+'/','') with open(fn,'r') as f: j = json.loads(f.read()) matching = filter(lambda x: x[0]>=frto[0] and x[0]<=frto[1],j.items()) for dt,data in matching: for person,hrs in data.items(): sums[person] = sums.get(person,0)+hrs if person not in tasksums: tasksums[person]={} tasksums[person][tid] = tasksums[person].get(tid,0)+hrs t = get_task(tid) if tid not in tdescrs: tdescrs[tid] = t['summary'] metastates,content = read_current_metastates(t,True) if t.get('total_hours') and metastates.get('work estimate'): remaining_hours = '%4.2f'%(float(metastates.get('work estimate')['value']) - float(t.get('total_hours'))) else: remaining_hours = '--' testimates[tid]=remaining_hours sums = sums.items() sums.sort(lambda x,y: cmp(x[1],y[1]),reverse=True) return {'fr':frto[0],'to':frto[1],'tracked':sums,'tasksums':tasksums,'tdescrs':tdescrs,'testimates':testimates}