You've already forked wakapi-readme-stats
download manager implemented for linguist
This commit is contained in:
42
download_manager.py
Normal file
42
download_manager.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
from typing import Awaitable, Dict, Callable, Optional, Tuple
|
||||||
|
|
||||||
|
from http3 import AsyncClient
|
||||||
|
from yaml import safe_load
|
||||||
|
|
||||||
|
|
||||||
|
async def init_download_manager():
|
||||||
|
await DownloadManager.load_remote_resources({
|
||||||
|
"linguist": ("https://cdn.jsdelivr.net/gh/github/linguist@master/lib/linguist/languages.yml", {})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
class DownloadManager:
|
||||||
|
_client = AsyncClient()
|
||||||
|
_REMOTE_RESOURCES = dict()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
async def load_remote_resources(resources: Dict[str, Tuple[str, Dict]]):
|
||||||
|
for resource, (url, params) in resources.items():
|
||||||
|
DownloadManager._REMOTE_RESOURCES[resource] = DownloadManager._client.get(url, **params)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
async def _get_remote_resource(resource: str, convertor: Optional[Callable[[bytes], str]]) -> Dict:
|
||||||
|
if isinstance(DownloadManager._REMOTE_RESOURCES[resource], Awaitable):
|
||||||
|
res = await DownloadManager._REMOTE_RESOURCES[resource]
|
||||||
|
if res.status_code == 200:
|
||||||
|
if convertor is None:
|
||||||
|
DownloadManager._REMOTE_RESOURCES[resource] = res.json()
|
||||||
|
print(res.json())
|
||||||
|
else:
|
||||||
|
DownloadManager._REMOTE_RESOURCES[resource] = convertor(res.content)
|
||||||
|
else:
|
||||||
|
raise Exception(f"Query '{res.url}' failed to run by returning code of {res.status_code}: {res.json()}")
|
||||||
|
return DownloadManager._REMOTE_RESOURCES[resource]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
async def get_remote_json(resource: str) -> Dict:
|
||||||
|
return await DownloadManager._get_remote_resource(resource, None)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
async def get_remote_yaml(resource: str) -> Dict:
|
||||||
|
return await DownloadManager._get_remote_resource(resource, safe_load)
|
||||||
5
main.py
5
main.py
@@ -4,12 +4,16 @@ Readme Development Metrics With waka time progress
|
|||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
import base64
|
import base64
|
||||||
|
from asyncio import run
|
||||||
|
|
||||||
from pytz import timezone
|
from pytz import timezone
|
||||||
import pytz
|
import pytz
|
||||||
import requests
|
import requests
|
||||||
from github import Github, GithubException, InputGitAuthor
|
from github import Github, GithubException, InputGitAuthor
|
||||||
import datetime
|
import datetime
|
||||||
from string import Template
|
from string import Template
|
||||||
|
|
||||||
|
from download_manager import init_download_manager
|
||||||
from loc import LinesOfCode
|
from loc import LinesOfCode
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
@@ -543,6 +547,7 @@ def generate_new_readme(stats: str, readme: str):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
run(init_download_manager())
|
||||||
try:
|
try:
|
||||||
start_time = datetime.datetime.now().timestamp() * 1000
|
start_time = datetime.datetime.now().timestamp() * 1000
|
||||||
if ghtoken is None:
|
if ghtoken is None:
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
import os
|
import os
|
||||||
|
from asyncio import run
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import altair as alt
|
import altair as alt
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from download_manager import DownloadManager
|
||||||
|
|
||||||
|
|
||||||
# npm install vega-lite vega-cli canvas
|
# npm install vega-lite vega-cli canvas
|
||||||
|
|
||||||
|
|
||||||
@@ -14,8 +20,7 @@ class BarGraph:
|
|||||||
|
|
||||||
def build_graph(self):
|
def build_graph(self):
|
||||||
|
|
||||||
with open(os.path.join(os.path.dirname(__file__), 'colors.json')) as f:
|
colors = run(DownloadManager.get_remote_yaml("linguist"))
|
||||||
colors = json.load(f)
|
|
||||||
allColorsValues = []
|
allColorsValues = []
|
||||||
|
|
||||||
# filter data
|
# filter data
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ chardet==4.0.0
|
|||||||
cycler==0.10.0
|
cycler==0.10.0
|
||||||
Deprecated==1.2.12
|
Deprecated==1.2.12
|
||||||
entrypoints==0.3
|
entrypoints==0.3
|
||||||
|
http3==0.6.7
|
||||||
humanize==3.3.0
|
humanize==3.3.0
|
||||||
idna==2.10
|
idna==2.10
|
||||||
Jinja2==2.11.3
|
Jinja2==2.11.3
|
||||||
@@ -21,6 +22,7 @@ Pillow==8.2.0
|
|||||||
portpicker==1.3.1
|
portpicker==1.3.1
|
||||||
PyGithub==1.54.1
|
PyGithub==1.54.1
|
||||||
PyJWT==1.7.1
|
PyJWT==1.7.1
|
||||||
|
PyYAML==6.0
|
||||||
pyparsing==2.4.7
|
pyparsing==2.4.7
|
||||||
pyrsistent==0.17.3
|
pyrsistent==0.17.3
|
||||||
python-dateutil==2.8.1
|
python-dateutil==2.8.1
|
||||||
|
|||||||
Reference in New Issue
Block a user