-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathForkJson.py
More file actions
100 lines (80 loc) · 3.3 KB
/
ForkJson.py
File metadata and controls
100 lines (80 loc) · 3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import os
import json
from datetime import datetime, timedelta
from collections import Counter
# GPL-3.0-only
#Création de deux type de JSON
#[✓]Le premier va etre un JSON qui liste le nombre de fork créer par jour
#[✓~✗]Le second va etre un JSON qui liste le total de fork créer par jour
def json_number_fork_create_everyday(years: list[int], projects) -> json:
"""Cette fonction permet de créer le JSON du nombre de forks par jour d'une année (ce sont les données journalières non cumulées).
Args:
years (list[int]): Années pour lesquelles on veut créer le JSON
projects (_type_): Donnée récupérée depuis l'API Gitlab sur les projets
Returns:
json: renvoie un JSON qui va après être mis dans un fichier
"""
#Regrouper et compter toutes les dates de création de forks
all_dates = (
getattr(project, "created_at", "")[:10]
for project in projects
)
date_counts = Counter(d for d in all_dates if d)
today = datetime.now().date()
# Crée le dossier si nécessaire
os.makedirs("json/Fork", exist_ok=True)
for year in years:
#Générer la séquence de dates pour l'année
start = datetime(year, 1, 1).date()
end = today if year == today.year else datetime(year, 12, 31).date()
num_days = (end - start).days + 1
daily_data = []
for i in range(num_days):
d = start + timedelta(days=i)
ds = d.isoformat()
# Récupère le nombre de forks pour la date (0 si absent)
daily_data.append({"x": ds, "y": date_counts.get(ds, 0)})
#Préparer et écrire le JSON
payload = {str(year): {"year": year, "daily_data": daily_data}}
json_content = json.dumps(payload, indent=4)
file_path = f"json/Fork/{year}.json"
with open(file_path, "w") as file:
file.write(json_content)
def json_cumulative_number_fork_create_everyday(years: list[int]) -> str:
"""Fonction qui retourne le nombre cumulé de forks créés par jour pour chaque année demandée.
Args:
years (List[int]): Liste des années à traiter.
Returns:
str: JSON (en string) contenant les données cumulées pour chaque année.
"""
today = datetime.now()
result = {}
cumulative = 0
temp_data = {}
for year in years:
file_path = f"json/Fork/{year}.json"
with open(file_path, "r") as file:
data = json.load(file)
for entry in data[str(year)]["daily_data"]:
date = entry["x"]
count = entry["y"]
if date not in temp_data:
temp_data[date] = 0
temp_data[date] += count
for year in years:
daily_data = []
for day in range(1, 367):
try:
date_obj = datetime.strptime(f"{year}-{day}", "%Y-%j")
if date_obj > today:
break
date_str = date_obj.strftime("%Y-%m-%d")
cumulative += temp_data.get(date_str, 0)
daily_data.append({"x": date_str, "y": cumulative})
except ValueError:
continue
result[str(year)] = {
"year": year,
"daily_data": daily_data
}
return json.dumps(result, indent=4)