Merge branch 'Alpha' into master

This commit is contained in:
Anmol Pratap Singh
2020-07-28 14:44:52 +05:30
committed by GitHub
5 changed files with 188 additions and 134 deletions

View File

@@ -94,23 +94,27 @@ jobs:
with:
WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
USERNAME: <username> # optional, it will automatically use the username of the owner of the repository who's executing the workflow.
```
## Extras
1. If you want to add the other info to your stats, you can add multiple `FLAGS` in your workflow file by default all flags are enabled
>except the lines of code flag due to heavy operation performed
```yml
- uses: anmol098/waka-readme-stats@master
with:
WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
USERNAME: <username>
SHOW_OS: "False"
SHOW_PROJECTS: "False"
```
#### Flags Available
`SHOW_LINES_OF_CODE` flag can be set to `True` to show the Lines of code writen till date
![Lines of code](https://img.shields.io/badge/From%20Hello%20World%20I've%20written-12,66,814%20Lines%20of%20code-blue)
`SHOW_COMMIT` flag can be set to `False` to hide the commit stats
**I'm an early 🐤**
@@ -120,6 +124,18 @@ jobs:
🌃 Evening 112 commits █████████░░░░░░░░░░░░░░░░ 36.01%
🌙 Night 26 commits ██░░░░░░░░░░░░░░░░░░░░░░░ 8.36%
```
📅 **I'm Most Productive on Sundays**
```text
Monday 50 commits ███░░░░░░░░░░░░░░░░░░░░░░ 13.19%
Tuesday 85 commits █████░░░░░░░░░░░░░░░░░░░░ 22.43%
Wednesday 56 commits ███░░░░░░░░░░░░░░░░░░░░░░ 14.78%
Thursday 44 commits ███░░░░░░░░░░░░░░░░░░░░░░ 11.61%
Friday 28 commits █░░░░░░░░░░░░░░░░░░░░░░░░ 7.39%
Saturday 30 commits ██░░░░░░░░░░░░░░░░░░░░░░░ 7.92%
Sunday 86 commits █████░░░░░░░░░░░░░░░░░░░░ 22.69%
```
`SHOW_LANGUAGE` flag can be set to `False` to hide the Coding Language You use
@@ -167,6 +183,27 @@ PhpStorm 1 hr 35 mins ████░░░░░░░
PyCharm 23 mins █░░░░░░░░░░░░░░░░░░░░░░░░ 4.49%
```
## :sparkling_heart: Support the project
I open-source almost everything I can, and I try to reply to everyone needing help using these projects. Obviously,
this takes time. You can use this service for free.
However, if you are using this project and happy with it or just want to encourage me to continue creating stuff, there are few ways you can do it :-
- Giving proper credit when you use this action on your readme, linking back to it :D
- Starring and sharing the project :rocket:
- [![paypal.me/aapreneur](https://ionicabizau.github.io/badges/paypal.svg)](https://www.paypal.me/aapreneur) - You can make one-time donations via PayPal. I'll probably buy a ~~beer~~ wine 🍷
Thanks! :heart:
---
Contributions are welcomed! ♥
Made with :heart: and Python 🐍.
> This project is inspired by an awesome pinned-gist project [Awesome Pinned Gists](https://github.com/matchai/awesome-pinned-gists) <br/>
>This project is inspired from [athul/waka-readme](https://github.com/athul/waka-readme)

View File

@@ -47,6 +47,20 @@ inputs:
description: "Show the Coding language used in dev metrics"
default: "True"
SHOW_LINES_OF_CODE:
required: false
description: "Show the Total Lines of code written Badge till date"
default: "False"
SHOW_LANGUAGE_PER_REPO:
required: false
description: ""
default: "True"
SHOW_LOC_CHART:
required: false
description: ""
default: "True"

62
loc.py
View File

@@ -6,7 +6,7 @@ from github import Github
import datetime
from string import Template
import matplotlib.pyplot as plt
from io import StringIO,BytesIO
from io import StringIO, BytesIO
from dotenv import load_dotenv
import time
@@ -15,64 +15,64 @@ from make_bar_graph import BarGraph
class LinesOfCode:
def __init__(self,id,username,ghtoken, repositoryData):
self.id=id
self.username=username
def __init__(self, id, username, ghtoken, repositoryData):
self.id = id
self.username = username
self.g = Github(ghtoken)
self.headers = {"Authorization": "Bearer " + ghtoken}
self.repositoryData=repositoryData
self.repositoryData = repositoryData
def calculateLoc(self):
result=self.repositoryData
yearly_data={}
result = self.repositoryData
yearly_data = {}
for repo in result['data']['user']['repositories']['edges']:
print(repo)
self.getCommitStat(repo['node'],yearly_data)
self.getCommitStat(repo['node'], yearly_data)
time.sleep(0.7)
print("\n\n")
print(yearly_data)
graph=BarGraph(yearly_data)
graph_file=graph.build_graph()
print("here")
graph = BarGraph(yearly_data)
graph_file = graph.build_graph()
self.pushChart()
def run_query_v3(self,nameWithOwner):
endPoint='https://api.github.com/repos/'+nameWithOwner+'/stats/code_frequency'
def run_query_v3(self, nameWithOwner):
endPoint = 'https://api.github.com/repos/' + nameWithOwner + '/stats/code_frequency'
# print(endPoint)
request = requests.get(endPoint, headers=self.headers)
if request.status_code == 401:
raise Exception("Invalid token {}. {}".format(request.status_code, nameWithOwner))
return request.json()
def getQuarter(self,timeStamp):
month=datetime.datetime.fromtimestamp(timeStamp).month
if month>=1 and month<=4:
def getQuarter(self, timeStamp):
month = datetime.datetime.fromtimestamp(timeStamp).month
if month >= 1 and month <= 4:
return 1
elif month>=5 and month<=8:
elif month >= 5 and month <= 8:
return 2
elif month>=9 and month<=12:
elif month >= 9 and month <= 12:
return 3
def getCommitStat(self,repoDetails,yearly_data):
result= self.run_query_v3(repoDetails['nameWithOwner'])
this_year=datetime.datetime.utcnow().year
def getCommitStat(self, repoDetails, yearly_data):
result = self.run_query_v3(repoDetails['nameWithOwner'])
this_year = datetime.datetime.utcnow().year
for i in range(len(result)):
curr_year=datetime.datetime.fromtimestamp(result[i][0]).year
curr_year = datetime.datetime.fromtimestamp(result[i][0]).year
# if curr_year != this_year:
quarter=self.getQuarter(result[i][0])
quarter = self.getQuarter(result[i][0])
if repoDetails['primaryLanguage'] is not None:
if curr_year not in yearly_data:
yearly_data[curr_year]={}
yearly_data[curr_year] = {}
if quarter not in yearly_data[curr_year]:
yearly_data[curr_year][quarter]={}
yearly_data[curr_year][quarter] = {}
if repoDetails['primaryLanguage']['name'] not in yearly_data[curr_year][quarter]:
yearly_data[curr_year][quarter][repoDetails['primaryLanguage']['name']]=0
yearly_data[curr_year][quarter][repoDetails['primaryLanguage']['name']]+=(result[i][1]+result[i][2])
yearly_data[curr_year][quarter][repoDetails['primaryLanguage']['name']] = 0
yearly_data[curr_year][quarter][repoDetails['primaryLanguage']['name']] += (result[i][1] + result[i][2])
#to find total
# to find total
# if 'total' not in yearly_data[curr_year]:
# yearly_data[curr_year]['total']={}
@@ -88,13 +88,9 @@ class LinesOfCode:
contents = repo.get_contents("charts/bar_graph.png")
repo.update_file(contents.path, "Charts Added", data, contents.sha)
except Exception as e:
repo.create_file("charts/bar_graph.png", "Initial Commit",data)
repo.create_file("charts/bar_graph.png", "Initial Commit", data)
print("pushed")
# if __name__ == '__main__':
# try:
# g = Github(ghtoken)

View File

@@ -93,7 +93,7 @@ def run_v3_api(query):
repositoryListQuery = Template("""
{
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
edges {
node {
@@ -280,6 +280,8 @@ def generate_commit_list(tz):
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(

View File

@@ -2,60 +2,68 @@ import pandas as pd
import numpy as np
import altair as alt
import json
alt.data_transformers.enable('data_server_proxied')
# npm install vega-lite vega-cli canvas
class BarGraph:
def __init__(self, yearly_data):
self.yearly_data=yearly_data
self.yearly_data = yearly_data
def build_graph(self):
with open('colors.json') as f:
colors = json.load(f)
allColorsValues=[]
allColorsValues = []
#filter data
max_languages=5
top_languages={}
# filter data
max_languages = 5
top_languages = {}
for year in self.yearly_data.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]:
self.yearly_data[year][quarter]['top']={}
if self.yearly_data[year][quarter][language]!=0:
self.yearly_data[year][quarter]['top'][language]=self.yearly_data[year][quarter][language]
self.yearly_data[year][quarter]['top'] = {}
if self.yearly_data[year][quarter][language] != 0:
self.yearly_data[year][quarter]['top'][language] = self.yearly_data[year][quarter][language]
if language not in top_languages:
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())
for language in all_languages:
if colors[language]['color'] is not None:
allColorsValues.append(colors[language]['color'])
languages_all_loc={}
languages_all_loc = {}
for language in all_languages:
language_year=[]
language_year = []
for year in self.yearly_data.keys():
language_quarter=[0,0,0]
language_quarter = [0, 0, 0]
for quarter in self.yearly_data[year].keys():
if language in self.yearly_data[year][quarter]['top']:
language_quarter[quarter-1]=self.yearly_data[year][quarter]['top'][language]
language_quarter[quarter - 1] = self.yearly_data[year][quarter]['top'][language]
else:
language_quarter[quarter-1]=0
language_quarter[quarter - 1] = 0
language_year.append(language_quarter)
languages_all_loc[language]=language_year
languages_all_loc[language] = language_year
print("here 2")
print(languages_all_loc)
language_df={}
language_df = {}
def prep_df(df, name):
df = df.stack().reset_index()
@@ -64,20 +72,17 @@ class BarGraph:
return df
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():
language_df[language]=prep_df(language_df[language], language)
df=pd.concat(list(language_df.values()))
language_df[language] = prep_df(language_df[language], language)
df = pd.concat(list(language_df.values()))
# print(df)
chart=alt.Chart(df).mark_bar().encode(
chart = alt.Chart(df).mark_bar().encode(
# tell Altair which field to group columns on
x=alt.X('c2:N', title=None),
@@ -98,7 +103,7 @@ class BarGraph:
# make it look pretty with an enjoyable color pallet
range=allColorsValues,
),
))\
)) \
.configure_view(
# remove grid lines around column clusters
strokeOpacity=0