diff --git a/update_projects.py b/update_projects.py index 56312e6..4289f8e 100644 --- a/update_projects.py +++ b/update_projects.py @@ -1,11 +1,14 @@ import os import sys import json +import time import requests from datetime import datetime from dotenv import load_dotenv VERBOSEPRINT = "-v" in sys.argv or "--verbose" in sys.argv +DONTDOWNLOAD = "-dd" in sys.argv or "--dont-download" in sys.argv +DONTUPDATEGH = "-du" in sys.argv or "--dont-update-github" in sys.argv def verboseprint(string="", end="\n"): if VERBOSEPRINT: @@ -102,44 +105,60 @@ def get_languagages(repo, access_token): projects_json_path = os.path.expanduser("~/.cache/gh-projects/projects.json") # create the directory if it doesn't exist os.makedirs(os.path.dirname(projects_json_path), exist_ok=True) -# fetch the projects.json file from https://cdn.jonasjones.dev/api/projects/projects.json -projects_json_url = "https://cdn.jonasjones.dev/api/projects/projects.json" -projects_json = requests.get(projects_json_url) -with open(projects_json_path, "wb") as file: - file.write(projects_json.content) -verboseprint(f"Fetched projects.json file") +if not DONTDOWNLOAD: + # fetch the projects.json file from https://cdn.jonasjones.dev/api/projects/projects.json + projects_json_url = "https://cdn.jonasjones.dev/api/projects/projects.json" + projects_json = requests.get(projects_json_url) + with open(projects_json_path, "wb") as file: + file.write(projects_json.content) + + verboseprint(f"Fetched projects.json file") +elif not os.path.exists("~/.cache/gh-projects/projects.json"): + FileNotFoundError("File 'projects.json' not found. Cannot proceed without \ + downloading it. Remove '-dd' or '--dontdownload' from the launch arguments.") +else: + print("Skipping download of 'projects.json'") # Load the existing projects.json file with open(projects_json_path, "r") as file: projects_data = json.load(file) -print("Fetching Repo data...") +if not DONTUPDATEGH: + print("Fetching Repo data...") -# Update the last_update (Unix timestamp) for each project -for project in projects_data: - gh_api = project.get("gh_api") - if gh_api: - last_commit_timestamp = get_last_commit_timestamp(gh_api, GITHUB_API_TOKEN) - last_release_version = get_last_release_version(gh_api, GITHUB_API_TOKEN) - if last_commit_timestamp: - project["last_update"] = last_commit_timestamp - else: - project["last_update"] = 0 - if last_release_version: - project["version"] = last_release_version.replace("v", "") - languages = get_languagages(gh_api, GITHUB_API_TOKEN) - if languages: - project["languages"] = languages + # Update the last_update (Unix timestamp) for each project + for project in projects_data: + gh_api = project.get("gh_api") + if gh_api: + last_commit_timestamp = get_last_commit_timestamp(gh_api, GITHUB_API_TOKEN) + last_release_version = get_last_release_version(gh_api, GITHUB_API_TOKEN) + if last_commit_timestamp: + project["last_update"] = last_commit_timestamp + else: + project["last_update"] = 0 + if last_release_version: + project["version"] = last_release_version.replace("v", "") + languages = get_languagages(gh_api, GITHUB_API_TOKEN) + if languages: + project["languages"] = languages +else: + print("Skipping Github updates...") + +# remove first element +projects_data.pop(0) # sort projects alphabetically projects_data = sorted(projects_data, key=lambda x: x['last_update'], reverse=True) +# add a first element to the list that holds the date of the last update +projects_data.insert(0, {"last_update": time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) + " UTC"}) + # Save the updated data back to the projects.json file with open(projects_json_path, "w") as file: json.dump(projects_data, file, indent=2) -print("Updated projects.json") +print("Updated projects.json\nUploading to cdn...") os.system(f"rclone copy {projects_json_path} cdn:cdn/api/projects/")