def print_issue_list(org, name_filter=None): r = requests.get(repos_url % org) repos = r.json() if r.status_code > 299: raise Exception("Request failed with status code: %d. \n\n %r" % ( r.status_code, r.headers)) print ",".join(["repo_name", "issue", "labels", "hours", "milestone",]) for repo in repos: if not name_filter or repo['name'] in name_filter: repo_name = repo['name'] url = issues_url % repo['full_name'] res = requests.get(url) issues = res.json() if 'link' in res.headers.keys(): page = 1 while "next" in res.headers['link']: page += 1 paged_url = url + "&page=%d" % page res = requests.get(paged_url) issues.extend(res.json()) milestones = [] fields = ['title', 'description', ] for issue in issues: labels = ','.join([x['name'] for x in issue['labels']]) m = issue['milestone'] if m: milestone = m['title'] else: milestone = "" hours = parse_hours_from_title(issue['title']) print ",".join([repo_name, issue['title'].replace(","," "), labels.replace(",","/"), str(hours), milestone,])
def print_issue_list(org, name_filter=None): r = requests.get(repos_url % org) repos = r.json() if r.status_code > 299: raise Exception("Request failed with status code: %d. \n\n %r" % (r.status_code, r.headers)) print ",".join([ "repo_name", "issue", "labels", "hours", "milestone", ]) for repo in repos: if not name_filter or repo['name'] in name_filter: repo_name = repo['name'] url = issues_url % repo['full_name'] res = requests.get(url) issues = res.json() if 'link' in res.headers.keys(): page = 1 while "next" in res.headers['link']: page += 1 paged_url = url + "&page=%d" % page res = requests.get(paged_url) issues.extend(res.json()) milestones = [] fields = [ 'title', 'description', ] for issue in issues: labels = ','.join([x['name'] for x in issue['labels']]) m = issue['milestone'] if m: milestone = m['title'] else: milestone = "" hours = parse_hours_from_title(issue['title']) print ",".join([ repo_name, issue['title'].replace(",", " "), labels.replace(",", "/"), str(hours), milestone, ])
def get_projects_overview(org, name_filter=None): r = requests.get(repos_url % org) repos = r.json() if r.status_code > 299: raise Exception("Request failed with status code: %d. \n\n %r" % (r.status_code, r.headers)) projects = [] for repo in repos: if not name_filter or repo['name'] in name_filter: project = {'name': repo['name']} sys.stderr.write("------ %s" % repo['name']) sys.stderr.write("\n") url = issues_url % repo['full_name'] res = requests.get(url) issues = res.json() if 'link' in res.headers.keys(): page = 1 while "next" in res.headers['link']: page += 1 paged_url = url + "&page=%d" % page res = requests.get(paged_url) issues.extend(res.json()) milestones = [] for issue in issues: m = issue['milestone'] if m: if m['title'] not in [x['name'] for x in milestones]: milestone = { 'name': m['title'], 'due': m['due_on'], 'hours': {}, 'tasks': {} } milestones.append(milestone) else: milestone = [ x for x in milestones if x['name'] == m['title'] ][0] else: # Assign a fictional "Future Release" milestone future_title = "Future Release" if future_title not in [x['name'] for x in milestones]: milestone = { 'name': future_title, 'due': 'Oct 31, 2020', 'hours': {}, 'tasks': {} } milestones.append(milestone) else: milestone = [ x for x in milestones if x['name'] == future_title ][0] assignee = issue['assignee'] try: assignee_login = assignee['login'] except (KeyError, TypeError): assignee_login = "******" hours = parse_hours_from_title(issue['title']) issue_desc = { 'title': issue['title'], "url": issue['html_url'], "number": issue['number'] } if assignee_login in milestone['hours']: milestone['tasks'][assignee_login].append(issue_desc) milestone['hours'][assignee_login] += hours else: milestone['tasks'][assignee_login] = [issue_desc] milestone['hours'][assignee_login] = hours project['milestones'] = milestones projects.append(project) return projects
def get_projects_overview(org, name_filter=None): r = requests.get(repos_url % org) repos = r.json() if r.status_code > 299: raise Exception("Request failed with status code: %d. \n\n %r" % ( r.status_code, r.headers)) projects = [] for repo in repos: if not name_filter or repo['name'] in name_filter: project = {'name': repo['name']} sys.stderr.write("------ %s" % repo['name']) sys.stderr.write("\n") url = issues_url % repo['full_name'] res = requests.get(url) issues = res.json() if 'link' in res.headers.keys(): page = 1 while "next" in res.headers['link']: page += 1 paged_url = url + "&page=%d" % page res = requests.get(paged_url) issues.extend(res.json()) milestones = [] from dateutil.relativedelta import relativedelta the_distance_future = get_nice_date(str(datetime.today() + relativedelta(years=10))) future_title = "Future Release" for issue in issues: m = issue['milestone'] if m and not m['due_on'] == None: if m['title'] not in [x['name'] for x in milestones]: milestone = {'name': m['title'], 'due': get_nice_date(m['due_on']), 'hours': {}, 'tasks': {}} milestones.append(milestone) else: milestone = [ x for x in milestones if x['name'] == m['title']][0] else: continue # Assign a fictional "Future Release" milestone #if future_title not in [x['name'] for x in milestones]: # milestone = {'name': future_title, # 'due': the_distance_future, 'hours': {}, 'tasks': {}} # milestones.append(milestone) #else: # milestone = [ # x for x in milestones if x['name'] == future_title][0] assignee = issue['assignee'] try: assignee_login = assignee['login'] except (KeyError, TypeError): assignee_login = "******" hours = parse_hours_from_title(issue['title']) labels = [(x['color'], x['name']) for x in issue['labels']] issue_desc = { 'title': issue['title'], 'hours': hours, 'labels': labels, "url": issue['html_url'], "number": issue['number'] } if assignee_login in milestone['hours']: milestone['tasks'][assignee_login].append(issue_desc) milestone['hours'][assignee_login] += hours else: milestone['tasks'][assignee_login] = [issue_desc] milestone['hours'][assignee_login] = hours project['milestones'] = milestones projects.append(project) return projects
def get_projects_overview(org, name_filter=None): r = requests.get(repos_url % org) repos = r.json() if r.status_code > 299: raise Exception("Request failed with status code: %d. \n\n %r" % ( r.status_code, r.headers)) projects = [] for repo in repos: if not name_filter or repo['name'] in name_filter: project = {'name': repo['name']} sys.stderr.write("------ %s" % repo['name']) sys.stderr.write("\n") url = issues_url % repo['full_name'] res = requests.get(url) issues = res.json() if 'link' in res.headers.keys(): page = 1 while "next" in res.headers['link']: page += 1 paged_url = url + "&page=%d" % page res = requests.get(paged_url) issues.extend(res.json()) milestones = [] for issue in issues: m = issue['milestone'] if m: if m['title'] not in [x['name'] for x in milestones]: milestone = {'name': m['title'], 'due': m['due_on'], 'hours': {}, 'tasks': {}} milestones.append(milestone) else: milestone = [ x for x in milestones if x['name'] == m['title']][0] else: # Assign a fictional "Future Release" milestone future_title = "Future Release" if future_title not in [x['name'] for x in milestones]: milestone = {'name': future_title, 'due': 'Oct 31, 2020', 'hours': {}, 'tasks': {}} milestones.append(milestone) else: milestone = [ x for x in milestones if x['name'] == future_title][0] assignee = issue['assignee'] try: assignee_login = assignee['login'] except (KeyError, TypeError): assignee_login = "******" hours = parse_hours_from_title(issue['title']) issue_desc = {'title': issue['title'], "url": issue['html_url'], "number": issue['number']} if assignee_login in milestone['hours']: milestone['tasks'][assignee_login].append(issue_desc) milestone['hours'][assignee_login] += hours else: milestone['tasks'][assignee_login] = [issue_desc] milestone['hours'][assignee_login] = hours project['milestones'] = milestones projects.append(project) return projects