Skip to content

Commit

Permalink
fix: 🐛 maganing organization table (#53)
Browse files Browse the repository at this point in the history
* feat: added managing organization table

* fix: api for managing org

* fix: api for managing org

* fix: test for managing org

* fix: model classes of managing organization

* style: format
  • Loading branch information
Aydawka authored Mar 19, 2024
1 parent 06ca5bb commit ac7228d
Show file tree
Hide file tree
Showing 7 changed files with 135 additions and 94 deletions.
27 changes: 17 additions & 10 deletions apis/dataset_metadata/dataset_managing_organization.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@
dataset_managing_organization = api.model(
"DatasetManagingOrganization",
{
"managing_organization_name": fields.String(required=True),
"managing_organization_ror_id": fields.String(required=True),
"name": fields.String(required=True),
"identifier": fields.String(required=True),
"identifier_scheme": fields.String(required=True),
"identifier_scheme_uri": fields.String(required=True),
},
)

Expand All @@ -28,7 +30,7 @@ class DatasetManagingOrganization(Resource):
def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument
"""Get dataset publisher metadata"""
dataset_ = model.Dataset.query.get(dataset_id)
managing_organization_ = dataset_.dataset_other
managing_organization_ = dataset_.dataset_managing_organization
return managing_organization_.to_dict(), 200

@api.doc("update organization")
Expand All @@ -46,12 +48,17 @@ def put(self, study_id: int, dataset_id: int):
"type": "object",
"additionalProperties": False,
"properties": {
"managing_organization_name": {"type": "string", "minLength": 1},
"managing_organization_ror_id": {
"type": "string",
},
"name": {"type": "string", "minLength": 1},
"identifier": {"type": "string"},
"identifier_scheme": {"type": "string"},
"identifier_scheme_uri": {"type": "string"},
},
"required": ["managing_organization_name", "managing_organization_ror_id"],
"required": [
"name",
"identifier",
"identifier_scheme",
"identifier_scheme_uri",
],
}
try:
validate(instance=request.json, schema=schema)
Expand All @@ -60,7 +67,7 @@ def put(self, study_id: int, dataset_id: int):

data = request.json
dataset_ = model.Dataset.query.get(dataset_id)
dataset_.dataset_other.update(data)
dataset_.dataset_managing_organization.update(data)

model.db.session.commit()
return dataset_.dataset_other.to_dict(), 200
return dataset_.dataset_managing_organization.to_dict(), 200
2 changes: 2 additions & 0 deletions model/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from .dataset_metadata.dataset_description import DatasetDescription
from .dataset_metadata.dataset_funder import DatasetFunder
from .dataset_metadata.dataset_healthsheet import DatasetHealthsheet
from .dataset_metadata.dataset_managing_organization import DatasetManagingOrganization
from .dataset_metadata.dataset_other import DatasetOther
from .dataset_metadata.dataset_rights import DatasetRights
from .dataset_metadata.dataset_subject import DatasetSubject
Expand Down Expand Up @@ -60,6 +61,7 @@
"DatasetContributor",
"StudyContributor",
"DatasetOther",
"DatasetManagingOrganization",
"DatasetAccess",
"DatasetConsent",
"DatasetHealthsheet",
Expand Down
9 changes: 8 additions & 1 deletion model/dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ def __init__(self, study):
self.dataset_consent = model.DatasetConsent(self)
self.dataset_healthsheet = model.DatasetHealthsheet(self)
self.dataset_other = model.DatasetOther(self)
self.dataset_managing_organization = model.DatasetManagingOrganization(self)

