def paynow(request): languages = [] for lang in Issue.LANGUAGES: languages.append(lang[0]) issuetracker = request.POST.get('issuetracker') issueurl = request.POST.get('issueUrl') issuetitle = request.POST.get('title') issuesummary = request.POST.get('summary') language = request.POST.get('language') bounty = request.POST.get('bounty') message = '' if not bounty: message = "Bounty is required." if not issuesummary: message = "Summary is required." if not issuetitle: message = "Title is required." if not issueurl: message = "Issue URL is required." if not message: userprofile = UserProfile() issuesaver = Issue() issuesaver.title = issuetitle issuesaver.content = issuesummary issuesaver.language = language issuesaver.notified_user = False issuesaver.status = "open" issuesaver.user = request.user issuesaver.save() bountysaver = Bounty() bountysaver.price = bounty bountysaver.issue = issuesaver bountysaver.user = request.user bountysaver.save() return render(request, 'post.html', { 'languages': languages, 'message': 'Successfully registered on DB.' }) else: return render(request, 'post.html', { 'languages': languages, 'message': message })
def create_new(board, issue, user): saved = Issue() saved.board = board saved.repository = issue['repository'] saved.issueid = str(issue['number']) saved.title = str(issue['title'].encode('utf-8')) saved.url = "https://github.com/" + issue['repository'] + "/issues/" + str( issue['number']) saved.created = issue['created_at'].split("T")[0] saved.updated = issue['updated_at'].split("T")[0] if "assignee" not in issue or not issue["assignee"]: saved.assigned = "None" else: print issue['assignee'] saved.assigned = issue['assignee']['login'] saved.status = issue['state'] saved.changed = False saved.release = "New" saved.comments = "None" saved.save()
def get_team_stats_lead_time(team_name='PAYPROC', show_points=True): issues = jra.get_all_issues_for_project(team_name) time_to_dev = [] time_in_dev = [] time_in_qa = [] time_to_dep = [] story_points = [] now = datetime.now() now_week = now.isocalendar()[1] arr_issues = [] for issue in issues: i = Issue() i.team = team_name i.id = issue.key i.status = issue.fields.status.name # if issue.fields.status.name not in final_statuses: # continue history = [(h.created, i.fromString, i.toString) for h in issue.changelog.histories for i in h.items if i.field == 'status'] if len(history) > 0: created_dt=issue.fields.created created_dt = datetime.strptime(created_dt, "%Y-%m-%dT%H:%M:%S.%f%z") dev_dt= next((i[0] for i in history if i[2] in {'In Development', 'Selected for Development'}), created_dt) if isinstance(dev_dt, str): dev_dt = datetime.strptime(dev_dt, "%Y-%m-%dT%H:%M:%S.%f%z") qa_dt= next((i[0] for i in history if i[2]in {'Ready For Review', 'Needs Review'}), dev_dt) if isinstance(qa_dt, str): qa_dt = datetime.strptime(qa_dt, "%Y-%m-%dT%H:%M:%S.%f%z") dep_dt= next((i[0] for i in history if i[2]=='Ready for Deployment'), qa_dt) if isinstance(dep_dt, str): dep_dt = datetime.strptime(dep_dt, "%Y-%m-%dT%H:%M:%S.%f%z") last_dt = next((i[0] for i in history if i[2] in final_statuses), now) if isinstance(last_dt, str): last_dt = datetime.strptime(last_dt, "%Y-%m-%dT%H:%M:%S.%f%z") _time_to_dev=dev_dt-created_dt _time_in_dev=qa_dt-dev_dt _time_in_qa=dep_dt-qa_dt _time_to_dep=last_dt-dev_dt i.create_dt = created_dt i.close_dt = last_dt i.time_to_dev = _time_to_dev.days i.time_in_dev = _time_in_dev.days i.time_in_qa = _time_in_qa.days i.time_to_dep = _time_to_dep.days for h in history: _h = IssueHistory(h[2], h[0]) i.history.append(_h) time_to_dev.append(_time_to_dev.days) time_in_dev.append(_time_in_dev.days) time_in_qa.append(_time_in_qa.days) time_to_dep.append(_time_to_dep.days) yr = last_dt.isocalendar()[0] week = last_dt.isocalendar()[1] sp = 0 if hasattr(issue.fields, 'customfield_10002'): sp = issue.fields.customfield_10002 i.story_points = sp story_points.append((yr, week, sp)) arr_issues.append(i) if len(time_to_dev)>0: print(f' days to start ticket development: avg={avg(time_to_dev):.4f} mean={mean(time_to_dev):.4f} median={median(time_to_dev):.4f}') if len(time_in_dev)>0: print(f' days of ticket in development: avg={avg(time_in_dev):.4f} mean={mean(time_in_dev):.4f} median={median(time_in_dev):.4f}') if len(time_in_qa)>0: print(f' days of ticket in qa: avg={avg(time_in_qa):.4f} mean={mean(time_in_qa):.4f} median={median(time_in_qa):.4f}') if len(time_to_dep)>0: print(f' Lead time (days from start of development to deployment) : avg={avg(time_to_dep):.4f} mean={mean(time_to_dep):.4f} median={median(time_to_dep):.4f}') if show_points: print('\n story point stats') story_points = [i for i in story_points if i[2] is not None] story_points = sorted(story_points, key= lambda d: (d[0], d[1])) groups = groupby(story_points, key= lambda d: (d[0], d[1])) for key, data in groups: sp = [i[2] for i in data if i[2] is not None and i[0]==2019 and i[1] != now_week] if len(sp)> 0: print(f' key={key} story points={sum(sp)}') if len(arr_issues) > 0: filename = get_filename(team=team_name) print(f'backup file name: {filename}') write_issues(filename, arr_issues) print(f'count = {len(arr_issues)}')