month solution
This commit is contained in:
		
							
								
								
									
										110
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										110
									
								
								main.py
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
				
			|||||||
import requests
 | 
					import pip._vendor.requests as requests
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
from dotenv import load_dotenv
 | 
					from dotenv import load_dotenv
 | 
				
			||||||
@@ -6,32 +6,39 @@ from os import getenv
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
load_dotenv()
 | 
					load_dotenv()
 | 
				
			||||||
ACCESS_TOKEN = getenv("TOKEN")
 | 
					ACCESS_TOKEN = getenv("TOKEN")
 | 
				
			||||||
USERNAMES = ["kalinom6"] # Modify
 | 
					USERNAMES = ["litneri"]  # Modify
 | 
				
			||||||
URL = "https://globaljira.roche.com/rest/api/2"
 | 
					URL = "https://globaljira.roche.com/rest/api/2"
 | 
				
			||||||
CERT = getenv("CERT_LOCATION")
 | 
					CERT = getenv("CERT_LOCATION")
 | 
				
			||||||
WEEKS_BACK = 1
 | 
					WEEKS_BACK = 1
 | 
				
			||||||
VERBOSE = True
 | 
					VERBOSE = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MONTH_VIEW = True
 | 
				
			||||||
 | 
					CHECK_MONTH_BACK = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
