import requests import json import datetime ACCESS_TOKEN = "" # Modify USERNAMES = ["kalinom6"] # Modify URL = "https://globaljira.roche.com/rest/api/2" CERT = 'Roche G3 Root CA.crt' CHECK_WEEK_BACK = False headers = { "Authorization": f"Bearer {ACCESS_TOKEN}", "Content-Type": "application/json" } def send_request(url, method, payload=None): if method == "GET": response = requests.get(url, headers=headers, data=json.dumps(payload), verify=CERT) if method == "POST": response = requests.post(url, headers=headers, data=json.dumps(payload), verify=CERT) if response.status_code == 200: return response.json() print(f"Error: {response.status_code}, {response.text}") def get_issues(username): jql = f"assignee = '{username}'" payload = { "jql": jql, "startAt": 0, "maxResults": 50, "fields": [ "key", "summary" ] } data = send_request(f'{URL}/search', "POST", payload) if data: tasks = [] for issue in data.get("issues", []): task = { "task_id": issue["key"], "summary": issue["fields"]["summary"], "task_link": f"https://globaljira.roche.com/browse/{issue['key']}" } tasks.append(task) return tasks def get_worklogs(issues): worklogs = [] for issue in issues: data = send_request(f'{URL}/issue/{issue["task_id"]}/worklog', "GET") if data: for log in data.get("worklogs", []): worklog = { "ticket_id": issue["task_id"], "time_spent": log["timeSpent"], "date": log["started"], "author": log["author"]["name"] } if worklog["author"] in USERNAMES: worklogs.append(worklog) return worklogs def get_days(): today = datetime.date.today() if CHECK_WEEK_BACK: today = today - datetime.timedelta(weeks=1) year, weeknum, day_of_week = today.isocalendar() days = [] days.append(str(today)) while day_of_week > 1: today = today - datetime.timedelta(days=1) day_of_week -= 1 days.append(str(today)) return days def get_week_tickets(worklogs, days): this_week_tickets = [] for worklog in worklogs: worklog_date = datetime.datetime.strptime(worklog["date"].split('T')[0], '%Y-%m-%d').date() current_month = get_max_month(days) worklog_month = str(worklog_date).split('-')[1] if str(worklog_date) in days and int(worklog_month) == current_month: this_week_tickets.append(worklog) return this_week_tickets def get_max_month(days): max = 0 for day in days: month = int(day.split('-')[1]) if month > max: max = month return max def main(): for username in USERNAMES: issues = get_issues(username) print('Issues:') print(json.dumps(issues, indent=4)) worklogs = get_worklogs(issues) days = get_days() worklogs = get_week_tickets(worklogs, days) omnimat_string = "" for worklog in worklogs: omnimat_string += worklog["ticket_id"] + '\n' print(omnimat_string) if __name__ == '__main__': main()