atlassian-api / atlassian-python-api

Atlassian Python REST API wrapper
https://atlassian-python-api.readthedocs.io
Apache License 2.0
1.29k stars 642 forks source link

Trying to match the total number of issues with the front end through the api #1427

Open Alec-Mills opened 4 days ago

Alec-Mills commented 4 days ago

Here is the code that we have tried to and we are getting close. Without the api key and user id it won't be exact numbers but if someone could look and see if they find any issues in our code. `from atlassian import Jira from collections import defaultdict

def get_key_name(row): return row['fields']['summary'] def issue_type(row): return i['fields']['issuetype']['name']

jira = Jira( url="https://zeroeyes.atlassian.net", username= uid, password=jira_api_key, cloud=True ) jql = 'project=RDEV AND (sprint in openSprints())' jira_board = jira.get_agile_board(28) start = 0 offset = 50 final_issues = set() task_types = defaultdict(int) while True: issues = jira.get_issues_for_board(28, jql = jql, start = start, limit = offset, expand=None, fields = None) if len(issues["issues"]) == 0: break print(f'Received {len(issues["issues"])} issues') for i in issues['issues']: if 'parent' in i['fields']: parent_summary = i['fields']['parent']['key']

parent_summary = get_key_name(i['fields']['parent'])

        if parent_summary not in final_issues:
            task_types[issue_type(i['fields']['parent'])] += 1
        final_issues.add(parent_summary)
    # task_summary = get_key_name(i)
    task_summary = i['key']
    if task_summary not in final_issues:
        task_types[issue_type(i)] += 1
    final_issues.add(task_summary)
    # # i['fields'] = {k: v for k,v in i['fields'].items() if 'customfield' not in k}
    # else:
    #     final_issues.add(i['fields']['summary'])
    if 'subtasks' in i['fields'] and len(i['fields']['subtasks']) > 0:
        for subtask in i['fields']['subtasks']:
            # summary = get_key_name(subtask)
            summary = subtask['key']
            if summary not in final_issues:
                final_issues.add(summary)
            task_types[issue_type(subtask)] += 1
        # summaries = [get_key_name(i) for i in i['fields']['subtasks']]
        # [final_issues.add(i) for i in summaries]
    if 'epic' in i['fields'] and i['fields']['epic'] is not None and len(i['fields']['epic']) > 0:
        epic = i['fields']['epic']
        summary = epic['key']
        if summary not in final_issues:
            final_issues.add(summary)
        task_types['Epic'] += 1
start += offset

print(len(final_issues)) print(json.dumps(task_types, indent = 4))`

Spacetown commented 2 days ago

Please use a verbatim python block for your code.

Alec-Mills commented 14 hours ago

@Spacetown

from atlassian import Jira
from collections import defaultdict

def get_key_name(row):
return row['fields']['summary']
def issue_type(row):
return i['fields']['issuetype']['name']

jira = Jira(
url="https://zeroeyes.atlassian.net/",
username= uid,
password=jira_api_key,
cloud=True
)
jql = 'project=RDEV AND (sprint in openSprints())'
jira_board = jira.get_agile_board(28)
start = 0
offset = 50
final_issues = set()
task_types = defaultdict(int)
while True:
issues = jira.get_issues_for_board(28, jql = jql, start = start, limit = offset, expand=None, fields = None)
if len(issues["issues"]) == 0:
break
print(f'Received {len(issues["issues"])} issues')
for i in issues['issues']:
if 'parent' in i['fields']:
parent_summary = i['fields']['parent']['key']
# parent_summary = get_key_name(i['fields']['parent'])
if parent_summary not in final_issues:
task_types[issue_type(i['fields']['parent'])] += 1
final_issues.add(parent_summary)
# task_summary = get_key_name(i)
task_summary = i['key']
if task_summary not in final_issues:
task_types[issue_type(i)] += 1
final_issues.add(task_summary)
# # i['fields'] = {k: v for k,v in i['fields'].items() if 'customfield' not in k}
# else:
# final_issues.add(i['fields']['summary'])
if 'subtasks' in i['fields'] and len(i['fields']['subtasks']) > 0:
for subtask in i['fields']['subtasks']:
# summary = get_key_name(subtask)
summary = subtask['key']
if summary not in final_issues:
final_issues.add(summary)
task_types[issue_type(subtask)] += 1
# summaries = [get_key_name(i) for i in i['fields']['subtasks']]
# [final_issues.add(i) for i in summaries]
if 'epic' in i['fields'] and i['fields']['epic'] is not None and len(i['fields']['epic']) > 0:
epic = i['fields']['epic']
summary = epic['key']
if summary not in final_issues:
final_issues.add(summary)
task_types['Epic'] += 1
start += offset
print(len(final_issues))
print(json.dumps(task_types, indent = 4))
Spacetown commented 11 hours ago

The complete indention is missing. Impossible to give help here.

Alec-Mills commented 11 hours ago
jira = Jira(
    url="https://zeroeyes.atlassian.net",
    username= uid,
    password=jira_api_key,
    cloud=True
)
jql = 'project=RDEV AND (sprint in openSprints())'
jira_board = jira.get_agile_board(28)
start = 0
offset = 50
final_issues = set()
task_types = defaultdict(int)

while True:
    issues = jira.get_issues_for_board(28, jql = jql, start = start, limit = offset, expand=None, fields = None)
    if len(issues["issues"]) == 0:
        break
    print(f'Received {len(issues["issues"])} issues')
    for i in issues['issues']:
        if 'parent' in i['fields']:
            parent_summary = i['fields']['parent']['key']
            # parent_summary = get_key_name(i['fields']['parent'])
            if parent_summary not in final_issues:
                task_types[issue_type(i['fields']['parent'])] += 1
            final_issues.add(parent_summary)
        # task_summary = get_key_name(i)
        task_summary = i['key']
        if task_summary not in final_issues:
            task_types[issue_type(i)] += 1
        final_issues.add(task_summary)
        # # i['fields'] = {k: v for k,v in i['fields'].items() if 'customfield' not in k}
        # else:
        #     final_issues.add(i['fields']['summary'])
        if 'subtasks' in i['fields'] and len(i['fields']['subtasks']) > 0:
            for subtask in i['fields']['subtasks']:
                # summary = get_key_name(subtask)
                summary = subtask['key']
                if summary not in final_issues:
                    final_issues.add(summary)
                task_types[issue_type(subtask)] += 1
            # summaries = [get_key_name(i) for i in i['fields']['subtasks']]
            # [final_issues.add(i) for i in summaries]
        if 'epic' in i['fields'] and i['fields']['epic'] is not None and len(i['fields']['epic']) > 0:
            epic = i['fields']['epic']
            summary = epic['key']
            if summary not in final_issues:
                final_issues.add(summary)
            task_types['Epic'] += 1
    start += offset
print(len(final_issues))
print(json.dumps(task_types, indent = 4))