2
0
mirror of https://github.com/inventree/inventree-website.git synced 2025-04-28 13:36:47 +00:00
inventree-website/.github/get_stats.py
2022-08-04 19:51:17 +02:00

48 lines
1.4 KiB
Python

from enum import Enum
import json
from pathlib import Path
from urllib.request import urlopen, Request
file_name = Path('_data/general/stats.yml')
class ReturnMode(Enum):
data = 0
header = 1
def get_data(url, key=None, default=0, mode: ReturnMode=ReturnMode.data):
"""Fetches data from remote endpoint"""
httprequest = Request(url, headers={"Accept": "application/json"})
with urlopen(httprequest) as response:
if mode == ReturnMode.data:
data = response.read().decode()
data = json.loads(data)
elif mode == ReturnMode.header:
data = dict(response.headers.items())
if key:
data = data.get(key, default)
return data
docker = get_data('https://hub.docker.com/v2/repositories/inventree/inventree', 'pull_count')
gh_data = get_data('https://api.github.com/repos/inventree/inventree')
stars = gh_data.get('stargazers_count', 0)
forks = gh_data.get('forks_count', 0)
# See https://stackoverflow.com/a/60458265/17860466 # to enabble anon add `&anon=true`
link = get_data('https://api.github.com/repos/inventree/inventree/contributors?per_page=1', mode=ReturnMode.header).get('Link')
contributors = link.split('page=')[-1].split('>')[0]
# Write data
file_name.write_text(
f"""stats:
- name: Docker pulls
number: {docker}
- name: GitHub Stars
number: {stars}
- name: Forks
number: {forks}
- name: Contributors
number: {contributors}""")