Commit 10921695 authored by Honnip's avatar Honnip Committed by Jan Tojnar
Browse files

gnomeExtensions/update: Split into functions

This will make it easier to reason about the code and test it.

There are no functional or other changes.
parent c235d07e
Loading
Loading
Loading
Loading
+44 −27
Original line number Diff line number Diff line
@@ -291,9 +291,7 @@ def scrape_extensions_index() -> list[dict[str, Any]]:
    return extensions


if __name__ == "__main__":
    logging.basicConfig(level=logging.DEBUG)

def fetch_extensions() -> list[dict[str, Any]]:
    raw_extensions = scrape_extensions_index()

    logging.info(f"Downloaded {len(raw_extensions)} extensions. Processing …")
@@ -304,6 +302,10 @@ if __name__ == "__main__":
            processed_extensions.append(processed_extension)
            logging.debug(f"Processed {num + 1} / {len(raw_extensions)}")

    return processed_extensions


def serialize_extensions(processed_extensions: list[dict[str, Any]]) -> None:
    # We micro-manage a lot of the serialization process to keep the diffs optimal.
    # We generally want most of the attributes of an extension on one line,
    # but then each of its supported versions with metadata on a new line.
@@ -335,15 +337,8 @@ if __name__ == "__main__":
            out.write("\n")
        out.write("]\n")

    logging.info(
        f"Done. Writing results to extensions.json ({len(processed_extensions)} extensions in total)"
    )

    with open(updater_dir_path / "extensions.json", "r") as out:
        # Check that the generated file actually is valid JSON, just to be sure
        json.load(out)

    with open(updater_dir_path / "collisions.json", "w") as out:
def find_collisions() -> dict[PackageName, list[Uuid]]:
    # Find the name collisions only for the last 3 shell versions
    last_3_versions = sorted(
        supported_versions.keys(),
@@ -365,12 +360,34 @@ if __name__ == "__main__":
        k: v for k, v in package_name_registry_filtered.items() if len(v) > 1
    }
    # Convert set to list
        collisions: dict[PackageName, list[Uuid]] = {
            k: list(v) for k, v in package_name_registry_filtered.items()
        }
    return {k: list(v) for k, v in package_name_registry_filtered.items()}


def main() -> None:
    logging.basicConfig(level=logging.DEBUG)

    processed_extensions = fetch_extensions()

    serialize_extensions(processed_extensions)

    logging.info(
        f"Done. Writing results to extensions.json ({len(processed_extensions)} extensions in total)"
    )

    with open(updater_dir_path / "extensions.json", "r") as out:
        # Check that the generated file actually is valid JSON, just to be sure
        json.load(out)

    collisions = find_collisions()

    with open(updater_dir_path / "collisions.json", "w") as out:
        json.dump(collisions, out, indent=2, ensure_ascii=False)
        out.write("\n")

    logging.info(
        "Done. Writing name collisions to collisions.json (please check manually)"
    )


if __name__ == "__main__":
    main()