atlassian-python-api icon indicating copy to clipboard operation
atlassian-python-api copied to clipboard

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

Open Alec-Mills opened this issue 1 year ago • 1 comments

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))`

Alec-Mills avatar Jun 28 '24 22:06 Alec-Mills

Please use a verbatim python block for your code.

Spacetown avatar Jun 30 '24 19:06 Spacetown

@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))

Alec-Mills avatar Jul 02 '24 15:07 Alec-Mills

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

Spacetown avatar Jul 02 '24 18:07 Spacetown

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))

Alec-Mills avatar Jul 02 '24 18:07 Alec-Mills

@Spacetown

Alec-Mills avatar Jul 08 '24 14:07 Alec-Mills

Sorry, where do you have an issue? The following block is in principal ok, I don't know what you want to achieve with the logic but the total number can be retrieved by:

total_number = 0
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')
    total_number += len(issues["issues"])
print(f"total_number = {total_number}")

BTW: That's a verbatim python block.

Spacetown avatar Jul 08 '24 17:07 Spacetown