self.dataset_title.append(model.DatasetTitle(self))
self.dataset_description.append(model.DatasetDescription(self))
Expand Down Expand Up @@ -94,6 +95,12 @@ def __init__(self, study):
dataset_other = db.relationship(
"DatasetOther", back_populates="dataset", uselist=False, cascade="all, delete"
)
dataset_managing_organization = db.relationship(
"DatasetManagingOrganization",
back_populates="dataset",
uselist=False,
cascade="all, delete",
)
dataset_related_identifier = db.relationship(
"DatasetRelatedIdentifier", back_populates="dataset", cascade="all, delete"
)
Expand Down Expand Up @@ -131,7 +138,7 @@ def to_dict_dataset_metadata(self):
if not i.creator
],
"about": self.dataset_other.to_dict_metadata(),
"managing_organization": self.dataset_other.to_dict_managing_organization(), # type: ignore
"managing_organization": self.dataset_managing_organization.to_dict_metadata(), # type: ignore
"access": self.dataset_access.to_dict_metadata(),
"consent": self.dataset_consent.to_dict_metadata(),
"dates": [i.to_dict_metadata() for i in self.dataset_date], # type: ignore
Expand Down
52 changes: 52 additions & 0 deletions model/dataset_metadata/dataset_managing_organization.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
from ..db import db


class DatasetManagingOrganization(db.Model): # type: ignore
def __init__(self, dataset):
self.dataset = dataset
self.name = ""
self.identifier = ""
self.identifier_scheme = ""
self.identifier_scheme_uri = ""

__tablename__ = "dataset_managing_organization"

name = db.Column(db.String, nullable=False)
identifier = db.Column(db.String, nullable=False)
identifier_scheme = db.Column(db.String, nullable=False)
identifier_scheme_uri = db.Column(db.String, nullable=False)

dataset_id = db.Column(
db.CHAR(36), db.ForeignKey("dataset.id"), primary_key=True, nullable=False
)
dataset = db.relationship("Dataset", back_populates="dataset_managing_organization")

def to_dict(self):
return {
"name": self.name,
"identifier": self.identifier,
"identifier_scheme": self.identifier_scheme,
"identifier_scheme_uri": self.identifier_scheme_uri,
}

def to_dict_metadata(self):
return {
"name": self.name,
"identifier": self.identifier,
}

@staticmethod
def from_data(dataset, data: dict):
dataset_other = DatasetManagingOrganization(dataset)
dataset_other.update(data)
return dataset_other

def update(self, data: dict):
if "name" in data:
self.name = data["name"]
if "identifier" in data:
self.identifier = data["identifier"]
if "identifier_scheme" in data:
self.identifier_scheme = data["identifier_scheme"]
if "identifier_scheme_uri" in data:
self.identifier_scheme_uri = data["identifier_scheme_uri"]
15 changes: 0 additions & 15 deletions model/dataset_metadata/dataset_other.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ def __init__(self, dataset):
self.dataset = dataset
self.resource_type = ""
self.language = None
self.managing_organization_name = ""
self.managing_organization_ror_id = ""
self.size = ""
self.format = ""
self.standards_followed = ""
Expand All @@ -20,8 +18,6 @@ def __init__(self, dataset):

resource_type = db.Column(db.String, nullable=False)
language = db.Column(db.String, nullable=True)
managing_organization_name = db.Column(db.String, nullable=False)
managing_organization_ror_id = db.Column(db.String, nullable=False)
size = db.Column(ARRAY(String), nullable=False)
format = db.Column(ARRAY(String), nullable=False)
standards_followed = db.Column(db.String, nullable=False)
Expand All @@ -35,8 +31,6 @@ def __init__(self, dataset):
def to_dict(self):
return {
"language": self.language,
"managing_organization_name": self.managing_organization_name,
"managing_organization_ror_id": self.managing_organization_ror_id,
"standards_followed": self.standards_followed,
"acknowledgement": self.acknowledgement,
"size": self.size,
Expand All @@ -51,11 +45,6 @@ def to_dict_metadata(self):
"resource_type": self.resource_type,
}

def to_dict_managing_organization(self):
return {
"managing_organization_name": self.managing_organization_name,
}

