FEAT: NEW GRAPH MODULE

This commit is contained in:
Anmol
2020-07-28 13:53:58 +05:30
parent ef845986d7
commit 09764da69d
4 changed files with 153 additions and 145 deletions

View File

@@ -52,6 +52,15 @@ inputs:
description: "Show the Total Lines of code written Badge till date" description: "Show the Total Lines of code written Badge till date"
default: "False" default: "False"
SHOW_LANGUAGE_PER_REPO:
required: false
description: ""
default: "True"
SHOW_LOC_CHART:
required: false
description: ""
default: "True"

6
loc.py
View File

@@ -32,6 +32,7 @@ class LinesOfCode:
time.sleep(0.7) time.sleep(0.7)
print("\n\n") print("\n\n")
print(yearly_data) print(yearly_data)
print("here")
graph = BarGraph(yearly_data) graph = BarGraph(yearly_data)
graph_file = graph.build_graph() graph_file = graph.build_graph()
self.pushChart() self.pushChart()
@@ -53,7 +54,6 @@ class LinesOfCode:
elif month >= 9 and month <= 12: elif month >= 9 and month <= 12:
return 3 return 3
def getCommitStat(self, repoDetails, yearly_data): def getCommitStat(self, repoDetails, yearly_data):
result = self.run_query_v3(repoDetails['nameWithOwner']) result = self.run_query_v3(repoDetails['nameWithOwner'])
this_year = datetime.datetime.utcnow().year this_year = datetime.datetime.utcnow().year
@@ -91,10 +91,6 @@ class LinesOfCode:
repo.create_file("charts/bar_graph.png", "Initial Commit", data) repo.create_file("charts/bar_graph.png", "Initial Commit", data)
print("pushed") print("pushed")
# if __name__ == '__main__': # if __name__ == '__main__':
# try: # try:
# g = Github(ghtoken) # g = Github(ghtoken)

22
main.py
View File

