Skip to content

Commit

Permalink
Stop using deprecated property names in fairgraph
Browse files Browse the repository at this point in the history
  • Loading branch information
apdavison committed Oct 8, 2024
1 parent 69756e1 commit e8202cf
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 45 deletions.
42 changes: 21 additions & 21 deletions validation_service_api/validation_service/data_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import fairgraph
import fairgraph.openminds.core as omcore
import fairgraph.openminds.computation as omcmp
import fairgraph.openminds.controlledterms as omterms
import fairgraph.openminds.controlled_terms as omterms
import fairgraph.openminds.publications as ompub

from .examples import EXAMPLES
Expand Down Expand Up @@ -537,7 +537,7 @@ def from_kg_query(cls, item, client):
def from_kg_object(cls, model_project, client):
assert model_project.scope is not None
instances = []
for inst_obj in as_list(model_project.versions):
for inst_obj in as_list(model_project.has_versions):
try:
inst_obj = inst_obj.resolve(client, scope=model_project.scope)
assert isinstance(inst_obj, omcore.ModelVersion)
Expand All @@ -564,8 +564,8 @@ def from_kg_object(cls, model_project, client):
data = dict(
id=model_project.uuid,
uri=model_project.id,
name=model_project.name,
alias=model_project.alias,
name=model_project.full_name,
alias=model_project.short_name,
author=[Person.from_kg_object(p, client)
for p in as_list(model_project.developers)],
owner=[Person.from_kg_object(p, client)
Expand Down Expand Up @@ -614,8 +614,8 @@ def to_kg_object(self, client):
study_targets.append(cell_type)

model_project = omcore.Model(
name=self.name,
alias=self.alias,
full_name=self.name,
short_name=self.alias,
description=self.description,
abstraction_level=get_term("ModelAbstractionLevel", self.abstraction_level),
model_scope=get_term("ModelScope", self.model_scope),
Expand All @@ -636,7 +636,7 @@ def to_kg_object(self, client):
instance.to_kg_object(model_project)
for instance in self.instances
]
model_project.versions = model_versions
model_project.has_versions = model_versions
return model_project


Expand Down Expand Up @@ -683,8 +683,8 @@ def from_kg_object(cls, model_project, client):
obj = cls(
id=model_project.uuid,
uri=model_project.id,
name=model_project.name,
alias=model_project.alias,
name=model_project.full_name,
alias=model_project.short_name,
author=[Person.from_kg_object(p, client)
for p in as_list(model_project.developers)],
owner=[Person.from_kg_object(p, client)
Expand Down Expand Up @@ -895,7 +895,7 @@ def from_kg_query(cls, item, user_client, service_client):

@classmethod
def from_kg_object(cls, test_definition, client):
versions = [ver.resolve(client, scope="any") for ver in as_list(test_definition.versions)]
versions = [ver.resolve(client, scope="any") for ver in as_list(test_definition.has_versions)]
instances = [
ValidationTestInstance.from_kg_object(inst, test_definition.uuid, client) for inst in versions
]
Expand Down Expand Up @@ -943,8 +943,8 @@ def from_kg_object(cls, test_definition, client):
obj = cls(
id=test_definition.uuid,
uri=test_definition.id,
name=test_definition.name,
alias=test_definition.alias,
name=test_definition.full_name,
alias=test_definition.short_name,
implementation_status=implementation_status,
private=is_private(test_definition.space),
#custodians=test_definition.custodians,
Expand Down Expand Up @@ -986,8 +986,8 @@ def to_kg_object(self, client):
if self.alias is None:
self.alias = slugify(self.name)
test_definition = omcmp.ValidationTest(
name=self.name,
alias=self.alias,
full_name=self.name,
short_name=self.alias,
custodians=developers,
description=self.description,
developers=developers,
Expand All @@ -1007,7 +1007,7 @@ def to_kg_object(self, client):
instance.to_kg_object(test_definition=self)
for instance in self.instances
]
test_definition.versions = test_versions
test_definition.has_versions = test_versions

return test_definition

Expand Down Expand Up @@ -1045,8 +1045,8 @@ def from_kg_object(cls, test_definition, client):
obj = cls(
id=test_definition.uuid,
uri=test_definition.id,
name=test_definition.name,
alias=test_definition.alias,
name=test_definition.full_name,
alias=test_definition.short_name,
implementation_status=None, # to fix (test_definition.status or ImplementationStatus.proposal.value),
private=is_private(test_definition),
author=[Person.from_kg_object(p, client) for p in as_list(test_definition.developers)],
Expand Down Expand Up @@ -1311,12 +1311,12 @@ def from_kg_object(cls, validation_activity, client):
data_type=data_type,
timestamp=ensure_has_timezone(validation_activity.start_time),
model_id=model.uuid,
model_name=model.name,
model_alias=model.alias,
model_name=model.full_name,
model_alias=model.short_name,
model_version=model_instance.version_identifier,
test_id=test.uuid,
test_name=test.name,
test_alias=test.alias
test_name=test.full_name,
test_alias=test.short_name
)


Expand Down
4 changes: 2 additions & 2 deletions validation_service_api/validation_service/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ def _get_model_instance_by_id(instance_id, kg_client, scope):
)

model_project = Model.list(kg_client, scope=scope, space=model_instance.space,
versions=model_instance)
has_versions=model_instance)
if not model_project:
# we could get an empty response if the model_project has just been
# updated and the KG is not consistent, so we wait and try again
sleep(RETRY_INTERVAL)
model_project = Model.list(kg_client, scope=scope, space=model_instance.space,
versions=model_instance)
has_versions=model_instance)
if not model_project:
# in case of a dangling model instance, where the parent model_project
# has been deleted but the instance wasn't
Expand Down
4 changes: 2 additions & 2 deletions validation_service_api/validation_service/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ def model_alias_exists(alias, client):
model_with_same_alias = omcore.Model.from_alias(alias, client, space=None, scope="any")
if model_with_same_alias:
# need this check because alias query doesn't do exact matching
return model_with_same_alias.alias == alias
return model_with_same_alias.short_name == alias
return False


Expand All @@ -170,7 +170,7 @@ def test_alias_exists(alias, client):
test_with_same_alias = omcmp.ValidationTest.from_alias(alias, client, space=None, scope="any")
if test_with_same_alias:
# need this check because alias query doesn't do exact matching
return test_with_same_alias.alias == alias
return test_with_same_alias.short_name == alias
return False


Expand Down
16 changes: 8 additions & 8 deletions validation_service_api/validation_service/resources/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ async def delete_model(model_id: UUID, token: HTTPAuthorizationCredentials = Dep
detail=f"Access to this model is restricted to members of Collab #{collab_id}",
)
model_project.delete(kg_client)
for model_instance in as_list(model_project.versions):
for model_instance in as_list(model_project.has_versions):
# todo: we should possibly also delete repositories,
# but need to check they're not shared with other instances
model_instance.delete(kg_client)
Expand All @@ -478,7 +478,7 @@ async def get_model_instances(
scope = "any"
model_project = _get_model_by_id_or_alias(model_id, kg_client, scope)
model_instances = []
for inst in as_list(model_project.versions):
for inst in as_list(model_project.has_versions):
try:
model_instance = ModelInstance.from_kg_object(inst, kg_client, model_project.uuid, scope)
except ResolutionFailure:
Expand Down Expand Up @@ -520,7 +520,7 @@ async def get_latest_model_instance_given_model_id(
model_project = _get_model_by_id_or_alias(model_id, kg_client, scope)
model_instances = [
ModelInstance.from_kg_object(inst, kg_client, model_project.uuid, scope)
for inst in as_list(model_project.versions)
for inst in as_list(model_project.has_versions)
]
latest = sorted(model_instances, key=lambda inst: inst["timestamp"])[-1]
return latest
Expand All @@ -538,7 +538,7 @@ async def get_model_instance_given_model_id(
kg_client = get_kg_client_for_user_account(token)
scope = "any"
model_project = _get_model_by_id_or_alias(model_id, kg_client, scope)
for inst in as_list(model_project.versions):
for inst in as_list(model_project.has_versions):
if UUID(inst.uuid) == model_instance_id:
return ModelInstance.from_kg_object(inst, kg_client, model_project.uuid, scope)
raise HTTPException(
Expand Down Expand Up @@ -587,7 +587,7 @@ async def create_model_instance(
)
# otherwise save to KG
model_instance_kg.save(kg_user_client, space=model_project.space, recursive=True)
model_project.versions = as_list(model_project.versions) + [model_instance_kg]
model_project.has_versions = as_list(model_project.has_versions) + [model_instance_kg]
model_project.save(kg_user_client, recursive=False)
return ModelInstance.from_kg_object(model_instance_kg, kg_user_client, model_project.uuid, scope="any")

Expand Down Expand Up @@ -624,7 +624,7 @@ async def update_model_instance(
kg_user_client = get_kg_client_for_user_account(token)
model_instance_kg, retrieved_model_id = _get_model_instance_by_id(model_instance_id, kg_user_client, scope="any")
model_project = _get_model_by_id_or_alias(model_id, kg_user_client, scope="any")
assert model_id == retrieved_model_id or model_id == model_project.alias
assert model_id == retrieved_model_id or model_id == model_project.short_name
return await _update_model_instance(
model_instance_kg, model_project, model_instance_patch, user
)
Expand Down Expand Up @@ -702,7 +702,7 @@ async def delete_model_instance(


async def _delete_model_instance(model_instance_id, model_project, kg_user_client):
model_instances = as_list(model_project.versions)
model_instances = as_list(model_project.has_versions)
n_start = len(model_instances)
for model_instance in model_instances[:]:
# todo: we should possibly also delete child objects (repository, etc.),
Expand All @@ -713,5 +713,5 @@ async def _delete_model_instance(model_instance_id, model_project, kg_user_clien
break
if n_start > 0:
assert len(model_instances) == n_start - 1
model_project.versions = model_instances
model_project.has_versions = model_instances
model_project.save(kg_user_client, recursive=False)
22 changes: 11 additions & 11 deletions validation_service_api/validation_service/resources/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ async def delete_test(test_id: UUID, token: HTTPAuthorizationCredentials = Depen
kg_client = get_kg_client_for_user_account(token)
test_definition = omcmp.ValidationTest.from_uuid(str(test_id), kg_client, scope="in progress")
test_definition.delete(kg_client)
for test_version in as_list(test_definition.versions):
for test_version in as_list(test_definition.has_versions):
# todo: we should possibly also delete repositories,
# but need to check they're not shared with other instances
test_version.delete(kg_client)
Expand All @@ -340,7 +340,7 @@ def get_test_instances(
test_definition = _get_test_by_id_or_alias(test_id, kg_client, scope)
test_instances = [
ValidationTestInstance.from_kg_object(inst, test_definition.uuid, kg_client)
for inst in as_list(test_definition.versions)
for inst in as_list(test_definition.has_versions)
]
if version:
test_instances = [inst for inst in test_instances if inst.version == version]
Expand All @@ -359,7 +359,7 @@ def get_test_instance_from_instance_id(
kg_client = get_kg_client_for_user_account(token)
scope = "any"
inst = _get_test_instance_by_id(test_instance_id, kg_client, scope)
test_definition = omcmp.ValidationTest.list(kg_client, scope=scope, space=inst.space, versions=inst)[0]
test_definition = omcmp.ValidationTest.list(kg_client, scope=scope, space=inst.space, has_versions=inst)[0]
return ValidationTestInstance.from_kg_object(inst, test_definition.uuid, kg_client)


Expand All @@ -377,7 +377,7 @@ def get_latest_test_instance_given_test_id(
test_definition = _get_test_by_id_or_alias(test_id, kg_client, scope)
test_instances = [
ValidationTestInstance.from_kg_object(inst.resolve(kg_client, scope="in progress"), test_definition.uuid, kg_client)
for inst in as_list(test_definition.versions)
for inst in as_list(test_definition.has_versions)
]
if len(test_instances) == 0:
raise HTTPException(
Expand All @@ -401,7 +401,7 @@ def get_test_instance_given_test_id(
kg_client = get_kg_client_for_user_account(token)
scope = "any"
test_definition = _get_test_by_id_or_alias(test_id, kg_client, scope)
for inst in as_list(test_definition.versions):
for inst in as_list(test_definition.has_versions):
if UUID(inst.uuid) == test_instance_id:
return ValidationTestInstance.from_kg_object(inst, test_definition.uuid, kg_client)
raise HTTPException(
Expand Down Expand Up @@ -441,15 +441,15 @@ def create_test_instance(
user = User(token, allow_anonymous=False)
kg_client = get_kg_client_for_user_account(token)
test_definition = _get_test_by_id_or_alias(test_id, kg_client, scope="any")
existing_versions = [obj.resolve(kg_client, scope="any") for obj in as_list(test_definition.versions)]
existing_versions = [obj.resolve(kg_client, scope="any") for obj in as_list(test_definition.has_versions)]
if test_instance.version in (obj.version_identifier for obj in existing_versions):
raise HTTPException(
status_code=status.HTTP_409_CONFLICT,
detail=f"Validation test {test_id} already has a version '{test_instance.version}"
)
test_instance_kg = test_instance.to_kg_object(ValidationTest.from_kg_object(test_definition, kg_client))
test_instance_kg.save(kg_client, recursive=True, space=test_definition.space)
test_definition.versions = as_list(test_definition.versions) + [test_instance_kg]
test_definition.has_versions = as_list(test_definition.has_versions) + [test_instance_kg]
test_definition.save(kg_client, recursive=False)
return ValidationTestInstance.from_kg_object(test_instance_kg, test_definition.uuid, kg_client)

Expand All @@ -470,7 +470,7 @@ def update_test_instance_by_id(
test_instance_kg = _get_test_instance_by_id(test_instance_id, kg_client, scope="any")
test_definition_kg = omcmp.ValidationTest.list(
kg_client, scope="any",
space=test_instance_kg.space, versions=test_instance_kg)[0]
space=test_instance_kg.space, has_versions=test_instance_kg)[0]
test_definition = ValidationTest.from_kg_object(test_definition_kg, kg_client)
return _update_test_instance(test_instance_kg, test_definition, test_instance_patch, kg_client)

Expand Down Expand Up @@ -523,8 +523,8 @@ async def delete_test_instance_by_id(
)
test_definition = omcmp.ValidationTest.list(
kg_client, scope="in progress",
space=test_instance_kg.space, versions=test_instance_kg)[0]
test_definition.versions = [obj for obj in as_list(test_definition.versions) if obj.uuid != test_instance_id]
space=test_instance_kg.space, has_versions=test_instance_kg)[0]
test_definition.has_versions = [obj for obj in as_list(test_definition.has_versions) if obj.uuid != test_instance_id]
test_definition.save(kg_client, recursive=False)
test_instance_kg.delete(kg_client)

Expand All @@ -545,6 +545,6 @@ async def delete_test_instance(
detail="Deleting test instances is restricted to admins",
)
test_definition = _get_test_by_id_or_alias(test_id, kg_client, scope="any")
test_definition.versions = [obj for obj in test_definition.versions if obj.uuid != test_instance_id]
test_definition.has_versions = [obj for obj in test_definition.has_versions if obj.uuid != test_instance_id]
test_definition.save(kg_client, recursive=False)
test_instance_kg.delete(kg_client)
4 changes: 4 additions & 0 deletions validation_service_api/validation_service/tests/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,7 @@ The token should be stored in an environment variable `VF_TEST_TOKEN`.
From the "validation_service_api" subdirectory, run:

$ pytest validation_service/tests

To measure test coverage, run as follows:

$ pytest validation_service/tests --cov=validation_service --cov-report term --cov-report html
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def private_model():
developers=[omcore.Person(given_name="Frodo", family_name="Baggins"),
omcore.Person(given_name="Tom", family_name="Bombadil")],
digital_identifier=None,
versions=None,
has_versions=None,
homepage=None,
how_to_cite=None,
model_scope=omterms.ModelScope.by_name(
Expand Down

0 comments on commit e8202cf

Please sign in to comment.