From db1ad07d516f3f9dbaa13fb3f73d62b6b1ac1057 Mon Sep 17 00:00:00 2001 From: Utkarsh Gupta <53311121+utkarshgupta95@users.noreply.github.com> Date: Tue, 16 Jul 2024 12:02:34 +1000 Subject: [PATCH] added model status field (#108) * added model status field * generate-build-metadata.bash: Added constant `status: "active"` field to model record * Updated test data --------- Co-authored-by: Tommy Gatti --- scripts/generate-build-metadata.bash | 1 + .../valid/build_metadata.json | 1 + tools/release_provenance/README.md | 16 ++++++++++++++ tools/release_provenance/models.py | 12 ++++++++-- tools/release_provenance/save_release.py | 1 + .../release_provenance/test_release_data.json | 1 + .../release_provenance/update_model_status.py | 22 +++++++++++++++++++ 7 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 tools/release_provenance/README.md create mode 100644 tools/release_provenance/update_model_status.py diff --git a/scripts/generate-build-metadata.bash b/scripts/generate-build-metadata.bash index 38f9a81..e1db7ad 100755 --- a/scripts/generate-build-metadata.bash +++ b/scripts/generate-build-metadata.bash @@ -47,6 +47,7 @@ model=$(jq \ release_url: $release_url, spack_packages: $spack_packages_version, spack_config: $spack_config_version, + status: "active", spack_version: $spack }' "$json_dir/spack.lock" ) diff --git a/tests/scripts/generate-build-metadata/valid/build_metadata.json b/tests/scripts/generate-build-metadata/valid/build_metadata.json index 537c3f8..6c6413b 100644 --- a/tests/scripts/generate-build-metadata/valid/build_metadata.json +++ b/tests/scripts/generate-build-metadata/valid/build_metadata.json @@ -6,6 +6,7 @@ "release_url": "http://example.org/releases", "spack_packages": "2023.11.23", "spack_config": "2024.01.01", + "status": "active", "spack_version": { "version": "0.20.3", "commit": "6812713cf470b473a607f0de0e8e1cf53f804fb7" diff --git a/tools/release_provenance/README.md b/tools/release_provenance/README.md new file mode 100644 index 0000000..85ee6fc --- /dev/null +++ b/tools/release_provenance/README.md @@ -0,0 +1,16 @@ + +# Save release data to database +`save_release.py` is used to save release data to the database. It takes a release data JSON file as input in the format described in `test_release_data.json`. +To save the release data to the database, run the following command: + +``` +python save_release.py test_release_data.json +``` + +## Update Model Status +To update the model status, run the following command: + +``` +python update_model_status.py +``` +The `status` can be `active`, `retracted`, `eol` or `deleted`. \ No newline at end of file diff --git a/tools/release_provenance/models.py b/tools/release_provenance/models.py index d030418..548d2be 100644 --- a/tools/release_provenance/models.py +++ b/tools/release_provenance/models.py @@ -1,9 +1,10 @@ import os from sqlalchemy import ( - DateTime, Text, String, Column, ForeignKey, Table, UniqueConstraint, Integer ) + DateTime, Text, String, Column, ForeignKey, Table, UniqueConstraint, Integer, Enum ) from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship, sessionmaker +import enum Base = declarative_base() @@ -27,10 +28,17 @@ class ComponentBuild(Base): install_path = Column(String, nullable=False, unique=True) model_build = relationship('ModelBuild', secondary="model_component", back_populates='component_build') +class ModelStatusEnum(enum.Enum): + active = "active" + retracted = "retracted" + eol = "eol" + deleted = "deleted" + class ModelBuild(Base): __tablename__ = "model_build" - + spack_hash = Column(String, primary_key=True, index=True) + status = Column(Enum(ModelStatusEnum, name="model_status_type")) spec = Column(String, nullable=False) spack_version = Column(String, ForeignKey("spack_version.commit")) spack_packages = Column(String) diff --git a/tools/release_provenance/save_release.py b/tools/release_provenance/save_release.py index 43338ff..b7d4823 100644 --- a/tools/release_provenance/save_release.py +++ b/tools/release_provenance/save_release.py @@ -39,6 +39,7 @@ def get_model_build(model_build_data): model_build.spec = model_build_data["spec"] model_build.release_url = model_build_data["release_url"] model_build.created_at = model_build_data["created_at"] + model_build.status = model_build_data["status"] session.add(model_build) return model_build diff --git a/tools/release_provenance/test_release_data.json b/tools/release_provenance/test_release_data.json index 84599d5..c0512d6 100644 --- a/tools/release_provenance/test_release_data.json +++ b/tools/release_provenance/test_release_data.json @@ -18,6 +18,7 @@ "release_url": "https://github.com/ACCESS-NRI/ACCESS-OM3/releases", "spack_packages": "0.20.3", "spack_config": "0.20.3", + "status": "active", "spack_version": { "commit": "6812713cf470b473a607f0de0e8e1cf53f804fb8", "version": "0.20.3" diff --git a/tools/release_provenance/update_model_status.py b/tools/release_provenance/update_model_status.py new file mode 100644 index 0000000..a6c4790 --- /dev/null +++ b/tools/release_provenance/update_model_status.py @@ -0,0 +1,22 @@ +import sys +from models import * + +def update_model_status(model, status): + try: + session = create_session() + model = session.query(ModelBuild).filter(ModelBuild.spack_hash == model).update({ + "status": status + }) + session.commit() + print("model status updated successfully") + except Exception as e: + print(e) + session.rollback() + raise + + finally: + session.close() + + +if __name__ == "__main__": + update_model_status(sys.argv[1], sys.argv[2]) \ No newline at end of file