fix: convert cf-kv and excalidraw-libraries from submodules to regular files

- Remove stale cloudflare-worker submodule entry from .gitmodules
- Remove .git dirs from cf-kv and excalidraw-libraries so Git tracks them as regular files
- Fixes 'No url found for submodule path cf-kv' CI error
This commit is contained in:
Tomas Dvorak
2026-04-27 09:37:49 +02:00
parent 88c2969a96
commit 338dbcc20e
1488 changed files with 3359158 additions and 5 deletions
+169
View File
@@ -0,0 +1,169 @@
from apiclient.discovery import build
from datetime import date
from datetime import timedelta
from oauth2client.service_account import ServiceAccountCredentials
import os
import json
SCOPES = ["https://www.googleapis.com/auth/analytics.readonly"]
VIEW_ID = "208661610"
THRESSHOLD = 10
ROOT_DIR = os.path.dirname(os.path.realpath(__file__))
STATS_DIR = os.path.join(ROOT_DIR, "stats")
KEY_FILE = os.path.join(ROOT_DIR, "excalidraw-key.json")
MAP = {
"Android": "g-script-android",
"Apple Devices Frames": "franky47-apple-devices-frames",
"Charts": "g-script-charts",
"Data Viz": "dbssticky-data-viz",
"dbssticky-DataViz": "dbssticky-data-viz",
"Dropdowns": "h7y-dropdowns",
"excalidraw_art-excalidraw_art": "drwnio-drwnio",
"Forms": "g-script-forms",
"Gadgets": "morgemoensch-gadgets",
"Hearts": "dwelle-hearts",
"Information Architecture": "inwardmovement-information-architecture",
"IT Logos": "pclainchard-it-logos",
"Medias": "g-script-medias",
"Polygons": "lipis-polygons",
"RaspberryPI": "revolunet-raspberrypi3",
"raspberrypi-raspberrypi-zero": "marcottebear-raspberrypi-zero",
"Software Architecture": "youritjang-software-architecture",
"Stars": "lipis-stars",
"Stick figures": "youritjang-stick-figures",
"Stick Figures": "youritjang-stick-figures",
"Technology Logos": "drwnio-drwnio",
"anna-pastushko-aws-architecture-icons": "childishgirl-aws-architecture-icons",
}
def initialize_analyticsreporting():
credentials = ServiceAccountCredentials.from_json_keyfile_name(KEY_FILE, SCOPES)
return build("analyticsreporting", "v4", credentials=credentials)
def get_library_report(analytics, day="yesterday"):
return (
analytics.reports()
.batchGet(
body={
"reportRequests": [
{
"viewId": VIEW_ID,
"dateRanges": [{"startDate": day, "endDate": day}],
"metrics": [{"expression": "ga:totalEvents"}],
"dimensions": [
{"name": "ga:eventCategory"},
{"name": "ga:eventAction"},
{"name": "ga:eventLabel"},
],
}
]
}
)
.execute()
)
def print_library_response(response):
counts = {}
for report in response.get("reports", []):
for row in report.get("data", {}).get("rows", []):
dimensions = row.get("dimensions", [])
metrics = row.get("metrics", [])
if not (
dimensions[0] == "library"
and dimensions[1] in ["download", "import"]
and dimensions[2] != "(not set)"
):
continue
label = dimensions[2]
label = label if label not in MAP else MAP[label]
value = int(metrics[0]["values"][0])
if label in counts:
counts[label] += value
else:
counts[label] = value
for download in counts:
print(download, ":", counts[download])
return counts
def get_libraries_from_analytics(analytics, day):
print()
print(day)
print("-" * 40)
response = get_library_report(analytics, day)
libraries = print_library_response(response)
print()
return libraries
def main():
if not os.path.exists(KEY_FILE):
print("Key file not found", KEY_FILE)
return
today = date.today()
current_date = date(2020, 12, 11)
stats = {}
analytics = initialize_analyticsreporting()
total_downloads = 0
total_downloads_day = 0
total_downloads_week = 0
while current_date <= today:
month = current_date.strftime("%Y-%m")
month_path = os.path.join(STATS_DIR, month)
if not os.path.isdir(month_path):
os.mkdir(month_path)
day = current_date.strftime("%Y-%m-%d")
# Load data from JSON if it's older than N days
if current_date < today + timedelta(days=-2):
libraries_file = os.path.join(month_path, day + ".json")
try:
with open(libraries_file, "r") as day_totals:
libraries = json.load(day_totals)
except FileNotFoundError:
libraries = get_libraries_from_analytics(analytics, day)
else:
libraries = get_libraries_from_analytics(analytics, day)
for library in libraries:
total = libraries[library]
total_downloads += total
if library in stats:
stats[library]["total"] += total
else:
stats[library] = {"total": total, "week": 0}
if current_date > today + timedelta(days=-7):
total_downloads_week += total
stats[library]["week"] += total
if current_date == today:
total_downloads_day += total
with open(os.path.join(month_path, day + ".json"), "w") as outfile:
json.dump(libraries, outfile, indent=2, sort_keys=True)
with open(os.path.join(ROOT_DIR, "stats.json"), "w") as outfile:
json.dump(stats, outfile, indent=2, sort_keys=True)
with open(os.path.join(ROOT_DIR, "total.json"), "w") as outfile:
json.dump(
{
"total": total_downloads,
"week": total_downloads_week,
"day": total_downloads_day,
},
outfile,
indent=2,
sort_keys=True,
)
current_date += timedelta(days=1)
if __name__ == "__main__":
main()