diff --git a/main.py b/main.py index dc9501a..caf9a71 100644 --- a/main.py +++ b/main.py @@ -1,57 +1,58 @@ -""" +''' Readme Development Metrics With waka time progress -""" -import base64 -import datetime -import json -import math -import os +''' import re -import traceback -from string import Template -from urllib.parse import quote - -import humanize +import os +import base64 +from pytz import timezone import pytz import requests -from dotenv import load_dotenv -from github import Github, InputGitAuthor -from pytz import timezone - +from github import Github, GithubException, InputGitAuthor +import datetime +from string import Template from loc import LinesOfCode +import time +import traceback +import humanize +from urllib.parse import quote +import json +import sys +from datetime import date +import math + +from dotenv import load_dotenv load_dotenv() -START_COMMENT = "" -END_COMMENT = "" +START_COMMENT = '' +END_COMMENT = '' listReg = f"{START_COMMENT}[\\s\\S]+{END_COMMENT}" -waka_key = os.getenv("INPUT_WAKATIME_API_KEY") -ghtoken = os.getenv("INPUT_GH_TOKEN") -showTimeZone = os.getenv("INPUT_SHOW_TIMEZONE", "True") -showProjects = os.getenv("INPUT_SHOW_PROJECTS", "False") -showEditors = os.getenv("INPUT_SHOW_EDITORS", "True") -showOs = os.getenv("INPUT_SHOW_OS", "True") -showCommit = os.getenv("INPUT_SHOW_COMMIT", "True") -showLanguage = os.getenv("INPUT_SHOW_LANGUAGE", "True") -show_loc = os.getenv("INPUT_SHOW_LINES_OF_CODE", "False") -show_days_of_week = os.getenv("INPUT_SHOW_DAYS_OF_WEEK", "True") -showLanguagePerRepo = os.getenv("INPUT_SHOW_LANGUAGE_PER_REPO", "True") -showLocChart = os.getenv("INPUT_SHOW_LOC_CHART", "False") -show_profile_view = os.getenv("INPUT_SHOW_PROFILE_VIEWS", "True") -show_short_info = os.getenv("INPUT_SHOW_SHORT_INFO", "False") -locale = os.getenv("INPUT_LOCALE", "en") -commit_by_me = os.getenv("INPUT_COMMIT_BY_ME", "True") -ignored_repos_name = str(os.getenv("INPUT_IGNORED_REPOS", "") or "").replace(" ", "").split(",") -show_updated_date = os.getenv("INPUT_SHOW_UPDATED_DATE", "True") -updated_date_format = os.getenv("INPUT_UPDATED_DATE_FORMAT", "%d/%m/%Y %H:%M:%S") -commit_message = os.getenv("INPUT_COMMIT_MESSAGE", "sync") -commit_username = os.getenv("INPUT_COMMIT_USERNAME", "") -commit_email = os.getenv("INPUT_COMMIT_EMAIL", "") -show_total_code_time = os.getenv("INPUT_SHOW_TOTAL_CODE_TIME", "True") -symbol_version = os.getenv("INPUT_SYMBOL_VERSION", "1").strip() -time_zone = os.getenv("INPUT_TIME_ZONE", "+7") -show_waka_stats = "y" +waka_key = os.getenv('INPUT_WAKATIME_API_KEY') +ghtoken = os.getenv('INPUT_GH_TOKEN') +showTimeZone = os.getenv('INPUT_SHOW_TIMEZONE') +showProjects = os.getenv('INPUT_SHOW_PROJECTS') +showEditors = os.getenv('INPUT_SHOW_EDITORS') +showOs = os.getenv('INPUT_SHOW_OS') +showCommit = os.getenv('INPUT_SHOW_COMMIT') +showLanguage = os.getenv('INPUT_SHOW_LANGUAGE') +show_loc = os.getenv('INPUT_SHOW_LINES_OF_CODE') +show_days_of_week = os.getenv('INPUT_SHOW_DAYS_OF_WEEK') +showLanguagePerRepo = os.getenv('INPUT_SHOW_LANGUAGE_PER_REPO') +showLocChart = os.getenv('INPUT_SHOW_LOC_CHART') +show_profile_view = os.getenv('INPUT_SHOW_PROFILE_VIEWS') +show_short_info = os.getenv('INPUT_SHOW_SHORT_INFO') +locale = os.getenv('INPUT_LOCALE') +commit_by_me = os.getenv('INPUT_COMMIT_BY_ME') +ignored_repos_name = str(os.getenv('INPUT_IGNORED_REPOS') or '').replace(' ', '').split(',') +show_updated_date = os.getenv('INPUT_SHOW_UPDATED_DATE') +updated_date_format = os.getenv('INPUT_UPDATED_DATE_FORMAT') +commit_message = os.getenv('INPUT_COMMIT_MESSAGE') +commit_username = os.getenv('INPUT_COMMIT_USERNAME') +commit_email = os.getenv('INPUT_COMMIT_EMAIL') +show_total_code_time = os.getenv('INPUT_SHOW_TOTAL_CODE_TIME') +symbol_version = os.getenv('INPUT_SYMBOL_VERSION').strip() +show_waka_stats = 'y' # The GraphQL query to get commit data. userInfoQuery = """ { @@ -62,8 +63,7 @@ userInfoQuery = """ } } """ -createContributedRepoQuery = Template( - """query { +createContributedRepoQuery = Template("""query { user(login: "$username") { repositoriesContributedTo(last: 100, includeUserRepositories: true) { nodes { @@ -76,10 +76,8 @@ createContributedRepoQuery = Template( } } } -""" -) -createCommittedDateQuery = Template( - """ +""") +createCommittedDateQuery = Template(""" query { repository(owner: "$owner", name: "$name") { defaultBranchRef { @@ -97,29 +95,25 @@ query { } } } -""" -) +""") get_loc_url = Template("""/repos/$owner/$repo/stats/code_frequency""") get_profile_view = Template("""/repos/$owner/$repo/traffic/views?per=week""") get_profile_traffic = Template("""/repos/$owner/$repo/traffic/popular/referrers""") -truthy = ["true", "1", "t", "y", "yes"] +truthy = ['true', '1', 't', 'y', 'yes'] def run_v3_api(query): - request = requests.get("https://api.github.com" + query, headers=headers) + request = requests.get('https://api.github.com' + query, headers=headers) if request.status_code == 200: return request.json() else: raise Exception( - "Query failed to run by returning code of {}. {},... {}".format( - request.status_code, query, str(request.json()) - ) - ) + "Query failed to run by returning code of {}. {},... {}".format(request.status_code, query, + str(request.json()))) -repositoryListQuery = Template( - """ +repositoryListQuery = Template(""" { user(login: "$username") { repositories(orderBy: {field: CREATED_AT, direction: ASC}, last: 100, affiliations: [OWNER, COLLABORATOR, ORGANIZATION_MEMBER], isFork: false) { @@ -159,20 +153,22 @@ repositoryListQuery = Template( name } } -""" -) +""") def millify(n): - millnames = ["", " Thousand", " Million", " Billion", " Trillion"] + millnames = ['', ' Thousand', ' Million', ' Billion', ' Trillion'] n = float(n) - millidx = max(0, min(len(millnames) - 1, int(math.floor(0 if n == 0 else math.log10(abs(n)) / 3)))) + millidx = max(0, min(len(millnames) - 1, + int(math.floor(0 + if n == 0 + else math.log10(abs(n)) / 3)))) - return "{:.0f}{}".format(n / 10 ** (3 * millidx), millnames[millidx]) + return '{:.0f}{}'.format(n / 10 ** (3 * millidx), millnames[millidx]) def run_query(query): - request = requests.post("https://api.github.com/graphql", json={"query": query}, headers=headers) + request = requests.post('https://api.github.com/graphql', json={'query': query}, headers=headers) if request.status_code == 200: return request.json() else: @@ -180,50 +176,48 @@ def run_query(query): def make_graph(percent: float): - """Make progress graph from API graph""" - if symbol_version == "1": # version 1 - done_block = "█" - empty_block = "░" - elif symbol_version == "2": # version 2 - done_block = "⣿" - empty_block = "⣀" - elif symbol_version == "3": # version 3 - done_block = "⬛" - empty_block = "⬜" + '''Make progress graph from API graph''' + if (symbol_version == '1'): # version 1 + done_block = '█' + empty_block = '░' + elif (symbol_version == '2'): # version 2 + done_block = '⣿' + empty_block = '⣀' + elif (symbol_version == '3'): # version 3 + done_block = '⬛' + empty_block = '⬜' else: - done_block = "█" # default is version 1 - empty_block = "░" + done_block = '█' # default is version 1 + empty_block = '░' pc_rnd = round(percent) return f"{done_block * int(pc_rnd / 4)}{empty_block * int(25 - int(pc_rnd / 4))}" def make_list(data: list): - """Make List""" + '''Make List''' data_list = [] for l in data[:5]: - ln = len(l["name"]) - ln_text = len(l["text"]) + ln = len(l['name']) + ln_text = len(l['text']) op = f"{l['name'][:25]}{' ' * (25 - ln)}{l['text']}{' ' * (20 - ln_text)}{make_graph(l['percent'])} {l['percent']}%" data_list.append(op) - return " \n".join(data_list) + return ' \n'.join(data_list) def make_commit_list(data: list): - """Make List""" + '''Make List''' data_list = [] for l in data[:7]: - ln = len(l["name"]) - ln_text = len(l["text"]) - op = ( - f"{l['name']}{' ' * (13 - ln)}{l['text']}{' ' * (15 - ln_text)}{make_graph(l['percent'])} {l['percent']}%" - ) + ln = len(l['name']) + ln_text = len(l['text']) + op = f"{l['name']}{' ' * (13 - ln)}{l['text']}{' ' * (15 - ln_text)}{make_graph(l['percent'])} {l['percent']}%" data_list.append(op) - return " \n".join(data_list) + return ' \n'.join(data_list) def generate_commit_list(tz): - string = "" + string = '' result = run_query(userInfoQuery) # Execute the query username = result["data"]["viewer"]["login"] id = result["data"]["viewer"]["id"] @@ -231,7 +225,7 @@ def generate_commit_list(tz): result = run_query(createContributedRepoQuery.substitute(username=username)) nodes = result["data"]["user"]["repositoriesContributedTo"]["nodes"] - repos = [d for d in nodes if d["isFork"] is False] + repos = [d for d in nodes if d['isFork'] is False] morning = 0 # 6 - 12 daytime = 0 # 12 - 18 @@ -248,18 +242,15 @@ def generate_commit_list(tz): for repository in repos: result = run_query( - createCommittedDateQuery.substitute(owner=repository["owner"]["login"], name=repository["name"], id=id) - ) + createCommittedDateQuery.substitute(owner=repository["owner"]["login"], name=repository["name"], id=id)) try: committed_dates = result["data"]["repository"]["defaultBranchRef"]["target"]["history"]["edges"] for committedDate in committed_dates: - date = ( - datetime.datetime.strptime(committedDate["node"]["committedDate"], "%Y-%m-%dT%H:%M:%SZ") - .replace(tzinfo=pytz.utc) - .astimezone(timezone(tz)) - ) + date = datetime.datetime.strptime(committedDate["node"]["committedDate"], + "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=pytz.utc).astimezone( + timezone(tz)) hour = date.hour - weekday = date.strftime("%A") + weekday = date.strftime('%A') if 6 <= hour < 12: morning += 1 if 12 <= hour < 18: @@ -289,72 +280,51 @@ def generate_commit_list(tz): sumAll = morning + daytime + evening + night sum_week = Sunday + Monday + Tuesday + Friday + Saturday + Wednesday + Thursday - title = translate["I am an Early"] if morning + daytime >= evening + night else translate["I am a Night"] + title = translate['I am an Early'] if morning + daytime >= evening + night else translate['I am a Night'] one_day = [ - { - "name": "🌞 " + translate["Morning"], - "text": str(morning) + " commits", - "percent": round((morning / sumAll) * 100, 2), - }, - { - "name": "🌆 " + translate["Daytime"], - "text": str(daytime) + " commits", - "percent": round((daytime / sumAll) * 100, 2), - }, - { - "name": "🌃 " + translate["Evening"], - "text": str(evening) + " commits", - "percent": round((evening / sumAll) * 100, 2), - }, - { - "name": "🌙 " + translate["Night"], - "text": str(night) + " commits", - "percent": round((night / sumAll) * 100, 2), - }, + {"name": "🌞 " + translate['Morning'], "text": str(morning) + " commits", + "percent": round((morning / sumAll) * 100, 2)}, + {"name": "🌆 " + translate['Daytime'], "text": str(daytime) + " commits", + "percent": round((daytime / sumAll) * 100, 2)}, + {"name": "🌃 " + translate['Evening'], "text": str(evening) + " commits", + "percent": round((evening / sumAll) * 100, 2)}, + {"name": "🌙 " + translate['Night'], "text": str(night) + " commits", + "percent": round((night / sumAll) * 100, 2)}, ] dayOfWeek = [ - {"name": translate["Monday"], "text": str(Monday) + " commits", "percent": round((Monday / sum_week) * 100, 2)}, - { - "name": translate["Tuesday"], - "text": str(Tuesday) + " commits", - "percent": round((Tuesday / sum_week) * 100, 2), - }, - { - "name": translate["Wednesday"], - "text": str(Wednesday) + " commits", - "percent": round((Wednesday / sum_week) * 100, 2), - }, - { - "name": translate["Thursday"], - "text": str(Thursday) + " commits", - "percent": round((Thursday / sum_week) * 100, 2), - }, - {"name": translate["Friday"], "text": str(Friday) + " commits", "percent": round((Friday / sum_week) * 100, 2)}, - { - "name": translate["Saturday"], - "text": str(Saturday) + " commits", - "percent": round((Saturday / sum_week) * 100, 2), - }, - {"name": translate["Sunday"], "text": str(Sunday) + " commits", "percent": round((Sunday / sum_week) * 100, 2)}, + {"name": translate['Monday'], "text": str(Monday) + " commits", "percent": round((Monday / sum_week) * 100, 2)}, + {"name": translate['Tuesday'], "text": str(Tuesday) + " commits", + "percent": round((Tuesday / sum_week) * 100, 2)}, + {"name": translate['Wednesday'], "text": str(Wednesday) + " commits", + "percent": round((Wednesday / sum_week) * 100, 2)}, + {"name": translate['Thursday'], "text": str(Thursday) + " commits", + "percent": round((Thursday / sum_week) * 100, 2)}, + {"name": translate['Friday'], "text": str(Friday) + " commits", "percent": round((Friday / sum_week) * 100, 2)}, + {"name": translate['Saturday'], "text": str(Saturday) + " commits", + "percent": round((Saturday / sum_week) * 100, 2)}, + {"name": translate['Sunday'], "text": str(Sunday) + " commits", "percent": round((Sunday / sum_week) * 100, 2)}, ] - string = string + "**" + title + "** \n\n" + "```text\n" + make_commit_list(one_day) + "\n\n```\n" + string = string + '**' + title + '** \n\n' + '```text\n' + make_commit_list(one_day) + '\n\n```\n' if show_days_of_week.lower() in truthy: - max_element = {"percent": 0} + max_element = { + 'percent': 0 + } for day in dayOfWeek: - if day["percent"] > max_element["percent"]: + if day['percent'] > max_element['percent']: max_element = day - days_title = translate["I am Most Productive on"] % max_element["name"] - string = string + "📅 **" + days_title + "** \n\n" + "```text\n" + make_commit_list(dayOfWeek) + "\n\n```\n" + days_title = translate['I am Most Productive on'] % max_element['name'] + string = string + '📅 **' + days_title + '** \n\n' + '```text\n' + make_commit_list(dayOfWeek) + '\n\n```\n' return string def get_waka_time_stats(): - stats = "" - request = requests.get(f"https://wakatime.com/api/v1/users/current/stats/last_7_days?api_key={waka_key}") + stats = '' + request = requests.get( + f"https://wakatime.com/api/v1/users/current/stats/last_7_days?api_key={waka_key}") no_activity = translate["No Activity Tracked This Week"] if request.status_code == 401: @@ -362,55 +332,49 @@ def get_waka_time_stats(): else: data = request.json() if showCommit.lower() in truthy: - stats = stats + generate_commit_list(tz=data["data"]["timezone"]) + "\n\n" + stats = stats + generate_commit_list(tz=data['data']['timezone']) + '\n\n' - if ( - showTimeZone.lower() in truthy - or showLanguage.lower() in truthy - or showEditors.lower() in truthy - or showProjects.lower() in truthy - or showOs.lower() in truthy - ): - stats += "📊 **" + translate["This Week I Spend My Time On"] + "** \n\n" - stats += "```text\n" + if showTimeZone.lower() in truthy or showLanguage.lower() in truthy or showEditors.lower() in truthy or \ + showProjects.lower() in truthy or showOs.lower() in truthy: + stats += '📊 **' + translate['This Week I Spend My Time On'] + '** \n\n' + stats += '```text\n' if showTimeZone.lower() in truthy: - tzone = data["data"]["timezone"] - stats = stats + "⌚︎ " + translate["Timezone"] + ": " + tzone + "\n\n" + tzone = data['data']['timezone'] + stats = stats + '⌚︎ ' + translate['Timezone'] + ': ' + tzone + '\n\n' if showLanguage.lower() in truthy: - if len(data["data"]["languages"]) == 0: + if len(data['data']['languages']) == 0: lang_list = no_activity else: - lang_list = make_list(data["data"]["languages"]) - stats = stats + "💬 " + translate["Languages"] + ": \n" + lang_list + "\n\n" + lang_list = make_list(data['data']['languages']) + stats = stats + '💬 ' + translate['Languages'] + ': \n' + lang_list + '\n\n' if showEditors.lower() in truthy: - if len(data["data"]["editors"]) == 0: + if len(data['data']['editors']) == 0: edit_list = no_activity else: - edit_list = make_list(data["data"]["editors"]) - stats = stats + "🔥 " + translate["Editors"] + ": \n" + edit_list + "\n\n" + edit_list = make_list(data['data']['editors']) + stats = stats + '🔥 ' + translate['Editors'] + ': \n' + edit_list + '\n\n' if showProjects.lower() in truthy: - if len(data["data"]["projects"]) == 0: + if len(data['data']['projects']) == 0: project_list = no_activity else: # Re-order the project list by percentage - data["data"]["projects"] = sorted( - data["data"]["projects"], key=lambda x: x["percent"], reverse=True - ) - project_list = make_list(data["data"]["projects"]) - stats = stats + "🐱‍💻 " + translate["Projects"] + ": \n" + project_list + "\n\n" + data['data']['projects'] = sorted(data['data']['projects'], key=lambda x: x["percent"], + reverse=True) + project_list = make_list(data['data']['projects']) + stats = stats + '🐱‍💻 ' + translate['Projects'] + ': \n' + project_list + '\n\n' if showOs.lower() in truthy: - if len(data["data"]["operating_systems"]) == 0: + if len(data['data']['operating_systems']) == 0: os_list = no_activity else: - os_list = make_list(data["data"]["operating_systems"]) - stats = stats + "💻 " + translate["operating system"] + ": \n" + os_list + "\n\n" + os_list = make_list(data['data']['operating_systems']) + stats = stats + '💻 ' + translate['operating system'] + ': \n' + os_list + '\n\n' - stats += "```\n\n" + stats += '```\n\n' return stats @@ -418,31 +382,35 @@ def get_waka_time_stats(): def generate_language_per_repo(result): language_count = {} total = 0 - for repo in result["data"]["user"]["repositories"]["edges"]: - if repo["node"]["primaryLanguage"] is None: + for repo in result['data']['user']['repositories']['edges']: + if repo['node']['primaryLanguage'] is None: continue - language = repo["node"]["primaryLanguage"]["name"] - color_code = repo["node"]["primaryLanguage"]["color"] + language = repo['node']['primaryLanguage']['name'] + color_code = repo['node']['primaryLanguage']['color'] total += 1 if language not in language_count.keys(): language_count[language] = {} - language_count[language]["count"] = 1 + language_count[language]['count'] = 1 else: - language_count[language]["count"] = language_count[language]["count"] + 1 - language_count[language]["color"] = color_code + language_count[language]['count'] = language_count[language]['count'] + 1 + language_count[language]['color'] = color_code data = [] sorted_labels = list(language_count.keys()) - sorted_labels.sort(key=lambda x: language_count[x]["count"], reverse=True) + sorted_labels.sort(key=lambda x: language_count[x]['count'], reverse=True) most_language_repo = sorted_labels[0] for label in sorted_labels: - percent = round(language_count[label]["count"] / total * 100, 2) + percent = round(language_count[label]['count'] / total * 100, 2) extension = " repos" - if language_count[label]["count"] == 1: + if language_count[label]['count'] == 1: extension = " repo" - data.append({"name": label, "text": str(language_count[label]["count"]) + extension, "percent": percent}) + data.append({ + "name": label, + "text": str(language_count[label]['count']) + extension, + "percent": percent + }) - title = translate["I Mostly Code in"] % most_language_repo - return "**" + title + "** \n\n" + "```text\n" + make_list(data) + "\n\n```\n" + title = translate['I Mostly Code in'] % most_language_repo + return '**' + title + '** \n\n' + '```text\n' + make_list(data) + '\n\n```\n' def get_yearly_data(): @@ -459,32 +427,27 @@ def get_line_of_code(): loc = LinesOfCode(id, username, ghtoken, repositoryList, ignored_repos_name) yearly_data = loc.calculateLoc() total_loc = sum( - [ - yearly_data[year][quarter][lang] - for year in yearly_data - for quarter in yearly_data[year] - for lang in yearly_data[year][quarter] - ] - ) + [yearly_data[year][quarter][lang] for year in yearly_data for quarter in yearly_data[year] for lang in + yearly_data[year][quarter]]) return millify(int(total_loc)) def get_short_info(github): - string = "**🐱 " + translate["My GitHub Data"] + "** \n\n" + string = '**🐱 ' + translate['My GitHub Data'] + '** \n\n' user_info = github.get_user() if user_info.disk_usage is None: disk_usage = humanize.naturalsize(0) print("Please add new github personal access token with user permission") else: disk_usage = humanize.naturalsize(user_info.disk_usage) - request = requests.get("https://github-contributions.now.sh/api/v1/" + user_info.login) + request = requests.get('https://github-contributions.now.sh/api/v1/' + user_info.login) if request.status_code == 200: data = request.json() - total = data["years"][0]["total"] - year = data["years"][0]["year"] - string += "> 🏆 " + translate["Contributions in the year"] % (humanize.intcomma(total), year) + "\n > \n" + total = data['years'][0]['total'] + year = data['years'][0]['year'] + string += '> 🏆 ' + translate['Contributions in the year'] % (humanize.intcomma(total), year) + '\n > \n' - string += "> 📦 " + translate["Used in GitHub's Storage"] % disk_usage + " \n > \n" + string += '> 📦 ' + translate["Used in GitHub's Storage"] % disk_usage + ' \n > \n' is_hireable = user_info.hireable public_repo = user_info.public_repos private_repo = user_info.owned_private_repos @@ -495,26 +458,20 @@ def get_short_info(github): else: string += "> 🚫 " + translate["Not Opted to Hire"] + "\n > \n" - string += "> 📜 " - string += ( - translate["public repositories"] % public_repo + " " + "\n > \n" - if public_repo != 1 - else translate["public repository"] % public_repo + " " + "\n > \n" - ) - string += "> 🔑 " - string += ( - translate["private repositories"] % private_repo + " " + " \n > \n" - if private_repo != 1 - else translate["private repository"] % private_repo + " " + "\n > \n" - ) + string += '> 📜 ' + string += translate['public repositories'] % public_repo + " " + '\n > \n' if public_repo != 1 else translate[ + 'public repository'] % public_repo + " " + '\n > \n' + string += '> 🔑 ' + string += translate['private repositories'] % private_repo + " " + ' \n > \n' if private_repo != 1 else translate[ + 'private repository'] % private_repo + " " + '\n > \n' return string def get_stats(github): - """Gets API data and returns markdown progress""" + '''Gets API data and returns markdown progress''' - stats = "" + stats = '' repositoryList = run_query(repositoryListQuery.substitute(username=username, id=id)) if show_loc.lower() in truthy or showLocChart.lower() in truthy: @@ -522,41 +479,27 @@ def get_stats(github): yearly_data = get_yearly_data() if show_total_code_time.lower() in truthy: - request = requests.get(f"https://wakatime.com/api/v1/users/current/all_time_since_today?api_key={waka_key}") + request = requests.get( + f"https://wakatime.com/api/v1/users/current/all_time_since_today?api_key={waka_key}") if request.status_code == 401: print("Error With WAKA time API returned " + str(request.status_code) + " Response " + str(request.json())) elif "text" not in request.json()["data"]: print("User stats are calculating. Try again later.") else: data = request.json() - stats += ( - "![Code Time](http://img.shields.io/badge/" - + quote(str("Code Time")) - + "-" - + quote(str(data["data"]["text"])) - + "-blue)\n\n" - ) + stats += '![Code Time](http://img.shields.io/badge/' + quote( + str("Code Time")) + '-' + quote(str( + data['data']['text'])) + '-blue)\n\n' if show_profile_view.lower() in truthy: data = run_v3_api(get_profile_view.substitute(owner=username, repo=username)) - stats += ( - "![Profile Views](http://img.shields.io/badge/" - + quote(str(translate["Profile Views"])) - + "-" - + str(data["count"]) - + "-blue)\n\n" - ) + stats += '![Profile Views](http://img.shields.io/badge/' + quote(str(translate['Profile Views'])) + '-' + str( + data['count']) + '-blue)\n\n' if show_loc.lower() in truthy: - stats += ( - "![Lines of code](https://img.shields.io/badge/" - + quote(str(translate["From Hello World I have written"])) - + "-" - + quote(str(get_line_of_code())) - + "%20" - + quote(str(translate["Lines of code"])) - + "-blue)\n\n" - ) + stats += '![Lines of code](https://img.shields.io/badge/' + quote( + str(translate['From Hello World I have written'])) + '-' + quote( + str(get_line_of_code())) + '%20' + quote(str(translate['Lines of code'])) + '-blue)\n\n' if show_short_info.lower() in truthy: stats += get_short_info(github) @@ -565,26 +508,17 @@ def get_stats(github): stats += get_waka_time_stats() if showLanguagePerRepo.lower() in truthy: - stats = stats + generate_language_per_repo(repositoryList) + "\n\n" + stats = stats + generate_language_per_repo(repositoryList) + '\n\n' if showLocChart.lower() in truthy: - stats += "**" + translate["Timeline"] + "**\n\n" - branch_name = github.get_repo(f"{username}/{username}").default_branch - stats = ( - stats - + "![Chart not found](https://raw.githubusercontent.com/" - + username - + "/" - + username - + "/" - + branch_name - + "/charts/bar_graph.png) \n\n" - ) + stats += '**' + translate['Timeline'] + '**\n\n' + branch_name = github.get_repo(f'{username}/{username}').default_branch + stats = stats + '![Chart not found](https://raw.githubusercontent.com/' + username + '/' + username + '/' + branch_name + '/charts/bar_graph.png) \n\n' if show_updated_date.lower() in truthy: - now = datetime.datetime.utcnow() + datetime.timedelta(hours=float(time_zone)) + now = datetime.datetime.utcnow() d1 = now.strftime(updated_date_format) - stats = stats + "\n Last Updated on " + d1 + " UTC" + time_zone + stats = stats + "\n Last Updated on " + d1 + " UTC" return stats @@ -594,22 +528,22 @@ def get_stats(github): def decode_readme(data: str): - """Decode the contents of old readme""" + '''Decode the contents of old readme''' decoded_bytes = base64.b64decode(data) - return str(decoded_bytes, "utf-8") + return str(decoded_bytes, 'utf-8') def generate_new_readme(stats: str, readme: str): - """Generate a new Readme.md""" + '''Generate a new Readme.md''' stats_in_readme = f"{START_COMMENT}\n{stats}\n{END_COMMENT}" return re.sub(listReg, stats_in_readme, readme) -if __name__ == "__main__": +if __name__ == '__main__': try: start_time = datetime.datetime.now().timestamp() * 1000 if ghtoken is None: - raise Exception("Token not available") + raise Exception('Token not available') g = Github(ghtoken) headers = {"Authorization": "Bearer " + ghtoken} user_data = run_query(userInfoQuery) # Execute the query @@ -620,12 +554,12 @@ if __name__ == "__main__": repo = g.get_repo(f"{username}/{username}") contents = repo.get_readme() try: - with open(os.path.join(os.path.dirname(__file__), "translation.json"), encoding="utf-8") as config_file: + with open(os.path.join(os.path.dirname(__file__), 'translation.json'), encoding='utf-8') as config_file: data = json.load(config_file) translate = data[locale] except Exception as e: print("Cannot find the Locale choosing default to english") - translate = data["en"] + translate = data['en'] waka_stats = get_stats(g) # star_me() rdmd = decode_readme(contents.content) @@ -634,27 +568,18 @@ if __name__ == "__main__": committer = InputGitAuthor(username or commit_username, email or commit_email) else: committer = InputGitAuthor( - commit_username or "readme-bot", commit_email or "41898282+github-actions[bot]@users.noreply.github.com" + commit_username or 'readme-bot', + commit_email or '41898282+github-actions[bot]@users.noreply.github.com' ) if new_readme != rdmd: try: - repo.update_file( - path=contents.path, - message=commit_message, - content=new_readme, - sha=contents.sha, - branch="master", - committer=committer, - ) + repo.update_file(path=contents.path, message=commit_message, + content=new_readme, sha=contents.sha, branch='master', + committer=committer) except: - repo.update_file( - path=contents.path, - message=commit_message, - content=new_readme, - sha=contents.sha, - branch="main", - committer=committer, - ) + repo.update_file(path=contents.path, message=commit_message, + content=new_readme, sha=contents.sha, branch='main', + committer=committer) print("Readme updated") end_time = datetime.datetime.now().timestamp() * 1000 print("Program processed in {} miliseconds.".format(round(end_time - start_time, 0)))