@@ -1,7 +1,7 @@
''' '''
Readme Development Metrics With waka time progress Readme Development Metrics With waka time progress
''' '''
import locale
import re import re
import os import os
import base64 import base64
@@ -12,8 +12,6 @@ import requests
from github import Github, GithubException from github import Github, GithubException
import datetime import datetime
from string import Template from string import Template
import matplotlib.pyplot as plt
from io import StringIO,BytesIO
from dotenv import load_dotenv from dotenv import load_dotenv
from loc import LinesOfCode from loc import LinesOfCode
@@ -33,9 +31,10 @@ showOs = os.getenv('INPUT_SHOW_OS')
showCommit = os.getenv('INPUT_SHOW_COMMIT') showCommit = os.getenv('INPUT_SHOW_COMMIT')
showLanguage = os.getenv('INPUT_SHOW_LANGUAGE') showLanguage = os.getenv('INPUT_SHOW_LANGUAGE')
show_loc = os.getenv('INPUT_SHOW_LINES_OF_CODE') show_loc = os.getenv('INPUT_SHOW_LINES_OF_CODE')
showLanguagePerRepo= os.getenv('INPUT_LANGUAGE_PER_REPO')
showLocChart='y' if (os.getenv('LOC_CHART') is None) else os.getenv('LOC_CHART') showLanguagePerRepo = os.getenv('INPUT_SHOW_LANGUAGE_PER_REPO')
show_waka_stats='n' if waka_key is None else 'y' showLocChart = os.getenv('INPUT_SHOW_LOC_CHART')
show_waka_stats = 'y'
# The GraphQL query to get commit data. # The GraphQL query to get commit data.
userInfoQuery = """ userInfoQuery = """
{ {
@@ -90,10 +89,11 @@ def run_v3_api(query):
raise Exception( raise Exception(
"Query failed to run by returning code of {}. {},... {}".format(request.status_code, query, request.json())) "Query failed to run by returning code of {}. {},... {}".format(request.status_code, query, request.json()))
repositoryListQuery = Template(""" repositoryListQuery = Template("""
{ {
user(login: "$username") { user(login: "$username") {
repositories(orderBy: {field: CREATED_AT, direction: ASC}, last: 100, affiliations: [OWNER, COLLABORATOR, ORGANIZATION_MEMBER], isFork: false) { repositories(orderBy: {field: CREATED_AT, direction: ASC}, last: 5, affiliations: [OWNER, COLLABORATOR, ORGANIZATION_MEMBER], isFork: false) {
totalCount totalCount
edges { edges {
node { node {
@@ -132,6 +132,7 @@ repositoryListQuery = Template("""
} }
""") """)
def run_query(query): 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: if request.status_code == 200:
@@ -278,9 +279,9 @@ def generate_commit_list(tz):
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'
string = string + '📅 **' + days_title + '** \n\n' + '```text\n' + make_commit_list(dayOfWeek) + '\n\n```\n' string = string + '📅 **' + days_title + '** \n\n' + '```text\n' + make_commit_list(dayOfWeek) + '\n\n```\n'
def get_waka_time_stats(): def get_waka_time_stats():
stats = '' stats = ''
try:
request = requests.get( request = requests.get(
f"https://wakatime.com/api/v1/users/current/stats/last_7_days?api_key={waka_key}") f"https://wakatime.com/api/v1/users/current/stats/last_7_days?api_key={waka_key}")
@@ -366,9 +367,6 @@ def get_stats():
'''Gets API data and returns markdown progress''' '''Gets API data and returns markdown progress'''
stats = '' stats = ''
if showCommit.lower() in ['true', '1', 't', 'y', 'yes']:
stats = stats + generate_commit_list() + '\n\n'
repositoryList = run_query(repositoryListQuery.substitute(username=username, id=id)) repositoryList = run_query(repositoryListQuery.substitute(username=username, id=id))
if showLanguagePerRepo.lower() in ['true', '1', 't', 'y', 'yes']: if showLanguagePerRepo.lower() in ['true', '1', 't', 'y', 'yes']:
@@ -386,6 +384,7 @@ def get_stats():
return stats return stats
def decode_readme(data: str): def decode_readme(data: str):
'''Decode the contets of old readme''' '''Decode the contets of old readme'''
decoded_bytes = base64.b64decode(data) decoded_bytes = base64.b64decode(data)
@@ -420,4 +419,3 @@ if __name__ == '__main__':
print("Readme updated") print("Readme updated")
except Exception as e: except Exception as e:
print("Exception Occurred" + str(e)) print("Exception Occurred" + str(e))

View File

@@ -2,6 +2,10 @@ import pandas as pd
import numpy as np import numpy as np
import altair as alt import altair as alt
import json import json
alt.data_transformers.enable('data_server_proxied')
# npm install vega-lite vega-cli canvas # npm install vega-lite vega-cli canvas
@@ -21,7 +25,9 @@ class BarGraph:
top_languages = {} top_languages = {}
for year in self.yearly_data.keys(): for year in self.yearly_data.keys():
for quarter in self.yearly_data[year].keys(): for quarter in self.yearly_data[year].keys():
for language in sorted(list(self.yearly_data[year][quarter].keys()), key=lambda lang:self.yearly_data[year][quarter][lang], reverse=True)[0:max_languages]: for language in sorted(list(self.yearly_data[year][quarter].keys()),
key=lambda lang: self.yearly_data[year][quarter][lang], reverse=True)[
0:max_languages]:
if 'top' not in self.yearly_data[year][quarter]: if 'top' not in self.yearly_data[year][quarter]:
self.yearly_data[year][quarter]['top'] = {} self.yearly_data[year][quarter]['top'] = {}
if self.yearly_data[year][quarter][language] != 0: if self.yearly_data[year][quarter][language] != 0:
@@ -31,7 +37,8 @@ class BarGraph:
top_languages[language] = 1 top_languages[language] = 1
top_languages[language] += 1 top_languages[language] += 1
# print(self.yearly_data) print("here")
print(self.yearly_data)
all_languages = list(top_languages.keys()) all_languages = list(top_languages.keys())
@@ -53,6 +60,7 @@ class BarGraph:
language_year.append(language_quarter) language_year.append(language_quarter)
languages_all_loc[language] = language_year languages_all_loc[language] = language_year
print("here 2")
print(languages_all_loc) print(languages_all_loc)
language_df = {} language_df = {}
@@ -64,19 +72,16 @@ class BarGraph:
return df return df
for language in languages_all_loc.keys(): for language in languages_all_loc.keys():
language_df[language]=pd.DataFrame(languages_all_loc[language],index=list(self.yearly_data.keys()),columns=["Q1","Q2","Q3"]) language_df[language] = pd.DataFrame(languages_all_loc[language], index=list(self.yearly_data.keys()),
columns=["Q1", "Q2", "Q3"])
for language in language_df.keys(): for language in language_df.keys():
language_df[language] = prep_df(language_df[language], language) language_df[language] = prep_df(language_df[language], language)
df = pd.concat(list(language_df.values())) df = pd.concat(list(language_df.values()))
# print(df) # print(df)
chart = alt.Chart(df).mark_bar().encode( chart = alt.Chart(df).mark_bar().encode(
# tell Altair which field to group columns on # tell Altair which field to group columns on