@staticmethod
def from_data(dataset, data: dict):
dataset_other = DatasetOther(dataset)
Expand All @@ -65,10 +54,6 @@ def from_data(dataset, data: dict):
def update(self, data: dict):
if "language" in data:
self.language = data["language"]
if "managing_organization_name" in data:
self.managing_organization_name = data["managing_organization_name"]
if "managing_organization_ror_id" in data:
self.managing_organization_ror_id = data["managing_organization_ror_id"]
if "size" in data:
self.size = data["size"]
if "format" in data:
Expand Down
109 changes: 47 additions & 62 deletions tests/functional/test_study_dataset_metadata_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2866,64 +2866,64 @@ def test_put_dataset_managing_organization_metadata(clients):
response = _logged_in_client.put(
f"/study/{study_id}/dataset/{dataset_id}/metadata/managing-organization",
json={
"managing_organization_name": "Managing Organization Name",
"managing_organization_ror_id": "Managing Organization ROR ID",
"name": "Managing Organization Name",
"identifier": "identifier",
"identifier_scheme": "identifier scheme",
"identifier_scheme_uri": "identifier scheme_uri",
},
)

assert response.status_code == 200
response_data = json.loads(response.data)

assert response_data["managing_organization_name"] == "Managing Organization Name"
assert (
response_data["managing_organization_ror_id"] == "Managing Organization ROR ID"
)
assert response_data["name"] == "Managing Organization Name"
assert response_data["identifier"] == "identifier"
assert response_data["identifier_scheme"] == "identifier scheme"
assert response_data["identifier_scheme_uri"] == "identifier scheme_uri"

admin_response = _admin_client.put(
f"/study/{study_id}/dataset/{dataset_id}/metadata/managing-organization",
json={
"managing_organization_name": "Managing Admin Organization Name",
"managing_organization_ror_id": "Managing Organization ROR ID",
"name": "admin Managing Organization Name",
"identifier": "identifier",
"identifier_scheme": "identifier scheme",
"identifier_scheme_uri": "identifier scheme_uri",
},
)

assert admin_response.status_code == 200
admin_response_data = json.loads(admin_response.data)

assert (
admin_response_data["managing_organization_name"]
== "Managing Admin Organization Name"
)
assert (
admin_response_data["managing_organization_ror_id"]
== "Managing Organization ROR ID"
)
assert admin_response_data["name"] == "admin Managing Organization Name"
assert admin_response_data["identifier"] == "identifier"
assert admin_response_data["identifier_scheme"] == "identifier scheme"
assert admin_response_data["identifier_scheme_uri"] == "identifier scheme_uri"

editor_response = _editor_client.put(
f"/study/{study_id}/dataset/{dataset_id}/metadata/managing-organization",
json={
"managing_organization_name": "Managing Editor Organization Name",
"managing_organization_ror_id": "Managing Organization ROR ID",
"name": "editor Managing Organization Name",
"identifier": "identifier",
"identifier_scheme": "identifier scheme",
"identifier_scheme_uri": "identifier scheme_uri",
},
)

assert editor_response.status_code == 200
editor_response_data = json.loads(editor_response.data)

assert (
editor_response_data["managing_organization_name"]
== "Managing Editor Organization Name"
)
assert (
editor_response_data["managing_organization_ror_id"]
== "Managing Organization ROR ID"
)
assert editor_response_data["name"] == "editor Managing Organization Name"
assert editor_response_data["identifier"] == "identifier"
assert editor_response_data["identifier_scheme"] == "identifier scheme"
assert editor_response_data["identifier_scheme_uri"] == "identifier scheme_uri"

viewer_response = _viewer_client.put(
f"/study/{study_id}/dataset/{dataset_id}/metadata/managing-organization",
json={
"managing_organization_name": "Managing Viewer Organization Name",
"managing_organization_ror_id": "Managing Organization ROR ID",
"name": "editor Managing Organization Name",
"identifier": "identifier",
"identifier_scheme": "identifier scheme",
"identifier_scheme_uri": "identifier scheme_uri",
},
)

Expand Down Expand Up @@ -2967,40 +2967,25 @@ def test_get_dataset_managing_organization_metadata(clients):

