month solution #9
							
								
								
									
										110
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										110
									
								
								main.py
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
import requests
 | 
			
		||||
import pip._vendor.requests as requests
 | 
			
		||||
import json
 | 
			
		||||
import datetime
 | 
			
		||||
from dotenv import load_dotenv
 | 
			
		||||
@@ -6,32 +6,39 @@ from os import getenv
 | 
			
		||||
 | 
			
		||||
load_dotenv()
 | 
			
		||||
ACCESS_TOKEN = getenv("TOKEN")
 | 
			
		||||
USERNAMES = ["kalinom6"] # Modify
 | 
			
		||||
USERNAMES = ["litneri"]  # Modify
 | 
			
		||||
URL = "https://globaljira.roche.com/rest/api/2"
 | 
			
		||||
CERT = getenv("CERT_LOCATION")
 | 
			
		||||
WEEKS_BACK = 1
 | 
			
		||||
VERBOSE = True
 | 
			
		||||
 | 
			
		||||
MONTH_VIEW = True
 | 
			
		||||
CHECK_MONTH_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)
 | 
			
		||||
        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)
 | 
			
		||||
        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 WAS '{username}'"
 | 
			
		||||
    payload = {
 | 
			
		||||
        "jql": jql,
 | 
			
		||||
        "startAt": 0,
 | 
			
		||||
        "maxResults": 50,
 | 
			
		||||
        "maxResults": 15,
 | 
			
		||||
        "fields": [
 | 
			
		||||
            "key", "summary"
 | 
			
		||||
        ]
 | 
			
		||||
@@ -48,6 +55,7 @@ def get_issues(username):
 | 
			
		||||
            tasks.append(task)
 | 
			
		||||
        return tasks
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_worklogs(issues):
 | 
			
		||||
    worklogs = []
 | 
			
		||||
    for issue in issues:
 | 
			
		||||
@@ -63,8 +71,15 @@ def get_worklogs(issues):
 | 
			
		||||
                }
 | 
			
		||||
                if worklog["author"] in USERNAMES:
 | 
			
		||||
                    worklogs.append(worklog)
 | 
			
		||||
 | 
			
		||||
    worklogs.sort(key=date_sort)
 | 
			
		||||
    return worklogs
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def date_sort(worklog):
 | 
			
		||||
    return worklog['date']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_days(day):
 | 
			
		||||
    if WEEKS_BACK:
 | 
			
		||||
        day = day - datetime.timedelta(weeks=WEEKS_BACK)
 | 
			
		||||
@@ -92,17 +107,98 @@ def get_days(day):
 | 
			
		||||
 | 
			
		||||
    return days, days_second_part
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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()
 | 
			
		||||
        worklog_date = datetime.datetime.strptime(
 | 
			
		||||
            worklog["date"].split('T')[0], '%Y-%m-%d').date()
 | 
			
		||||
        if str(worklog_date) in days:
 | 
			
		||||
            this_week_tickets.append(worklog)
 | 
			
		||||
    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():
 | 
			
		||||
    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:
 | 
			
		||||
            issues = get_issues(username)
 | 
			
		||||
            worklogs = get_worklogs(issues)
 | 
			
		||||
@@ -139,5 +235,7 @@ def main():
 | 
			
		||||
                print(days_second_part)
 | 
			
		||||
                print(f"Omnimat string:")
 | 
			
		||||
                print(omnimat_string)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    main()
 | 
			
		||||
		Reference in New Issue
	
	Block a user