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