# Editor was the last to update the metadata successfully so
# the response should reflect that
assert (
response_data["managing_organization_name"]
== "Managing Editor Organization Name"
)
assert (
response_data["managing_organization_ror_id"] == "Managing Organization ROR ID"
)

assert (
admin_response_data["managing_organization_name"]
== "Managing Editor Organization Name"
)
assert (
admin_response_data["managing_organization_ror_id"]
== "Managing Organization ROR ID"
)

assert (
editor_response_data["managing_organization_name"]
== "Managing Editor Organization Name"
)
assert (
editor_response_data["managing_organization_ror_id"]
== "Managing Organization ROR ID"
)

assert (
viewer_response_data["managing_organization_name"]
== "Managing Editor Organization Name"
)
assert (
viewer_response_data["managing_organization_ror_id"]
== "Managing Organization ROR ID"
)
assert response_data["name"] == "editor Managing Organization Name"
assert response_data["identifier"] == "identifier"
assert response_data["identifier_scheme"] == "identifier scheme"
assert response_data["identifier_scheme_uri"] == "identifier scheme_uri"

assert admin_response_data["name"] == "editor Managing Organization Name"
assert admin_response_data["identifier"] == "identifier"
assert admin_response_data["identifier_scheme"] == "identifier scheme"
assert admin_response_data["identifier_scheme_uri"] == "identifier scheme_uri"

assert editor_response_data["name"] == "editor Managing Organization Name"
assert editor_response_data["identifier"] == "identifier"
assert editor_response_data["identifier_scheme"] == "identifier scheme"
assert editor_response_data["identifier_scheme_uri"] == "identifier scheme_uri"

assert viewer_response_data["name"] == "editor Managing Organization Name"
assert viewer_response_data["identifier"] == "identifier"
assert viewer_response_data["identifier_scheme"] == "identifier scheme"
assert viewer_response_data["identifier_scheme_uri"] == "identifier scheme_uri"


# ------------------- RELATED IDENTIFIER METADATA ------------------- #
Expand Down
15 changes: 9 additions & 6 deletions tests/functional/test_study_version_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -855,9 +855,10 @@ def test_get_version_dataset_metadata(clients):
assert response_data["de_identification"]["type"] == "Level"

assert (
response_data["managing_organization"]["managing_organization_name"]
== "Managing Editor Organization Name"
response_data["managing_organization"]["name"]
== "editor Managing Organization Name"
)
assert response_data["managing_organization"]["identifier"] == "identifier"
assert response_data["identifiers"][0]["identifier"] == "identifier test"
assert response_data["identifiers"][0]["type"] == "ARK"

Expand Down Expand Up @@ -895,9 +896,10 @@ def test_get_version_dataset_metadata(clients):
assert admin_response_data["de_identification"]["direct"] is True
assert admin_response_data["de_identification"]["type"] == "Level"
assert (
admin_response_data["managing_organization"]["managing_organization_name"]
== "Managing Editor Organization Name"
admin_response_data["managing_organization"]["name"]
== "editor Managing Organization Name"
)
assert admin_response_data["managing_organization"]["identifier"] == "identifier"

assert admin_response_data["identifiers"][0]["identifier"] == "identifier test"
assert admin_response_data["identifiers"][0]["type"] == "ARK"
Expand Down Expand Up @@ -938,9 +940,10 @@ def test_get_version_dataset_metadata(clients):
assert editor_response_data["de_identification"]["direct"] is True
assert editor_response_data["de_identification"]["type"] == "Level"
assert (
editor_response_data["managing_organization"]["managing_organization_name"]
== "Managing Editor Organization Name"
editor_response_data["managing_organization"]["name"]
== "editor Managing Organization Name"
)
assert editor_response_data["managing_organization"]["identifier"] == "identifier"

assert editor_response_data["identifiers"][0]["identifier"] == "identifier test"
assert editor_response_data["identifiers"][0]["type"] == "ARK"
Expand Down

0 comments on commit ac7228d

Please sign in to comment.