Skip to content

Commit db1ad07

Browse files
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 <[email protected]>
1 parent e34fda7 commit db1ad07

File tree

7 files changed

+52
-2
lines changed

7 files changed

+52
-2
lines changed

scripts/generate-build-metadata.bash

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ model=$(jq \
4747
release_url: $release_url,
4848
spack_packages: $spack_packages_version,
4949
spack_config: $spack_config_version,
50+
status: "active",
5051
spack_version: $spack
5152
}' "$json_dir/spack.lock"
5253
)

tests/scripts/generate-build-metadata/valid/build_metadata.json

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"release_url": "http://example.org/releases",
77
"spack_packages": "2023.11.23",
88
"spack_config": "2024.01.01",
9+
"status": "active",
910
"spack_version": {
1011
"version": "0.20.3",
1112
"commit": "6812713cf470b473a607f0de0e8e1cf53f804fb7"

tools/release_provenance/README.md

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
# Save release data to database
3+
`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`.
4+
To save the release data to the database, run the following command:
5+
6+
```
7+
python save_release.py test_release_data.json
8+
```
9+
10+
## Update Model Status
11+
To update the model status, run the following command:
12+
13+
```
14+
python update_model_status.py <spack_hash_of_model> <status>
15+
```
16+
The `status` can be `active`, `retracted`, `eol` or `deleted`.

tools/release_provenance/models.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import os
22
from sqlalchemy import (
3-
DateTime, Text, String, Column, ForeignKey, Table, UniqueConstraint, Integer )
3+
DateTime, Text, String, Column, ForeignKey, Table, UniqueConstraint, Integer, Enum )
44
from sqlalchemy import create_engine
55
from sqlalchemy.ext.declarative import declarative_base
66
from sqlalchemy.orm import relationship, sessionmaker
7+
import enum
78

89
Base = declarative_base()
910

@@ -27,10 +28,17 @@ class ComponentBuild(Base):
2728
install_path = Column(String, nullable=False, unique=True)
2829
model_build = relationship('ModelBuild', secondary="model_component", back_populates='component_build')
2930

31+
class ModelStatusEnum(enum.Enum):
32+
active = "active"
33+
retracted = "retracted"
34+
eol = "eol"
35+
deleted = "deleted"
36+
3037
class ModelBuild(Base):
3138
__tablename__ = "model_build"
32-
39+
3340
spack_hash = Column(String, primary_key=True, index=True)
41+
status = Column(Enum(ModelStatusEnum, name="model_status_type"))
3442
spec = Column(String, nullable=False)
3543
spack_version = Column(String, ForeignKey("spack_version.commit"))
3644
spack_packages = Column(String)

tools/release_provenance/save_release.py

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def get_model_build(model_build_data):
3939
model_build.spec = model_build_data["spec"]
4040
model_build.release_url = model_build_data["release_url"]
4141
model_build.created_at = model_build_data["created_at"]
42+
model_build.status = model_build_data["status"]
4243
session.add(model_build)
4344

4445
return model_build

tools/release_provenance/test_release_data.json

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"release_url": "https://github.com/ACCESS-NRI/ACCESS-OM3/releases",
1919
"spack_packages": "0.20.3",
2020
"spack_config": "0.20.3",
21+
"status": "active",
2122
"spack_version": {
2223
"commit": "6812713cf470b473a607f0de0e8e1cf53f804fb8",
2324
"version": "0.20.3"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import sys
2+
from models import *
3+
4+
def update_model_status(model, status):
5+
try:
6+
session = create_session()
7+
model = session.query(ModelBuild).filter(ModelBuild.spack_hash == model).update({
8+
"status": status
9+
})
10+
session.commit()
11+
print("model status updated successfully")
12+
except Exception as e:
13+
print(e)
14+
session.rollback()
15+
raise
16+
17+
finally:
18+
session.close()
19+
20+
21+
if __name__ == "__main__":
22+
update_model_status(sys.argv[1], sys.argv[2])

0 commit comments

Comments
 (0)