headers = {
 | 
					headers = {
 | 
				
			||||||
    "Authorization": f"Bearer {ACCESS_TOKEN}",
 | 
					    "Authorization": f"Bearer {ACCESS_TOKEN}",
 | 
				
			||||||
    "Content-Type": "application/json"
 | 
					    "Content-Type": "application/json"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def send_request(url, method, payload=None):
 | 
					def send_request(url, method, payload=None):
 | 
				
			||||||
    if method == "GET":
 | 
					    if method == "GET":
 | 
				
			||||||
        response = requests.get(url, headers=headers, data=json.dumps(payload), verify=CERT)
 | 
					        response = requests.get(url, headers=headers,
 | 
				
			||||||
 | 
					                                data=json.dumps(payload), verify=CERT)
 | 
				
			||||||
    if method == "POST":
 | 
					    if method == "POST":
 | 
				
			||||||
        response = requests.post(url, headers=headers, data=json.dumps(payload), verify=CERT)
 | 
					        response = requests.post(url, headers=headers,
 | 
				
			||||||
 | 
					                                 data=json.dumps(payload), verify=CERT)
 | 
				
			||||||
    if response.status_code == 200:
 | 
					    if response.status_code == 200:
 | 
				
			||||||
        return response.json()
 | 
					        return response.json()
 | 
				
			||||||
    print(f"Error: {response.status_code}, {response.text}")
 | 
					    print(f"Error: {response.status_code}, {response.text}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_issues(username):
 | 
					def get_issues(username):
 | 
				
			||||||
    jql = f"assignee WAS '{username}'"
 | 
					    jql = f"assignee WAS '{username}'"
 | 
				
			||||||
    payload = {
 | 
					    payload = {
 | 
				
			||||||
        "jql": jql,
 | 
					        "jql": jql,
 | 
				
			||||||
        "startAt": 0,
 | 
					        "startAt": 0,
 | 
				
			||||||
        "maxResults": 50,
 | 
					        "maxResults": 15,
 | 
				
			||||||
        "fields": [
 | 
					        "fields": [
 | 
				
			||||||
            "key", "summary"
 | 
					            "key", "summary"
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
@@ -48,6 +55,7 @@ def get_issues(username):
 | 
				
			|||||||
            tasks.append(task)
 | 
					            tasks.append(task)
 | 
				
			||||||
        return tasks
 | 
					        return tasks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_worklogs(issues):
 | 
					def get_worklogs(issues):
 | 
				
			||||||
    worklogs = []
 | 
					    worklogs = []
 | 
				
			||||||
    for issue in issues:
 | 
					    for issue in issues:
 | 
				
			||||||
@@ -63,8 +71,15 @@ def get_worklogs(issues):
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                if worklog["author"] in USERNAMES:
 | 
					                if worklog["author"] in USERNAMES:
 | 
				
			||||||
                    worklogs.append(worklog)
 | 
					                    worklogs.append(worklog)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    worklogs.sort(key=date_sort)
 | 
				
			||||||
    return worklogs
 | 
					    return worklogs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def date_sort(worklog):
 | 
				
			||||||
 | 
					    return worklog['date']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_days(day):
 | 
					def get_days(day):
 | 
				
			||||||
    if WEEKS_BACK:
 | 
					    if WEEKS_BACK:
 | 
				
			||||||
        day = day - datetime.timedelta(weeks=WEEKS_BACK)
 | 
					        day = day - datetime.timedelta(weeks=WEEKS_BACK)
 | 
				
			||||||
@@ -92,17 +107,98 @@ def get_days(day):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return days, days_second_part
 | 
					    return days, days_second_part
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_week_tickets(worklogs, days):
 | 
					def get_week_tickets(worklogs, days):
 | 
				
			||||||
    this_week_tickets = []
 | 
					    this_week_tickets = []
 | 
				
			||||||
    for worklog in worklogs:
 | 
					    for worklog in worklogs:
 | 
				
			||||||
        worklog_date = datetime.datetime.strptime(worklog["date"].split('T')[0], '%Y-%m-%d').date()
 | 
					        worklog_date = datetime.datetime.strptime(
 | 
				
			||||||
 | 
					            worklog["date"].split('T')[0], '%Y-%m-%d').date()
 | 
				
			||||||
        if str(worklog_date) in days:
 | 
					        if str(worklog_date) in days:
 | 
				
			||||||
            this_week_tickets.append(worklog)
 | 
					            this_week_tickets.append(worklog)
 | 
				
			||||||
    return this_week_tickets
 | 
					    return this_week_tickets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#code of month branch
 | 
				
			||||||
 | 
					def get_days_of_month(previous_month=False):
 | 
				
			||||||
 | 
					    today = datetime.date.today()
 | 
				
			||||||
 | 
					    start_of_month = today.replace(day=1)
 | 
				
			||||||
 | 
					    end_of_month = today.replace(day=28)+datetime.timedelta(days=4)
 | 
				
			||||||
 | 
					    end_of_month -= datetime.timedelta(days=end_of_month.day)
 | 
				
			||||||
 | 
					    days = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # minus one month
 | 
				
			||||||
 | 
					    if previous_month == True:
 | 
				
			||||||
 | 
					        start_of_month -= datetime.timedelta(days=1)
 | 
				
			||||||
 | 
					        start_of_month = start_of_month.replace(day=1)
 | 
				
			||||||
 | 
					        end_of_month = start_of_month
 | 
				
			||||||
 | 
					        end_of_month = today.replace(day=28)+datetime.timedelta(days=4)
 | 
				
			||||||
 | 
					        end_of_month -= datetime.timedelta(days=end_of_month.day)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    days.append(str(start_of_month))
 | 
				
			||||||
 | 
					    while start_of_month != end_of_month:
 | 
				
			||||||
 | 
					        start_of_month += datetime.timedelta(days=1)
 | 
				
			||||||
 | 
					        days.append(str(start_of_month))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # returns all days of current month
 | 
				
			||||||
 | 
					    return days
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def get_month_tickets(worklogs, days, previous_month=False):
 | 
				
			||||||
 | 
					    this_month_tickets = []
 | 
				
			||||||
 | 
					    for worklog in worklogs:
 | 
				
			||||||
 | 
					        worklog_date = datetime.datetime.strptime(
 | 
				
			||||||
 | 
					            worklog["date"].split('T')[0], '%Y-%m-%d').date()
 | 
				
			||||||
 | 
					        current_month = datetime.date.today().month
 | 
				
			||||||
 | 
					        # minus one month
 | 
				
			||||||
 | 
					        if previous_month == True:
 | 
				
			||||||
 | 
					            current_month -= 1
 | 
				
			||||||
 | 
					        worklog_month = str(worklog_date).split('-')[1]
 | 
				
			||||||
 | 
					        if str(worklog_date) in days and int(worklog_month) == current_month:
 | 
				
			||||||
 | 
					            this_month_tickets.append(worklog)
 | 
				
			||||||
 | 
					    return this_month_tickets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def get_omnimat_string(worklogs):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    week = datetime.datetime.strptime(
 | 
				
			||||||
 | 
					        worklogs[0]["date"][0:10], '%Y-%m-%d').date()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    week_number_start = week
 | 
				
			||||||
 | 
					    to_monday = week_number_start.weekday()
 | 
				
			||||||
 | 
					    week_number_start -= datetime.timedelta(days=to_monday)
 | 
				
			||||||
 | 
					    week_number_end = week_number_start+datetime.timedelta(days=6)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    week_iso = week.isocalendar().week
 | 
				
			||||||
 | 
					    omnimat_string = worklogs[0]["author"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for worklog in worklogs:
 | 
				
			||||||
 | 
					        ticket = worklog["ticket_id"]
 | 
				
			||||||
 | 
					        date = worklog["date"][0:10]
 | 
				
			||||||
 | 
					        timespent = worklog["time_spent"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        week_day = datetime.datetime.strptime(date, '%Y-%m-%d').date()
 | 
				
			||||||
 | 
					        if (week_day.isocalendar().week == week_iso):
 | 
				
			||||||
 | 
					            omnimat_string += "\nWeek " + str(week_iso)+"\tfrom "+week_number_start.__str__() + \
 | 
				
			||||||
 | 
					                "\tto "+week_number_end.__str__()+"\n\n"
 | 
				
			||||||
 | 
					            week_iso += 1
 | 
				
			||||||
 | 
					            week_number_start += datetime.timedelta(days=7)
 | 
				
			||||||
 | 
					            week_number_end += datetime.timedelta(days=7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        omnimat_string += ticket+'\tdate '+date+'\ttime '+timespent + '\n'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return omnimat_string
 | 
				
			||||||
 | 
					#end of code month branch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
    print('The script starts its work...')
 | 
					    print('The script starts its work...')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if MONTH_VIEW:
 | 
				
			||||||
 | 
					        for username in USERNAMES:
 | 
				
			||||||
 | 
					            issues = get_issues(username)
 | 
				
			||||||
 | 
					            worklogs = get_worklogs(issues)
 | 
				
			||||||
 | 
					            days = get_days_of_month(CHECK_MONTH_BACK)
 | 
				
			||||||
 | 
					            worklogs = get_month_tickets(worklogs, days, CHECK_MONTH_BACK)
 | 
				
			||||||
 | 
					            omnimat_string = get_omnimat_string(worklogs)
 | 
				
			||||||
 | 
					            print(omnimat_string)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
        for username in USERNAMES:
 | 
					        for username in USERNAMES:
 | 
				
			||||||
            issues = get_issues(username)
 | 
					            issues = get_issues(username)
 | 
				
			||||||
            worklogs = get_worklogs(issues)
 | 
					            worklogs = get_worklogs(issues)
 | 
				
			||||||
@@ -139,5 +235,7 @@ def main():
 | 
				
			|||||||
                print(days_second_part)
 | 
					                print(days_second_part)
 | 
				
			||||||
                print(f"Omnimat string:")
 | 
					                print(f"Omnimat string:")
 | 
				
			||||||
                print(omnimat_string)
 | 
					                print(omnimat_string)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    main()
 | 
					    main()
 | 
				
			||||||
		Reference in New Issue
	
	Block a user