From 4d2e8403c7a58a627b7430977840c3852524b158 Mon Sep 17 00:00:00 2001 From: aydawka Date: Sat, 14 Oct 2023 19:13:44 -0700 Subject: [PATCH 01/46] chore: reconfigure dataset metadata --- model/dataset_contributor.py | 14 ++++++--- model/dataset_metadata/dataset_access.py | 7 +---- .../dataset_alternate_identifier.py | 13 +++++--- model/dataset_metadata/dataset_consent.py | 7 +---- .../dataset_contributor_affiliation.py | 10 ++++-- model/dataset_metadata/dataset_date.py | 17 ++++++---- .../dataset_de_ident_level.py | 5 +-- model/dataset_metadata/dataset_description.py | 15 ++++++--- model/dataset_metadata/dataset_funder.py | 8 ++++- model/dataset_metadata/dataset_other.py | 12 ++++--- model/dataset_metadata/dataset_readme.py | 5 --- model/dataset_metadata/dataset_record_keys.py | 5 +-- .../dataset_metadata/dataset_related_item.py | 31 ++++++++++++------- .../dataset_related_item_contributor.py | 15 ++++++--- .../dataset_related_item_identifier.py | 21 ++++++++----- .../dataset_related_item_other.py | 9 ++---- .../dataset_related_item_title.py | 15 ++++++--- model/dataset_metadata/dataset_rights.py | 6 +++- model/dataset_metadata/dataset_subject.py | 6 +++- model/dataset_metadata/dataset_title.py | 8 ++++- 20 files changed, 140 insertions(+), 89 deletions(-) diff --git a/model/dataset_contributor.py b/model/dataset_contributor.py index a84bba52..d964e4a2 100644 --- a/model/dataset_contributor.py +++ b/model/dataset_contributor.py @@ -1,4 +1,6 @@ import uuid +import datetime +from datetime import timezone from .db import db @@ -6,17 +8,19 @@ class DatasetContributor(db.Model): # type: ignore def __init__(self): self.id = str(uuid.uuid4()) + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_contributor" id = db.Column(db.CHAR(36), primary_key=True) - first_name = db.Column(db.String, nullable=False) - last_name = db.Column(db.String, nullable=False) - name_type = db.Column(db.String, nullable=False) + name = db.Column(db.String, nullable=False) + name_type = db.Column(db.String, nullable=True) name_identifier = db.Column(db.String, nullable=False) name_identifier_scheme = db.Column(db.String, nullable=False) name_identifier_scheme_uri = db.Column(db.String, nullable=False) creator = db.Column(db.BOOLEAN, nullable=False) - contributor_type = db.Column(db.String, nullable=False) + contributor_type = db.Column(db.String, nullable=True) + affiliations = db.Column(db.String, nullable=False) + created_at = db.Column(db.BigInteger, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_contributors") @@ -35,6 +39,8 @@ def to_dict(self): "name_identifier_scheme_uri": self.name_identifier_scheme_uri, "creator": self.creator, "contributor_type": self.contributor_type, + "created_at": self.created_at, + } @staticmethod diff --git a/model/dataset_metadata/dataset_access.py b/model/dataset_metadata/dataset_access.py index 36f29310..09c40a73 100644 --- a/model/dataset_metadata/dataset_access.py +++ b/model/dataset_metadata/dataset_access.py @@ -1,5 +1,3 @@ -import uuid - from model import Dataset from ..db import db @@ -7,12 +5,10 @@ class DatasetAccess(db.Model): # type: ignore def __init__(self, dataset): - self.id = str(uuid.uuid4()) self.dataset = dataset __tablename__ = "dataset_access" - id = db.Column(db.CHAR(36), primary_key=True) - type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) description = db.Column(db.String, nullable=False) url = db.Column(db.String, nullable=False) url_last_checked = db.Column(db.String, nullable=False) @@ -22,7 +18,6 @@ def __init__(self, dataset): def to_dict(self): return { - "id": self.id, "type": self.type, "description": self.description, "url": self.url, diff --git a/model/dataset_metadata/dataset_alternate_identifier.py b/model/dataset_metadata/dataset_alternate_identifier.py index b8069d41..bb7eca02 100644 --- a/model/dataset_metadata/dataset_alternate_identifier.py +++ b/model/dataset_metadata/dataset_alternate_identifier.py @@ -1,5 +1,6 @@ import uuid - +import datetime +from datetime import timezone from ..db import db @@ -7,11 +8,13 @@ class DatasetAlternateIdentifier(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_alternate_identifier" id = db.Column(db.CHAR(36), primary_key=True) identifier = db.Column(db.String, nullable=False) - identifier_type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) + created_at = db.Column(db.BigInteger, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_alternate_identifier") @@ -20,7 +23,9 @@ def to_dict(self): return { "id": self.id, "identifier": self.identifier, - "identifier_type": self.identifier_type, + "type": self.type, + "created_at": self.created_at, + } @staticmethod @@ -31,4 +36,4 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.identifier = data["identifier"] - self.identifier_type = data["identifier_type"] + self.type = data["type"] diff --git a/model/dataset_metadata/dataset_consent.py b/model/dataset_metadata/dataset_consent.py index 69d1e5ce..87178495 100644 --- a/model/dataset_metadata/dataset_consent.py +++ b/model/dataset_metadata/dataset_consent.py @@ -1,17 +1,13 @@ -import uuid - from ..db import db class DatasetConsent(db.Model): # type: ignore def __init__(self, dataset): self.dataset = dataset - self.id = str(uuid.uuid4()) __tablename__ = "dataset_consent" - id = db.Column(db.CHAR(36), primary_key=True) - type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) noncommercial = db.Column(db.BOOLEAN, nullable=False) geog_restrict = db.Column(db.BOOLEAN, nullable=False) research_type = db.Column(db.BOOLEAN, nullable=False) @@ -24,7 +20,6 @@ def __init__(self, dataset): def to_dict(self): return { - "id": self.id, "type": self.type, "noncommercial": self.noncommercial, "geog_restrict": self.geog_restrict, diff --git a/model/dataset_metadata/dataset_contributor_affiliation.py b/model/dataset_metadata/dataset_contributor_affiliation.py index dec9a7c6..e7931857 100644 --- a/model/dataset_metadata/dataset_contributor_affiliation.py +++ b/model/dataset_metadata/dataset_contributor_affiliation.py @@ -1,5 +1,6 @@ import uuid - +import datetime +from datetime import timezone from ..db import db @@ -7,16 +8,19 @@ class DatasetContributorAffiliation(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_contributor_affiliation" id = db.Column(db.CHAR(36), primary_key=True) identifier = db.Column(db.String, nullable=False) identifier_scheme = db.Column(db.String, nullable=False) identifier_scheme_uri = db.Column(db.String, nullable=False) + created_at = db.Column(db.BigInteger, nullable=False) + dataset_contributors = db.relationship( "DatasetContributor", back_populates="dataset_contributor_affiliation" ) - dataset_contributor_id = db.Column( + contributor_id = db.Column( db.String, db.ForeignKey("dataset_contributor.id"), nullable=False ) @@ -26,6 +30,8 @@ def to_dict(self): "identifier": self.identifier, "identifier_scheme": self.identifier_scheme, "identifier_scheme_uri": self.identifier_scheme_uri, + "created_at": self.created_at + } @staticmethod diff --git a/model/dataset_metadata/dataset_date.py b/model/dataset_metadata/dataset_date.py index d8f9a3f3..6ec43cda 100644 --- a/model/dataset_metadata/dataset_date.py +++ b/model/dataset_metadata/dataset_date.py @@ -1,4 +1,6 @@ import uuid +import datetime +from datetime import timezone from ..db import db @@ -7,12 +9,14 @@ class DatasetDate(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_date" id = db.Column(db.CHAR(36), primary_key=True) date = db.Column(db.String, nullable=False) - date_type = db.Column(db.String, nullable=False) - data_information = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) + information = db.Column(db.String, nullable=True) + created_at = db.Column(db.BigInteger, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_date") @@ -21,8 +25,9 @@ def to_dict(self): return { "id": self.id, "date": self.date, - "date_type": self.date_type, - "data_information": self.data_information, + "type": self.type, + "information": self.information, + "created_at": self.created_at } @staticmethod @@ -33,5 +38,5 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.date = data["date"] - self.date_type = data["date_type"] - self.data_information = data["data_information"] + self.type = data["type"] + self.information = data["information"] diff --git a/model/dataset_metadata/dataset_de_ident_level.py b/model/dataset_metadata/dataset_de_ident_level.py index 1f63d2bc..c914b6d3 100644 --- a/model/dataset_metadata/dataset_de_ident_level.py +++ b/model/dataset_metadata/dataset_de_ident_level.py @@ -5,13 +5,11 @@ class DatasetDeIdentLevel(db.Model): # type: ignore def __init__(self, dataset): - self.id = str(uuid.uuid4()) self.dataset = dataset __tablename__ = "dataset_de_ident_level" - id = db.Column(db.CHAR(36), primary_key=True) - type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) direct = db.Column(db.BOOLEAN, nullable=False) hipaa = db.Column(db.BOOLEAN, nullable=False) dates = db.Column(db.BOOLEAN, nullable=False) @@ -24,7 +22,6 @@ def __init__(self, dataset): def to_dict(self): return { - "id": self.id, "type": self.type, "direct": self.direct, "hipaa": self.hipaa, diff --git a/model/dataset_metadata/dataset_description.py b/model/dataset_metadata/dataset_description.py index e07504ec..2d0a6f66 100644 --- a/model/dataset_metadata/dataset_description.py +++ b/model/dataset_metadata/dataset_description.py @@ -1,5 +1,8 @@ import uuid +import datetime +from datetime import timezone + from ..db import db @@ -7,11 +10,13 @@ class DatasetDescription(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_description" id = db.Column(db.CHAR(36), primary_key=True) description = db.Column(db.String, nullable=False) - description_type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) + created_at = db.Column(db.BigInteger, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_description") @@ -19,8 +24,10 @@ def __init__(self, dataset): def to_dict(self): return { "id": self.id, - "description": self.description, - "description_type": self.description_type, + "description_type": self.description, + "type": self.type, + "created_at": self.created_at + } @staticmethod @@ -31,4 +38,4 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.description = data["description"] - self.description_type = data["description_type"] + self.type = data["type"] diff --git a/model/dataset_metadata/dataset_funder.py b/model/dataset_metadata/dataset_funder.py index b4c96a4c..f3a64eee 100644 --- a/model/dataset_metadata/dataset_funder.py +++ b/model/dataset_metadata/dataset_funder.py @@ -1,4 +1,6 @@ import uuid +import datetime +from datetime import timezone from ..db import db @@ -7,16 +9,18 @@ class DatasetFunder(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_funder" id = db.Column(db.CHAR(36), primary_key=True) name = db.Column(db.String, nullable=False) identifier = db.Column(db.String, nullable=False) - identifier_type = db.Column(db.String, nullable=False) + identifier_type = db.Column(db.String, nullable=True) identifier_scheme_uri = db.Column(db.String, nullable=False) award_number = db.Column(db.String, nullable=False) award_uri = db.Column(db.String, nullable=False) award_title = db.Column(db.String, nullable=False) + created_at = db.Column(db.BigInteger, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_funder") @@ -31,6 +35,8 @@ def to_dict(self): "award_number": self.award_number, "award_uri": self.award_uri, "award_title": self.award_title, + "created_at": self.created_at + } @staticmethod diff --git a/model/dataset_metadata/dataset_other.py b/model/dataset_metadata/dataset_other.py index baafeba5..41a10a16 100644 --- a/model/dataset_metadata/dataset_other.py +++ b/model/dataset_metadata/dataset_other.py @@ -8,31 +8,32 @@ class DatasetOther(db.Model): # type: ignore def __init__(self, dataset): - self.id = str(uuid.uuid4()) self.dataset = dataset __tablename__ = "dataset_other" - id = db.Column(db.CHAR(36), primary_key=True) - language = db.Column(db.String, nullable=False) + 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) standards_followed = db.Column(db.String, nullable=False) acknowledgement = db.Column(db.String, nullable=False) + publisher = db.Column(db.String, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_other") def to_dict(self): return { - "id": self.id, "language": self.language, "managing_organization_name": self.managing_organization_name, "managing_organization_ror_id": self.managing_organization_ror_id, "standards_followed": self.managing_organization_ror_id, "acknowledgement": self.acknowledgement, "size": self.size, + "publisher": self.publisher, + "resource_type": self.resource_type, } @staticmethod @@ -48,3 +49,6 @@ def update(self, data: dict): self.size = data["size"] self.acknowledgement = data["acknowledgement"] self.standards_followed = data["standards_followed"] + self.publisher = data["publisher"] + self.resource_type = data["resource_type"] + diff --git a/model/dataset_metadata/dataset_readme.py b/model/dataset_metadata/dataset_readme.py index 889d73d2..09caa239 100644 --- a/model/dataset_metadata/dataset_readme.py +++ b/model/dataset_metadata/dataset_readme.py @@ -1,15 +1,11 @@ -import uuid - from ..db import db class DatasetReadme(db.Model): # type: ignore def __init__(self, dataset): - self.id = str(uuid.uuid4()) self.dataset = dataset __tablename__ = "dataset_readme" - id = db.Column(db.CHAR(36), primary_key=True) content = db.Column(db.String, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) @@ -17,7 +13,6 @@ def __init__(self, dataset): def to_dict(self): return { - "id": self.id, "content": self.content, } diff --git a/model/dataset_metadata/dataset_record_keys.py b/model/dataset_metadata/dataset_record_keys.py index 0b48818f..d77d2690 100644 --- a/model/dataset_metadata/dataset_record_keys.py +++ b/model/dataset_metadata/dataset_record_keys.py @@ -5,12 +5,10 @@ class DatasetRecordKeys(db.Model): # type: ignore def __init__(self, dataset): - self.id = str(uuid.uuid4()) self.dataset = dataset __tablename__ = "dataset_record_keys" - id = db.Column(db.CHAR(36), primary_key=True) - key_type = db.Column(db.String, nullable=False) + key_type = db.Column(db.String, nullable=True) key_details = db.Column(db.String, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) @@ -18,7 +16,6 @@ def __init__(self, dataset): def to_dict(self): return { - "id": self.id, "key_type": self.key_type, "key_details": self.key_details, } diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 477c1ab5..361dab89 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -1,4 +1,6 @@ import uuid +import datetime +from datetime import timezone from ..db import db @@ -7,25 +9,30 @@ class DatasetRelatedItem(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_related_item" + id = db.Column(db.CHAR(36), primary_key=True) - type = db.Column(db.String, nullable=False) - relation_type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) + relation_type = db.Column(db.String, nullable=True) + created_at = db.Column(db.BigInteger, nullable=False) + dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) - dataset = db.relationship("Dataset", back_populates="dataset_related_item") - dataset_related_item_contributor = db.relationship( - "DatasetRelatedItemContributor", back_populates="dataset_related_item" + dataset = db.relationship("Dataset", back_populates="related_item") + + related_item_contributor = db.relationship( + "DatasetRelatedItemContributor", back_populates="related_item" ) - dataset_related_item_identifier = db.relationship( - "DatasetRelatedItemIdentifier", back_populates="dataset_related_item" + related_item_identifier = db.relationship( + "DatasetRelatedItemIdentifier", back_populates="related_item" ) - dataset_related_item_other = db.relationship( - "DatasetRelatedItemOther", back_populates="dataset_related_item" + related_item_other = db.relationship( + "DatasetRelatedItemOther", back_populates="related_item" ) - dataset_related_item_title = db.relationship( - "DatasetRelatedItemTitle", back_populates="dataset_related_item" + related_item_title = db.relationship( + "DatasetRelatedItemTitle", back_populates="related_item" ) def to_dict(self): @@ -33,6 +40,8 @@ def to_dict(self): "id": self.id, "type": self.type, "relation_type": self.relation_type, + "created_at": self.created_at, + } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_contributor.py b/model/dataset_metadata/dataset_related_item_contributor.py index db3c3ae6..99cd0779 100644 --- a/model/dataset_metadata/dataset_related_item_contributor.py +++ b/model/dataset_metadata/dataset_related_item_contributor.py @@ -1,5 +1,6 @@ import uuid - +import datetime +from datetime import timezone from ..db import db @@ -7,18 +8,20 @@ class DatasetRelatedItemContributor(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_related_item_contributor" id = db.Column(db.CHAR(36), primary_key=True) name = db.Column(db.String, nullable=False) - name_type = db.Column(db.String, nullable=False) + name_type = db.Column(db.String, nullable=True) creator = db.Column(db.BOOLEAN, nullable=False) - contributor_type = db.Column(db.String, nullable=False) + contributor_type = db.Column(db.String, nullable=True) + created_at = db.Column(db.BigInteger, nullable=False) dataset_related_item_id = db.Column( - db.CHAR(36), db.ForeignKey("dataset_related_item.id"), nullable=False + db.CHAR(36), db.ForeignKey("related_item.id"), nullable=False ) - dataset_related_item = db.relationship( + related_item = db.relationship( "DatasetRelatedItem", back_populates="dataset_related_item_contributor" ) @@ -29,6 +32,8 @@ def to_dict(self): "name_type": self.name_type, "creator": self.creator, "contributor_type": self.contributor_type, + "created_at": self.created_at + } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_identifier.py b/model/dataset_metadata/dataset_related_item_identifier.py index 6a854900..d9c03a2f 100644 --- a/model/dataset_metadata/dataset_related_item_identifier.py +++ b/model/dataset_metadata/dataset_related_item_identifier.py @@ -1,25 +1,28 @@ import uuid - +import datetime +from datetime import timezone from ..db import db class DatasetRelatedItemIdentifier(db.Model): # type: ignore def __init__(self): self.id = str(uuid.uuid4()) + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_related_item_identifier" id = db.Column(db.CHAR(36), primary_key=True) identifier = db.Column(db.String, nullable=False) - type = db.Column(db.String, nullable=False) - metadata_scheme = db.Column(db.String, nullable=False) - scheme_uri = db.Column(db.String, nullable=False) - scheme_type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) + metadata_scheme = db.Column(db.String, nullable=True) + scheme_uri = db.Column(db.String, nullable=True) + scheme_type = db.Column(db.String, nullable=True) + created_at = db.Column(db.BigInteger, nullable=False) dataset_related_item_id = db.Column( - db.CHAR(36), db.ForeignKey("dataset_related_item.id"), nullable=False + db.CHAR(36), db.ForeignKey("related_item.id"), nullable=False ) - dataset_related_item = db.relationship( - "DatasetRelatedItem", back_populates="dataset_related_item_identifier" + related_item = db.relationship( + "DatasetRelatedItem", back_populates="related_item_identifier" ) def to_dict(self): @@ -30,6 +33,8 @@ def to_dict(self): "metadata_scheme": self.metadata_scheme, "scheme_uri": self.scheme_uri, "scheme_type": self.scheme_type, + "created_at": self.created_at + } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_other.py b/model/dataset_metadata/dataset_related_item_other.py index aba272d3..b7f1c99f 100644 --- a/model/dataset_metadata/dataset_related_item_other.py +++ b/model/dataset_metadata/dataset_related_item_other.py @@ -1,20 +1,16 @@ -import uuid - from ..db import db class DatasetRelatedItemOther(db.Model): # type: ignore def __init__(self, dataset): - self.id = str(uuid.uuid4()) self.dataset = dataset __tablename__ = "dataset_related_item_other" - id = db.Column(db.CHAR(36), primary_key=True) - publication_year = db.Column(db.String, nullable=False) + publication_year = db.Column(db.String, nullable=True) volume = db.Column(db.String, nullable=False) issue = db.Column(db.String, nullable=False) number_value = db.Column(db.String, nullable=False) - number_type = db.Column(db.String, nullable=False) + number_type = db.Column(db.String, nullable=True) first_page = db.Column(db.String, nullable=False) last_page = db.Column(db.BOOLEAN, nullable=False) publisher = db.Column(db.String, nullable=False) @@ -29,7 +25,6 @@ def __init__(self, dataset): def to_dict(self): return { - "id": self.id, "publication_year": self.publication_year, "volume": self.volume, "issue": self.issue, diff --git a/model/dataset_metadata/dataset_related_item_title.py b/model/dataset_metadata/dataset_related_item_title.py index a2355673..5a2097f1 100644 --- a/model/dataset_metadata/dataset_related_item_title.py +++ b/model/dataset_metadata/dataset_related_item_title.py @@ -1,5 +1,6 @@ import uuid - +import datetime +from datetime import timezone from ..db import db @@ -7,17 +8,19 @@ class DatasetRelatedItemTitle(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_related_item_title" id = db.Column(db.CHAR(36), primary_key=True) - type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) title = db.Column(db.String, nullable=False) + created_at = db.Column(db.BigInteger, nullable=False) dataset_related_item_id = db.Column( - db.CHAR(36), db.ForeignKey("dataset_related_item.id"), nullable=False + db.CHAR(36), db.ForeignKey("related_item.id"), nullable=False ) - dataset_related_item = db.relationship( - "DatasetRelatedItem", back_populates="dataset_related_item_title" + related_item = db.relationship( + "DatasetRelatedItem", back_populates="related_item_title" ) def to_dict(self): @@ -25,6 +28,8 @@ def to_dict(self): "id": self.id, "type": self.type, "title": self.title, + "created_at": self.created_at + } @staticmethod diff --git a/model/dataset_metadata/dataset_rights.py b/model/dataset_metadata/dataset_rights.py index 2b494c6d..8d8ff072 100644 --- a/model/dataset_metadata/dataset_rights.py +++ b/model/dataset_metadata/dataset_rights.py @@ -1,5 +1,6 @@ import uuid - +import datetime +from datetime import timezone from ..db import db @@ -7,6 +8,7 @@ class DatasetRights(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_rights" id = db.Column(db.CHAR(36), primary_key=True) @@ -15,6 +17,7 @@ def __init__(self, dataset): uri = db.Column(db.String, nullable=False) identifier = db.Column(db.String, nullable=False) identifier_scheme = db.Column(db.String, nullable=False) + created_at = db.Column(db.BigInteger, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_rights") @@ -26,6 +29,7 @@ def to_dict(self): "uri": self.uri, "identifier": self.identifier, "identifier_scheme": self.identifier_scheme, + "created_at": self.created_at } @staticmethod diff --git a/model/dataset_metadata/dataset_subject.py b/model/dataset_metadata/dataset_subject.py index 12d7d24d..85c0f84c 100644 --- a/model/dataset_metadata/dataset_subject.py +++ b/model/dataset_metadata/dataset_subject.py @@ -1,5 +1,6 @@ import uuid - +import datetime +from datetime import timezone from ..db import db @@ -7,6 +8,7 @@ class DatasetSubject(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_subject" id = db.Column(db.CHAR(36), primary_key=True) @@ -16,6 +18,7 @@ def __init__(self, dataset): scheme_uri = db.Column(db.String, nullable=False) value_uri = db.Column(db.String, nullable=False) classification_code = db.Column(db.String, nullable=False) + created_at = db.Column(db.BigInteger, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_subject") @@ -28,6 +31,7 @@ def to_dict(self): "scheme_uri": self.scheme_uri, "value_uri": self.value_uri, "classification_code": self.classification_code, + "created_at": self.created_at } @staticmethod diff --git a/model/dataset_metadata/dataset_title.py b/model/dataset_metadata/dataset_title.py index b120cbcc..9c1712ec 100644 --- a/model/dataset_metadata/dataset_title.py +++ b/model/dataset_metadata/dataset_title.py @@ -1,4 +1,6 @@ import uuid +import datetime +from datetime import timezone from ..db import db @@ -7,11 +9,13 @@ class DatasetTitle(db.Model): # type: ignore def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_title" id = db.Column(db.CHAR(36), primary_key=True) title = db.Column(db.String, nullable=False) - type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) + created_at = db.Column(db.BigInteger, nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_title") dataset_id = db.Column(db.String, db.ForeignKey("dataset.id"), nullable=False) @@ -21,6 +25,8 @@ def to_dict(self): "id": self.id, "title": self.title, "type": self.type, + "created_at": self.created_at, + } @staticmethod From 43b7ef56e86148554dcc77fc90b1821e715690cf Mon Sep 17 00:00:00 2001 From: aydawka Date: Sat, 14 Oct 2023 19:41:19 -0700 Subject: [PATCH 02/46] chore: remove ids from 1-to-1 study metadata --- .../32e5ff331a78_add_token_blacklist.py | 26 ---------- .../639a13561089_delete_token_blacklist.py | 26 ---------- ...d33834_remove_column_in_token_blacklist.py | 26 ---------- .../versions/e6cc254fc968_token_blacklist.py | 26 ---------- model/dataset_contributor.py | 3 +- model/notification.py | 47 +++++++++++++++++++ model/study_metadata/study_description.py | 5 -- model/study_metadata/study_design.py | 9 +--- model/study_metadata/study_eligibility.py | 5 -- model/study_metadata/study_ipdsharing.py | 7 +-- model/study_metadata/study_other.py | 5 -- .../study_sponsors_collaborators.py | 7 +-- model/study_metadata/study_status.py | 5 -- model/token_blacklist.py | 3 ++ 14 files changed, 55 insertions(+), 145 deletions(-) delete mode 100644 alembic/versions/32e5ff331a78_add_token_blacklist.py delete mode 100644 alembic/versions/639a13561089_delete_token_blacklist.py delete mode 100644 alembic/versions/6d4271d33834_remove_column_in_token_blacklist.py delete mode 100644 alembic/versions/e6cc254fc968_token_blacklist.py create mode 100644 model/notification.py diff --git a/alembic/versions/32e5ff331a78_add_token_blacklist.py b/alembic/versions/32e5ff331a78_add_token_blacklist.py deleted file mode 100644 index 0ff84efd..00000000 --- a/alembic/versions/32e5ff331a78_add_token_blacklist.py +++ /dev/null @@ -1,26 +0,0 @@ -"""add token_blacklist - -Revision ID: 32e5ff331a78 -Revises: 639a13561089 -Create Date: 2023-10-09 11:10:06.568148 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = "32e5ff331a78" -down_revision: Union[str, None] = "639a13561089" -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade(): - op.add_column("token_blacklist", sa.Column("user_id", sa.String, nullable=True)) - - -def downgrade() -> None: - pass diff --git a/alembic/versions/639a13561089_delete_token_blacklist.py b/alembic/versions/639a13561089_delete_token_blacklist.py deleted file mode 100644 index e964c05b..00000000 --- a/alembic/versions/639a13561089_delete_token_blacklist.py +++ /dev/null @@ -1,26 +0,0 @@ -"""delete token_blacklist - -Revision ID: 639a13561089 -Revises: e6cc254fc968 -Create Date: 2023-10-08 23:14:48.882104 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = "639a13561089" -down_revision: Union[str, None] = "e6cc254fc968" -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - op.drop_column("token_blacklist", "user_id") - - -def downgrade() -> None: - pass diff --git a/alembic/versions/6d4271d33834_remove_column_in_token_blacklist.py b/alembic/versions/6d4271d33834_remove_column_in_token_blacklist.py deleted file mode 100644 index f783a7b9..00000000 --- a/alembic/versions/6d4271d33834_remove_column_in_token_blacklist.py +++ /dev/null @@ -1,26 +0,0 @@ -"""remove column in token_blacklist - -Revision ID: 6d4271d33834 -Revises: 32e5ff331a78 -Create Date: 2023-10-09 11:11:58.478289 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = "6d4271d33834" -down_revision: Union[str, None] = "32e5ff331a78" -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - op.drop_column("token_blacklist", "user_id") - - -def downgrade() -> None: - pass diff --git a/alembic/versions/e6cc254fc968_token_blacklist.py b/alembic/versions/e6cc254fc968_token_blacklist.py deleted file mode 100644 index 4fa8dcd1..00000000 --- a/alembic/versions/e6cc254fc968_token_blacklist.py +++ /dev/null @@ -1,26 +0,0 @@ -"""token_blacklist - -Revision ID: e6cc254fc968 -Revises: 3e48c46694c8 -Create Date: 2023-10-06 19:40:38.517323 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = "e6cc254fc968" -down_revision: Union[str, None] = None -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade(): - op.add_column("token_blacklist", sa.Column("user_id", sa.String, nullable=True)) - - -def downgrade() -> None: - pass diff --git a/model/dataset_contributor.py b/model/dataset_contributor.py index d964e4a2..468298c5 100644 --- a/model/dataset_contributor.py +++ b/model/dataset_contributor.py @@ -1,5 +1,5 @@ -import uuid import datetime +import uuid from datetime import timezone from .db import db @@ -40,7 +40,6 @@ def to_dict(self): "creator": self.creator, "contributor_type": self.contributor_type, "created_at": self.created_at, - } @staticmethod diff --git a/model/notification.py b/model/notification.py new file mode 100644 index 00000000..b123c188 --- /dev/null +++ b/model/notification.py @@ -0,0 +1,47 @@ +import datetime +import uuid +from datetime import timezone + +from .db import db + + +class Notification(db.Model): # type: ignore + def __init__(self): + self.id = str(uuid.uuid4()) + self.created_at = datetime.datetime.now(timezone.utc).timestamp() + + __tablename__ = "notification" + id = db.Column(db.CHAR(36), primary_key=True) + title = db.Column(db.String, nullable=True) + message = db.Column(db.String, nullable=True) + type = db.Column(db.String, nullable=True) + target = db.Column(db.String, nullable=True) + read = db.Column(db.BOOLEAN, nullable=True) + created_at = db.Column(db.BigInteger, nullable=False) + + user_id = db.Column(db.CHAR(36), db.ForeignKey("user.id"), nullable=False) + user = db.relationship("User", back_populates="notification") + + def to_dict(self): + return { + "id": self.id, + "title": self.title, + "message": self.message, + "type": self.type, + "target": self.target, + "read": self.read, + "created_at": self.created_at, + } + + @staticmethod + def from_data(data: dict): + user = Notification() + user.update(data) + return user + + def update(self, data: dict): + self.title = data["title"] + self.message = data["message"] + self.type = data["type"] + self.target = data["target"] + self.read = data["read"] diff --git a/model/study_metadata/study_description.py b/model/study_metadata/study_description.py index a39f72e0..96d0ff88 100644 --- a/model/study_metadata/study_description.py +++ b/model/study_metadata/study_description.py @@ -1,5 +1,3 @@ -import uuid - from model import Study from ..db import db @@ -9,14 +7,12 @@ class StudyDescription(db.Model): # type: ignore """A study is a collection of datasets and participants""" def __init__(self, study: Study): - self.id = str(uuid.uuid4()) self.study = study self.brief_summary = "" self.detailed_description = "" __tablename__ = "study_description" - id = db.Column(db.CHAR(36), primary_key=True) brief_summary = db.Column(db.String, nullable=False) detailed_description = db.Column(db.String, nullable=False) @@ -28,7 +24,6 @@ def __init__(self, study: Study): def to_dict(self): """Converts the study to a dictionary""" return { - "id": self.id, "brief_summary": self.brief_summary, "detailed_description": self.detailed_description, } diff --git a/model/study_metadata/study_design.py b/model/study_metadata/study_design.py index d09eb5e2..f05aa15e 100644 --- a/model/study_metadata/study_design.py +++ b/model/study_metadata/study_design.py @@ -1,5 +1,3 @@ -import uuid - from sqlalchemy import String from sqlalchemy.dialects.postgresql import ARRAY @@ -12,11 +10,10 @@ class StudyDesign(db.Model): # type: ignore """A study is a collection of datasets and participants""" def __init__(self, study: Study): - self.id = str(uuid.uuid4()) self.study = study self.design_allocation = "" - self.study_type = "" + self.study_type = None self.design_intervention_model = "" self.design_intervention_model_description = "" self.design_primary_purpose = "" @@ -25,7 +22,7 @@ def __init__(self, study: Study): self.design_who_masked_list = [] self.phase_list = [] self.enrollment_count = 0 - self.enrollment_type = "" + self.enrollment_type = None self.number_arms = 0 self.design_observational_model_list = [] self.design_time_perspective_list = [] @@ -36,7 +33,6 @@ def __init__(self, study: Study): __tablename__ = "study_design" - id = db.Column(db.CHAR(36), primary_key=True) design_allocation = db.Column(db.String, nullable=True) study_type = db.Column(db.String, nullable=False) design_intervention_model = db.Column(db.String, nullable=True) @@ -64,7 +60,6 @@ def __init__(self, study: Study): def to_dict(self): """Converts the study to a dictionary""" return { - "id": self.id, "design_allocation": self.design_allocation, "study_type": self.study_type, "design_intervention_model": self.design_intervention_model, diff --git a/model/study_metadata/study_eligibility.py b/model/study_metadata/study_eligibility.py index 886be8e8..fc52b855 100644 --- a/model/study_metadata/study_eligibility.py +++ b/model/study_metadata/study_eligibility.py @@ -1,5 +1,3 @@ -import uuid - from sqlalchemy import String from sqlalchemy.dialects.postgresql import ARRAY @@ -12,7 +10,6 @@ class StudyEligibility(db.Model): # type: ignore """A study is a collection of datasets and participants""" def __init__(self, study: Study): - self.id = str(uuid.uuid4()) self.study = study self.gender = "" self.gender_based = "" @@ -29,7 +26,6 @@ def __init__(self, study: Study): __tablename__ = "study_eligibility" - id = db.Column(db.CHAR(36), primary_key=True) gender = db.Column(db.String, nullable=False) gender_based = db.Column(db.String, nullable=False) gender_description = db.Column(db.String, nullable=False) @@ -51,7 +47,6 @@ def __init__(self, study: Study): def to_dict(self): """Converts the study to a dictionary""" return { - "id": self.id, "gender": self.gender, "gender_based": self.gender_based, "gender_description": self.gender_description, diff --git a/model/study_metadata/study_ipdsharing.py b/model/study_metadata/study_ipdsharing.py index 21d18ef4..809e74c1 100644 --- a/model/study_metadata/study_ipdsharing.py +++ b/model/study_metadata/study_ipdsharing.py @@ -1,5 +1,3 @@ -import uuid - from sqlalchemy import String from sqlalchemy.dialects.postgresql import ARRAY @@ -12,9 +10,8 @@ class StudyIpdsharing(db.Model): # type: ignore """A study is a collection of datasets and participants""" def __init__(self, study): - self.id = str(uuid.uuid4()) self.study = study - self.ipd_sharing = "" + self.ipd_sharing = None self.ipd_sharing_description = "" self.ipd_sharing_info_type_list = [] self.ipd_sharing_time_frame = "" @@ -23,7 +20,6 @@ def __init__(self, study): __tablename__ = "study_ipdsharing" - id = db.Column(db.CHAR(36), primary_key=True) ipd_sharing = db.Column(db.String, nullable=False) ipd_sharing_description = db.Column(db.String, nullable=False) ipd_sharing_info_type_list = db.Column(ARRAY(String), nullable=False) @@ -39,7 +35,6 @@ def __init__(self, study): def to_dict(self): """Converts the study to a dictionary""" return { - "id": self.id, "ipd_sharing": self.ipd_sharing, "ipd_sharing_description": self.ipd_sharing_description, "ipd_sharing_info_type_list": self.ipd_sharing_info_type_list, diff --git a/model/study_metadata/study_other.py b/model/study_metadata/study_other.py index 4bd272aa..bcae5417 100644 --- a/model/study_metadata/study_other.py +++ b/model/study_metadata/study_other.py @@ -1,5 +1,3 @@ -import uuid - from sqlalchemy import String from sqlalchemy.dialects.postgresql import ARRAY @@ -12,7 +10,6 @@ class StudyOther(db.Model): # type: ignore """A study is a collection of datasets and participants""" def __init__(self, study): - self.id = str(uuid.uuid4()) self.study = study self.oversight_has_dmc = False self.conditions = [] @@ -21,7 +18,6 @@ def __init__(self, study): __tablename__ = "study_other" - id = db.Column(db.CHAR(36), primary_key=True) oversight_has_dmc = db.Column(db.BOOLEAN, nullable=False) conditions = db.Column(ARRAY(String), nullable=False) keywords = db.Column(ARRAY(String), nullable=False) @@ -35,7 +31,6 @@ def __init__(self, study): def to_dict(self): """Converts the study to a dictionary""" return { - "id": self.id, "oversight_has_dmc": self.oversight_has_dmc, "conditions": self.conditions, "keywords": self.keywords, diff --git a/model/study_metadata/study_sponsors_collaborators.py b/model/study_metadata/study_sponsors_collaborators.py index 1ca59401..5a6641d5 100644 --- a/model/study_metadata/study_sponsors_collaborators.py +++ b/model/study_metadata/study_sponsors_collaborators.py @@ -1,5 +1,3 @@ -import uuid - from sqlalchemy import String from sqlalchemy.dialects.postgresql import ARRAY @@ -12,9 +10,8 @@ class StudySponsorsCollaborators(db.Model): # type: ignore """A study is a collection of datasets and participants""" def __init__(self, study): - self.id = str(uuid.uuid4()) self.study = study - self.responsible_party_type = "" + self.responsible_party_type = None self.responsible_party_investigator_name = "" self.responsible_party_investigator_title = "" self.responsible_party_investigator_affiliation = "" @@ -23,7 +20,6 @@ def __init__(self, study): __tablename__ = "study_sponsors_collaborators" - id = db.Column(db.CHAR(36), primary_key=True) responsible_party_type = db.Column(db.String, nullable=False) responsible_party_investigator_name = db.Column(db.String, nullable=False) responsible_party_investigator_title = db.Column(db.String, nullable=False) @@ -39,7 +35,6 @@ def __init__(self, study): def to_dict(self): """Converts the study to a dictionary""" return { - "id": self.id, "responsible_party_type": self.responsible_party_type, "responsible_party_investigator_name": self.responsible_party_investigator_name, "responsible_party_investigator_title": self.responsible_party_investigator_title, diff --git a/model/study_metadata/study_status.py b/model/study_metadata/study_status.py index c2003bb7..40668bb0 100644 --- a/model/study_metadata/study_status.py +++ b/model/study_metadata/study_status.py @@ -1,5 +1,3 @@ -import uuid - from model import Study from ..db import db @@ -9,7 +7,6 @@ class StudyStatus(db.Model): # type: ignore """A study is a collection of datasets and participants""" def __init__(self, study): - self.id = str(uuid.uuid4()) self.study = study self.overall_status = None self.why_stopped = "" @@ -20,7 +17,6 @@ def __init__(self, study): __tablename__ = "study_status" - id = db.Column(db.CHAR(36), primary_key=True) overall_status = db.Column(db.String, nullable=True) why_stopped = db.Column(db.String, nullable=False) start_date = db.Column(db.String, nullable=True) @@ -36,7 +32,6 @@ def __init__(self, study): def to_dict(self): """Converts the study to a dictionary""" return { - "id": self.id, "overall_status": self.overall_status, "why_stopped": self.why_stopped, "start_date": self.start_date, diff --git a/model/token_blacklist.py b/model/token_blacklist.py index 8bb830e0..0181cb4e 100644 --- a/model/token_blacklist.py +++ b/model/token_blacklist.py @@ -6,6 +6,9 @@ class TokenBlacklist(db.Model): # type: ignore jti = db.Column(db.CHAR(36), primary_key=True) exp = db.Column(db.String, nullable=False) + user_id = db.Column(db.CHAR(36), db.ForeignKey("user.id"), nullable=False) + user = db.relationship("User", back_populates="token_blacklist") + def to_dict(self): return { "jti": self.jti, From 16872ffe94dc21358787519875d161c5f0235bde Mon Sep 17 00:00:00 2001 From: aydawka Date: Sat, 14 Oct 2023 19:41:37 -0700 Subject: [PATCH 03/46] style: format --- model/dataset_metadata/dataset_alternate_identifier.py | 4 ++-- model/dataset_metadata/dataset_contributor_affiliation.py | 6 +++--- model/dataset_metadata/dataset_date.py | 4 ++-- model/dataset_metadata/dataset_de_ident_level.py | 2 -- model/dataset_metadata/dataset_description.py | 6 ++---- model/dataset_metadata/dataset_funder.py | 5 ++--- model/dataset_metadata/dataset_other.py | 3 --- model/dataset_metadata/dataset_record_keys.py | 2 -- model/dataset_metadata/dataset_related_item.py | 4 +--- model/dataset_metadata/dataset_related_item_contributor.py | 6 +++--- model/dataset_metadata/dataset_related_item_identifier.py | 6 +++--- model/dataset_metadata/dataset_related_item_title.py | 6 +++--- model/dataset_metadata/dataset_rights.py | 5 +++-- model/dataset_metadata/dataset_subject.py | 5 +++-- model/dataset_metadata/dataset_title.py | 3 +-- 15 files changed, 28 insertions(+), 39 deletions(-) diff --git a/model/dataset_metadata/dataset_alternate_identifier.py b/model/dataset_metadata/dataset_alternate_identifier.py index bb7eca02..e009dcaf 100644 --- a/model/dataset_metadata/dataset_alternate_identifier.py +++ b/model/dataset_metadata/dataset_alternate_identifier.py @@ -1,6 +1,7 @@ -import uuid import datetime +import uuid from datetime import timezone + from ..db import db @@ -25,7 +26,6 @@ def to_dict(self): "identifier": self.identifier, "type": self.type, "created_at": self.created_at, - } @staticmethod diff --git a/model/dataset_metadata/dataset_contributor_affiliation.py b/model/dataset_metadata/dataset_contributor_affiliation.py index e7931857..159c4de3 100644 --- a/model/dataset_metadata/dataset_contributor_affiliation.py +++ b/model/dataset_metadata/dataset_contributor_affiliation.py @@ -1,6 +1,7 @@ -import uuid import datetime +import uuid from datetime import timezone + from ..db import db @@ -30,8 +31,7 @@ def to_dict(self): "identifier": self.identifier, "identifier_scheme": self.identifier_scheme, "identifier_scheme_uri": self.identifier_scheme_uri, - "created_at": self.created_at - + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_date.py b/model/dataset_metadata/dataset_date.py index 6ec43cda..ca9ad4da 100644 --- a/model/dataset_metadata/dataset_date.py +++ b/model/dataset_metadata/dataset_date.py @@ -1,5 +1,5 @@ -import uuid import datetime +import uuid from datetime import timezone from ..db import db @@ -27,7 +27,7 @@ def to_dict(self): "date": self.date, "type": self.type, "information": self.information, - "created_at": self.created_at + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_de_ident_level.py b/model/dataset_metadata/dataset_de_ident_level.py index c914b6d3..f696702d 100644 --- a/model/dataset_metadata/dataset_de_ident_level.py +++ b/model/dataset_metadata/dataset_de_ident_level.py @@ -1,5 +1,3 @@ -import uuid - from ..db import db diff --git a/model/dataset_metadata/dataset_description.py b/model/dataset_metadata/dataset_description.py index 2d0a6f66..11e16f8f 100644 --- a/model/dataset_metadata/dataset_description.py +++ b/model/dataset_metadata/dataset_description.py @@ -1,6 +1,5 @@ -import uuid - import datetime +import uuid from datetime import timezone from ..db import db @@ -26,8 +25,7 @@ def to_dict(self): "id": self.id, "description_type": self.description, "type": self.type, - "created_at": self.created_at - + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_funder.py b/model/dataset_metadata/dataset_funder.py index f3a64eee..87affc42 100644 --- a/model/dataset_metadata/dataset_funder.py +++ b/model/dataset_metadata/dataset_funder.py @@ -1,5 +1,5 @@ -import uuid import datetime +import uuid from datetime import timezone from ..db import db @@ -35,8 +35,7 @@ def to_dict(self): "award_number": self.award_number, "award_uri": self.award_uri, "award_title": self.award_title, - "created_at": self.created_at - + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_other.py b/model/dataset_metadata/dataset_other.py index 41a10a16..e61d5470 100644 --- a/model/dataset_metadata/dataset_other.py +++ b/model/dataset_metadata/dataset_other.py @@ -1,5 +1,3 @@ -import uuid - from sqlalchemy import String from sqlalchemy.dialects.postgresql import ARRAY @@ -51,4 +49,3 @@ def update(self, data: dict): self.standards_followed = data["standards_followed"] self.publisher = data["publisher"] self.resource_type = data["resource_type"] - diff --git a/model/dataset_metadata/dataset_record_keys.py b/model/dataset_metadata/dataset_record_keys.py index d77d2690..3ce9979b 100644 --- a/model/dataset_metadata/dataset_record_keys.py +++ b/model/dataset_metadata/dataset_record_keys.py @@ -1,5 +1,3 @@ -import uuid - from ..db import db diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 361dab89..70e761e9 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -1,5 +1,5 @@ -import uuid import datetime +import uuid from datetime import timezone from ..db import db @@ -18,7 +18,6 @@ def __init__(self, dataset): relation_type = db.Column(db.String, nullable=True) created_at = db.Column(db.BigInteger, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="related_item") @@ -41,7 +40,6 @@ def to_dict(self): "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, - } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_contributor.py b/model/dataset_metadata/dataset_related_item_contributor.py index 99cd0779..90023a7a 100644 --- a/model/dataset_metadata/dataset_related_item_contributor.py +++ b/model/dataset_metadata/dataset_related_item_contributor.py @@ -1,6 +1,7 @@ -import uuid import datetime +import uuid from datetime import timezone + from ..db import db @@ -32,8 +33,7 @@ def to_dict(self): "name_type": self.name_type, "creator": self.creator, "contributor_type": self.contributor_type, - "created_at": self.created_at - + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_identifier.py b/model/dataset_metadata/dataset_related_item_identifier.py index d9c03a2f..6ed7625b 100644 --- a/model/dataset_metadata/dataset_related_item_identifier.py +++ b/model/dataset_metadata/dataset_related_item_identifier.py @@ -1,6 +1,7 @@ -import uuid import datetime +import uuid from datetime import timezone + from ..db import db @@ -33,8 +34,7 @@ def to_dict(self): "metadata_scheme": self.metadata_scheme, "scheme_uri": self.scheme_uri, "scheme_type": self.scheme_type, - "created_at": self.created_at - + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_title.py b/model/dataset_metadata/dataset_related_item_title.py index 5a2097f1..0fdbf7b3 100644 --- a/model/dataset_metadata/dataset_related_item_title.py +++ b/model/dataset_metadata/dataset_related_item_title.py @@ -1,6 +1,7 @@ -import uuid import datetime +import uuid from datetime import timezone + from ..db import db @@ -28,8 +29,7 @@ def to_dict(self): "id": self.id, "type": self.type, "title": self.title, - "created_at": self.created_at - + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_rights.py b/model/dataset_metadata/dataset_rights.py index 8d8ff072..863aad44 100644 --- a/model/dataset_metadata/dataset_rights.py +++ b/model/dataset_metadata/dataset_rights.py @@ -1,6 +1,7 @@ -import uuid import datetime +import uuid from datetime import timezone + from ..db import db @@ -29,7 +30,7 @@ def to_dict(self): "uri": self.uri, "identifier": self.identifier, "identifier_scheme": self.identifier_scheme, - "created_at": self.created_at + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_subject.py b/model/dataset_metadata/dataset_subject.py index 85c0f84c..2d1a1a0c 100644 --- a/model/dataset_metadata/dataset_subject.py +++ b/model/dataset_metadata/dataset_subject.py @@ -1,6 +1,7 @@ -import uuid import datetime +import uuid from datetime import timezone + from ..db import db @@ -31,7 +32,7 @@ def to_dict(self): "scheme_uri": self.scheme_uri, "value_uri": self.value_uri, "classification_code": self.classification_code, - "created_at": self.created_at + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_title.py b/model/dataset_metadata/dataset_title.py index 9c1712ec..1e6d54d9 100644 --- a/model/dataset_metadata/dataset_title.py +++ b/model/dataset_metadata/dataset_title.py @@ -1,5 +1,5 @@ -import uuid import datetime +import uuid from datetime import timezone from ..db import db @@ -26,7 +26,6 @@ def to_dict(self): "title": self.title, "type": self.type, "created_at": self.created_at, - } @staticmethod From cc2c2b032b77aa0839abad7464173a0f01878f0f Mon Sep 17 00:00:00 2001 From: aydawka Date: Sun, 15 Oct 2023 01:05:14 -0700 Subject: [PATCH 04/46] chore: dataset models and endpoints refactored --- Dockerfile | 4 +- apis/__init__.py | 1 - apis/dataset_metadata/__init__.py | 0 apis/dataset_metadata/dataset_access.py | 2 +- .../dataset_alternate_identifier.py | 4 +- apis/dataset_metadata/dataset_consent.py | 2 +- apis/dataset_metadata/dataset_contributor.py | 38 ++++++++++++++++ apis/dataset_metadata/dataset_date.py | 2 +- .../dataset_de_ident_level.py | 2 +- apis/dataset_metadata/dataset_description.py | 4 +- apis/dataset_metadata/dataset_funder.py | 4 +- apis/dataset_metadata/dataset_other.py | 2 +- apis/dataset_metadata/dataset_publisher.py | 35 +++++++++++++++ apis/dataset_metadata/dataset_readme.py | 2 +- apis/dataset_metadata/dataset_record_keys.py | 2 +- apis/dataset_metadata/dataset_related_item.py | 4 +- .../dataset_related_item_contributor.py | 2 +- .../dataset_related_item_identifier.py | 2 +- .../dataset_related_item_other.py | 2 +- .../dataset_related_item_title.py | 2 +- apis/dataset_metadata/dataset_rights.py | 4 +- apis/dataset_metadata/dataset_subject.py | 4 +- apis/dataset_metadata/dataset_title.py | 4 +- model/__init__.py | 13 ++---- model/dataset.py | 19 +++++--- model/dataset_metadata/dataset_access.py | 12 +++-- model/dataset_metadata/dataset_consent.py | 9 +++- .../dataset_contributor.py | 45 ++++++++++--------- model/dataset_metadata/dataset_date.py | 5 ++- .../dataset_de_ident_level.py | 9 +++- model/dataset_metadata/dataset_other.py | 10 ++++- model/dataset_metadata/dataset_readme.py | 4 +- model/dataset_metadata/dataset_record_keys.py | 5 ++- .../dataset_metadata/dataset_related_item.py | 24 +++++----- .../dataset_related_item_contributor.py | 10 ++--- .../dataset_related_item_identifier.py | 12 ++--- .../dataset_related_item_other.py | 13 +++++- .../dataset_related_item_title.py | 12 ++--- model/study.py | 1 - model/user.py | 2 + 40 files changed, 225 insertions(+), 108 deletions(-) create mode 100644 apis/dataset_metadata/__init__.py create mode 100644 apis/dataset_metadata/dataset_contributor.py create mode 100644 apis/dataset_metadata/dataset_publisher.py rename model/{ => dataset_metadata}/dataset_contributor.py (59%) diff --git a/Dockerfile b/Dockerfile index 24060626..fdacbf23 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,8 +6,8 @@ WORKDIR /app ENV POETRY_VERSION=1.3.2 -RUN apk update -RUN apk add --no-cache gcc libffi-dev musl-dev postgresql-dev +#RUN apk update +#RUN apk add --no-cache gcc libffi-dev musl-dev postgresql-dev RUN pip install "poetry==$POETRY_VERSION" diff --git a/apis/__init__.py b/apis/__init__.py index 7bebacc9..02963ab5 100644 --- a/apis/__init__.py +++ b/apis/__init__.py @@ -14,7 +14,6 @@ from .dataset_metadata.dataset_de_ident_level import api as de_ident_level from .dataset_metadata.dataset_description import api as description from .dataset_metadata.dataset_funder import api as funder -from .dataset_metadata.dataset_managing_organization import api as managing_organization from .dataset_metadata.dataset_other import api as dataset_other from .dataset_metadata.dataset_readme import api as readme from .dataset_metadata.dataset_record_keys import api as record_keys diff --git a/apis/dataset_metadata/__init__.py b/apis/dataset_metadata/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/apis/dataset_metadata/dataset_access.py b/apis/dataset_metadata/dataset_access.py index 3b9c7da2..13051b4c 100644 --- a/apis/dataset_metadata/dataset_access.py +++ b/apis/dataset_metadata/dataset_access.py @@ -16,7 +16,7 @@ ) -@api.route("/study//dataset//metadata/access") +@api.route("/study//dataset//access") class DatasetAccessResource(Resource): @api.doc("access") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_alternate_identifier.py b/apis/dataset_metadata/dataset_alternate_identifier.py index f95804c3..df5861c2 100644 --- a/apis/dataset_metadata/dataset_alternate_identifier.py +++ b/apis/dataset_metadata/dataset_alternate_identifier.py @@ -17,7 +17,7 @@ ) -@api.route("/study//dataset//metadata/identifier") +@api.route("/study//dataset//alternative-identifier") class DatasetAlternateIdentifierResource(Resource): @api.doc("identifier") @api.response(200, "Success") @@ -51,7 +51,7 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements @api.route( - "/study//dataset//metadata/identifier/" + "/study//dataset//alternative-identifier/" ) class DatasetAlternateIdentifierUpdate(Resource): def put(self, study_id: int, dataset_id: int, identifier_id: int): diff --git a/apis/dataset_metadata/dataset_consent.py b/apis/dataset_metadata/dataset_consent.py index fbea4753..e67c7baa 100644 --- a/apis/dataset_metadata/dataset_consent.py +++ b/apis/dataset_metadata/dataset_consent.py @@ -19,7 +19,7 @@ ) -@api.route("/study//dataset//metadata/consent") +@api.route("/study//dataset//consent") class DatasetConsentResource(Resource): @api.doc("consent") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py new file mode 100644 index 00000000..8af177f3 --- /dev/null +++ b/apis/dataset_metadata/dataset_contributor.py @@ -0,0 +1,38 @@ +from flask import request +from flask_restx import Resource, fields + +import model +from apis.dataset_metadata_namespace import api + +dataset_consent = api.model( + "DatasetContributor", + { + "id": fields.String(required=True), + "type": fields.String(required=True), + "noncommercial": fields.Boolean(required=True), + "geog_restrict": fields.Boolean(required=True), + "research_type": fields.Boolean(required=True), + "genetic_only": fields.Boolean(required=True), + "no_methods": fields.Boolean(required=True), + "details": fields.String(required=True), + }, +) + + +@api.route("/study//dataset//contributor") +class DatasetContributorResource(Resource): + @api.doc("consent") + @api.response(200, "Success") + @api.response(400, "Validation Error") + @api.marshal_with(dataset_consent) + def get(self, study_id: int, dataset_id: int): + dataset_ = model.Dataset.query.get(dataset_id) + dataset_contributor_ = dataset_.dataset_contributor + return [d.to_dict() for d in dataset_contributor_] + + def put(self, study_id: int, dataset_id: int): + data = request.json + dataset_ = model.Dataset.query.get(dataset_id) + dataset_contributor_ = dataset_.dataset_contributor.update(data) + model.db.session.commit() + return dataset_contributor_.to_dict() diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index ab2b9550..559f8e59 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -15,7 +15,7 @@ ) -@api.route("/study//dataset//metadata/date") +@api.route("/study//dataset//date") class DatasetDateResource(Resource): @api.doc("date") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_de_ident_level.py b/apis/dataset_metadata/dataset_de_ident_level.py index 3d38170f..d9ea2f4d 100644 --- a/apis/dataset_metadata/dataset_de_ident_level.py +++ b/apis/dataset_metadata/dataset_de_ident_level.py @@ -19,7 +19,7 @@ ) -@api.route("/study//dataset//metadata/de_ident_level") +@api.route("/study//dataset//de-identification-level") class DatasetDeIdentLevelResource(Resource): @api.doc("de_ident_level") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 511a52a6..2e1ed45c 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -16,7 +16,7 @@ ) -@api.route("/study//dataset//metadata/description") +@api.route("/study//dataset//description") class DatasetDescriptionResource(Resource): @api.doc("description") @api.response(200, "Success") @@ -44,7 +44,7 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements @api.route( - "/study//dataset//metadata/description/" + "/study//dataset//description/" ) class DatasetDescriptionUpdate(Resource): def delete(self, study_id: int, dataset_id: int, description_id: int): diff --git a/apis/dataset_metadata/dataset_funder.py b/apis/dataset_metadata/dataset_funder.py index 4b2470f3..9826c655 100644 --- a/apis/dataset_metadata/dataset_funder.py +++ b/apis/dataset_metadata/dataset_funder.py @@ -21,7 +21,7 @@ ) -@api.route("/study//dataset//metadata/funder") +@api.route("/study//dataset//funder") class DatasetFunderResource(Resource): @api.doc("funder") @api.response(200, "Success") @@ -41,7 +41,7 @@ def post(self, study_id: int, dataset_id: int): return dataset_funder_.to_dict() -@api.route("/study//dataset//metadata/funder/") +@api.route("/study//dataset//funder/") class DatasetFunderUpdate(Resource): def put(self, study_id: int, dataset_id: int, funder_id: int): dataset_funder_ = model.DatasetFunder.query.get(funder_id) diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index c93ac970..ab50901b 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -18,7 +18,7 @@ ) -@api.route("/study//dataset//metadata/other") +@api.route("/study//dataset//other") class DatasetOtherResource(Resource): @api.doc("other") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_publisher.py b/apis/dataset_metadata/dataset_publisher.py new file mode 100644 index 00000000..387976dc --- /dev/null +++ b/apis/dataset_metadata/dataset_publisher.py @@ -0,0 +1,35 @@ +from typing import Any, Union + +from flask import request +from flask_restx import Resource + +import model +from apis.dataset_metadata_namespace import api + +# dataset_publisher = api.model( +# "DatasetPublisher", +# { +# }, +# ) + + +@api.route("/study//dataset//publisher") +class DatasetFunderResource(Resource): + @api.doc("funder") + @api.response(200, "Success") + @api.response(400, "Validation Error") + # @api.marshal_with(dataset_publisher) + def get(self, study_id: int, dataset_id: int): + dataset_ = model.Dataset.query.get(dataset_id) + dataset_other_ = dataset_.dataset_other + return [d.to_dict() for d in dataset_other_] + + def post(self, study_id: int, dataset_id: int): + data: Union[Any, dict] = request.json + data_obj = model.Dataset.query.get(dataset_id) + dataset_other_ = model.DatasetOther.from_data(data_obj, data) + model.db.session.add(dataset_other_) + model.db.session.commit() + return dataset_other_.to_dict() + + diff --git a/apis/dataset_metadata/dataset_readme.py b/apis/dataset_metadata/dataset_readme.py index b53f43c7..9e5e46f9 100644 --- a/apis/dataset_metadata/dataset_readme.py +++ b/apis/dataset_metadata/dataset_readme.py @@ -10,7 +10,7 @@ ) -@api.route("/study//dataset//metadata/readme") +@api.route("/study//dataset//readme") class DatasetReadmeResource(Resource): @api.doc("readme") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_record_keys.py b/apis/dataset_metadata/dataset_record_keys.py index a440111b..ae826589 100644 --- a/apis/dataset_metadata/dataset_record_keys.py +++ b/apis/dataset_metadata/dataset_record_keys.py @@ -14,7 +14,7 @@ ) -@api.route("/study//dataset//metadata/record_keys") +@api.route("/study//dataset//record_keys") class DatasetRecordKeysResource(Resource): @api.doc("record_keys") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index 93b03da8..ece627f8 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -16,7 +16,7 @@ ) -@api.route("/study//dataset//metadata/related_item") +@api.route("/study//dataset//related-item") class DatasetRelatedItemResource(Resource): @api.doc("related_item") @api.response(200, "Success") @@ -36,7 +36,7 @@ def post(self, study_id: int, dataset_id: int): return dataset_related_item_.to_dict() @api.route( - "/study//dataset//metadata/related_item/" + "/study//dataset//related-item/" ) class DatasetRelatedItemUpdate(Resource): def put(self, study_id: int, dataset_id: int, related_item_id: int): diff --git a/apis/dataset_metadata/dataset_related_item_contributor.py b/apis/dataset_metadata/dataset_related_item_contributor.py index d7d2a09a..f110223a 100644 --- a/apis/dataset_metadata/dataset_related_item_contributor.py +++ b/apis/dataset_metadata/dataset_related_item_contributor.py @@ -14,7 +14,7 @@ # ) -@api.route("/study//dataset//metadata/related_item_identifier") +@api.route("/study//dataset//related_item_identifier") class DatasetRelatedItemContributorResource(Resource): @api.doc("related_item_identifier") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_related_item_identifier.py b/apis/dataset_metadata/dataset_related_item_identifier.py index d1f6695b..fd4d10df 100644 --- a/apis/dataset_metadata/dataset_related_item_identifier.py +++ b/apis/dataset_metadata/dataset_related_item_identifier.py @@ -14,7 +14,7 @@ # ) -@api.route("/study//dataset//metadata/related_item_contributor") +@api.route("/study//dataset//related_item_contributor") class DatasetRelatedItemContributorResource(Resource): @api.doc("related_item_contributor") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_related_item_other.py b/apis/dataset_metadata/dataset_related_item_other.py index 621a4920..e36328c1 100644 --- a/apis/dataset_metadata/dataset_related_item_other.py +++ b/apis/dataset_metadata/dataset_related_item_other.py @@ -14,7 +14,7 @@ # ) -@api.route("/study//dataset//metadata/related_item_other") +@api.route("/study//dataset//related_item_other") class DatasetRelatedItemContributorResource(Resource): @api.doc("related_item_other") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_related_item_title.py b/apis/dataset_metadata/dataset_related_item_title.py index 1bc6d243..f6bc2d77 100644 --- a/apis/dataset_metadata/dataset_related_item_title.py +++ b/apis/dataset_metadata/dataset_related_item_title.py @@ -14,7 +14,7 @@ # ) -@api.route("/study//dataset//metadata/related_item_title") +@api.route("/study//dataset//related-item-title") class DatasetRelatedItemTitleResource(Resource): @api.doc("related_item_title") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_rights.py b/apis/dataset_metadata/dataset_rights.py index bdfa724e..4f968896 100644 --- a/apis/dataset_metadata/dataset_rights.py +++ b/apis/dataset_metadata/dataset_rights.py @@ -18,7 +18,7 @@ ) -@api.route("/study//dataset//metadata/rights") +@api.route("/study//dataset//rights") class DatasetRightsResource(Resource): @api.doc("rights") @api.response(200, "Success") @@ -38,7 +38,7 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return dataset_rights_.to_dict() - @api.route("/study//dataset//metadata/rights/") + @api.route("/study//dataset//rights/") class DatasetRightsUpdate(Resource): def put(self, study_id: int, dataset_id: int, rights_id: int): dataset_rights_ = model.DatasetRights.query.get(rights_id) diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index b1fbfe9a..13c164f2 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -19,7 +19,7 @@ ) -@api.route("/study//dataset//metadata/subject") +@api.route("/study//dataset//subject") class DatasetSubjectResource(Resource): @api.doc("subject") @api.response(200, "Success") @@ -39,7 +39,7 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return dataset_subject_.to_dict() - @api.route("/study//dataset//metadata/subject/") + @api.route("/study//dataset//subject/") class DatasetSubjectUpdate(Resource): def put(self, study_id: int, dataset_id: int, subject_id: int): dataset_subject_ = model.DatasetSubject.query.get(subject_id) diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index 63b7602e..cbf61da9 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -16,7 +16,7 @@ ) -@api.route("/study//dataset//metadata/title") +@api.route("/study//dataset//title") class DatasetTitleResource(Resource): @api.doc("title") @api.response(200, "Success") @@ -44,7 +44,7 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return list_of_elements - @api.route("/study//dataset//metadata/title/") + @api.route("/study//dataset//title/") class DatasetDescriptionUpdate(Resource): def delete(self, study_id: int, dataset_id: int, title_id: int): dataset_title_ = model.DatasetTitle.query.get(title_id) diff --git a/model/__init__.py b/model/__init__.py index 83ec4d68..0b42706b 100644 --- a/model/__init__.py +++ b/model/__init__.py @@ -9,18 +9,15 @@ from model.dataset_metadata.dataset_related_item_title import DatasetRelatedItemTitle from .dataset import Dataset -from .dataset_contributor import DatasetContributor +from model.dataset_metadata.dataset_contributor import DatasetContributor from .dataset_metadata.dataset_access import DatasetAccess from .dataset_metadata.dataset_alternate_identifier import DatasetAlternateIdentifier from .dataset_metadata.dataset_consent import DatasetConsent -from .dataset_metadata.dataset_contributor_affiliation import ( - DatasetContributorAffiliation, -) + from .dataset_metadata.dataset_date import DatasetDate from .dataset_metadata.dataset_de_ident_level import DatasetDeIdentLevel from .dataset_metadata.dataset_description import DatasetDescription from .dataset_metadata.dataset_funder import DatasetFunder -from .dataset_metadata.dataset_managing_organization import DatasetManagingOrganization from .dataset_metadata.dataset_other import DatasetOther from .dataset_metadata.dataset_readme import DatasetReadme from .dataset_metadata.dataset_record_keys import DatasetRecordKeys @@ -56,7 +53,7 @@ from .user import User from .user_details import UserDetails from .version import Version - +from .notification import Notification __all__ = [ "Study", "Dataset", @@ -70,13 +67,10 @@ "DatasetOther", "DatasetAccess", "DatasetConsent", - "DatasetContributorAffiliation", "DatasetDate", "DatasetDeIdentLevel", - "DatasetContributorAffiliation", "DatasetFunder", "DatasetAlternateIdentifier", - "DatasetManagingOrganization", "DatasetRights", "DatasetReadme", "DatasetRecordKeys", @@ -111,4 +105,5 @@ "EmailVerification", "TokenBlacklist", "UserDetails", + "Notification" ] diff --git a/model/dataset.py b/model/dataset.py index db43a567..43c7a424 100644 --- a/model/dataset.py +++ b/model/dataset.py @@ -16,6 +16,13 @@ def __init__(self, study): self.id = str(uuid.uuid4()) self.created_at = datetime.datetime.now(timezone.utc).timestamp() + self.dataset_access = model.DatasetAccess(self) + self.dataset_record_keys = model.DatasetRecordKeys(self) + self.dataset_de_ident_level = model.DatasetDeIdentLevel(self) + self.dataset_consent = model.DatasetConsent(self) + self.dataset_readme = model.DatasetReadme(self) + self.dataset_other = model.DatasetOther(self) + __tablename__ = "dataset" id = db.Column(db.CHAR(36), primary_key=True) updated_on = db.Column(db.BigInteger, nullable=False) @@ -42,11 +49,13 @@ def __init__(self, study): "DatasetAccess", back_populates="dataset", cascade="all, delete", + uselist=False, ) dataset_consent = db.relationship( "DatasetConsent", back_populates="dataset", cascade="all, delete", + uselist=False, ) dataset_date = db.relationship( "DatasetDate", @@ -55,6 +64,7 @@ def __init__(self, study): ) dataset_de_ident_level = db.relationship( "DatasetDeIdentLevel", + uselist=False, back_populates="dataset", cascade="all, delete", ) @@ -74,12 +84,9 @@ def __init__(self, study): back_populates="dataset", cascade="all, delete", ) - dataset_managing_organization = db.relationship( - "DatasetManagingOrganization", back_populates="dataset" - ) - dataset_other = db.relationship("DatasetOther", back_populates="dataset") - dataset_readme = db.relationship("DatasetReadme", back_populates="dataset") - dataset_record_keys = db.relationship("DatasetRecordKeys", back_populates="dataset") + dataset_other = db.relationship("DatasetOther", back_populates="dataset", uselist=False) + dataset_readme = db.relationship("DatasetReadme", back_populates="dataset", uselist=False) + dataset_record_keys = db.relationship("DatasetRecordKeys", back_populates="dataset", uselist=False) dataset_related_item = db.relationship( "DatasetRelatedItem", back_populates="dataset" ) diff --git a/model/dataset_metadata/dataset_access.py b/model/dataset_metadata/dataset_access.py index 09c40a73..155e63d5 100644 --- a/model/dataset_metadata/dataset_access.py +++ b/model/dataset_metadata/dataset_access.py @@ -1,4 +1,5 @@ from model import Dataset +import datetime from ..db import db @@ -6,14 +7,18 @@ class DatasetAccess(db.Model): # type: ignore def __init__(self, dataset): self.dataset = dataset + self.type = None + self.description = "" + self.url = "" + self.url_last_checked = None __tablename__ = "dataset_access" type = db.Column(db.String, nullable=True) description = db.Column(db.String, nullable=False) url = db.Column(db.String, nullable=False) - url_last_checked = db.Column(db.String, nullable=False) + url_last_checked = db.Column(db.BigInteger, nullable=True) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), 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_access") def to_dict(self): @@ -21,7 +26,6 @@ def to_dict(self): "type": self.type, "description": self.description, "url": self.url, - "url_last_checked": self.url_last_checked, } @staticmethod @@ -33,5 +37,5 @@ def from_data(dataset: Dataset, data: dict): def update(self, data: dict): self.description = data["description"] self.url = data["url"] - self.url_last_checked = data["url_last_checked"] + self.url_last_checked = datetime.datetime.now(datetime.timezone.utc).timestamp() self.type = data["type"] diff --git a/model/dataset_metadata/dataset_consent.py b/model/dataset_metadata/dataset_consent.py index 87178495..89e85faa 100644 --- a/model/dataset_metadata/dataset_consent.py +++ b/model/dataset_metadata/dataset_consent.py @@ -4,6 +4,13 @@ class DatasetConsent(db.Model): # type: ignore def __init__(self, dataset): self.dataset = dataset + self.type = None + self.noncommercial = True + self.geog_restrict = True + self.research_type = True + self.genetic_only = True + self.no_methods = True + self.details = "" __tablename__ = "dataset_consent" @@ -15,7 +22,7 @@ def __init__(self, dataset): no_methods = db.Column(db.BOOLEAN, nullable=False) details = db.Column(db.String, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), 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_consent") def to_dict(self): diff --git a/model/dataset_contributor.py b/model/dataset_metadata/dataset_contributor.py similarity index 59% rename from model/dataset_contributor.py rename to model/dataset_metadata/dataset_contributor.py index 468298c5..4e173c1f 100644 --- a/model/dataset_contributor.py +++ b/model/dataset_metadata/dataset_contributor.py @@ -2,13 +2,15 @@ import uuid from datetime import timezone -from .db import db +import model +from model.db import db class DatasetContributor(db.Model): # type: ignore - def __init__(self): + def __init__(self, dataset): self.id = str(uuid.uuid4()) self.created_at = datetime.datetime.now(timezone.utc).timestamp() + self.dataset = dataset __tablename__ = "dataset_contributor" id = db.Column(db.CHAR(36), primary_key=True) @@ -19,40 +21,41 @@ def __init__(self): name_identifier_scheme_uri = db.Column(db.String, nullable=False) creator = db.Column(db.BOOLEAN, nullable=False) contributor_type = db.Column(db.String, nullable=True) - affiliations = db.Column(db.String, nullable=False) + affiliations = db.Column(db.JSON, nullable=False) created_at = db.Column(db.BigInteger, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_contributors") - dataset_contributor_affiliation = db.relationship( - "DatasetContributorAffiliation", back_populates="dataset_contributors" - ) + # dataset_contributor_affiliation = db.relationship( + # "DatasetContributorAffiliation", back_populates="dataset_contributors" + # ) def to_dict(self): return { "id": self.id, - "first_name": self.first_name, - "last_name": self.last_name, + "name": self.name, "name_type": self.name_type, "name_identifier": self.name_identifier, - "name_identifier_scheme": self.name_identifier_scheme, + "name_identifier_scheme": self.name_identifier_schemename, "name_identifier_scheme_uri": self.name_identifier_scheme_uri, "creator": self.creator, "contributor_type": self.contributor_type, + "affiliations": self.affiliations, "created_at": self.created_at, } @staticmethod - def from_data(data: dict): - dataset_contributor = DatasetContributor() - dataset_contributor.first_name = data["first_name"] - dataset_contributor.last_name = data["last_name"] - dataset_contributor.name_type = data["name_type"] - dataset_contributor.name_identifier = data["name_identifier"] - dataset_contributor.name_identifier_scheme = data["name_identifier_scheme"] - dataset_contributor.name_identifier_scheme_uri = data[ - "name_identifier_scheme_uri" - ] - dataset_contributor.creator = data["creator"] - dataset_contributor.contributor_type = data["contributor_type"] + def from_data(dataset: model.Dataset, data: dict): + dataset_contributor = DatasetContributor(dataset) + dataset_contributor.update(data) return dataset_contributor + + def update(self, data: dict): + self.name = data["name"] + self.name_type = data["name_type"] + self.name_identifier = data["name_identifier"] + self.name_identifier_scheme = data["name_identifier_scheme"] + self.name_identifier_scheme_uri = data["name_identifier_scheme_uri"] + self.creator = data["creator"] + self.contributor_type = data["contributor_type"] + self.affiliations = data["affiliations"] diff --git a/model/dataset_metadata/dataset_date.py b/model/dataset_metadata/dataset_date.py index ca9ad4da..ac32b1a7 100644 --- a/model/dataset_metadata/dataset_date.py +++ b/model/dataset_metadata/dataset_date.py @@ -13,9 +13,10 @@ def __init__(self, dataset): __tablename__ = "dataset_date" id = db.Column(db.CHAR(36), primary_key=True) - date = db.Column(db.String, nullable=False) + + date = db.Column(db.BigInteger, nullable=True) type = db.Column(db.String, nullable=True) - information = db.Column(db.String, nullable=True) + information = db.Column(db.String, nullable=False) created_at = db.Column(db.BigInteger, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) diff --git a/model/dataset_metadata/dataset_de_ident_level.py b/model/dataset_metadata/dataset_de_ident_level.py index f696702d..2c490ba8 100644 --- a/model/dataset_metadata/dataset_de_ident_level.py +++ b/model/dataset_metadata/dataset_de_ident_level.py @@ -4,6 +4,13 @@ class DatasetDeIdentLevel(db.Model): # type: ignore def __init__(self, dataset): self.dataset = dataset + self.type = None + self.direct = False + self.hipaa = False + self.dates = False + self.nonarr = False + self.k_anon = False + self.details = False __tablename__ = "dataset_de_ident_level" @@ -15,7 +22,7 @@ def __init__(self, dataset): k_anon = db.Column(db.BOOLEAN, nullable=False) details = db.Column(db.String, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), 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_de_ident_level") def to_dict(self): diff --git a/model/dataset_metadata/dataset_other.py b/model/dataset_metadata/dataset_other.py index e61d5470..9af5e49d 100644 --- a/model/dataset_metadata/dataset_other.py +++ b/model/dataset_metadata/dataset_other.py @@ -7,6 +7,14 @@ class DatasetOther(db.Model): # type: ignore 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.standards_followed = "" + self.acknowledgement = "" + self.publisher = [] __tablename__ = "dataset_other" @@ -19,7 +27,7 @@ def __init__(self, dataset): acknowledgement = db.Column(db.String, nullable=False) publisher = db.Column(db.String, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), 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_other") def to_dict(self): diff --git a/model/dataset_metadata/dataset_readme.py b/model/dataset_metadata/dataset_readme.py index 09caa239..eeddb484 100644 --- a/model/dataset_metadata/dataset_readme.py +++ b/model/dataset_metadata/dataset_readme.py @@ -4,11 +4,11 @@ class DatasetReadme(db.Model): # type: ignore def __init__(self, dataset): self.dataset = dataset - + self.content = "" __tablename__ = "dataset_readme" content = db.Column(db.String, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), 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_readme") def to_dict(self): diff --git a/model/dataset_metadata/dataset_record_keys.py b/model/dataset_metadata/dataset_record_keys.py index 3ce9979b..7e032b39 100644 --- a/model/dataset_metadata/dataset_record_keys.py +++ b/model/dataset_metadata/dataset_record_keys.py @@ -4,12 +4,13 @@ class DatasetRecordKeys(db.Model): # type: ignore def __init__(self, dataset): self.dataset = dataset - + self.key_type = None + self.key_details = "" __tablename__ = "dataset_record_keys" key_type = db.Column(db.String, nullable=True) key_details = db.Column(db.String, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), 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_record_keys") def to_dict(self): diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 70e761e9..12468904 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -1,7 +1,8 @@ -import datetime import uuid +import datetime from datetime import timezone +import model from ..db import db @@ -10,7 +11,7 @@ def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset self.created_at = datetime.datetime.now(timezone.utc).timestamp() - + self.dataset_related_item_other = model.DatasetRelatedItemOther(self) __tablename__ = "dataset_related_item" id = db.Column(db.CHAR(36), primary_key=True) @@ -19,19 +20,19 @@ def __init__(self, dataset): created_at = db.Column(db.BigInteger, nullable=False) dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) - dataset = db.relationship("Dataset", back_populates="related_item") + dataset = db.relationship("Dataset", back_populates="dataset_related_item") - related_item_contributor = db.relationship( - "DatasetRelatedItemContributor", back_populates="related_item" + dataset_related_item_contributor = db.relationship( + "DatasetRelatedItemContributor", back_populates="dataset_related_item" ) - related_item_identifier = db.relationship( - "DatasetRelatedItemIdentifier", back_populates="related_item" + dataset_related_item_identifier = db.relationship( + "DatasetRelatedItemIdentifier", back_populates="dataset_related_item" ) - related_item_other = db.relationship( - "DatasetRelatedItemOther", back_populates="related_item" + dataset_related_item_other = db.relationship( + "DatasetRelatedItemOther", back_populates="dataset_related_item" ) - related_item_title = db.relationship( - "DatasetRelatedItemTitle", back_populates="related_item" + dataset_related_item_title = db.relationship( + "DatasetRelatedItemTitle", back_populates="dataset_related_item" ) def to_dict(self): @@ -40,6 +41,7 @@ def to_dict(self): "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, + } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_contributor.py b/model/dataset_metadata/dataset_related_item_contributor.py index 90023a7a..1f0bee6d 100644 --- a/model/dataset_metadata/dataset_related_item_contributor.py +++ b/model/dataset_metadata/dataset_related_item_contributor.py @@ -1,7 +1,6 @@ -import datetime import uuid +import datetime from datetime import timezone - from ..db import db @@ -20,9 +19,9 @@ def __init__(self, dataset): created_at = db.Column(db.BigInteger, nullable=False) dataset_related_item_id = db.Column( - db.CHAR(36), db.ForeignKey("related_item.id"), nullable=False + db.CHAR(36), db.ForeignKey("dataset_related_item.id"), nullable=False ) - related_item = db.relationship( + dataset_related_item = db.relationship( "DatasetRelatedItem", back_populates="dataset_related_item_contributor" ) @@ -33,7 +32,8 @@ def to_dict(self): "name_type": self.name_type, "creator": self.creator, "contributor_type": self.contributor_type, - "created_at": self.created_at, + "created_at": self.created_at + } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_identifier.py b/model/dataset_metadata/dataset_related_item_identifier.py index 6ed7625b..be17908d 100644 --- a/model/dataset_metadata/dataset_related_item_identifier.py +++ b/model/dataset_metadata/dataset_related_item_identifier.py @@ -1,7 +1,6 @@ -import datetime import uuid +import datetime from datetime import timezone - from ..db import db @@ -20,10 +19,10 @@ def __init__(self): created_at = db.Column(db.BigInteger, nullable=False) dataset_related_item_id = db.Column( - db.CHAR(36), db.ForeignKey("related_item.id"), nullable=False + db.CHAR(36), db.ForeignKey("dataset_related_item.id"), nullable=False ) - related_item = db.relationship( - "DatasetRelatedItem", back_populates="related_item_identifier" + dataset_related_item = db.relationship( + "DatasetRelatedItem", back_populates="dataset_related_item_identifier" ) def to_dict(self): @@ -34,7 +33,8 @@ def to_dict(self): "metadata_scheme": self.metadata_scheme, "scheme_uri": self.scheme_uri, "scheme_type": self.scheme_type, - "created_at": self.created_at, + "created_at": self.created_at + } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_other.py b/model/dataset_metadata/dataset_related_item_other.py index b7f1c99f..e7db274c 100644 --- a/model/dataset_metadata/dataset_related_item_other.py +++ b/model/dataset_metadata/dataset_related_item_other.py @@ -4,9 +4,18 @@ class DatasetRelatedItemOther(db.Model): # type: ignore def __init__(self, dataset): self.dataset = dataset + self.publication_year = None + self.volume = "" + self.issue = "" + self.number_value = None + self.number_type = "" + self.first_page = "" + self.last_page = "" + self.publisher = "" + self.edition = "" __tablename__ = "dataset_related_item_other" - publication_year = db.Column(db.String, nullable=True) + publication_year = db.Column(db.BigInteger, nullable=True) volume = db.Column(db.String, nullable=False) issue = db.Column(db.String, nullable=False) number_value = db.Column(db.String, nullable=False) @@ -17,7 +26,7 @@ def __init__(self, dataset): edition = db.Column(db.String, nullable=False) dataset_related_item_id = db.Column( - db.CHAR(36), db.ForeignKey("dataset_related_item.id"), nullable=False + db.CHAR(36), db.ForeignKey("dataset_related_item.id"), primary_key=True, nullable=False ) dataset_related_item = db.relationship( "DatasetRelatedItem", back_populates="dataset_related_item_other" diff --git a/model/dataset_metadata/dataset_related_item_title.py b/model/dataset_metadata/dataset_related_item_title.py index 0fdbf7b3..f9124bc3 100644 --- a/model/dataset_metadata/dataset_related_item_title.py +++ b/model/dataset_metadata/dataset_related_item_title.py @@ -1,7 +1,6 @@ -import datetime import uuid +import datetime from datetime import timezone - from ..db import db @@ -18,10 +17,10 @@ def __init__(self, dataset): created_at = db.Column(db.BigInteger, nullable=False) dataset_related_item_id = db.Column( - db.CHAR(36), db.ForeignKey("related_item.id"), nullable=False + db.CHAR(36), db.ForeignKey("dataset_related_item.id"), nullable=False ) - related_item = db.relationship( - "DatasetRelatedItem", back_populates="related_item_title" + dataset_related_item = db.relationship( + "DatasetRelatedItem", back_populates="dataset_related_item_title" ) def to_dict(self): @@ -29,7 +28,8 @@ def to_dict(self): "id": self.id, "type": self.type, "title": self.title, - "created_at": self.created_at, + "created_at": self.created_at + } @staticmethod diff --git a/model/study.py b/model/study.py index a8546fff..4944ce8f 100644 --- a/model/study.py +++ b/model/study.py @@ -8,7 +8,6 @@ from .db import db -# from datetime import datetime, timezone class StudyException(Exception): diff --git a/model/user.py b/model/user.py index c252b9a2..9e741efc 100644 --- a/model/user.py +++ b/model/user.py @@ -27,6 +27,8 @@ def __init__(self, password): study_contributors = db.relationship("StudyContributor", back_populates="user") email_verification = db.relationship("EmailVerification", back_populates="user") user_details = db.relationship("UserDetails", uselist=False, back_populates="user") + token_blacklist = db.relationship("TokenBlacklist", back_populates="user") + notification = db.relationship("Notification", back_populates="user") def to_dict(self): return { From 7263b53a7b18c45db6ba2f1d7db3a377eafc55f3 Mon Sep 17 00:00:00 2001 From: aydawka Date: Sun, 15 Oct 2023 01:05:46 -0700 Subject: [PATCH 05/46] chore: study models refactored --- model/study_metadata/study_available_ipd.py | 2 +- model/study_metadata/study_description.py | 2 +- model/study_metadata/study_design.py | 38 +++++++++---------- model/study_metadata/study_eligibility.py | 32 ++++++++-------- model/study_metadata/study_identification.py | 2 +- model/study_metadata/study_intervention.py | 2 +- model/study_metadata/study_ipdsharing.py | 4 +- model/study_metadata/study_location.py | 2 +- model/study_metadata/study_other.py | 2 +- .../study_metadata/study_overall_official.py | 2 +- model/study_metadata/study_reference.py | 2 +- .../study_sponsors_collaborators.py | 4 +- model/study_metadata/study_status.py | 2 +- 13 files changed, 48 insertions(+), 48 deletions(-) diff --git a/model/study_metadata/study_available_ipd.py b/model/study_metadata/study_available_ipd.py index 2a6e8637..cd65d626 100644 --- a/model/study_metadata/study_available_ipd.py +++ b/model/study_metadata/study_available_ipd.py @@ -19,7 +19,7 @@ def __init__(self, study): id = db.Column(db.CHAR(36), primary_key=True) identifier = db.Column(db.String, nullable=False) - type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) url = db.Column(db.String, nullable=False) comment = db.Column(db.String, nullable=False) created_at = db.Column(db.BigInteger, nullable=False) diff --git a/model/study_metadata/study_description.py b/model/study_metadata/study_description.py index 96d0ff88..769f2f31 100644 --- a/model/study_metadata/study_description.py +++ b/model/study_metadata/study_description.py @@ -17,7 +17,7 @@ def __init__(self, study: Study): detailed_description = db.Column(db.String, nullable=False) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), nullable=False + db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False ) study = db.relationship("Study", back_populates="study_description") diff --git a/model/study_metadata/study_design.py b/model/study_metadata/study_design.py index f05aa15e..677e6cb0 100644 --- a/model/study_metadata/study_design.py +++ b/model/study_metadata/study_design.py @@ -12,38 +12,38 @@ class StudyDesign(db.Model): # type: ignore def __init__(self, study: Study): self.study = study - self.design_allocation = "" + self.design_allocation = None self.study_type = None - self.design_intervention_model = "" + self.design_intervention_model = None self.design_intervention_model_description = "" - self.design_primary_purpose = "" - self.design_masking = "" - self.design_masking_description = "" + self.design_primary_purpose = None + self.design_masking = None + self.design_masking_description = None self.design_who_masked_list = [] - self.phase_list = [] - self.enrollment_count = 0 + self.phase_list = None + self.enrollment_count = None self.enrollment_type = None - self.number_arms = 0 - self.design_observational_model_list = [] - self.design_time_perspective_list = [] - self.bio_spec_retention = "" - self.bio_spec_description = "" - self.target_duration = "" - self.number_groups_cohorts = 0 + self.number_arms = None + self.design_observational_model_list = None + self.design_time_perspective_list = None + self.bio_spec_retention = None + self.bio_spec_description = None + self.target_duration = None + self.number_groups_cohorts = None __tablename__ = "study_design" design_allocation = db.Column(db.String, nullable=True) - study_type = db.Column(db.String, nullable=False) + study_type = db.Column(db.String, nullable=True) design_intervention_model = db.Column(db.String, nullable=True) - design_intervention_model_description = db.Column(db.String, nullable=True) + design_intervention_model_description = db.Column(db.String, nullable=False) design_primary_purpose = db.Column(db.String, nullable=True) design_masking = db.Column(db.String, nullable=True) design_masking_description = db.Column(db.String, nullable=True) design_who_masked_list = db.Column(ARRAY(String), nullable=True) phase_list = db.Column(ARRAY(String), nullable=True) - enrollment_count = db.Column(db.Integer, nullable=False) - enrollment_type = db.Column(db.String, nullable=False) + enrollment_count = db.Column(db.Integer, nullable=True) + enrollment_type = db.Column(db.String, nullable=True) number_arms = db.Column(db.Integer, nullable=True) design_observational_model_list = db.Column(ARRAY(String), nullable=True) design_time_perspective_list = db.Column(ARRAY(String), nullable=True) @@ -53,7 +53,7 @@ def __init__(self, study: Study): number_groups_cohorts = db.Column(db.Integer, nullable=True) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), nullable=False + db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False ) study = db.relationship("Study", back_populates="study_design") diff --git a/model/study_metadata/study_eligibility.py b/model/study_metadata/study_eligibility.py index fc52b855..213d9abf 100644 --- a/model/study_metadata/study_eligibility.py +++ b/model/study_metadata/study_eligibility.py @@ -11,36 +11,36 @@ class StudyEligibility(db.Model): # type: ignore def __init__(self, study: Study): self.study = study - self.gender = "" - self.gender_based = "" + self.gender = None + self.gender_based = None self.gender_description = "" - self.minimum_age_value = 18 - self.maximum_age_value = 60 - self.minimum_age_unit = "" - self.maximum_age_unit = "" - self.healthy_volunteers = "" + self.minimum_age_value = None # 18 + self.maximum_age_value = None # 60 + self.minimum_age_unit = None + self.maximum_age_unit = None + self.healthy_volunteers = None self.inclusion_criteria = [] self.exclusion_criteria = [] self.study_population = "" - self.sampling_method = "" + self.sampling_method = None __tablename__ = "study_eligibility" - gender = db.Column(db.String, nullable=False) - gender_based = db.Column(db.String, nullable=False) + gender = db.Column(db.String, nullable=True) + gender_based = db.Column(db.String, nullable=True) gender_description = db.Column(db.String, nullable=False) - minimum_age_value = db.Column(db.Integer, nullable=False) - maximum_age_value = db.Column(db.Integer, nullable=False) - minimum_age_unit = db.Column(db.String, nullable=False) - maximum_age_unit = db.Column(db.String, nullable=False) + minimum_age_value = db.Column(db.Integer, nullable=True) + maximum_age_value = db.Column(db.Integer, nullable=True) + minimum_age_unit = db.Column(db.String, nullable=True) + maximum_age_unit = db.Column(db.String, nullable=True) healthy_volunteers = db.Column(db.String, nullable=True) inclusion_criteria = db.Column(ARRAY(String), nullable=False) exclusion_criteria = db.Column(ARRAY(String), nullable=False) - study_population = db.Column(db.String, nullable=True) + study_population = db.Column(db.String, nullable=False) sampling_method = db.Column(db.String, nullable=True) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), nullable=False + db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False ) study = db.relationship("Study", back_populates="study_eligibility") diff --git a/model/study_metadata/study_identification.py b/model/study_metadata/study_identification.py index 5f31affb..7af40cc3 100644 --- a/model/study_metadata/study_identification.py +++ b/model/study_metadata/study_identification.py @@ -17,7 +17,7 @@ def __init__(self, study, secondary): __tablename__ = "study_identification" id = db.Column(db.CHAR(36), primary_key=True) identifier = db.Column(db.String, nullable=False) - identifier_type = db.Column(db.String, nullable=False) + identifier_type = db.Column(db.String, nullable=True) identifier_domain = db.Column(db.String, nullable=False) identifier_link = db.Column(db.String, nullable=False) secondary = db.Column(db.BOOLEAN, nullable=False) diff --git a/model/study_metadata/study_intervention.py b/model/study_metadata/study_intervention.py index 7ca82b89..0230b832 100644 --- a/model/study_metadata/study_intervention.py +++ b/model/study_metadata/study_intervention.py @@ -21,7 +21,7 @@ def __init__(self, study): __tablename__ = "study_intervention" id = db.Column(db.CHAR(36), primary_key=True) - type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) name = db.Column(db.String, nullable=False) description = db.Column(db.String, nullable=False) arm_group_label_list = db.Column(ARRAY(String), nullable=False) diff --git a/model/study_metadata/study_ipdsharing.py b/model/study_metadata/study_ipdsharing.py index 809e74c1..58bd24ec 100644 --- a/model/study_metadata/study_ipdsharing.py +++ b/model/study_metadata/study_ipdsharing.py @@ -20,7 +20,7 @@ def __init__(self, study): __tablename__ = "study_ipdsharing" - ipd_sharing = db.Column(db.String, nullable=False) + ipd_sharing = db.Column(db.String, nullable=True) ipd_sharing_description = db.Column(db.String, nullable=False) ipd_sharing_info_type_list = db.Column(ARRAY(String), nullable=False) ipd_sharing_time_frame = db.Column(db.String, nullable=False) @@ -28,7 +28,7 @@ def __init__(self, study): ipd_sharing_url = db.Column(db.String, nullable=False) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), nullable=False + db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False ) study = db.relationship("Study", back_populates="study_ipdsharing") diff --git a/model/study_metadata/study_location.py b/model/study_metadata/study_location.py index 808a1401..06e640d6 100644 --- a/model/study_metadata/study_location.py +++ b/model/study_metadata/study_location.py @@ -19,7 +19,7 @@ def __init__(self, study): id = db.Column(db.CHAR(36), primary_key=True) facility = db.Column(db.String, nullable=False) - status = db.Column(db.String, nullable=False) + status = db.Column(db.String, nullable=True) city = db.Column(db.String, nullable=False) state = db.Column(db.String, nullable=False) zip = db.Column(db.String, nullable=False) diff --git a/model/study_metadata/study_other.py b/model/study_metadata/study_other.py index bcae5417..8e78cd06 100644 --- a/model/study_metadata/study_other.py +++ b/model/study_metadata/study_other.py @@ -24,7 +24,7 @@ def __init__(self, study): size = db.Column(db.BigInteger, nullable=False) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), nullable=False + db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False ) study = db.relationship("Study", back_populates="study_other") diff --git a/model/study_metadata/study_overall_official.py b/model/study_metadata/study_overall_official.py index 0035fe2e..e173cd0b 100644 --- a/model/study_metadata/study_overall_official.py +++ b/model/study_metadata/study_overall_official.py @@ -20,7 +20,7 @@ def __init__(self, study): id = db.Column(db.CHAR(36), primary_key=True) name = db.Column(db.String, nullable=False) affiliation = db.Column(db.String, nullable=False) - role = db.Column(db.String, nullable=False) + role = db.Column(db.String, nullable=True) created_at = db.Column(db.BigInteger, nullable=False) study_id = db.Column( diff --git a/model/study_metadata/study_reference.py b/model/study_metadata/study_reference.py index d64706c4..113af7b0 100644 --- a/model/study_metadata/study_reference.py +++ b/model/study_metadata/study_reference.py @@ -19,7 +19,7 @@ def __init__(self, study): id = db.Column(db.CHAR(36), primary_key=True) identifier = db.Column(db.String, nullable=False) - type = db.Column(db.String, nullable=False) + type = db.Column(db.String, nullable=True) citation = db.Column(db.String, nullable=False) created_at = db.Column(db.BigInteger, nullable=False) diff --git a/model/study_metadata/study_sponsors_collaborators.py b/model/study_metadata/study_sponsors_collaborators.py index 5a6641d5..0abecec0 100644 --- a/model/study_metadata/study_sponsors_collaborators.py +++ b/model/study_metadata/study_sponsors_collaborators.py @@ -20,7 +20,7 @@ def __init__(self, study): __tablename__ = "study_sponsors_collaborators" - responsible_party_type = db.Column(db.String, nullable=False) + responsible_party_type = db.Column(db.String, nullable=True) responsible_party_investigator_name = db.Column(db.String, nullable=False) responsible_party_investigator_title = db.Column(db.String, nullable=False) responsible_party_investigator_affiliation = db.Column(db.String, nullable=False) @@ -28,7 +28,7 @@ def __init__(self, study): collaborator_name = db.Column(ARRAY(String), nullable=False) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), nullable=False + db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False ) study = db.relationship("Study", back_populates="study_sponsors_collaborators") diff --git a/model/study_metadata/study_status.py b/model/study_metadata/study_status.py index 40668bb0..6ba7e07a 100644 --- a/model/study_metadata/study_status.py +++ b/model/study_metadata/study_status.py @@ -25,7 +25,7 @@ def __init__(self, study): completion_date_type = db.Column(db.String, nullable=True) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), nullable=False + db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False ) study = db.relationship("Study", back_populates="study_status") From 797e73b4357ade034e7338e0bf7ca73b74c22092 Mon Sep 17 00:00:00 2001 From: aydawka Date: Sun, 15 Oct 2023 09:56:21 -0700 Subject: [PATCH 06/46] chore: dataset metadata functions were changed --- apis/dataset_metadata/dataset_alternate_identifier.py | 3 ++- apis/dataset_metadata/dataset_contributor.py | 9 +-------- apis/dataset_metadata/dataset_date.py | 2 +- apis/dataset_metadata/dataset_description.py | 4 ++++ 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/apis/dataset_metadata/dataset_alternate_identifier.py b/apis/dataset_metadata/dataset_alternate_identifier.py index df5861c2..03e09e90 100644 --- a/apis/dataset_metadata/dataset_alternate_identifier.py +++ b/apis/dataset_metadata/dataset_alternate_identifier.py @@ -50,11 +50,12 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return list_of_elements +# not ready @api.route( "/study//dataset//alternative-identifier/" ) class DatasetAlternateIdentifierUpdate(Resource): - def put(self, study_id: int, dataset_id: int, identifier_id: int): + def delete(self, study_id: int, dataset_id: int, identifier_id: int): dataset_identifier_ = model.DatasetAlternateIdentifier.query.get( identifier_id ) diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index 8af177f3..08761065 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -7,14 +7,7 @@ dataset_consent = api.model( "DatasetContributor", { - "id": fields.String(required=True), - "type": fields.String(required=True), - "noncommercial": fields.Boolean(required=True), - "geog_restrict": fields.Boolean(required=True), - "research_type": fields.Boolean(required=True), - "genetic_only": fields.Boolean(required=True), - "no_methods": fields.Boolean(required=True), - "details": fields.String(required=True), + }, ) diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index 559f8e59..d4b14898 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -26,7 +26,7 @@ def get(self, study_id: int, dataset_id: int): dataset_date_ = dataset_.dataset_date return [d.to_dict() for d in dataset_date_] - def put(self, study_id: int, dataset_id: int): + def post(self, study_id: int, dataset_id: int): data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_date_ = dataset_.dataset_date.update(data) diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 2e1ed45c..ca4e0fd1 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -27,6 +27,10 @@ def get(self, study_id: int, dataset_id: int): dataset_description_ = dataset_.dataset_description return [d.to_dict() for d in dataset_description_] + @api.doc("description update") + @api.response(200, "Success") + @api.response(400, "Validation Error") + @api.marshal_with(dataset_description) def post(self, study_id: int, dataset_id: int): data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) From 78c0aa9d23b19c0631fd04a10bc6c69b263e58ac Mon Sep 17 00:00:00 2001 From: aydawka Date: Sun, 15 Oct 2023 22:57:21 -0700 Subject: [PATCH 07/46] fix: contributor and creator endpoints --- apis/__init__.py | 3 +- apis/dataset_metadata/dataset_contributor.py | 101 +++++++++++++++--- model/__init__.py | 4 +- model/dataset_metadata/dataset_contributor.py | 5 +- .../dataset_contributor_affiliation.py | 6 +- model/dataset_metadata/dataset_record_keys.py | 5 +- model/dataset_versions.py | 35 ------ model/participant.py | 5 +- 8 files changed, 102 insertions(+), 62 deletions(-) delete mode 100644 model/dataset_versions.py diff --git a/apis/__init__.py b/apis/__init__.py index 02963ab5..4edd1618 100644 --- a/apis/__init__.py +++ b/apis/__init__.py @@ -27,6 +27,7 @@ from .dataset_metadata.dataset_related_item_other import api as related_item_other from .dataset_metadata.dataset_related_item_title import api as related_item_title from .dataset_metadata.dataset_rights import api as rights +from .dataset_metadata.dataset_contributor import api as dataset_contributor from .dataset_metadata.dataset_subject import api as subject from .dataset_metadata.dataset_title import api as title from .participant import api as participants_api @@ -68,7 +69,6 @@ "de_ident_level", "description", "funder", - "managing_organization", "dataset_other", "readme", "record_keys", @@ -100,6 +100,7 @@ "user", "identification", "study_description", + "dataset_contributor" ] diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index 08761065..3d5ebfd7 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -1,31 +1,106 @@ +from typing import Union, Any + from flask import request -from flask_restx import Resource, fields +from flask_restx import Resource import model from apis.dataset_metadata_namespace import api -dataset_consent = api.model( +dataset_contributor = api.model( "DatasetContributor", - { - - }, + {}, ) @api.route("/study//dataset//contributor") class DatasetContributorResource(Resource): - @api.doc("consent") + @api.doc("contributor") @api.response(200, "Success") @api.response(400, "Validation Error") - @api.marshal_with(dataset_consent) + # @api.marshal_with(dataset_contributor) def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) - dataset_contributor_ = dataset_.dataset_contributor - return [d.to_dict() for d in dataset_contributor_] + dataset_contributor_ = dataset_.dataset_contributors + print("444444444444444444444444",[d.to_dict()["creator"] for d in dataset_contributor_ if d.to_dict()["creator"] == True]) + return [d.to_dict() for d in dataset_contributor_ if d.to_dict()["creator"] == False] + + @api.doc("update contributor") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def post(self, study_id: int, dataset_id: int): + data: Union[Any, dict] = request.json + data_obj = model.Dataset.query.get(dataset_id) + list_of_elements = [] + for i in data: + i["creator"] = False + if "id" in i and i["id"]: + dataset_contributor_ = model.DatasetContributor.query.get( + i["id"] + ) + if not dataset_contributor_: + return f"Study link {i['id']} Id is not found", 404 + + dataset_contributor_.update(i) + list_of_elements.append(dataset_contributor_.to_dict()) + elif "id" not in i or not i["id"]: + dataset_contributor_ = model.DatasetContributor.from_data( + data_obj, i + ) + model.db.session.add(dataset_contributor_) + list_of_elements.append(dataset_contributor_.to_dict()) + model.db.session.commit() + return list_of_elements + + +@api.route("/study//dataset//contributor/") +class DatasetContributorDelete(Resource): + @api.doc("delete contributor") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete(self, study_id: int, dataset_id: int, contributor_id: int): + contributor_ = model.DatasetContributor.query.get(contributor_id) + + model.db.session.delete(contributor_) + model.db.session.commit() + + return 204 + - def put(self, study_id: int, dataset_id: int): - data = request.json +@api.route("/study//dataset//creator") +class DatasetContributorResource(Resource): + @api.doc("creator") + @api.response(200, "Success") + @api.response(400, "Validation Error") + # @api.marshal_with(dataset_contributor) + def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) - dataset_contributor_ = dataset_.dataset_contributor.update(data) + dataset_creator_ = dataset_.dataset_contributors + return [d.to_dict() for d in dataset_creator_ if d.to_dict()["creator"] == True] + + @api.doc("update creator") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def post(self, study_id: int, dataset_id: int): + data: Union[Any, dict] = request.json + data_obj = model.Dataset.query.get(dataset_id) + list_of_elements = [] + for i in data: + + i["creator"] = True + + if "id" in i and i["id"]: + dataset_creator_ = model.DatasetContributor.query.get( + i["id"] + ) + if not dataset_creator_: + return f"Study link {i['id']} Id is not found", 404 + dataset_creator_.update(i) + list_of_elements.append(dataset_creator_.to_dict()) + elif "id" not in i or not i["id"]: + dataset_creator_ = model.DatasetContributor.from_data( + data_obj, i + ) + model.db.session.add(dataset_creator_) + list_of_elements.append(dataset_creator_.to_dict()) model.db.session.commit() - return dataset_contributor_.to_dict() + return list_of_elements diff --git a/model/__init__.py b/model/__init__.py index 0b42706b..63c4c7b7 100644 --- a/model/__init__.py +++ b/model/__init__.py @@ -24,7 +24,6 @@ from .dataset_metadata.dataset_rights import DatasetRights from .dataset_metadata.dataset_subject import DatasetSubject from .dataset_metadata.dataset_title import DatasetTitle -from .dataset_versions import DatasetVersions from .db import db from .email_verification import EmailVerification from .invited_study_contributor import StudyInvitedContributor @@ -57,9 +56,8 @@ __all__ = [ "Study", "Dataset", - "DatasetVersions", - "Version", "Participant", + "Version", "db", "User", "DatasetContributor", diff --git a/model/dataset_metadata/dataset_contributor.py b/model/dataset_metadata/dataset_contributor.py index 4e173c1f..ca534125 100644 --- a/model/dataset_metadata/dataset_contributor.py +++ b/model/dataset_metadata/dataset_contributor.py @@ -36,7 +36,7 @@ def to_dict(self): "name": self.name, "name_type": self.name_type, "name_identifier": self.name_identifier, - "name_identifier_scheme": self.name_identifier_schemename, + "name_identifier_scheme": self.name_identifier_scheme, "name_identifier_scheme_uri": self.name_identifier_scheme_uri, "creator": self.creator, "contributor_type": self.contributor_type, @@ -57,5 +57,6 @@ def update(self, data: dict): self.name_identifier_scheme = data["name_identifier_scheme"] self.name_identifier_scheme_uri = data["name_identifier_scheme_uri"] self.creator = data["creator"] - self.contributor_type = data["contributor_type"] + if "contributor_type" in data: + self.contributor_type = data["contributor_type"] self.affiliations = data["affiliations"] diff --git a/model/dataset_metadata/dataset_contributor_affiliation.py b/model/dataset_metadata/dataset_contributor_affiliation.py index 159c4de3..50664015 100644 --- a/model/dataset_metadata/dataset_contributor_affiliation.py +++ b/model/dataset_metadata/dataset_contributor_affiliation.py @@ -18,9 +18,9 @@ def __init__(self, dataset): identifier_scheme_uri = db.Column(db.String, nullable=False) created_at = db.Column(db.BigInteger, nullable=False) - dataset_contributors = db.relationship( - "DatasetContributor", back_populates="dataset_contributor_affiliation" - ) + # dataset_contributors = db.relationship( + # "DatasetContributor", back_populates="dataset_contributor_affiliation" + # ) contributor_id = db.Column( db.String, db.ForeignKey("dataset_contributor.id"), nullable=False ) diff --git a/model/dataset_metadata/dataset_record_keys.py b/model/dataset_metadata/dataset_record_keys.py index 7e032b39..0a877c51 100644 --- a/model/dataset_metadata/dataset_record_keys.py +++ b/model/dataset_metadata/dataset_record_keys.py @@ -26,5 +26,6 @@ def from_data(dataset, data: dict): return dataset_record_keys def update(self, data: dict): - self.key_type = data["key_type"] - self.key_details = data["key_details"] + self.key_type = data["type"] + if "key_details" in data: + self.key_details = data["key_details"] diff --git a/model/dataset_versions.py b/model/dataset_versions.py deleted file mode 100644 index 1bff5a82..00000000 --- a/model/dataset_versions.py +++ /dev/null @@ -1,35 +0,0 @@ -from .version import Version - - -class DatasetVersions: - def __init__( - self, - last_published: Version, - last_modified: Version, - id: str, # pylint: disable = redefined-builtin - ): - self.latest_version = last_modified.id - self.published_version = last_published.id - self.last_modified = last_modified.modified - self.last_published = last_published.modified - self.id = id - - def to_dict(self): - return { - "latest_version": self.latest_version, - "published_version": self.published_version, - "last_modified": self.last_modified, - "last_published": self.last_published, - "id": self.id, - } - - @staticmethod - def from_data(data: dict): - dataset_versions = DatasetVersions( - id=data["id"], - last_published=data["last_published"], - last_modified=data["last_modified"], - ) - dataset_versions.latest_version = data["latest_version"] - dataset_versions.published_version = data["published_version"] - return dataset_versions diff --git a/model/participant.py b/model/participant.py index 669b1834..9653504e 100644 --- a/model/participant.py +++ b/model/participant.py @@ -2,8 +2,7 @@ import uuid from datetime import timezone -import model - +from .version import version_participants from .db import db from .study import Study @@ -30,7 +29,7 @@ def __init__(self, study): dataset_versions = db.relationship( "Version", back_populates="participants", - secondary=model.version.version_participants, + secondary=version_participants, ) def to_dict(self): From 6e41496e0d93496075e490088351137d5fb311d9 Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 16 Oct 2023 10:40:27 -0700 Subject: [PATCH 08/46] chore: refactor dataset metadata endpoints --- apis/dataset_metadata/dataset_access.py | 6 +-- .../dataset_alternate_identifier.py | 17 +++++-- apis/dataset_metadata/dataset_consent.py | 8 +-- apis/dataset_metadata/dataset_date.py | 47 +++++++++++++++--- .../dataset_de_ident_level.py | 6 +-- apis/dataset_metadata/dataset_description.py | 5 +- apis/dataset_metadata/dataset_funder.py | 32 +++++++++--- .../dataset_managing_organization.py | 33 ------------- apis/dataset_metadata/dataset_other.py | 28 ++++++++++- apis/dataset_metadata/dataset_publisher.py | 35 ------------- apis/dataset_metadata/dataset_record_keys.py | 14 +++--- apis/dataset_metadata/dataset_related_item.py | 49 +++++++++++++------ apis/dataset_metadata/dataset_rights.py | 43 +++++++++++----- apis/dataset_metadata/dataset_subject.py | 43 +++++++++++----- apis/dataset_metadata/dataset_title.py | 8 ++- .../dataset_managing_organization.py | 35 ------------- model/dataset_metadata/dataset_other.py | 24 ++++++--- model/study_metadata/study_identification.py | 2 +- 18 files changed, 248 insertions(+), 187 deletions(-) delete mode 100644 apis/dataset_metadata/dataset_managing_organization.py delete mode 100644 apis/dataset_metadata/dataset_publisher.py delete mode 100644 model/dataset_metadata/dataset_managing_organization.py diff --git a/apis/dataset_metadata/dataset_access.py b/apis/dataset_metadata/dataset_access.py index 13051b4c..cd79ba86 100644 --- a/apis/dataset_metadata/dataset_access.py +++ b/apis/dataset_metadata/dataset_access.py @@ -25,10 +25,10 @@ class DatasetAccessResource(Resource): def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) dataset_access_ = dataset_.dataset_access - return [d.to_dict() for d in dataset_access_] + return dataset_access_.to_dict() def put(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) - dataset_access_ = dataset_.dataset_access.update(request.json) + dataset_.dataset_access.update(request.json) model.db.session.commit() - return dataset_access_.to_dict() + return dataset_.dataset_access.to_dict() diff --git a/apis/dataset_metadata/dataset_alternate_identifier.py b/apis/dataset_metadata/dataset_alternate_identifier.py index 03e09e90..cba63a1a 100644 --- a/apis/dataset_metadata/dataset_alternate_identifier.py +++ b/apis/dataset_metadata/dataset_alternate_identifier.py @@ -28,6 +28,9 @@ def get(self, study_id: int, dataset_id: int): dataset_identifier_ = dataset_.dataset_alternate_identifier return [d.to_dict() for d in dataset_identifier_] + @api.doc("update identifier") + @api.response(200, "Success") + @api.response(400, "Validation Error") def post(self, study_id: int, dataset_id: int): data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) @@ -50,15 +53,19 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return list_of_elements -# not ready + @api.route( "/study//dataset//alternative-identifier/" ) class DatasetAlternateIdentifierUpdate(Resource): + @api.doc("delete identifier") + @api.response(200, "Success") + @api.response(400, "Validation Error") def delete(self, study_id: int, dataset_id: int, identifier_id: int): dataset_identifier_ = model.DatasetAlternateIdentifier.query.get( - identifier_id - ) - dataset_identifier_.update(request.json) + identifier_id) + + model.db.session.delete(dataset_identifier_) model.db.session.commit() - return dataset_identifier_.to_dict() + + return 204 diff --git a/apis/dataset_metadata/dataset_consent.py b/apis/dataset_metadata/dataset_consent.py index e67c7baa..cb0a54ca 100644 --- a/apis/dataset_metadata/dataset_consent.py +++ b/apis/dataset_metadata/dataset_consent.py @@ -24,15 +24,15 @@ class DatasetConsentResource(Resource): @api.doc("consent") @api.response(200, "Success") @api.response(400, "Validation Error") - @api.marshal_with(dataset_consent) + # @api.marshal_with(dataset_consent) def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) dataset_consent_ = dataset_.dataset_consent - return [d.to_dict() for d in dataset_consent_] + return dataset_consent_.to_dict() def put(self, study_id: int, dataset_id: int): data = request.json dataset_ = model.Dataset.query.get(dataset_id) - dataset_consent_ = dataset_.dataset_consent.update(data) + dataset_.dataset_consent.update(data) model.db.session.commit() - return dataset_consent_.to_dict() + return dataset_.dataset_consent.to_dict() diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index d4b14898..7b26a7dc 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -1,3 +1,5 @@ +from typing import Union, Any + from flask import request from flask_restx import Resource, fields @@ -9,8 +11,8 @@ { "id": fields.String(required=True), "date": fields.String(required=True), - "date_type": fields.String(required=True), - "data_information": fields.String(required=True), + "type": fields.String(required=True), + "information": fields.String(required=True), }, ) @@ -20,15 +22,46 @@ class DatasetDateResource(Resource): @api.doc("date") @api.response(200, "Success") @api.response(400, "Validation Error") - @api.marshal_with(dataset_date) + # @api.marshal_with(dataset_date) def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) dataset_date_ = dataset_.dataset_date return [d.to_dict() for d in dataset_date_] + @api.doc("update date") + @api.response(200, "Success") + @api.response(400, "Validation Error") def post(self, study_id: int, dataset_id: int): - data = request.json - dataset_ = model.Dataset.query.get(dataset_id) - dataset_date_ = dataset_.dataset_date.update(data) + data: Union[Any, dict] = request.json + data_obj = model.Dataset.query.get(dataset_id) + list_of_elements = [] + for i in data: + if "id" in i and i["id"]: + dataset_date_ = model.DatasetDate.query.get( + i["id"] + ) + if not dataset_date_: + return f"Study link {i['id']} Id is not found", 404 + dataset_date_.update(i) + list_of_elements.append(dataset_date_.to_dict()) + elif "id" not in i or not i["id"]: + dataset_date_ = model.DatasetDate.from_data( + data_obj, i + ) + model.db.session.add(dataset_date_) + list_of_elements.append(dataset_date_.to_dict()) + model.db.session.commit() + return list_of_elements + + +@api.route("/study//dataset//date") +class DatasetDateResource(Resource): + @api.doc("delete date") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete(self, study_id: int, dataset_id: int, date_id: int): + date_ = model.DatasetDate.query.get(date_id) + + model.db.session.delete(date_) model.db.session.commit() - return dataset_date_.to_dict() + return 204 diff --git a/apis/dataset_metadata/dataset_de_ident_level.py b/apis/dataset_metadata/dataset_de_ident_level.py index d9ea2f4d..155a3959 100644 --- a/apis/dataset_metadata/dataset_de_ident_level.py +++ b/apis/dataset_metadata/dataset_de_ident_level.py @@ -28,11 +28,11 @@ class DatasetDeIdentLevelResource(Resource): def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) de_ident_level_ = dataset_.dataset_de_ident_level - return [d.to_dict() for d in de_ident_level_] + return de_ident_level_.to_dict() def put(self, study_id: int, dataset_id: int): data = request.json dataset_ = model.Dataset.query.get(dataset_id) - de_ident_level_ = dataset_.dataset_de_ident_level.update(data) + dataset_.dataset_de_ident_level.update(data) model.db.session.commit() - return de_ident_level_.to_dict() + return dataset_.dataset_de_ident_level.to_dict() diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index ca4e0fd1..7d12846f 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -51,8 +51,11 @@ def post(self, study_id: int, dataset_id: int): "/study//dataset//description/" ) class DatasetDescriptionUpdate(Resource): + @api.doc("delete description") + @api.response(200, "Success") + @api.response(400, "Validation Error") def delete(self, study_id: int, dataset_id: int, description_id: int): dataset_description_ = model.DatasetDescription.query.get(description_id) model.db.session.delete(dataset_description_) model.db.session.commit() - return dataset_description_.to_dict() + return 204 diff --git a/apis/dataset_metadata/dataset_funder.py b/apis/dataset_metadata/dataset_funder.py index 9826c655..0f927d36 100644 --- a/apis/dataset_metadata/dataset_funder.py +++ b/apis/dataset_metadata/dataset_funder.py @@ -32,19 +32,39 @@ def get(self, study_id: int, dataset_id: int): dataset_funder_ = dataset_.dataset_funder return [d.to_dict() for d in dataset_funder_] + @api.doc("update funder") + @api.response(200, "Success") + @api.response(400, "Validation Error") def post(self, study_id: int, dataset_id: int): data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) - dataset_funder_ = model.DatasetFunder.from_data(data_obj, data) - model.db.session.add(dataset_funder_) + list_of_elements = [] + for i in data: + if "id" in i and i["id"]: + dataset_funder_ = model.DatasetFunder.query.get( + i["id"]) + if not dataset_funder_: + return f"Study link {i['id']} Id is not found", 404 + dataset_funder_.update(i) + list_of_elements.append(dataset_funder_.to_dict()) + elif "id" not in i or not i["id"]: + dataset_funder_ = model.DatasetFunder.from_data( + data_obj, i) + model.db.session.add(dataset_funder_) + list_of_elements.append(dataset_funder_.to_dict()) model.db.session.commit() - return dataset_funder_.to_dict() + return list_of_elements @api.route("/study//dataset//funder/") class DatasetFunderUpdate(Resource): - def put(self, study_id: int, dataset_id: int, funder_id: int): + @api.doc("delete funder") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete(self, study_id: int, dataset_id: int, funder_id: int): dataset_funder_ = model.DatasetFunder.query.get(funder_id) - dataset_funder_.update(request.json) + + model.db.session.delete(dataset_funder_) model.db.session.commit() - return dataset_funder_.to_dict() + + return 204 diff --git a/apis/dataset_metadata/dataset_managing_organization.py b/apis/dataset_metadata/dataset_managing_organization.py deleted file mode 100644 index 4a9f778b..00000000 --- a/apis/dataset_metadata/dataset_managing_organization.py +++ /dev/null @@ -1,33 +0,0 @@ -from flask import request -from flask_restx import Resource, fields - -import model -from apis.dataset_metadata_namespace import api - -managing_organization = api.model( - "DatasetManagingOrganization", - { - "id": fields.String(required=True), - "name": fields.String(required=True), - "ror_id": fields.String(required=True), - }, -) - - -@api.route("/study//dataset//metadata/managing_organization") -class DatasetManagingOrganizationResource(Resource): - @api.doc("managing_organization") - @api.response(200, "Success") - @api.response(400, "Validation Error") - @api.marshal_with(managing_organization) - def get(self, study_id: int, dataset_id: int): - dataset_ = model.Dataset.query.get(dataset_id) - managing_organization_ = dataset_.dataset_managing_organization - return [d.to_dict() for d in managing_organization_] - - def put(self, study_id: int, dataset_id: int): - data = request.json - dataset_ = model.Dataset.query.get(dataset_id) - managing_organization_ = dataset_.dataset_managing_organization.update(data) - model.db.session.commit() - return managing_organization_.to_dict() diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index ab50901b..ebfa6dbe 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -1,3 +1,5 @@ +from typing import Union, Any + from flask import request from flask_restx import Resource, fields @@ -27,11 +29,33 @@ class DatasetOtherResource(Resource): def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) dataset_other_ = dataset_.dataset_other - return [d.to_dict() for d in dataset_other_] + return dataset_other_.to_dict() def put(self, study_id: int, dataset_id: int): data = request.json dataset_ = model.Dataset.query.get(dataset_id) - dataset_other_ = dataset_.dataset_other.update(data) + dataset_.dataset_other.update(data) model.db.session.commit() + return dataset_.dataset_other.to_dict() + + +@api.route("/study//dataset//publisher") +class DatasetPublisherResource(Resource): + @api.doc("publisher") + @api.response(200, "Success") + @api.response(400, "Validation Error") + # @api.marshal_with(dataset_publisher) + def get(self, study_id: int, dataset_id: int): + dataset_ = model.Dataset.query.get(dataset_id) + dataset_other_ = dataset_.dataset_other return dataset_other_.to_dict() + + @api.doc("update publisher") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def put(self, study_id: int, dataset_id: int): + data = request.json + dataset_ = model.Dataset.query.get(dataset_id) + dataset_.dataset_other.update(data) + model.db.session.commit() + return dataset_.dataset_other.to_dict() diff --git a/apis/dataset_metadata/dataset_publisher.py b/apis/dataset_metadata/dataset_publisher.py deleted file mode 100644 index 387976dc..00000000 --- a/apis/dataset_metadata/dataset_publisher.py +++ /dev/null @@ -1,35 +0,0 @@ -from typing import Any, Union - -from flask import request -from flask_restx import Resource - -import model -from apis.dataset_metadata_namespace import api - -# dataset_publisher = api.model( -# "DatasetPublisher", -# { -# }, -# ) - - -@api.route("/study//dataset//publisher") -class DatasetFunderResource(Resource): - @api.doc("funder") - @api.response(200, "Success") - @api.response(400, "Validation Error") - # @api.marshal_with(dataset_publisher) - def get(self, study_id: int, dataset_id: int): - dataset_ = model.Dataset.query.get(dataset_id) - dataset_other_ = dataset_.dataset_other - return [d.to_dict() for d in dataset_other_] - - def post(self, study_id: int, dataset_id: int): - data: Union[Any, dict] = request.json - data_obj = model.Dataset.query.get(dataset_id) - dataset_other_ = model.DatasetOther.from_data(data_obj, data) - model.db.session.add(dataset_other_) - model.db.session.commit() - return dataset_other_.to_dict() - - diff --git a/apis/dataset_metadata/dataset_record_keys.py b/apis/dataset_metadata/dataset_record_keys.py index ae826589..da7e3667 100644 --- a/apis/dataset_metadata/dataset_record_keys.py +++ b/apis/dataset_metadata/dataset_record_keys.py @@ -8,26 +8,28 @@ "DatasetRecordKeys", { "id": fields.String(required=True), - "key_type": fields.String(required=True), + "key_type": fields.String(required=False), "key_details": fields.String(required=True), }, ) -@api.route("/study//dataset//record_keys") +@api.route("/study//dataset//record-keys") class DatasetRecordKeysResource(Resource): @api.doc("record_keys") @api.response(200, "Success") @api.response(400, "Validation Error") - @api.marshal_with(dataset_record_keys) + # @api.marshal_with(dataset_record_keys) def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) + dataset_record_keys_ = dataset_.dataset_record_keys - return [d.to_dict() for d in dataset_record_keys_] + return dataset_record_keys_.to_dict() def put(self, study_id: int, dataset_id: int): data = request.json dataset_ = model.Dataset.query.get(dataset_id) - dataset_record_keys_ = dataset_.dataset_de_ident_level.update(data) + dataset_.dataset_record_keys.update(data) model.db.session.commit() - return dataset_record_keys_.to_dict() + return dataset_.dataset_record_keys.to_dict(), 201 + diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index ece627f8..a9069e64 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -18,7 +18,7 @@ @api.route("/study//dataset//related-item") class DatasetRelatedItemResource(Resource): - @api.doc("related_item") + @api.doc("related item") @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_related_item) @@ -27,21 +27,40 @@ def get(self, study_id: int, dataset_id: int): dataset_related_item_ = dataset_.dataset_related_item return [d.to_dict() for d in dataset_related_item_] + @api.doc("update related item") + @api.response(200, "Success") + @api.response(400, "Validation Error") def post(self, study_id: int, dataset_id: int): data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) - dataset_related_item_ = model.DatasetRelatedItem.from_data(data_obj, data) - model.db.session.add(dataset_related_item_) + list_of_elements = [] + for i in data: + if "id" in i and i["id"]: + dataset_related_item_ = model.DatasetRelatedItem.query.get( + i["id"]) + if not dataset_related_item_: + return f"Study link {i['id']} Id is not found", 404 + dataset_related_item_.update(i) + list_of_elements.append(dataset_related_item_.to_dict()) + elif "id" not in i or not i["id"]: + dataset_related_item_ = model.DatasetRelatedItem.from_data( + data_obj, i) + model.db.session.add(dataset_related_item_) + list_of_elements.append(dataset_related_item_.to_dict()) model.db.session.commit() - return dataset_related_item_.to_dict() - - @api.route( - "/study//dataset//related-item/" - ) - class DatasetRelatedItemUpdate(Resource): - def put(self, study_id: int, dataset_id: int, related_item_id: int): - data = request.json - dataset_related_item_ = model.DatasetRelatedItem.query.get(related_item_id) - dataset_related_item_.update(data) - model.db.session.commit() - return dataset_related_item_.to_dict() + return list_of_elements + + +@api.route("/study//dataset//related-item/") +class DatasetRelatedItemUpdate(Resource): + @api.doc("update related item") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete(self, study_id: int, dataset_id: int, related_item_id: int): + data = request.json + dataset_related_item_ = model.DatasetRelatedItem.query.get(related_item_id) + + model.db.session.delete(dataset_related_item_) + model.db.session.commit() + + return 204 diff --git a/apis/dataset_metadata/dataset_rights.py b/apis/dataset_metadata/dataset_rights.py index 4f968896..58676b94 100644 --- a/apis/dataset_metadata/dataset_rights.py +++ b/apis/dataset_metadata/dataset_rights.py @@ -30,18 +30,39 @@ def get(self, study_id: int, dataset_id: int): dataset_rights_ = dataset_.dataset_rights return [d.to_dict() for d in dataset_rights_] + @api.doc("update rights") + @api.response(200, "Success") + @api.response(400, "Validation Error") def post(self, study_id: int, dataset_id: int): data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) - dataset_rights_ = model.DatasetRights.from_data(data_obj, data) - model.db.session.add(dataset_rights_) + list_of_elements = [] + for i in data: + if "id" in i and i["id"]: + dataset_rights_ = model.DatasetRights.query.get( + i["id"]) + if not dataset_rights_: + return f"Study link {i['id']} Id is not found", 404 + dataset_rights_.update(i) + list_of_elements.append(dataset_rights_.to_dict()) + elif "id" not in i or not i["id"]: + dataset_rights_ = model.DatasetRights.from_data( + data_obj, i) + model.db.session.add(dataset_rights_) + list_of_elements.append(dataset_rights_.to_dict()) model.db.session.commit() - return dataset_rights_.to_dict() - - @api.route("/study//dataset//rights/") - class DatasetRightsUpdate(Resource): - def put(self, study_id: int, dataset_id: int, rights_id: int): - dataset_rights_ = model.DatasetRights.query.get(rights_id) - dataset_rights_.update(request.json) - model.db.session.commit() - return dataset_rights_.to_dict() + return list_of_elements + + +@api.route("/study//dataset//rights/") +class DatasetRightsUpdate(Resource): + @api.doc("delete rights") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete(self, study_id: int, dataset_id: int, rights_id: int): + dataset_rights_ = model.DatasetRights.query.get(rights_id) + + model.db.session.delete(dataset_rights_) + model.db.session.commit() + + return 204 diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index 13c164f2..5cf6e8bc 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -31,18 +31,39 @@ def get(self, study_id: int, dataset_id: int): dataset_subject_ = dataset_.dataset_subject return [d.to_dict() for d in dataset_subject_] + @api.doc("update subject") + @api.response(200, "Success") + @api.response(400, "Validation Error") def post(self, study_id: int, dataset_id: int): data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) - dataset_subject_ = model.DatasetSubject.from_data(data_obj, data) - model.db.session.add(dataset_subject_) + list_of_elements = [] + for i in data: + if "id" in i and i["id"]: + dataset_subject_ = model.DatasetSubject.query.get( + i["id"]) + if not dataset_subject_: + return f"Study link {i['id']} Id is not found", 404 + dataset_subject_.update(i) + list_of_elements.append(dataset_subject_.to_dict()) + elif "id" not in i or not i["id"]: + dataset_subject_ = model.DatasetSubject.from_data( + data_obj, i) + model.db.session.add(dataset_subject_) + list_of_elements.append(dataset_subject_.to_dict()) model.db.session.commit() - return dataset_subject_.to_dict() - - @api.route("/study//dataset//subject/") - class DatasetSubjectUpdate(Resource): - def put(self, study_id: int, dataset_id: int, subject_id: int): - dataset_subject_ = model.DatasetSubject.query.get(subject_id) - dataset_subject_.update(request.json) - model.db.session.commit() - return dataset_subject_.to_dict() + return list_of_elements + + +@api.route("/study//dataset//subject/") +class DatasetSubjectUpdate(Resource): + @api.doc("delete subject") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete(self, study_id: int, dataset_id: int, subject_id: int): + dataset_subject_ = model.DatasetSubject.query.get(subject_id) + + model.db.session.delete(dataset_subject_) + model.db.session.commit() + + return 204 diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index cbf61da9..37203536 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -28,6 +28,9 @@ def get(self, study_id: int, dataset_id: int): dataset_title_ = dataset_.dataset_title return [d.to_dict() for d in dataset_title_] + @api.doc("update title") + @api.response(200, "Success") + @api.response(400, "Validation Error") def post(self, study_id: int, dataset_id: int): data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) @@ -46,8 +49,11 @@ def post(self, study_id: int, dataset_id: int): @api.route("/study//dataset//title/") class DatasetDescriptionUpdate(Resource): + @api.doc("delete title") + @api.response(200, "Success") + @api.response(400, "Validation Error") def delete(self, study_id: int, dataset_id: int, title_id: int): dataset_title_ = model.DatasetTitle.query.get(title_id) model.db.session.delete(dataset_title_) model.db.session.commit() - return dataset_title_.to_dict() + return 204 diff --git a/model/dataset_metadata/dataset_managing_organization.py b/model/dataset_metadata/dataset_managing_organization.py deleted file mode 100644 index 76548f26..00000000 --- a/model/dataset_metadata/dataset_managing_organization.py +++ /dev/null @@ -1,35 +0,0 @@ -import uuid - -from ..db import db - - -class DatasetManagingOrganization(db.Model): # type: ignore - def __init__(self, dataset): - self.id = str(uuid.uuid4()) - self.dataset = dataset - - __tablename__ = "dataset_managing_organization" - id = db.Column(db.CHAR(36), primary_key=True) - - name = db.Column(db.String, nullable=False) - ror_id = db.Column(db.String, nullable=False) - - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) - dataset = db.relationship("Dataset", back_populates="dataset_managing_organization") - - def to_dict(self): - return { - "id": self.id, - "name": self.name, - "ror_id": self.ror_id, - } - - @staticmethod - def from_data(dataset, data: dict): - dataset_managing_organization = DatasetManagingOrganization(dataset) - dataset_managing_organization.update(data) - return dataset_managing_organization - - def update(self, data: dict): - self.name = data["name"] - self.ror_id = data["ror_id"] diff --git a/model/dataset_metadata/dataset_other.py b/model/dataset_metadata/dataset_other.py index 9af5e49d..22ba8199 100644 --- a/model/dataset_metadata/dataset_other.py +++ b/model/dataset_metadata/dataset_other.py @@ -49,11 +49,19 @@ def from_data(dataset, data: dict): return dataset_other def update(self, data: dict): - self.language = data["language"] - self.managing_organization_name = data["managing_organization_name"] - self.managing_organization_ror_id = data["managing_organization_ror_id"] - self.size = data["size"] - self.acknowledgement = data["acknowledgement"] - self.standards_followed = data["standards_followed"] - self.publisher = data["publisher"] - self.resource_type = data["resource_type"] + 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 "acknowledgement" in data: + self.acknowledgement = data["acknowledgement"] + if "standards_followed" in data: + self.standards_followed = data["standards_followed"] + if "publisher" in data: + self.publisher = data["publisher"] + if "resource_type" in data: + self.resource_type = data["resource_type"] diff --git a/model/study_metadata/study_identification.py b/model/study_metadata/study_identification.py index 7af40cc3..14865b73 100644 --- a/model/study_metadata/study_identification.py +++ b/model/study_metadata/study_identification.py @@ -50,7 +50,7 @@ def update(self, data: dict): """Updates the study from a dictionary""" self.identifier = data["identifier"] self.identifier_type = data["identifier_type"] - self.identifier_domain = data["identifier_domain"] + self.identifier_domain = data["identifier_domain"] if "identifier_domain" in data else "" self.identifier_link = data["identifier_link"] self.study.touch() From 38439678f3407be21024ec911a4603bcec1a4ddb Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 16 Oct 2023 12:40:12 -0700 Subject: [PATCH 09/46] style: flake8 errors --- apis/dataset_metadata/dataset_access.py | 5 ++++- .../dataset_alternate_identifier.py | 1 - apis/dataset_metadata/dataset_consent.py | 3 +++ apis/dataset_metadata/dataset_contributor.py | 22 ++++++++++++++----- apis/dataset_metadata/dataset_date.py | 2 +- .../dataset_de_ident_level.py | 5 ++++- apis/dataset_metadata/dataset_description.py | 4 +++- apis/dataset_metadata/dataset_other.py | 2 -- apis/dataset_metadata/dataset_record_keys.py | 6 +++-- apis/dataset_metadata/dataset_related_item.py | 3 +-- model/dataset_metadata/dataset_consent.py | 3 ++- .../dataset_de_ident_level.py | 3 ++- model/study.py | 1 - 13 files changed, 41 insertions(+), 19 deletions(-) diff --git a/apis/dataset_metadata/dataset_access.py b/apis/dataset_metadata/dataset_access.py index cd79ba86..e6ca9fad 100644 --- a/apis/dataset_metadata/dataset_access.py +++ b/apis/dataset_metadata/dataset_access.py @@ -21,12 +21,15 @@ class DatasetAccessResource(Resource): @api.doc("access") @api.response(200, "Success") @api.response(400, "Validation Error") - @api.marshal_with(dataset_access) + # @api.marshal_with(dataset_access) def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) dataset_access_ = dataset_.dataset_access return dataset_access_.to_dict() + @api.doc("update access") + @api.response(200, "Success") + @api.response(400, "Validation Error") def put(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_access.update(request.json) diff --git a/apis/dataset_metadata/dataset_alternate_identifier.py b/apis/dataset_metadata/dataset_alternate_identifier.py index cba63a1a..18f93b61 100644 --- a/apis/dataset_metadata/dataset_alternate_identifier.py +++ b/apis/dataset_metadata/dataset_alternate_identifier.py @@ -53,7 +53,6 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return list_of_elements - @api.route( "/study//dataset//alternative-identifier/" ) diff --git a/apis/dataset_metadata/dataset_consent.py b/apis/dataset_metadata/dataset_consent.py index cb0a54ca..b9714ba4 100644 --- a/apis/dataset_metadata/dataset_consent.py +++ b/apis/dataset_metadata/dataset_consent.py @@ -30,6 +30,9 @@ def get(self, study_id: int, dataset_id: int): dataset_consent_ = dataset_.dataset_consent return dataset_consent_.to_dict() + @api.doc("update consent") + @api.response(200, "Success") + @api.response(400, "Validation Error") def put(self, study_id: int, dataset_id: int): data = request.json dataset_ = model.Dataset.query.get(dataset_id) diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index 3d5ebfd7..d61ab4fe 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -21,8 +21,7 @@ class DatasetContributorResource(Resource): def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) dataset_contributor_ = dataset_.dataset_contributors - print("444444444444444444444444",[d.to_dict()["creator"] for d in dataset_contributor_ if d.to_dict()["creator"] == True]) - return [d.to_dict() for d in dataset_contributor_ if d.to_dict()["creator"] == False] + return [d.to_dict() for d in dataset_contributor_ if not d.to_dict()["creator"]] @api.doc("update contributor") @api.response(200, "Success") @@ -67,7 +66,7 @@ def delete(self, study_id: int, dataset_id: int, contributor_id: int): @api.route("/study//dataset//creator") -class DatasetContributorResource(Resource): +class DatasetCreatorResource(Resource): @api.doc("creator") @api.response(200, "Success") @api.response(400, "Validation Error") @@ -75,7 +74,7 @@ class DatasetContributorResource(Resource): def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) dataset_creator_ = dataset_.dataset_contributors - return [d.to_dict() for d in dataset_creator_ if d.to_dict()["creator"] == True] + return [d.to_dict() for d in dataset_creator_ if d.to_dict()["creator"]] @api.doc("update creator") @api.response(200, "Success") @@ -87,7 +86,6 @@ def post(self, study_id: int, dataset_id: int): for i in data: i["creator"] = True - if "id" in i and i["id"]: dataset_creator_ = model.DatasetContributor.query.get( i["id"] @@ -104,3 +102,17 @@ def post(self, study_id: int, dataset_id: int): list_of_elements.append(dataset_creator_.to_dict()) model.db.session.commit() return list_of_elements + + +@api.route("/study//dataset//creator/") +class DatasetCreatorDelete(Resource): + @api.doc("delete creator") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete(self, study_id: int, dataset_id: int, creator_id: int): + + dataset_creator_ = model.DatasetContributor.query.get(creator_id) + model.db.session.delete(dataset_creator_) + model.db.session.commit() + + return 204 diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index 7b26a7dc..a5bd9b85 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -55,7 +55,7 @@ def post(self, study_id: int, dataset_id: int): @api.route("/study//dataset//date") -class DatasetDateResource(Resource): +class DatasetDateDeleteResource(Resource): @api.doc("delete date") @api.response(200, "Success") @api.response(400, "Validation Error") diff --git a/apis/dataset_metadata/dataset_de_ident_level.py b/apis/dataset_metadata/dataset_de_ident_level.py index 155a3959..48b09d8d 100644 --- a/apis/dataset_metadata/dataset_de_ident_level.py +++ b/apis/dataset_metadata/dataset_de_ident_level.py @@ -24,12 +24,15 @@ class DatasetDeIdentLevelResource(Resource): @api.doc("de_ident_level") @api.response(200, "Success") @api.response(400, "Validation Error") - @api.marshal_with(de_ident_level) + # @api.marshal_with(de_ident_level) def get(self, study_id: int, dataset_id: int): dataset_ = model.Dataset.query.get(dataset_id) de_ident_level_ = dataset_.dataset_de_ident_level return de_ident_level_.to_dict() + @api.doc("update ident level") + @api.response(200, "Success") + @api.response(400, "Validation Error") def put(self, study_id: int, dataset_id: int): data = request.json dataset_ = model.Dataset.query.get(dataset_id) diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 7d12846f..3de66fac 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -27,7 +27,7 @@ def get(self, study_id: int, dataset_id: int): dataset_description_ = dataset_.dataset_description return [d.to_dict() for d in dataset_description_] - @api.doc("description update") + @api.doc("update description") @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_description) @@ -56,6 +56,8 @@ class DatasetDescriptionUpdate(Resource): @api.response(400, "Validation Error") def delete(self, study_id: int, dataset_id: int, description_id: int): dataset_description_ = model.DatasetDescription.query.get(description_id) + model.db.session.delete(dataset_description_) model.db.session.commit() + return 204 diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index ebfa6dbe..4e6fdf13 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -1,5 +1,3 @@ -from typing import Union, Any - from flask import request from flask_restx import Resource, fields diff --git a/apis/dataset_metadata/dataset_record_keys.py b/apis/dataset_metadata/dataset_record_keys.py index da7e3667..b850564c 100644 --- a/apis/dataset_metadata/dataset_record_keys.py +++ b/apis/dataset_metadata/dataset_record_keys.py @@ -16,7 +16,7 @@ @api.route("/study//dataset//record-keys") class DatasetRecordKeysResource(Resource): - @api.doc("record_keys") + @api.doc("record keys") @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_record_keys) @@ -26,10 +26,12 @@ def get(self, study_id: int, dataset_id: int): dataset_record_keys_ = dataset_.dataset_record_keys return dataset_record_keys_.to_dict() + @api.doc("update record keys") + @api.response(200, "Success") + @api.response(400, "Validation Error") def put(self, study_id: int, dataset_id: int): data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_record_keys.update(data) model.db.session.commit() return dataset_.dataset_record_keys.to_dict(), 201 - diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index a9069e64..d3e43f5a 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -53,11 +53,10 @@ def post(self, study_id: int, dataset_id: int): @api.route("/study//dataset//related-item/") class DatasetRelatedItemUpdate(Resource): - @api.doc("update related item") + @api.doc("delete related item") @api.response(200, "Success") @api.response(400, "Validation Error") def delete(self, study_id: int, dataset_id: int, related_item_id: int): - data = request.json dataset_related_item_ = model.DatasetRelatedItem.query.get(related_item_id) model.db.session.delete(dataset_related_item_) diff --git a/model/dataset_metadata/dataset_consent.py b/model/dataset_metadata/dataset_consent.py index 89e85faa..fad3ab42 100644 --- a/model/dataset_metadata/dataset_consent.py +++ b/model/dataset_metadata/dataset_consent.py @@ -49,4 +49,5 @@ def update(self, data: dict): self.research_type = data["research_type"] self.genetic_only = data["genetic_only"] self.no_methods = data["no_methods"] - self.details = data["details"] + if "details" in data: + self.details = data["details"] diff --git a/model/dataset_metadata/dataset_de_ident_level.py b/model/dataset_metadata/dataset_de_ident_level.py index 2c490ba8..aa7eef5a 100644 --- a/model/dataset_metadata/dataset_de_ident_level.py +++ b/model/dataset_metadata/dataset_de_ident_level.py @@ -49,4 +49,5 @@ def update(self, data: dict): self.dates = data["dates"] self.nonarr = data["nonarr"] self.k_anon = data["k_anon"] - self.details = data["details"] + if "details" in data: + self.details = data["details"] diff --git a/model/study.py b/model/study.py index 4944ce8f..9a504cae 100644 --- a/model/study.py +++ b/model/study.py @@ -9,7 +9,6 @@ from .db import db - class StudyException(Exception): pass From c291d124d02728a515223597d68108276f1401c2 Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 16 Oct 2023 12:43:10 -0700 Subject: [PATCH 10/46] style: poe format --- apis/__init__.py | 4 ++-- .../dataset_alternate_identifier.py | 3 ++- apis/dataset_metadata/dataset_contributor.py | 20 +++++-------------- apis/dataset_metadata/dataset_date.py | 10 +++------- apis/dataset_metadata/dataset_description.py | 4 +--- apis/dataset_metadata/dataset_funder.py | 6 ++---- apis/dataset_metadata/dataset_related_item.py | 6 ++---- apis/dataset_metadata/dataset_rights.py | 6 ++---- apis/dataset_metadata/dataset_subject.py | 6 ++---- model/__init__.py | 8 ++++---- model/dataset.py | 12 ++++++++--- model/dataset_metadata/dataset_access.py | 7 +++++-- model/dataset_metadata/dataset_consent.py | 4 +++- .../dataset_de_ident_level.py | 4 +++- model/dataset_metadata/dataset_other.py | 4 +++- model/dataset_metadata/dataset_readme.py | 5 ++++- model/dataset_metadata/dataset_record_keys.py | 5 ++++- .../dataset_metadata/dataset_related_item.py | 5 +++-- .../dataset_related_item_contributor.py | 6 +++--- .../dataset_related_item_identifier.py | 6 +++--- .../dataset_related_item_other.py | 5 ++++- .../dataset_related_item_title.py | 6 +++--- model/participant.py | 2 +- model/study_metadata/study_description.py | 5 ++++- model/study_metadata/study_design.py | 5 ++++- model/study_metadata/study_eligibility.py | 5 ++++- model/study_metadata/study_identification.py | 4 +++- model/study_metadata/study_ipdsharing.py | 5 ++++- model/study_metadata/study_other.py | 5 ++++- .../study_sponsors_collaborators.py | 5 ++++- model/study_metadata/study_status.py | 5 ++++- 31 files changed, 104 insertions(+), 79 deletions(-) diff --git a/apis/__init__.py b/apis/__init__.py index 4edd1618..836c63bb 100644 --- a/apis/__init__.py +++ b/apis/__init__.py @@ -10,6 +10,7 @@ from .dataset_metadata.dataset_access import api as access from .dataset_metadata.dataset_alternate_identifier import api as alternate_identifier from .dataset_metadata.dataset_consent import api as consent +from .dataset_metadata.dataset_contributor import api as dataset_contributor from .dataset_metadata.dataset_date import api as date from .dataset_metadata.dataset_de_ident_level import api as de_ident_level from .dataset_metadata.dataset_description import api as description @@ -27,7 +28,6 @@ from .dataset_metadata.dataset_related_item_other import api as related_item_other from .dataset_metadata.dataset_related_item_title import api as related_item_title from .dataset_metadata.dataset_rights import api as rights -from .dataset_metadata.dataset_contributor import api as dataset_contributor from .dataset_metadata.dataset_subject import api as subject from .dataset_metadata.dataset_title import api as title from .participant import api as participants_api @@ -100,7 +100,7 @@ "user", "identification", "study_description", - "dataset_contributor" + "dataset_contributor", ] diff --git a/apis/dataset_metadata/dataset_alternate_identifier.py b/apis/dataset_metadata/dataset_alternate_identifier.py index 18f93b61..a37030d0 100644 --- a/apis/dataset_metadata/dataset_alternate_identifier.py +++ b/apis/dataset_metadata/dataset_alternate_identifier.py @@ -62,7 +62,8 @@ class DatasetAlternateIdentifierUpdate(Resource): @api.response(400, "Validation Error") def delete(self, study_id: int, dataset_id: int, identifier_id: int): dataset_identifier_ = model.DatasetAlternateIdentifier.query.get( - identifier_id) + identifier_id + ) model.db.session.delete(dataset_identifier_) model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index d61ab4fe..876767e0 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -1,4 +1,4 @@ -from typing import Union, Any +from typing import Any, Union from flask import request from flask_restx import Resource @@ -33,18 +33,14 @@ def post(self, study_id: int, dataset_id: int): for i in data: i["creator"] = False if "id" in i and i["id"]: - dataset_contributor_ = model.DatasetContributor.query.get( - i["id"] - ) + dataset_contributor_ = model.DatasetContributor.query.get(i["id"]) if not dataset_contributor_: return f"Study link {i['id']} Id is not found", 404 dataset_contributor_.update(i) list_of_elements.append(dataset_contributor_.to_dict()) elif "id" not in i or not i["id"]: - dataset_contributor_ = model.DatasetContributor.from_data( - data_obj, i - ) + dataset_contributor_ = model.DatasetContributor.from_data(data_obj, i) model.db.session.add(dataset_contributor_) list_of_elements.append(dataset_contributor_.to_dict()) model.db.session.commit() @@ -84,20 +80,15 @@ def post(self, study_id: int, dataset_id: int): data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] for i in data: - i["creator"] = True if "id" in i and i["id"]: - dataset_creator_ = model.DatasetContributor.query.get( - i["id"] - ) + dataset_creator_ = model.DatasetContributor.query.get(i["id"]) if not dataset_creator_: return f"Study link {i['id']} Id is not found", 404 dataset_creator_.update(i) list_of_elements.append(dataset_creator_.to_dict()) elif "id" not in i or not i["id"]: - dataset_creator_ = model.DatasetContributor.from_data( - data_obj, i - ) + dataset_creator_ = model.DatasetContributor.from_data(data_obj, i) model.db.session.add(dataset_creator_) list_of_elements.append(dataset_creator_.to_dict()) model.db.session.commit() @@ -110,7 +101,6 @@ class DatasetCreatorDelete(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") def delete(self, study_id: int, dataset_id: int, creator_id: int): - dataset_creator_ = model.DatasetContributor.query.get(creator_id) model.db.session.delete(dataset_creator_) model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index a5bd9b85..8397d9d2 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -1,4 +1,4 @@ -from typing import Union, Any +from typing import Any, Union from flask import request from flask_restx import Resource, fields @@ -37,17 +37,13 @@ def post(self, study_id: int, dataset_id: int): list_of_elements = [] for i in data: if "id" in i and i["id"]: - dataset_date_ = model.DatasetDate.query.get( - i["id"] - ) + dataset_date_ = model.DatasetDate.query.get(i["id"]) if not dataset_date_: return f"Study link {i['id']} Id is not found", 404 dataset_date_.update(i) list_of_elements.append(dataset_date_.to_dict()) elif "id" not in i or not i["id"]: - dataset_date_ = model.DatasetDate.from_data( - data_obj, i - ) + dataset_date_ = model.DatasetDate.from_data(data_obj, i) model.db.session.add(dataset_date_) list_of_elements.append(dataset_date_.to_dict()) model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 3de66fac..a63b552a 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -47,9 +47,7 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return list_of_elements - @api.route( - "/study//dataset//description/" - ) + @api.route("/study//dataset//description/") class DatasetDescriptionUpdate(Resource): @api.doc("delete description") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_funder.py b/apis/dataset_metadata/dataset_funder.py index 0f927d36..8ae2a097 100644 --- a/apis/dataset_metadata/dataset_funder.py +++ b/apis/dataset_metadata/dataset_funder.py @@ -41,15 +41,13 @@ def post(self, study_id: int, dataset_id: int): list_of_elements = [] for i in data: if "id" in i and i["id"]: - dataset_funder_ = model.DatasetFunder.query.get( - i["id"]) + dataset_funder_ = model.DatasetFunder.query.get(i["id"]) if not dataset_funder_: return f"Study link {i['id']} Id is not found", 404 dataset_funder_.update(i) list_of_elements.append(dataset_funder_.to_dict()) elif "id" not in i or not i["id"]: - dataset_funder_ = model.DatasetFunder.from_data( - data_obj, i) + dataset_funder_ = model.DatasetFunder.from_data(data_obj, i) model.db.session.add(dataset_funder_) list_of_elements.append(dataset_funder_.to_dict()) model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index d3e43f5a..4f2a3017 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -36,15 +36,13 @@ def post(self, study_id: int, dataset_id: int): list_of_elements = [] for i in data: if "id" in i and i["id"]: - dataset_related_item_ = model.DatasetRelatedItem.query.get( - i["id"]) + dataset_related_item_ = model.DatasetRelatedItem.query.get(i["id"]) if not dataset_related_item_: return f"Study link {i['id']} Id is not found", 404 dataset_related_item_.update(i) list_of_elements.append(dataset_related_item_.to_dict()) elif "id" not in i or not i["id"]: - dataset_related_item_ = model.DatasetRelatedItem.from_data( - data_obj, i) + dataset_related_item_ = model.DatasetRelatedItem.from_data(data_obj, i) model.db.session.add(dataset_related_item_) list_of_elements.append(dataset_related_item_.to_dict()) model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_rights.py b/apis/dataset_metadata/dataset_rights.py index 58676b94..d80071fc 100644 --- a/apis/dataset_metadata/dataset_rights.py +++ b/apis/dataset_metadata/dataset_rights.py @@ -39,15 +39,13 @@ def post(self, study_id: int, dataset_id: int): list_of_elements = [] for i in data: if "id" in i and i["id"]: - dataset_rights_ = model.DatasetRights.query.get( - i["id"]) + dataset_rights_ = model.DatasetRights.query.get(i["id"]) if not dataset_rights_: return f"Study link {i['id']} Id is not found", 404 dataset_rights_.update(i) list_of_elements.append(dataset_rights_.to_dict()) elif "id" not in i or not i["id"]: - dataset_rights_ = model.DatasetRights.from_data( - data_obj, i) + dataset_rights_ = model.DatasetRights.from_data(data_obj, i) model.db.session.add(dataset_rights_) list_of_elements.append(dataset_rights_.to_dict()) model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index 5cf6e8bc..22f30b63 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -40,15 +40,13 @@ def post(self, study_id: int, dataset_id: int): list_of_elements = [] for i in data: if "id" in i and i["id"]: - dataset_subject_ = model.DatasetSubject.query.get( - i["id"]) + dataset_subject_ = model.DatasetSubject.query.get(i["id"]) if not dataset_subject_: return f"Study link {i['id']} Id is not found", 404 dataset_subject_.update(i) list_of_elements.append(dataset_subject_.to_dict()) elif "id" not in i or not i["id"]: - dataset_subject_ = model.DatasetSubject.from_data( - data_obj, i) + dataset_subject_ = model.DatasetSubject.from_data(data_obj, i) model.db.session.add(dataset_subject_) list_of_elements.append(dataset_subject_.to_dict()) model.db.session.commit() diff --git a/model/__init__.py b/model/__init__.py index 63c4c7b7..371fb631 100644 --- a/model/__init__.py +++ b/model/__init__.py @@ -1,3 +1,4 @@ +from model.dataset_metadata.dataset_contributor import DatasetContributor from model.dataset_metadata.dataset_related_item import DatasetRelatedItem from model.dataset_metadata.dataset_related_item_contributor import ( DatasetRelatedItemContributor, @@ -9,11 +10,9 @@ from model.dataset_metadata.dataset_related_item_title import DatasetRelatedItemTitle from .dataset import Dataset -from model.dataset_metadata.dataset_contributor import DatasetContributor from .dataset_metadata.dataset_access import DatasetAccess from .dataset_metadata.dataset_alternate_identifier import DatasetAlternateIdentifier from .dataset_metadata.dataset_consent import DatasetConsent - from .dataset_metadata.dataset_date import DatasetDate from .dataset_metadata.dataset_de_ident_level import DatasetDeIdentLevel from .dataset_metadata.dataset_description import DatasetDescription @@ -27,6 +26,7 @@ from .db import db from .email_verification import EmailVerification from .invited_study_contributor import StudyInvitedContributor +from .notification import Notification from .participant import Participant from .study import Study, StudyException from .study_contributor import StudyContributor @@ -52,7 +52,7 @@ from .user import User from .user_details import UserDetails from .version import Version -from .notification import Notification + __all__ = [ "Study", "Dataset", @@ -103,5 +103,5 @@ "EmailVerification", "TokenBlacklist", "UserDetails", - "Notification" + "Notification", ] diff --git a/model/dataset.py b/model/dataset.py index 43c7a424..2d736525 100644 --- a/model/dataset.py +++ b/model/dataset.py @@ -84,9 +84,15 @@ def __init__(self, study): back_populates="dataset", cascade="all, delete", ) - dataset_other = db.relationship("DatasetOther", back_populates="dataset", uselist=False) - dataset_readme = db.relationship("DatasetReadme", back_populates="dataset", uselist=False) - dataset_record_keys = db.relationship("DatasetRecordKeys", back_populates="dataset", uselist=False) + dataset_other = db.relationship( + "DatasetOther", back_populates="dataset", uselist=False + ) + dataset_readme = db.relationship( + "DatasetReadme", back_populates="dataset", uselist=False + ) + dataset_record_keys = db.relationship( + "DatasetRecordKeys", back_populates="dataset", uselist=False + ) dataset_related_item = db.relationship( "DatasetRelatedItem", back_populates="dataset" ) diff --git a/model/dataset_metadata/dataset_access.py b/model/dataset_metadata/dataset_access.py index 155e63d5..00148415 100644 --- a/model/dataset_metadata/dataset_access.py +++ b/model/dataset_metadata/dataset_access.py @@ -1,6 +1,7 @@ -from model import Dataset import datetime +from model import Dataset + from ..db import db @@ -18,7 +19,9 @@ def __init__(self, dataset): url = db.Column(db.String, nullable=False) url_last_checked = db.Column(db.BigInteger, nullable=True) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), primary_key=True, 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_access") def to_dict(self): diff --git a/model/dataset_metadata/dataset_consent.py b/model/dataset_metadata/dataset_consent.py index fad3ab42..f63a55af 100644 --- a/model/dataset_metadata/dataset_consent.py +++ b/model/dataset_metadata/dataset_consent.py @@ -22,7 +22,9 @@ def __init__(self, dataset): no_methods = db.Column(db.BOOLEAN, nullable=False) details = db.Column(db.String, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), primary_key=True, 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_consent") def to_dict(self): diff --git a/model/dataset_metadata/dataset_de_ident_level.py b/model/dataset_metadata/dataset_de_ident_level.py index aa7eef5a..917e6c86 100644 --- a/model/dataset_metadata/dataset_de_ident_level.py +++ b/model/dataset_metadata/dataset_de_ident_level.py @@ -22,7 +22,9 @@ def __init__(self, dataset): k_anon = db.Column(db.BOOLEAN, nullable=False) details = db.Column(db.String, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), primary_key=True, 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_de_ident_level") def to_dict(self): diff --git a/model/dataset_metadata/dataset_other.py b/model/dataset_metadata/dataset_other.py index 22ba8199..faaa68b5 100644 --- a/model/dataset_metadata/dataset_other.py +++ b/model/dataset_metadata/dataset_other.py @@ -27,7 +27,9 @@ def __init__(self, dataset): acknowledgement = db.Column(db.String, nullable=False) publisher = db.Column(db.String, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), primary_key=True, 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_other") def to_dict(self): diff --git a/model/dataset_metadata/dataset_readme.py b/model/dataset_metadata/dataset_readme.py index eeddb484..34e40581 100644 --- a/model/dataset_metadata/dataset_readme.py +++ b/model/dataset_metadata/dataset_readme.py @@ -5,10 +5,13 @@ class DatasetReadme(db.Model): # type: ignore def __init__(self, dataset): self.dataset = dataset self.content = "" + __tablename__ = "dataset_readme" content = db.Column(db.String, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), primary_key=True, 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_readme") def to_dict(self): diff --git a/model/dataset_metadata/dataset_record_keys.py b/model/dataset_metadata/dataset_record_keys.py index 0a877c51..aa1f6973 100644 --- a/model/dataset_metadata/dataset_record_keys.py +++ b/model/dataset_metadata/dataset_record_keys.py @@ -6,11 +6,14 @@ def __init__(self, dataset): self.dataset = dataset self.key_type = None self.key_details = "" + __tablename__ = "dataset_record_keys" key_type = db.Column(db.String, nullable=True) key_details = db.Column(db.String, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), primary_key=True, 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_record_keys") def to_dict(self): diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 12468904..71a071a9 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -1,8 +1,9 @@ -import uuid import datetime +import uuid from datetime import timezone import model + from ..db import db @@ -12,6 +13,7 @@ def __init__(self, dataset): self.dataset = dataset self.created_at = datetime.datetime.now(timezone.utc).timestamp() self.dataset_related_item_other = model.DatasetRelatedItemOther(self) + __tablename__ = "dataset_related_item" id = db.Column(db.CHAR(36), primary_key=True) @@ -41,7 +43,6 @@ def to_dict(self): "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, - } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_contributor.py b/model/dataset_metadata/dataset_related_item_contributor.py index 1f0bee6d..f961ec65 100644 --- a/model/dataset_metadata/dataset_related_item_contributor.py +++ b/model/dataset_metadata/dataset_related_item_contributor.py @@ -1,6 +1,7 @@ -import uuid import datetime +import uuid from datetime import timezone + from ..db import db @@ -32,8 +33,7 @@ def to_dict(self): "name_type": self.name_type, "creator": self.creator, "contributor_type": self.contributor_type, - "created_at": self.created_at - + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_identifier.py b/model/dataset_metadata/dataset_related_item_identifier.py index be17908d..ef8bb30d 100644 --- a/model/dataset_metadata/dataset_related_item_identifier.py +++ b/model/dataset_metadata/dataset_related_item_identifier.py @@ -1,6 +1,7 @@ -import uuid import datetime +import uuid from datetime import timezone + from ..db import db @@ -33,8 +34,7 @@ def to_dict(self): "metadata_scheme": self.metadata_scheme, "scheme_uri": self.scheme_uri, "scheme_type": self.scheme_type, - "created_at": self.created_at - + "created_at": self.created_at, } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_other.py b/model/dataset_metadata/dataset_related_item_other.py index e7db274c..5c1a60e3 100644 --- a/model/dataset_metadata/dataset_related_item_other.py +++ b/model/dataset_metadata/dataset_related_item_other.py @@ -26,7 +26,10 @@ def __init__(self, dataset): edition = db.Column(db.String, nullable=False) dataset_related_item_id = db.Column( - db.CHAR(36), db.ForeignKey("dataset_related_item.id"), primary_key=True, nullable=False + db.CHAR(36), + db.ForeignKey("dataset_related_item.id"), + primary_key=True, + nullable=False, ) dataset_related_item = db.relationship( "DatasetRelatedItem", back_populates="dataset_related_item_other" diff --git a/model/dataset_metadata/dataset_related_item_title.py b/model/dataset_metadata/dataset_related_item_title.py index f9124bc3..2893261e 100644 --- a/model/dataset_metadata/dataset_related_item_title.py +++ b/model/dataset_metadata/dataset_related_item_title.py @@ -1,6 +1,7 @@ -import uuid import datetime +import uuid from datetime import timezone + from ..db import db @@ -28,8 +29,7 @@ def to_dict(self): "id": self.id, "type": self.type, "title": self.title, - "created_at": self.created_at - + "created_at": self.created_at, } @staticmethod diff --git a/model/participant.py b/model/participant.py index 9653504e..b4ba46a7 100644 --- a/model/participant.py +++ b/model/participant.py @@ -2,9 +2,9 @@ import uuid from datetime import timezone -from .version import version_participants from .db import db from .study import Study +from .version import version_participants class Participant(db.Model): # type: ignore diff --git a/model/study_metadata/study_description.py b/model/study_metadata/study_description.py index 769f2f31..c13d8edf 100644 --- a/model/study_metadata/study_description.py +++ b/model/study_metadata/study_description.py @@ -17,7 +17,10 @@ def __init__(self, study: Study): detailed_description = db.Column(db.String, nullable=False) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False + db.CHAR(36), + db.ForeignKey("study.id", ondelete="CASCADE"), + primary_key=True, + nullable=False, ) study = db.relationship("Study", back_populates="study_description") diff --git a/model/study_metadata/study_design.py b/model/study_metadata/study_design.py index 677e6cb0..585bf1f6 100644 --- a/model/study_metadata/study_design.py +++ b/model/study_metadata/study_design.py @@ -53,7 +53,10 @@ def __init__(self, study: Study): number_groups_cohorts = db.Column(db.Integer, nullable=True) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False + db.CHAR(36), + db.ForeignKey("study.id", ondelete="CASCADE"), + primary_key=True, + nullable=False, ) study = db.relationship("Study", back_populates="study_design") diff --git a/model/study_metadata/study_eligibility.py b/model/study_metadata/study_eligibility.py index 213d9abf..752a69f4 100644 --- a/model/study_metadata/study_eligibility.py +++ b/model/study_metadata/study_eligibility.py @@ -40,7 +40,10 @@ def __init__(self, study: Study): sampling_method = db.Column(db.String, nullable=True) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False + db.CHAR(36), + db.ForeignKey("study.id", ondelete="CASCADE"), + primary_key=True, + nullable=False, ) study = db.relationship("Study", back_populates="study_eligibility") diff --git a/model/study_metadata/study_identification.py b/model/study_metadata/study_identification.py index 14865b73..0e95fa10 100644 --- a/model/study_metadata/study_identification.py +++ b/model/study_metadata/study_identification.py @@ -50,7 +50,9 @@ def update(self, data: dict): """Updates the study from a dictionary""" self.identifier = data["identifier"] self.identifier_type = data["identifier_type"] - self.identifier_domain = data["identifier_domain"] if "identifier_domain" in data else "" + self.identifier_domain = ( + data["identifier_domain"] if "identifier_domain" in data else "" + ) self.identifier_link = data["identifier_link"] self.study.touch() diff --git a/model/study_metadata/study_ipdsharing.py b/model/study_metadata/study_ipdsharing.py index 58bd24ec..9d7868bc 100644 --- a/model/study_metadata/study_ipdsharing.py +++ b/model/study_metadata/study_ipdsharing.py @@ -28,7 +28,10 @@ def __init__(self, study): ipd_sharing_url = db.Column(db.String, nullable=False) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False + db.CHAR(36), + db.ForeignKey("study.id", ondelete="CASCADE"), + primary_key=True, + nullable=False, ) study = db.relationship("Study", back_populates="study_ipdsharing") diff --git a/model/study_metadata/study_other.py b/model/study_metadata/study_other.py index 8e78cd06..d23acac7 100644 --- a/model/study_metadata/study_other.py +++ b/model/study_metadata/study_other.py @@ -24,7 +24,10 @@ def __init__(self, study): size = db.Column(db.BigInteger, nullable=False) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False + db.CHAR(36), + db.ForeignKey("study.id", ondelete="CASCADE"), + primary_key=True, + nullable=False, ) study = db.relationship("Study", back_populates="study_other") diff --git a/model/study_metadata/study_sponsors_collaborators.py b/model/study_metadata/study_sponsors_collaborators.py index 0abecec0..a8ab84f5 100644 --- a/model/study_metadata/study_sponsors_collaborators.py +++ b/model/study_metadata/study_sponsors_collaborators.py @@ -28,7 +28,10 @@ def __init__(self, study): collaborator_name = db.Column(ARRAY(String), nullable=False) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False + db.CHAR(36), + db.ForeignKey("study.id", ondelete="CASCADE"), + primary_key=True, + nullable=False, ) study = db.relationship("Study", back_populates="study_sponsors_collaborators") diff --git a/model/study_metadata/study_status.py b/model/study_metadata/study_status.py index 6ba7e07a..24920e32 100644 --- a/model/study_metadata/study_status.py +++ b/model/study_metadata/study_status.py @@ -25,7 +25,10 @@ def __init__(self, study): completion_date_type = db.Column(db.String, nullable=True) study_id = db.Column( - db.CHAR(36), db.ForeignKey("study.id", ondelete="CASCADE"), primary_key=True, nullable=False + db.CHAR(36), + db.ForeignKey("study.id", ondelete="CASCADE"), + primary_key=True, + nullable=False, ) study = db.relationship("Study", back_populates="study_status") From 9ca67a6188a1fa70b0e9b49705b8f21fcebf2ba3 Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 16 Oct 2023 13:26:45 -0700 Subject: [PATCH 11/46] style: pylint format check --- apis/dataset_metadata/dataset_access.py | 4 ++-- .../dataset_alternate_identifier.py | 8 ++++--- apis/dataset_metadata/dataset_consent.py | 4 ++-- apis/dataset_metadata/dataset_contributor.py | 22 ++++++++++++++----- apis/dataset_metadata/dataset_date.py | 8 ++++--- .../dataset_de_ident_level.py | 5 +++-- apis/dataset_metadata/dataset_description.py | 8 ++++--- apis/dataset_metadata/dataset_funder.py | 9 +++++--- apis/dataset_metadata/dataset_other.py | 9 ++++---- apis/dataset_metadata/dataset_readme.py | 4 ++-- apis/dataset_metadata/dataset_record_keys.py | 4 ++-- apis/dataset_metadata/dataset_related_item.py | 8 ++++--- .../dataset_related_item_contributor.py | 2 +- .../dataset_related_item_identifier.py | 2 +- .../dataset_related_item_other.py | 2 +- .../dataset_related_item_title.py | 2 +- apis/dataset_metadata/dataset_rights.py | 8 ++++--- apis/dataset_metadata/dataset_subject.py | 8 ++++--- apis/dataset_metadata/dataset_title.py | 8 ++++--- model/dataset_metadata/dataset_contributor.py | 4 +--- 20 files changed, 78 insertions(+), 51 deletions(-) diff --git a/apis/dataset_metadata/dataset_access.py b/apis/dataset_metadata/dataset_access.py index e6ca9fad..3bc48ea1 100644 --- a/apis/dataset_metadata/dataset_access.py +++ b/apis/dataset_metadata/dataset_access.py @@ -22,7 +22,7 @@ class DatasetAccessResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_access) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_access_ = dataset_.dataset_access return dataset_access_.to_dict() @@ -30,7 +30,7 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update access") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, dataset_id: int): + def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_access.update(request.json) model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_alternate_identifier.py b/apis/dataset_metadata/dataset_alternate_identifier.py index a37030d0..54f5e16e 100644 --- a/apis/dataset_metadata/dataset_alternate_identifier.py +++ b/apis/dataset_metadata/dataset_alternate_identifier.py @@ -23,7 +23,7 @@ class DatasetAlternateIdentifierResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_identifier) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable = unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_identifier_ = dataset_.dataset_alternate_identifier return [d.to_dict() for d in dataset_identifier_] @@ -31,7 +31,7 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update identifier") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -60,7 +60,9 @@ class DatasetAlternateIdentifierUpdate(Resource): @api.doc("delete identifier") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, study_id: int, dataset_id: int, identifier_id: int): + def delete( + self, study_id: int, dataset_id: int, identifier_id: int + ): # pylint: disable= unused-argument dataset_identifier_ = model.DatasetAlternateIdentifier.query.get( identifier_id ) diff --git a/apis/dataset_metadata/dataset_consent.py b/apis/dataset_metadata/dataset_consent.py index b9714ba4..ff8f323a 100644 --- a/apis/dataset_metadata/dataset_consent.py +++ b/apis/dataset_metadata/dataset_consent.py @@ -25,7 +25,7 @@ class DatasetConsentResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_consent) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_consent_ = dataset_.dataset_consent return dataset_consent_.to_dict() @@ -33,7 +33,7 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update consent") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, dataset_id: int): + def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_consent.update(data) diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index 876767e0..b87dd734 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -18,7 +18,8 @@ class DatasetContributorResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_contributor) - def get(self, study_id: int, dataset_id: int): + def get(self, + study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_contributor_ = dataset_.dataset_contributors return [d.to_dict() for d in dataset_contributor_ if not d.to_dict()["creator"]] @@ -26,7 +27,8 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update contributor") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): + def post(self, + study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -52,7 +54,10 @@ class DatasetContributorDelete(Resource): @api.doc("delete contributor") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, study_id: int, dataset_id: int, contributor_id: int): + def delete( + self, study_id: int, + dataset_id: int, contributor_id: int + ): # pylint: disable= unused-argument contributor_ = model.DatasetContributor.query.get(contributor_id) model.db.session.delete(contributor_) @@ -67,7 +72,8 @@ class DatasetCreatorResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_contributor) - def get(self, study_id: int, dataset_id: int): + def get(self, + study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_creator_ = dataset_.dataset_contributors return [d.to_dict() for d in dataset_creator_ if d.to_dict()["creator"]] @@ -75,7 +81,8 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update creator") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): + def post(self, + study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -100,7 +107,10 @@ class DatasetCreatorDelete(Resource): @api.doc("delete creator") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, study_id: int, dataset_id: int, creator_id: int): + def delete( + self, + study_id: int, dataset_id: int, creator_id: int + ): # pylint: disable= unused-argument dataset_creator_ = model.DatasetContributor.query.get(creator_id) model.db.session.delete(dataset_creator_) model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index 8397d9d2..1d961999 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -23,7 +23,7 @@ class DatasetDateResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_date) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_date_ = dataset_.dataset_date return [d.to_dict() for d in dataset_date_] @@ -31,7 +31,8 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update date") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): + def post(self, + study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -55,7 +56,8 @@ class DatasetDateDeleteResource(Resource): @api.doc("delete date") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, study_id: int, dataset_id: int, date_id: int): + def delete(self, + study_id: int, dataset_id: int, date_id: int): # pylint: disable= unused-argument date_ = model.DatasetDate.query.get(date_id) model.db.session.delete(date_) diff --git a/apis/dataset_metadata/dataset_de_ident_level.py b/apis/dataset_metadata/dataset_de_ident_level.py index 48b09d8d..b3ae291b 100644 --- a/apis/dataset_metadata/dataset_de_ident_level.py +++ b/apis/dataset_metadata/dataset_de_ident_level.py @@ -25,7 +25,7 @@ class DatasetDeIdentLevelResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(de_ident_level) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) de_ident_level_ = dataset_.dataset_de_ident_level return de_ident_level_.to_dict() @@ -33,7 +33,8 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update ident level") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, dataset_id: int): + def put(self, study_id: int, # pylint: disable= unused-argument + dataset_id: int): data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_de_ident_level.update(data) diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index a63b552a..468545fd 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -22,7 +22,7 @@ class DatasetDescriptionResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_description) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_description_ = dataset_.dataset_description return [d.to_dict() for d in dataset_description_] @@ -31,7 +31,7 @@ def get(self, study_id: int, dataset_id: int): @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_description) - def post(self, study_id: int, dataset_id: int): + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -52,7 +52,9 @@ class DatasetDescriptionUpdate(Resource): @api.doc("delete description") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, study_id: int, dataset_id: int, description_id: int): + def delete(self, + study_id: int, dataset_id: int, # pylint: disable= unused-argument + description_id: int): dataset_description_ = model.DatasetDescription.query.get(description_id) model.db.session.delete(dataset_description_) diff --git a/apis/dataset_metadata/dataset_funder.py b/apis/dataset_metadata/dataset_funder.py index 8ae2a097..6a0741e9 100644 --- a/apis/dataset_metadata/dataset_funder.py +++ b/apis/dataset_metadata/dataset_funder.py @@ -27,7 +27,7 @@ class DatasetFunderResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_funder) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_funder_ = dataset_.dataset_funder return [d.to_dict() for d in dataset_funder_] @@ -35,7 +35,8 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update funder") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): + def post(self, study_id: int, # pylint: disable= unused-argument + dataset_id: int): data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -59,7 +60,9 @@ class DatasetFunderUpdate(Resource): @api.doc("delete funder") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, study_id: int, dataset_id: int, funder_id: int): + def delete(self, + study_id: int, dataset_id: int, # pylint: disable= unused-argument + funder_id: int): dataset_funder_ = model.DatasetFunder.query.get(funder_id) model.db.session.delete(dataset_funder_) diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index 4e6fdf13..59b196e1 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -24,12 +24,12 @@ class DatasetOtherResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_other) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_other_ = dataset_.dataset_other return dataset_other_.to_dict() - def put(self, study_id: int, dataset_id: int): + def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_other.update(data) @@ -43,7 +43,7 @@ class DatasetPublisherResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_publisher) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_other_ = dataset_.dataset_other return dataset_other_.to_dict() @@ -51,7 +51,8 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update publisher") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, dataset_id: int): + def put(self, study_id: int, # pylint: disable= unused-argument + dataset_id: int): data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_other.update(data) diff --git a/apis/dataset_metadata/dataset_readme.py b/apis/dataset_metadata/dataset_readme.py index 9e5e46f9..450992a2 100644 --- a/apis/dataset_metadata/dataset_readme.py +++ b/apis/dataset_metadata/dataset_readme.py @@ -16,12 +16,12 @@ class DatasetReadmeResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_readme) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_readme_ = dataset_.dataset_readme return [d.to_dict() for d in dataset_readme_] - def put(self, study_id: int, dataset_id: int): + def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_readme_ = dataset_.dataset_readme.update(data) diff --git a/apis/dataset_metadata/dataset_record_keys.py b/apis/dataset_metadata/dataset_record_keys.py index b850564c..e250d440 100644 --- a/apis/dataset_metadata/dataset_record_keys.py +++ b/apis/dataset_metadata/dataset_record_keys.py @@ -20,7 +20,7 @@ class DatasetRecordKeysResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_record_keys) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_record_keys_ = dataset_.dataset_record_keys @@ -29,7 +29,7 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update record keys") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, dataset_id: int): + def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_record_keys.update(data) diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index 4f2a3017..a23d4e69 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -22,7 +22,7 @@ class DatasetRelatedItemResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_related_item) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_related_item_ = dataset_.dataset_related_item return [d.to_dict() for d in dataset_related_item_] @@ -30,7 +30,7 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update related item") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -54,7 +54,9 @@ class DatasetRelatedItemUpdate(Resource): @api.doc("delete related item") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, study_id: int, dataset_id: int, related_item_id: int): + def delete(self, + study_id: int, dataset_id: int, # pylint: disable= unused-argument + related_item_id: int): dataset_related_item_ = model.DatasetRelatedItem.query.get(related_item_id) model.db.session.delete(dataset_related_item_) diff --git a/apis/dataset_metadata/dataset_related_item_contributor.py b/apis/dataset_metadata/dataset_related_item_contributor.py index f110223a..8857f745 100644 --- a/apis/dataset_metadata/dataset_related_item_contributor.py +++ b/apis/dataset_metadata/dataset_related_item_contributor.py @@ -20,7 +20,7 @@ class DatasetRelatedItemContributorResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_related_item_contributor) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_related_item_contributor_ = dataset_.dataset_related_item_contributor return [d.to_dict() for d in dataset_related_item_contributor_] diff --git a/apis/dataset_metadata/dataset_related_item_identifier.py b/apis/dataset_metadata/dataset_related_item_identifier.py index fd4d10df..1633adbb 100644 --- a/apis/dataset_metadata/dataset_related_item_identifier.py +++ b/apis/dataset_metadata/dataset_related_item_identifier.py @@ -20,7 +20,7 @@ class DatasetRelatedItemContributorResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_related_item_contributor) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_related_item_ = dataset_.dataset_related_item return [d.to_dict() for d in dataset_related_item_] diff --git a/apis/dataset_metadata/dataset_related_item_other.py b/apis/dataset_metadata/dataset_related_item_other.py index e36328c1..87852fc2 100644 --- a/apis/dataset_metadata/dataset_related_item_other.py +++ b/apis/dataset_metadata/dataset_related_item_other.py @@ -21,7 +21,7 @@ class DatasetRelatedItemContributorResource(Resource): @api.response(400, "Validation Error") # @api.param("id", "The dataset identifier") # @api.marshal_with(dataset_related_item_contributor) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_related_item_ = dataset_.dataset_related_item return [d.to_dict() for d in dataset_related_item_] diff --git a/apis/dataset_metadata/dataset_related_item_title.py b/apis/dataset_metadata/dataset_related_item_title.py index f6bc2d77..81e462e6 100644 --- a/apis/dataset_metadata/dataset_related_item_title.py +++ b/apis/dataset_metadata/dataset_related_item_title.py @@ -21,7 +21,7 @@ class DatasetRelatedItemTitleResource(Resource): @api.response(400, "Validation Error") # @api.param("id", "The dataset identifier") # @api.marshal_with(dataset_related_item_contributor) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_related_item_title_ = dataset_.dataset_related_item_title return [d.to_dict() for d in dataset_related_item_title_] diff --git a/apis/dataset_metadata/dataset_rights.py b/apis/dataset_metadata/dataset_rights.py index d80071fc..2f21fa9c 100644 --- a/apis/dataset_metadata/dataset_rights.py +++ b/apis/dataset_metadata/dataset_rights.py @@ -25,7 +25,7 @@ class DatasetRightsResource(Resource): @api.response(400, "Validation Error") # @api.param("id", "The dataset identifier") @api.marshal_with(dataset_rights) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_rights_ = dataset_.dataset_rights return [d.to_dict() for d in dataset_rights_] @@ -33,7 +33,7 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update rights") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -57,7 +57,9 @@ class DatasetRightsUpdate(Resource): @api.doc("delete rights") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, study_id: int, dataset_id: int, rights_id: int): + def delete(self, + study_id: int, dataset_id: int, # pylint: disable= unused-argument + rights_id: int): dataset_rights_ = model.DatasetRights.query.get(rights_id) model.db.session.delete(dataset_rights_) diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index 22f30b63..a6f19e29 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -26,7 +26,7 @@ class DatasetSubjectResource(Resource): @api.response(400, "Validation Error") # @api.param("id", "The dataset identifier") @api.marshal_with(dataset_subject) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_subject_ = dataset_.dataset_subject return [d.to_dict() for d in dataset_subject_] @@ -34,7 +34,7 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update subject") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -58,7 +58,9 @@ class DatasetSubjectUpdate(Resource): @api.doc("delete subject") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, study_id: int, dataset_id: int, subject_id: int): + def delete(self, + study_id: int, dataset_id: int, # pylint: disable= unused-argument + subject_id: int): dataset_subject_ = model.DatasetSubject.query.get(subject_id) model.db.session.delete(dataset_subject_) diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index 37203536..3fa89b34 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -23,7 +23,7 @@ class DatasetTitleResource(Resource): @api.response(400, "Validation Error") # @api.param("id", "The dataset identifier") @api.marshal_with(dataset_title) - def get(self, study_id: int, dataset_id: int): + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_title_ = dataset_.dataset_title return [d.to_dict() for d in dataset_title_] @@ -31,7 +31,7 @@ def get(self, study_id: int, dataset_id: int): @api.doc("update title") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -52,7 +52,9 @@ class DatasetDescriptionUpdate(Resource): @api.doc("delete title") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, study_id: int, dataset_id: int, title_id: int): + def delete(self, + study_id: int, dataset_id: int, # pylint: disable= unused-argument + title_id: int): dataset_title_ = model.DatasetTitle.query.get(title_id) model.db.session.delete(dataset_title_) model.db.session.commit() diff --git a/model/dataset_metadata/dataset_contributor.py b/model/dataset_metadata/dataset_contributor.py index ca534125..c365c051 100644 --- a/model/dataset_metadata/dataset_contributor.py +++ b/model/dataset_metadata/dataset_contributor.py @@ -1,8 +1,6 @@ import datetime import uuid from datetime import timezone - -import model from model.db import db @@ -45,7 +43,7 @@ def to_dict(self): } @staticmethod - def from_data(dataset: model.Dataset, data: dict): + def from_data(dataset, data: dict): dataset_contributor = DatasetContributor(dataset) dataset_contributor.update(data) return dataset_contributor From 0690e0559447ec82c0ce942e109c247e450da3ea Mon Sep 17 00:00:00 2001 From: Lint Action Date: Mon, 16 Oct 2023 20:27:39 +0000 Subject: [PATCH 12/46] =?UTF-8?q?style:=20=F0=9F=8E=A8=20fix=20code=20styl?= =?UTF-8?q?e=20issues=20with=20Black?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apis/dataset_metadata/dataset_contributor.py | 18 ++++++------------ apis/dataset_metadata/dataset_date.py | 8 ++++---- .../dataset_metadata/dataset_de_ident_level.py | 3 +-- apis/dataset_metadata/dataset_description.py | 9 ++++++--- apis/dataset_metadata/dataset_funder.py | 12 +++++++----- apis/dataset_metadata/dataset_other.py | 3 +-- apis/dataset_metadata/dataset_related_item.py | 9 ++++++--- apis/dataset_metadata/dataset_rights.py | 9 ++++++--- apis/dataset_metadata/dataset_subject.py | 9 ++++++--- apis/dataset_metadata/dataset_title.py | 9 ++++++--- 10 files changed, 49 insertions(+), 40 deletions(-) diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index b87dd734..dde5c622 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -18,8 +18,7 @@ class DatasetContributorResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_contributor) - def get(self, - study_id: int, dataset_id: int): # pylint: disable= unused-argument + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_contributor_ = dataset_.dataset_contributors return [d.to_dict() for d in dataset_contributor_ if not d.to_dict()["creator"]] @@ -27,8 +26,7 @@ def get(self, @api.doc("update contributor") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, - study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -55,8 +53,7 @@ class DatasetContributorDelete(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") def delete( - self, study_id: int, - dataset_id: int, contributor_id: int + self, study_id: int, dataset_id: int, contributor_id: int ): # pylint: disable= unused-argument contributor_ = model.DatasetContributor.query.get(contributor_id) @@ -72,8 +69,7 @@ class DatasetCreatorResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_contributor) - def get(self, - study_id: int, dataset_id: int): # pylint: disable= unused-argument + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_creator_ = dataset_.dataset_contributors return [d.to_dict() for d in dataset_creator_ if d.to_dict()["creator"]] @@ -81,8 +77,7 @@ def get(self, @api.doc("update creator") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, - study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -108,8 +103,7 @@ class DatasetCreatorDelete(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") def delete( - self, - study_id: int, dataset_id: int, creator_id: int + self, study_id: int, dataset_id: int, creator_id: int ): # pylint: disable= unused-argument dataset_creator_ = model.DatasetContributor.query.get(creator_id) model.db.session.delete(dataset_creator_) diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index 1d961999..b2bf4591 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -31,8 +31,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update date") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, - study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -56,8 +55,9 @@ class DatasetDateDeleteResource(Resource): @api.doc("delete date") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, date_id: int): # pylint: disable= unused-argument + def delete( + self, study_id: int, dataset_id: int, date_id: int + ): # pylint: disable= unused-argument date_ = model.DatasetDate.query.get(date_id) model.db.session.delete(date_) diff --git a/apis/dataset_metadata/dataset_de_ident_level.py b/apis/dataset_metadata/dataset_de_ident_level.py index b3ae291b..24a6c417 100644 --- a/apis/dataset_metadata/dataset_de_ident_level.py +++ b/apis/dataset_metadata/dataset_de_ident_level.py @@ -33,8 +33,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update ident level") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, # pylint: disable= unused-argument - dataset_id: int): + def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_de_ident_level.update(data) diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 468545fd..8dad0e88 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -52,9 +52,12 @@ class DatasetDescriptionUpdate(Resource): @api.doc("delete description") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - description_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + description_id: int, + ): dataset_description_ = model.DatasetDescription.query.get(description_id) model.db.session.delete(dataset_description_) diff --git a/apis/dataset_metadata/dataset_funder.py b/apis/dataset_metadata/dataset_funder.py index 6a0741e9..40bd76f6 100644 --- a/apis/dataset_metadata/dataset_funder.py +++ b/apis/dataset_metadata/dataset_funder.py @@ -35,8 +35,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update funder") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, # pylint: disable= unused-argument - dataset_id: int): + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -60,9 +59,12 @@ class DatasetFunderUpdate(Resource): @api.doc("delete funder") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - funder_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + funder_id: int, + ): dataset_funder_ = model.DatasetFunder.query.get(funder_id) model.db.session.delete(dataset_funder_) diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index 59b196e1..cc13049c 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -51,8 +51,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update publisher") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, # pylint: disable= unused-argument - dataset_id: int): + def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_other.update(data) diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index a23d4e69..dcf17542 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -54,9 +54,12 @@ class DatasetRelatedItemUpdate(Resource): @api.doc("delete related item") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - related_item_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + related_item_id: int, + ): dataset_related_item_ = model.DatasetRelatedItem.query.get(related_item_id) model.db.session.delete(dataset_related_item_) diff --git a/apis/dataset_metadata/dataset_rights.py b/apis/dataset_metadata/dataset_rights.py index 2f21fa9c..70c67989 100644 --- a/apis/dataset_metadata/dataset_rights.py +++ b/apis/dataset_metadata/dataset_rights.py @@ -57,9 +57,12 @@ class DatasetRightsUpdate(Resource): @api.doc("delete rights") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - rights_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + rights_id: int, + ): dataset_rights_ = model.DatasetRights.query.get(rights_id) model.db.session.delete(dataset_rights_) diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index a6f19e29..991333e5 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -58,9 +58,12 @@ class DatasetSubjectUpdate(Resource): @api.doc("delete subject") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - subject_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + subject_id: int, + ): dataset_subject_ = model.DatasetSubject.query.get(subject_id) model.db.session.delete(dataset_subject_) diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index 3fa89b34..9f10ebd6 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -52,9 +52,12 @@ class DatasetDescriptionUpdate(Resource): @api.doc("delete title") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - title_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + title_id: int, + ): dataset_title_ = model.DatasetTitle.query.get(title_id) model.db.session.delete(dataset_title_) model.db.session.commit() From 2d2d2589938fd1fe7b6e0f5954b868f6b22a5cfb Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 16 Oct 2023 14:19:53 -0700 Subject: [PATCH 13/46] fix: study identification checked --- apis/dataset_metadata/dataset_other.py | 2 +- model/study_metadata/study_identification.py | 10 ++++++---- tests/functional/test_study_metadata_api.py | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index 59b196e1..019b0665 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -28,7 +28,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume dataset_ = model.Dataset.query.get(dataset_id) dataset_other_ = dataset_.dataset_other return dataset_other_.to_dict() - + def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data = request.json dataset_ = model.Dataset.query.get(dataset_id) diff --git a/model/study_metadata/study_identification.py b/model/study_metadata/study_identification.py index 0e95fa10..0235895d 100644 --- a/model/study_metadata/study_identification.py +++ b/model/study_metadata/study_identification.py @@ -50,10 +50,12 @@ def update(self, data: dict): """Updates the study from a dictionary""" self.identifier = data["identifier"] self.identifier_type = data["identifier_type"] - self.identifier_domain = ( - data["identifier_domain"] if "identifier_domain" in data else "" - ) - self.identifier_link = data["identifier_link"] + if "identifier_domain" in data: + self.identifier_domain = ( + data["identifier_domain"] if "identifier_domain" in data else "" + ) + if "identifier_link" in data: + self.identifier_link = data["identifier_link"] self.study.touch() def validate(self): diff --git a/tests/functional/test_study_metadata_api.py b/tests/functional/test_study_metadata_api.py index aeba64d2..7c5d0f45 100644 --- a/tests/functional/test_study_metadata_api.py +++ b/tests/functional/test_study_metadata_api.py @@ -307,7 +307,7 @@ def test_put_description_metadata(_test_client, _login_user): assert response.status_code == 200 response_data = json.loads(response.data) - pytest.global_description_id = response_data["id"] + # pytest.global_id = response_data["study_id"] assert response_data["brief_summary"] == "brief_summary" assert response_data["detailed_description"] == "detailed_description" From 6d58c4056cb7168a8f9059db0f81c2b40b730131 Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 16 Oct 2023 15:30:55 -0700 Subject: [PATCH 14/46] wip: related item endpoint --- apis/dataset_metadata/dataset_alternate_identifier.py | 4 ++-- apis/dataset_metadata/dataset_date.py | 2 +- apis/dataset_metadata/dataset_description.py | 2 +- apis/dataset_metadata/dataset_other.py | 6 +++++- model/dataset_metadata/dataset_description.py | 2 +- model/dataset_metadata/dataset_related_item.py | 6 ++++-- model/dataset_metadata/dataset_related_item_other.py | 7 +++---- 7 files changed, 17 insertions(+), 12 deletions(-) diff --git a/apis/dataset_metadata/dataset_alternate_identifier.py b/apis/dataset_metadata/dataset_alternate_identifier.py index 54f5e16e..77caf087 100644 --- a/apis/dataset_metadata/dataset_alternate_identifier.py +++ b/apis/dataset_metadata/dataset_alternate_identifier.py @@ -11,7 +11,7 @@ { "id": fields.String(required=True), "identifier": fields.String(required=True), - "identifier_type": fields.String(required=True), + "type": fields.String(required=False), "alternate": fields.Boolean(required=True), }, ) @@ -22,7 +22,7 @@ class DatasetAlternateIdentifierResource(Resource): @api.doc("identifier") @api.response(200, "Success") @api.response(400, "Validation Error") - @api.marshal_with(dataset_identifier) + # @api.marshal_with(dataset_identifier) def get(self, study_id: int, dataset_id: int): # pylint: disable = unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_identifier_ = dataset_.dataset_alternate_identifier diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index 1d961999..82db90c7 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -51,7 +51,7 @@ def post(self, return list_of_elements -@api.route("/study//dataset//date") +@api.route("/study//dataset//date/") class DatasetDateDeleteResource(Resource): @api.doc("delete date") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 468545fd..ca4c05fc 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -21,7 +21,7 @@ class DatasetDescriptionResource(Resource): @api.doc("description") @api.response(200, "Success") @api.response(400, "Validation Error") - @api.marshal_with(dataset_description) + # @api.marshal_with(dataset_description) def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_description_ = dataset_.dataset_description diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index 019b0665..ffcfa387 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -28,7 +28,11 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume dataset_ = model.Dataset.query.get(dataset_id) dataset_other_ = dataset_.dataset_other return dataset_other_.to_dict() - + + @api.doc("other update") + @api.response(200, "Success") + @api.response(400, "Validation Error") + @api.marshal_with(dataset_other) def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data = request.json dataset_ = model.Dataset.query.get(dataset_id) diff --git a/model/dataset_metadata/dataset_description.py b/model/dataset_metadata/dataset_description.py index 11e16f8f..3bffb06c 100644 --- a/model/dataset_metadata/dataset_description.py +++ b/model/dataset_metadata/dataset_description.py @@ -23,7 +23,7 @@ def __init__(self, dataset): def to_dict(self): return { "id": self.id, - "description_type": self.description, + "description": self.description, "type": self.type, "created_at": self.created_at, } diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 71a071a9..ecd7e1c7 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -13,7 +13,6 @@ def __init__(self, dataset): self.dataset = dataset self.created_at = datetime.datetime.now(timezone.utc).timestamp() self.dataset_related_item_other = model.DatasetRelatedItemOther(self) - __tablename__ = "dataset_related_item" id = db.Column(db.CHAR(36), primary_key=True) @@ -31,7 +30,7 @@ def __init__(self, dataset): "DatasetRelatedItemIdentifier", back_populates="dataset_related_item" ) dataset_related_item_other = db.relationship( - "DatasetRelatedItemOther", back_populates="dataset_related_item" + "DatasetRelatedItemOther", back_populates="dataset_related_item", uselist=False ) dataset_related_item_title = db.relationship( "DatasetRelatedItemTitle", back_populates="dataset_related_item" @@ -43,6 +42,9 @@ def to_dict(self): "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, + "title": self.dataset_related_item_title.title if self.dataset_related_item_title else None, + "title_type": self.dataset_related_item_title.type if self.dataset_related_item_title else None, + } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_other.py b/model/dataset_metadata/dataset_related_item_other.py index 5c1a60e3..2a27ebcc 100644 --- a/model/dataset_metadata/dataset_related_item_other.py +++ b/model/dataset_metadata/dataset_related_item_other.py @@ -7,8 +7,8 @@ def __init__(self, dataset): self.publication_year = None self.volume = "" self.issue = "" - self.number_value = None - self.number_type = "" + self.number_value = "" + self.number_type = None self.first_page = "" self.last_page = "" self.publisher = "" @@ -21,7 +21,7 @@ def __init__(self, dataset): number_value = db.Column(db.String, nullable=False) number_type = db.Column(db.String, nullable=True) first_page = db.Column(db.String, nullable=False) - last_page = db.Column(db.BOOLEAN, nullable=False) + last_page = db.Column(db.String, nullable=False) publisher = db.Column(db.String, nullable=False) edition = db.Column(db.String, nullable=False) @@ -46,7 +46,6 @@ def to_dict(self): "last_page": self.last_page, "publisher": self.publisher, "edition": self.edition, - "scheme_type": self.scheme_type, } @staticmethod From 80675f94d439a5f644aa31b3beec7269ebf153df Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 16 Oct 2023 15:32:01 -0700 Subject: [PATCH 15/46] wip: dataset related item endpoint --- apis/dataset_metadata/dataset_contributor.py | 18 ++++++------------ apis/dataset_metadata/dataset_date.py | 8 ++++---- .../dataset_metadata/dataset_de_ident_level.py | 3 +-- apis/dataset_metadata/dataset_description.py | 9 ++++++--- apis/dataset_metadata/dataset_funder.py | 12 +++++++----- apis/dataset_metadata/dataset_other.py | 3 +-- apis/dataset_metadata/dataset_related_item.py | 9 ++++++--- apis/dataset_metadata/dataset_rights.py | 9 ++++++--- apis/dataset_metadata/dataset_subject.py | 9 ++++++--- apis/dataset_metadata/dataset_title.py | 9 ++++++--- model/dataset_metadata/dataset_contributor.py | 1 + model/dataset_metadata/dataset_related_item.py | 10 +++++++--- 12 files changed, 57 insertions(+), 43 deletions(-) diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index b87dd734..dde5c622 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -18,8 +18,7 @@ class DatasetContributorResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_contributor) - def get(self, - study_id: int, dataset_id: int): # pylint: disable= unused-argument + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_contributor_ = dataset_.dataset_contributors return [d.to_dict() for d in dataset_contributor_ if not d.to_dict()["creator"]] @@ -27,8 +26,7 @@ def get(self, @api.doc("update contributor") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, - study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -55,8 +53,7 @@ class DatasetContributorDelete(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") def delete( - self, study_id: int, - dataset_id: int, contributor_id: int + self, study_id: int, dataset_id: int, contributor_id: int ): # pylint: disable= unused-argument contributor_ = model.DatasetContributor.query.get(contributor_id) @@ -72,8 +69,7 @@ class DatasetCreatorResource(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") # @api.marshal_with(dataset_contributor) - def get(self, - study_id: int, dataset_id: int): # pylint: disable= unused-argument + def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_creator_ = dataset_.dataset_contributors return [d.to_dict() for d in dataset_creator_ if d.to_dict()["creator"]] @@ -81,8 +77,7 @@ def get(self, @api.doc("update creator") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, - study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -108,8 +103,7 @@ class DatasetCreatorDelete(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") def delete( - self, - study_id: int, dataset_id: int, creator_id: int + self, study_id: int, dataset_id: int, creator_id: int ): # pylint: disable= unused-argument dataset_creator_ = model.DatasetContributor.query.get(creator_id) model.db.session.delete(dataset_creator_) diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index 82db90c7..b01d2b53 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -31,8 +31,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update date") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, - study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -56,8 +55,9 @@ class DatasetDateDeleteResource(Resource): @api.doc("delete date") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, date_id: int): # pylint: disable= unused-argument + def delete( + self, study_id: int, dataset_id: int, date_id: int + ): # pylint: disable= unused-argument date_ = model.DatasetDate.query.get(date_id) model.db.session.delete(date_) diff --git a/apis/dataset_metadata/dataset_de_ident_level.py b/apis/dataset_metadata/dataset_de_ident_level.py index b3ae291b..24a6c417 100644 --- a/apis/dataset_metadata/dataset_de_ident_level.py +++ b/apis/dataset_metadata/dataset_de_ident_level.py @@ -33,8 +33,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update ident level") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, # pylint: disable= unused-argument - dataset_id: int): + def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_de_ident_level.update(data) diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index ca4c05fc..d330152b 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -52,9 +52,12 @@ class DatasetDescriptionUpdate(Resource): @api.doc("delete description") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - description_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + description_id: int, + ): dataset_description_ = model.DatasetDescription.query.get(description_id) model.db.session.delete(dataset_description_) diff --git a/apis/dataset_metadata/dataset_funder.py b/apis/dataset_metadata/dataset_funder.py index 6a0741e9..40bd76f6 100644 --- a/apis/dataset_metadata/dataset_funder.py +++ b/apis/dataset_metadata/dataset_funder.py @@ -35,8 +35,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update funder") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, # pylint: disable= unused-argument - dataset_id: int): + def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -60,9 +59,12 @@ class DatasetFunderUpdate(Resource): @api.doc("delete funder") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - funder_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + funder_id: int, + ): dataset_funder_ = model.DatasetFunder.query.get(funder_id) model.db.session.delete(dataset_funder_) diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index ffcfa387..7001d3a7 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -55,8 +55,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update publisher") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, # pylint: disable= unused-argument - dataset_id: int): + def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_other.update(data) diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index a23d4e69..dcf17542 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -54,9 +54,12 @@ class DatasetRelatedItemUpdate(Resource): @api.doc("delete related item") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - related_item_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + related_item_id: int, + ): dataset_related_item_ = model.DatasetRelatedItem.query.get(related_item_id) model.db.session.delete(dataset_related_item_) diff --git a/apis/dataset_metadata/dataset_rights.py b/apis/dataset_metadata/dataset_rights.py index 2f21fa9c..70c67989 100644 --- a/apis/dataset_metadata/dataset_rights.py +++ b/apis/dataset_metadata/dataset_rights.py @@ -57,9 +57,12 @@ class DatasetRightsUpdate(Resource): @api.doc("delete rights") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - rights_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + rights_id: int, + ): dataset_rights_ = model.DatasetRights.query.get(rights_id) model.db.session.delete(dataset_rights_) diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index a6f19e29..991333e5 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -58,9 +58,12 @@ class DatasetSubjectUpdate(Resource): @api.doc("delete subject") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - subject_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + subject_id: int, + ): dataset_subject_ = model.DatasetSubject.query.get(subject_id) model.db.session.delete(dataset_subject_) diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index 3fa89b34..9f10ebd6 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -52,9 +52,12 @@ class DatasetDescriptionUpdate(Resource): @api.doc("delete title") @api.response(200, "Success") @api.response(400, "Validation Error") - def delete(self, - study_id: int, dataset_id: int, # pylint: disable= unused-argument - title_id: int): + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + title_id: int, + ): dataset_title_ = model.DatasetTitle.query.get(title_id) model.db.session.delete(dataset_title_) model.db.session.commit() diff --git a/model/dataset_metadata/dataset_contributor.py b/model/dataset_metadata/dataset_contributor.py index c365c051..5def92ca 100644 --- a/model/dataset_metadata/dataset_contributor.py +++ b/model/dataset_metadata/dataset_contributor.py @@ -1,6 +1,7 @@ import datetime import uuid from datetime import timezone + from model.db import db diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index ecd7e1c7..2cf07779 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -13,6 +13,7 @@ def __init__(self, dataset): self.dataset = dataset self.created_at = datetime.datetime.now(timezone.utc).timestamp() self.dataset_related_item_other = model.DatasetRelatedItemOther(self) + __tablename__ = "dataset_related_item" id = db.Column(db.CHAR(36), primary_key=True) @@ -42,9 +43,12 @@ def to_dict(self): "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, - "title": self.dataset_related_item_title.title if self.dataset_related_item_title else None, - "title_type": self.dataset_related_item_title.type if self.dataset_related_item_title else None, - + "title": self.dataset_related_item_title.title + if self.dataset_related_item_title + else None, + "title_type": self.dataset_related_item_title.type + if self.dataset_related_item_title + else None, } @staticmethod From a6cd2508a1b6a782af4134d24e357e66ae68af96 Mon Sep 17 00:00:00 2001 From: aydawka Date: Tue, 17 Oct 2023 00:05:07 -0700 Subject: [PATCH 16/46] wip: pylint errors --- apis/__init__.py | 14 ++-------- apis/dataset_metadata/dataset_description.py | 2 +- .../dataset_related_item_contributor.py | 26 ------------------ .../dataset_related_item_identifier.py | 26 ------------------ .../dataset_related_item_other.py | 27 ------------------- .../dataset_related_item_title.py | 27 ------------------- apis/dataset_metadata/dataset_rights.py | 2 +- apis/dataset_metadata/dataset_subject.py | 2 +- apis/dataset_metadata/dataset_title.py | 2 +- model/dataset_metadata/dataset_contributor.py | 4 +-- 10 files changed, 7 insertions(+), 125 deletions(-) delete mode 100644 apis/dataset_metadata/dataset_related_item_contributor.py delete mode 100644 apis/dataset_metadata/dataset_related_item_identifier.py delete mode 100644 apis/dataset_metadata/dataset_related_item_other.py delete mode 100644 apis/dataset_metadata/dataset_related_item_title.py diff --git a/apis/__init__.py b/apis/__init__.py index 836c63bb..487a5c3b 100644 --- a/apis/__init__.py +++ b/apis/__init__.py @@ -19,14 +19,6 @@ from .dataset_metadata.dataset_readme import api as readme from .dataset_metadata.dataset_record_keys import api as record_keys from .dataset_metadata.dataset_related_item import api as related_item -from .dataset_metadata.dataset_related_item_contributor import ( - api as related_item_contributor, -) -from .dataset_metadata.dataset_related_item_identifier import ( - api as related_item_identifier, -) -from .dataset_metadata.dataset_related_item_other import api as related_item_other -from .dataset_metadata.dataset_related_item_title import api as related_item_title from .dataset_metadata.dataset_rights import api as rights from .dataset_metadata.dataset_subject import api as subject from .dataset_metadata.dataset_title import api as title @@ -73,11 +65,9 @@ "readme", "record_keys", "related_item", - "related_item_contributor", - "related_item_identifier", + "api", - "related_item_other", - "related_item_title", + "rights", "subject", "title", diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index d330152b..4347ce4e 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -54,7 +54,7 @@ class DatasetDescriptionUpdate(Resource): @api.response(400, "Validation Error") def delete( self, - study_id: int, + study_id: int, # pylint: disable= unused-argument dataset_id: int, # pylint: disable= unused-argument description_id: int, ): diff --git a/apis/dataset_metadata/dataset_related_item_contributor.py b/apis/dataset_metadata/dataset_related_item_contributor.py deleted file mode 100644 index 8857f745..00000000 --- a/apis/dataset_metadata/dataset_related_item_contributor.py +++ /dev/null @@ -1,26 +0,0 @@ -from flask_restx import Resource - -import model -from apis.dataset_metadata_namespace import api - -# dataset_related_item_contributor = api.model( -# "DatasetRelatedItemContributor", -# { -# "id": fields.String(required=True), -# "type": fields.String(required=True), -# "relation_type": fields.String(required=True), -# -# }, -# ) - - -@api.route("/study//dataset//related_item_identifier") -class DatasetRelatedItemContributorResource(Resource): - @api.doc("related_item_identifier") - @api.response(200, "Success") - @api.response(400, "Validation Error") - # @api.marshal_with(dataset_related_item_contributor) - def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument - dataset_ = model.Dataset.query.get(dataset_id) - dataset_related_item_contributor_ = dataset_.dataset_related_item_contributor - return [d.to_dict() for d in dataset_related_item_contributor_] diff --git a/apis/dataset_metadata/dataset_related_item_identifier.py b/apis/dataset_metadata/dataset_related_item_identifier.py deleted file mode 100644 index 1633adbb..00000000 --- a/apis/dataset_metadata/dataset_related_item_identifier.py +++ /dev/null @@ -1,26 +0,0 @@ -from flask_restx import Resource - -import model -from apis.dataset_metadata_namespace import api - -# dataset_related_item_contributor = api.model( -# "DatasetRelatedItemContributor", -# { -# "id": fields.String(required=True), -# "type": fields.String(required=True), -# "relation_type": fields.String(required=True), -# -# }, -# ) - - -@api.route("/study//dataset//related_item_contributor") -class DatasetRelatedItemContributorResource(Resource): - @api.doc("related_item_contributor") - @api.response(200, "Success") - @api.response(400, "Validation Error") - # @api.marshal_with(dataset_related_item_contributor) - def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument - dataset_ = model.Dataset.query.get(dataset_id) - dataset_related_item_ = dataset_.dataset_related_item - return [d.to_dict() for d in dataset_related_item_] diff --git a/apis/dataset_metadata/dataset_related_item_other.py b/apis/dataset_metadata/dataset_related_item_other.py deleted file mode 100644 index 87852fc2..00000000 --- a/apis/dataset_metadata/dataset_related_item_other.py +++ /dev/null @@ -1,27 +0,0 @@ -from flask_restx import Resource - -import model -from apis.dataset_metadata_namespace import api - -# dataset_related_item_contributor = api.model( -# "DatasetRelatedItemContributor", -# { -# "id": fields.String(required=True), -# "type": fields.String(required=True), -# "relation_type": fields.String(required=True), -# -# }, -# ) - - -@api.route("/study//dataset//related_item_other") -class DatasetRelatedItemContributorResource(Resource): - @api.doc("related_item_other") - @api.response(200, "Success") - @api.response(400, "Validation Error") - # @api.param("id", "The dataset identifier") - # @api.marshal_with(dataset_related_item_contributor) - def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument - dataset_ = model.Dataset.query.get(dataset_id) - dataset_related_item_ = dataset_.dataset_related_item - return [d.to_dict() for d in dataset_related_item_] diff --git a/apis/dataset_metadata/dataset_related_item_title.py b/apis/dataset_metadata/dataset_related_item_title.py deleted file mode 100644 index 81e462e6..00000000 --- a/apis/dataset_metadata/dataset_related_item_title.py +++ /dev/null @@ -1,27 +0,0 @@ -from flask_restx import Resource - -import model -from apis.dataset_metadata_namespace import api - -# dataset_related_item_contributor = api.model( -# "DatasetRelatedItemTitle", -# { -# "id": fields.String(required=True), -# "type": fields.String(required=True), -# "relation_type": fields.String(required=True), -# -# }, -# ) - - -@api.route("/study//dataset//related-item-title") -class DatasetRelatedItemTitleResource(Resource): - @api.doc("related_item_title") - @api.response(200, "Success") - @api.response(400, "Validation Error") - # @api.param("id", "The dataset identifier") - # @api.marshal_with(dataset_related_item_contributor) - def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument - dataset_ = model.Dataset.query.get(dataset_id) - dataset_related_item_title_ = dataset_.dataset_related_item_title - return [d.to_dict() for d in dataset_related_item_title_] diff --git a/apis/dataset_metadata/dataset_rights.py b/apis/dataset_metadata/dataset_rights.py index 70c67989..bd8a794e 100644 --- a/apis/dataset_metadata/dataset_rights.py +++ b/apis/dataset_metadata/dataset_rights.py @@ -59,7 +59,7 @@ class DatasetRightsUpdate(Resource): @api.response(400, "Validation Error") def delete( self, - study_id: int, + study_id: int, # pylint: disable= unused-argument dataset_id: int, # pylint: disable= unused-argument rights_id: int, ): diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index 991333e5..04bc51db 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -60,7 +60,7 @@ class DatasetSubjectUpdate(Resource): @api.response(400, "Validation Error") def delete( self, - study_id: int, + study_id: int, # pylint: disable= unused-argument dataset_id: int, # pylint: disable= unused-argument subject_id: int, ): diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index 9f10ebd6..13693f5f 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -54,7 +54,7 @@ class DatasetDescriptionUpdate(Resource): @api.response(400, "Validation Error") def delete( self, - study_id: int, + study_id: int, # pylint: disable= unused-argument dataset_id: int, # pylint: disable= unused-argument title_id: int, ): diff --git a/model/dataset_metadata/dataset_contributor.py b/model/dataset_metadata/dataset_contributor.py index 5def92ca..56818b54 100644 --- a/model/dataset_metadata/dataset_contributor.py +++ b/model/dataset_metadata/dataset_contributor.py @@ -25,9 +25,7 @@ def __init__(self, dataset): dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_contributors") - # dataset_contributor_affiliation = db.relationship( - # "DatasetContributorAffiliation", back_populates="dataset_contributors" - # ) + def to_dict(self): return { From 619eb412c60ec0333273685c1a4573d7b4feec07 Mon Sep 17 00:00:00 2001 From: Sanjay Soundarajan Date: Tue, 17 Oct 2023 10:27:18 -0700 Subject: [PATCH 17/46] =?UTF-8?q?=F0=9F=94=90=20fix:=20update=20secret=20k?= =?UTF-8?q?ey=20length?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app.py b/app.py index 6a921349..d024c6e9 100644 --- a/app.py +++ b/app.py @@ -40,8 +40,11 @@ def create_app(config_module=None): app.config.from_prefixed_env("FAIRHUB") # print(app.config) - if config.FAIRHUB_SECRET and len(config.FAIRHUB_SECRET) < 14: - raise RuntimeError("secret key should contain at least 14 characters") + if config.FAIRHUB_SECRET: + if len(config.FAIRHUB_SECRET) < 32: + raise RuntimeError("FAIRHUB_SECRET must be at least 32 characters long") + else: + raise RuntimeError("FAIRHUB_SECRET not set") if "DATABASE_URL" in app.config: # if "TESTING" in app_config and app_config["TESTING"]: From cd0821d8544d00aff5bb48bcf4268acd44405751 Mon Sep 17 00:00:00 2001 From: aydawka Date: Tue, 17 Oct 2023 13:15:41 -0700 Subject: [PATCH 18/46] fix: dataset medata relate item title --- apis/__init__.py | 2 -- apis/dataset_metadata/dataset_funder.py | 2 +- apis/dataset_metadata/dataset_related_item.py | 28 +++++++++++++++++-- model/dataset_metadata/dataset_access.py | 3 +- model/dataset_metadata/dataset_contributor.py | 1 - .../dataset_metadata/dataset_related_item.py | 12 ++++---- .../dataset_related_item_title.py | 6 ++-- model/study_metadata/study_identification.py | 10 +++---- 8 files changed, 41 insertions(+), 23 deletions(-) diff --git a/apis/__init__.py b/apis/__init__.py index 487a5c3b..26c8f39e 100644 --- a/apis/__init__.py +++ b/apis/__init__.py @@ -65,9 +65,7 @@ "readme", "record_keys", "related_item", - "api", - "rights", "subject", "title", diff --git a/apis/dataset_metadata/dataset_funder.py b/apis/dataset_metadata/dataset_funder.py index 40bd76f6..f4310a58 100644 --- a/apis/dataset_metadata/dataset_funder.py +++ b/apis/dataset_metadata/dataset_funder.py @@ -61,7 +61,7 @@ class DatasetFunderUpdate(Resource): @api.response(400, "Validation Error") def delete( self, - study_id: int, + study_id: int, # pylint: disable= unused-argument dataset_id: int, # pylint: disable= unused-argument funder_id: int, ): diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index dcf17542..272ebd22 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -38,14 +38,36 @@ def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argum if "id" in i and i["id"]: dataset_related_item_ = model.DatasetRelatedItem.query.get(i["id"]) if not dataset_related_item_: - return f"Study link {i['id']} Id is not found", 404 + return f"{i['id']} Id is not found", 404 dataset_related_item_.update(i) + for item in dataset_related_item_.dataset_related_item_title: + item.update(i) + list_of_elements.append(item.to_dict()) + for item in dataset_related_item_.dataset_related_item_contributor: + item.update(i) list_of_elements.append(dataset_related_item_.to_dict()) + elif "id" not in i or not i["id"]: - dataset_related_item_ = model.DatasetRelatedItem.from_data(data_obj, i) + dataset_related_item_ = (model.DatasetRelatedItem. + from_data(data_obj, i)) model.db.session.add(dataset_related_item_) + + filtered_related_item = dataset_related_item_.query.filter_by( + id=dataset_related_item_.id + ).first() + title_add = model.DatasetRelatedItemTitle.from_data( + filtered_related_item, i + ) + contributor_add = model.DatasetRelatedItemContributor.from_data( + filtered_related_item, i + ) + model.db.session.add(title_add) + model.db.session.add(contributor_add) + list_of_elements.append(dataset_related_item_.to_dict()) + model.db.session.commit() + return list_of_elements @@ -56,7 +78,7 @@ class DatasetRelatedItemUpdate(Resource): @api.response(400, "Validation Error") def delete( self, - study_id: int, + study_id: int, # pylint: disable= unused-argument dataset_id: int, # pylint: disable= unused-argument related_item_id: int, ): diff --git a/model/dataset_metadata/dataset_access.py b/model/dataset_metadata/dataset_access.py index 00148415..05e59e9d 100644 --- a/model/dataset_metadata/dataset_access.py +++ b/model/dataset_metadata/dataset_access.py @@ -41,4 +41,5 @@ def update(self, data: dict): self.description = data["description"] self.url = data["url"] self.url_last_checked = datetime.datetime.now(datetime.timezone.utc).timestamp() - self.type = data["type"] + if "type" in data: + self.type = data["type"] diff --git a/model/dataset_metadata/dataset_contributor.py b/model/dataset_metadata/dataset_contributor.py index 56818b54..5e5b8ab4 100644 --- a/model/dataset_metadata/dataset_contributor.py +++ b/model/dataset_metadata/dataset_contributor.py @@ -26,7 +26,6 @@ def __init__(self, dataset): dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) dataset = db.relationship("Dataset", back_populates="dataset_contributors") - def to_dict(self): return { "id": self.id, diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 2cf07779..0226d92a 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -43,12 +43,12 @@ def to_dict(self): "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, - "title": self.dataset_related_item_title.title - if self.dataset_related_item_title - else None, - "title_type": self.dataset_related_item_title.type - if self.dataset_related_item_title - else None, + # "title": self.dataset_related_item_title.title + # if self.dataset_related_item_title + # else None, + # "title_type": self.dataset_related_item_title.type + # if self.dataset_related_item_title + # else None, } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_title.py b/model/dataset_metadata/dataset_related_item_title.py index 2893261e..b704ee25 100644 --- a/model/dataset_metadata/dataset_related_item_title.py +++ b/model/dataset_metadata/dataset_related_item_title.py @@ -6,9 +6,9 @@ class DatasetRelatedItemTitle(db.Model): # type: ignore - def __init__(self, dataset): + def __init__(self, dataset_related_item): self.id = str(uuid.uuid4()) - self.dataset = dataset + self.dataset_related_item = dataset_related_item self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_related_item_title" @@ -39,5 +39,5 @@ def from_data(dataset, data: dict): return dataset_related_item_title def update(self, data: dict): - self.type = data["type"] + self.type = data["title_type"] self.title = data["title"] diff --git a/model/study_metadata/study_identification.py b/model/study_metadata/study_identification.py index 0235895d..bbc6531a 100644 --- a/model/study_metadata/study_identification.py +++ b/model/study_metadata/study_identification.py @@ -50,12 +50,10 @@ def update(self, data: dict): """Updates the study from a dictionary""" self.identifier = data["identifier"] self.identifier_type = data["identifier_type"] - if "identifier_domain" in data: - self.identifier_domain = ( - data["identifier_domain"] if "identifier_domain" in data else "" - ) - if "identifier_link" in data: - self.identifier_link = data["identifier_link"] + self.identifier_domain = data["identifier_domain"] if\ + "identifier_domain" in data else "" + self.identifier_link = data["identifier_link"] if\ + "identifier_link" in data else "" self.study.touch() def validate(self): From e864de235635b788c57175d7e84775a8c83a27dc Mon Sep 17 00:00:00 2001 From: aydawka Date: Tue, 17 Oct 2023 15:33:57 -0700 Subject: [PATCH 19/46] wip: related item in dataset metadata --- apis/dataset_metadata/dataset_related_item.py | 13 +++++++++- .../dataset_related_item_contributor.py | 24 ++++++++++--------- .../dataset_related_item_identifier.py | 22 ++++++++++------- .../dataset_related_item_other.py | 8 +++---- .../dataset_related_item_title.py | 4 ++-- model/study_metadata/study_identification.py | 10 ++++---- 6 files changed, 50 insertions(+), 31 deletions(-) diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index 272ebd22..97f94c99 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -45,6 +45,10 @@ def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argum list_of_elements.append(item.to_dict()) for item in dataset_related_item_.dataset_related_item_contributor: item.update(i) + for item in dataset_related_item_.dataset_related_item_identifier: + item.update(i) + for item in dataset_related_item_.dataset_related_item_other: + item.update(i) list_of_elements.append(dataset_related_item_.to_dict()) elif "id" not in i or not i["id"]: @@ -55,15 +59,22 @@ def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argum filtered_related_item = dataset_related_item_.query.filter_by( id=dataset_related_item_.id ).first() + title_add = model.DatasetRelatedItemTitle.from_data( filtered_related_item, i ) + model.db.session.add(title_add) + contributor_add = model.DatasetRelatedItemContributor.from_data( filtered_related_item, i ) - model.db.session.add(title_add) model.db.session.add(contributor_add) + itentifier_add = model.DatasetRelatedItemIdentifier.from_data( + filtered_related_item, i + ) + model.db.session.add(itentifier_add) + list_of_elements.append(dataset_related_item_.to_dict()) model.db.session.commit() diff --git a/model/dataset_metadata/dataset_related_item_contributor.py b/model/dataset_metadata/dataset_related_item_contributor.py index f961ec65..fbdd68af 100644 --- a/model/dataset_metadata/dataset_related_item_contributor.py +++ b/model/dataset_metadata/dataset_related_item_contributor.py @@ -6,9 +6,9 @@ class DatasetRelatedItemContributor(db.Model): # type: ignore - def __init__(self, dataset): + def __init__(self, dataset_related_item): self.id = str(uuid.uuid4()) - self.dataset = dataset + self.dataset_related_item = dataset_related_item self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "dataset_related_item_contributor" @@ -31,19 +31,21 @@ def to_dict(self): "id": self.id, "name": self.name, "name_type": self.name_type, - "creator": self.creator, + "creator": False, "contributor_type": self.contributor_type, "created_at": self.created_at, } @staticmethod - def from_data(dataset, data: dict): - dataset_related_contributor = DatasetRelatedItemContributor(dataset) - dataset_related_contributor.update(data) - return dataset_related_contributor + def from_data(dataset_related_item, data: dict): + contributor_ = DatasetRelatedItemContributor(dataset_related_item) + contributor_.update(data) + return contributor_ def update(self, data: dict): - self.name = data["name"] - self.name_type = data["name_type"] - self.creator = data["creator"] - self.contributor_type = data["contributor_type"] + self.name = data["name"] if "name" in data else "" + self.name_type = data["name_type"] if "name_type" in data else None + self.creator = False + self.contributor_type = ( + data["contributor_type"] if "contributor_type" in data else None + ) diff --git a/model/dataset_metadata/dataset_related_item_identifier.py b/model/dataset_metadata/dataset_related_item_identifier.py index ef8bb30d..0795299a 100644 --- a/model/dataset_metadata/dataset_related_item_identifier.py +++ b/model/dataset_metadata/dataset_related_item_identifier.py @@ -6,9 +6,10 @@ class DatasetRelatedItemIdentifier(db.Model): # type: ignore - def __init__(self): + def __init__(self, dataset_related_item): self.id = str(uuid.uuid4()) self.created_at = datetime.datetime.now(timezone.utc).timestamp() + self.dataset_related_item = dataset_related_item __tablename__ = "dataset_related_item_identifier" id = db.Column(db.CHAR(36), primary_key=True) @@ -38,11 +39,14 @@ def to_dict(self): } @staticmethod - def from_data(data: dict): - dataset_related_item_identifier = DatasetRelatedItemIdentifier() - dataset_related_item_identifier.identifier = data["identifier"] - dataset_related_item_identifier.type = data["type"] - dataset_related_item_identifier.metadata_scheme = data["metadata_scheme"] - dataset_related_item_identifier.scheme_uri = data["scheme_uri"] - dataset_related_item_identifier.scheme_type = data["scheme_type"] - return dataset_related_item_identifier + def from_data(dataset_related_item, data: dict): + identifier_ = DatasetRelatedItemIdentifier(dataset_related_item) + identifier_.update(data) + return identifier_ + + def update(self, data: dict): + self.identifier = data["identifier"] + self.type = data["identifier_type"] + self.metadata_scheme = data["metadata_scheme"] + self.scheme_uri = data["scheme_uri"] + self.scheme_type = data["scheme_type"] diff --git a/model/dataset_metadata/dataset_related_item_other.py b/model/dataset_metadata/dataset_related_item_other.py index 2a27ebcc..30200385 100644 --- a/model/dataset_metadata/dataset_related_item_other.py +++ b/model/dataset_metadata/dataset_related_item_other.py @@ -2,8 +2,8 @@ class DatasetRelatedItemOther(db.Model): # type: ignore - def __init__(self, dataset): - self.dataset = dataset + def __init__(self, dataset_related_item): + self.dataset_related_item = dataset_related_item self.publication_year = None self.volume = "" self.issue = "" @@ -49,8 +49,8 @@ def to_dict(self): } @staticmethod - def from_data(dataset, data: dict): - dataset_related_item_other = DatasetRelatedItemOther(dataset) + def from_data(dataset_related_item, data: dict): + dataset_related_item_other = DatasetRelatedItemOther(dataset_related_item) dataset_related_item_other.update(data) return dataset_related_item_other diff --git a/model/dataset_metadata/dataset_related_item_title.py b/model/dataset_metadata/dataset_related_item_title.py index b704ee25..ceb61063 100644 --- a/model/dataset_metadata/dataset_related_item_title.py +++ b/model/dataset_metadata/dataset_related_item_title.py @@ -33,8 +33,8 @@ def to_dict(self): } @staticmethod - def from_data(dataset, data: dict): - dataset_related_item_title = DatasetRelatedItemTitle(dataset) + def from_data(dataset_related_item, data: dict): + dataset_related_item_title = DatasetRelatedItemTitle(dataset_related_item) dataset_related_item_title.update(data) return dataset_related_item_title diff --git a/model/study_metadata/study_identification.py b/model/study_metadata/study_identification.py index bbc6531a..b2b7abd8 100644 --- a/model/study_metadata/study_identification.py +++ b/model/study_metadata/study_identification.py @@ -50,10 +50,12 @@ def update(self, data: dict): """Updates the study from a dictionary""" self.identifier = data["identifier"] self.identifier_type = data["identifier_type"] - self.identifier_domain = data["identifier_domain"] if\ - "identifier_domain" in data else "" - self.identifier_link = data["identifier_link"] if\ - "identifier_link" in data else "" + self.identifier_domain = ( + data["identifier_domain"] if "identifier_domain" in data else "" + ) + self.identifier_link = ( + data["identifier_link"] if "identifier_link" in data else "" + ) self.study.touch() def validate(self): From 3aa36fc60563a4167f7ab168fd9f4920e87c8543 Mon Sep 17 00:00:00 2001 From: Lint Action Date: Tue, 17 Oct 2023 22:35:52 +0000 Subject: [PATCH 20/46] =?UTF-8?q?style:=20=F0=9F=8E=A8=20fix=20code=20styl?= =?UTF-8?q?e=20issues=20with=20Black?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apis/dataset_metadata/dataset_related_item.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index 97f94c99..4520f3de 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -52,8 +52,7 @@ def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argum list_of_elements.append(dataset_related_item_.to_dict()) elif "id" not in i or not i["id"]: - dataset_related_item_ = (model.DatasetRelatedItem. - from_data(data_obj, i)) + dataset_related_item_ = model.DatasetRelatedItem.from_data(data_obj, i) model.db.session.add(dataset_related_item_) filtered_related_item = dataset_related_item_.query.filter_by( From cf995dcae57df6b7a76f7701d4b0f9aacd1ce659 Mon Sep 17 00:00:00 2001 From: aydawka Date: Fri, 20 Oct 2023 08:56:33 -0700 Subject: [PATCH 21/46] fix: dataset metadata related item --- apis/dataset_metadata/dataset_related_item.py | 84 ++++++++++++------- model/__init__.py | 6 ++ model/dataset_metadata/dataset_access.py | 3 +- model/dataset_metadata/dataset_consent.py | 3 +- model/dataset_metadata/dataset_contributor.py | 3 +- .../dataset_de_ident_level.py | 3 +- .../dataset_metadata/dataset_related_item.py | 22 +++-- .../dataset_related_item_contributor.py | 18 ++-- .../dataset_related_item_identifier.py | 10 +-- .../dataset_related_item_other.py | 43 ++++++---- .../dataset_related_item_title.py | 2 +- 11 files changed, 119 insertions(+), 78 deletions(-) diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index 97f94c99..bf78b418 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -1,4 +1,4 @@ -from typing import Any, Union +from typing import Any, Union, List from flask import request from flask_restx import Resource, fields @@ -21,7 +21,7 @@ class DatasetRelatedItemResource(Resource): @api.doc("related item") @api.response(200, "Success") @api.response(400, "Validation Error") - @api.marshal_with(dataset_related_item) + # @api.marshal_with(dataset_related_item) def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument dataset_ = model.Dataset.query.get(dataset_id) dataset_related_item_ = dataset_.dataset_related_item @@ -33,24 +33,36 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) - list_of_elements = [] + list_of_elements: List = [] for i in data: if "id" in i and i["id"]: dataset_related_item_ = model.DatasetRelatedItem.query.get(i["id"]) if not dataset_related_item_: return f"{i['id']} Id is not found", 404 dataset_related_item_.update(i) - for item in dataset_related_item_.dataset_related_item_title: - item.update(i) - list_of_elements.append(item.to_dict()) - for item in dataset_related_item_.dataset_related_item_contributor: - item.update(i) - for item in dataset_related_item_.dataset_related_item_identifier: - item.update(i) - for item in dataset_related_item_.dataset_related_item_other: - item.update(i) - list_of_elements.append(dataset_related_item_.to_dict()) - + dataset_related_item_.dataset_related_item_other.update(i) + + for title in i["titles"]: + print(title) + update_title = model.DatasetRelatedItemTitle.query.get(title["id"]) + update_title.update(title) + + for identifier in i["identifiers"]: + update_identifier = model.DatasetRelatedItemIdentifier.query.get(identifier["id"]) + update_identifier.update(identifier) + + contributors_ = i["contributors"] + creators_ = i["creators"] + for c in contributors_: + related_item_contributors_ = model.DatasetRelatedItemContributor.query.get(c["id"]) + related_item_contributors_.update(c) + model.db.session.add(related_item_contributors_) + for c in creators_: + related_item_creators_ = model.DatasetRelatedItemContributor.query.get(c["id"]) + related_item_creators_.update(c) + model.db.session.add(related_item_creators_) + + # list_of_elements.append(dataset_related_item_.to_dict()) elif "id" not in i or not i["id"]: dataset_related_item_ = (model.DatasetRelatedItem. from_data(data_obj, i)) @@ -60,22 +72,34 @@ def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argum id=dataset_related_item_.id ).first() - title_add = model.DatasetRelatedItemTitle.from_data( - filtered_related_item, i - ) - model.db.session.add(title_add) - - contributor_add = model.DatasetRelatedItemContributor.from_data( - filtered_related_item, i - ) - model.db.session.add(contributor_add) - - itentifier_add = model.DatasetRelatedItemIdentifier.from_data( - filtered_related_item, i - ) - model.db.session.add(itentifier_add) - - list_of_elements.append(dataset_related_item_.to_dict()) + for t in i["titles"]: + title_add = model.DatasetRelatedItemTitle.from_data( + filtered_related_item, t + ) + model.db.session.add(title_add) + + for identifier in i["identifiers"]: + identifier_add = model.DatasetRelatedItemIdentifier.from_data( + filtered_related_item, identifier + ) + model.db.session.add(identifier_add) + + other_add = model.DatasetRelatedItemOther.from_data( + filtered_related_item, i + ) + model.db.session.add(other_add) + + contributors_ = i["contributors"] + creators_ = i["creators"] + for c in contributors_: + related_item_contributors_ = model.DatasetRelatedItemContributor.from_data( + dataset_related_item_, c, False) + model.db.session.add(related_item_contributors_) + for c in creators_: + related_item_creators_ = model.DatasetRelatedItemContributor.from_data( + dataset_related_item_, c, True) + model.db.session.add(related_item_creators_) + # list_of_elements.append(dataset_related_item_.to_dict()) model.db.session.commit() diff --git a/model/__init__.py b/model/__init__.py index 371fb631..dfa6bdaf 100644 --- a/model/__init__.py +++ b/model/__init__.py @@ -6,6 +6,10 @@ from model.dataset_metadata.dataset_related_item_identifier import ( DatasetRelatedItemIdentifier, ) +from model.dataset_metadata.creators import ( + Creators, +) + from model.dataset_metadata.dataset_related_item_other import DatasetRelatedItemOther from model.dataset_metadata.dataset_related_item_title import DatasetRelatedItemTitle @@ -23,6 +27,7 @@ from .dataset_metadata.dataset_rights import DatasetRights from .dataset_metadata.dataset_subject import DatasetSubject from .dataset_metadata.dataset_title import DatasetTitle + from .db import db from .email_verification import EmailVerification from .invited_study_contributor import StudyInvitedContributor @@ -104,4 +109,5 @@ "TokenBlacklist", "UserDetails", "Notification", + "Creators" ] diff --git a/model/dataset_metadata/dataset_access.py b/model/dataset_metadata/dataset_access.py index 05e59e9d..00148415 100644 --- a/model/dataset_metadata/dataset_access.py +++ b/model/dataset_metadata/dataset_access.py @@ -41,5 +41,4 @@ def update(self, data: dict): self.description = data["description"] self.url = data["url"] self.url_last_checked = datetime.datetime.now(datetime.timezone.utc).timestamp() - if "type" in data: - self.type = data["type"] + self.type = data["type"] diff --git a/model/dataset_metadata/dataset_consent.py b/model/dataset_metadata/dataset_consent.py index f63a55af..5eaaa92c 100644 --- a/model/dataset_metadata/dataset_consent.py +++ b/model/dataset_metadata/dataset_consent.py @@ -51,5 +51,4 @@ def update(self, data: dict): self.research_type = data["research_type"] self.genetic_only = data["genetic_only"] self.no_methods = data["no_methods"] - if "details" in data: - self.details = data["details"] + self.details = data["details"] diff --git a/model/dataset_metadata/dataset_contributor.py b/model/dataset_metadata/dataset_contributor.py index 5e5b8ab4..81aa8617 100644 --- a/model/dataset_metadata/dataset_contributor.py +++ b/model/dataset_metadata/dataset_contributor.py @@ -53,6 +53,5 @@ def update(self, data: dict): self.name_identifier_scheme = data["name_identifier_scheme"] self.name_identifier_scheme_uri = data["name_identifier_scheme_uri"] self.creator = data["creator"] - if "contributor_type" in data: - self.contributor_type = data["contributor_type"] + self.contributor_type = data["contributor_type"] self.affiliations = data["affiliations"] diff --git a/model/dataset_metadata/dataset_de_ident_level.py b/model/dataset_metadata/dataset_de_ident_level.py index 917e6c86..cf6eff78 100644 --- a/model/dataset_metadata/dataset_de_ident_level.py +++ b/model/dataset_metadata/dataset_de_ident_level.py @@ -51,5 +51,4 @@ def update(self, data: dict): self.dates = data["dates"] self.nonarr = data["nonarr"] self.k_anon = data["k_anon"] - if "details" in data: - self.details = data["details"] + self.details = data["details"] diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 0226d92a..6ef4c222 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -2,7 +2,6 @@ import uuid from datetime import timezone -import model from ..db import db @@ -12,7 +11,7 @@ def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset self.created_at = datetime.datetime.now(timezone.utc).timestamp() - self.dataset_related_item_other = model.DatasetRelatedItemOther(self) + # self.dataset_related_item_other = model.DatasetRelatedItemOther(self) __tablename__ = "dataset_related_item" @@ -38,17 +37,24 @@ def __init__(self, dataset): ) def to_dict(self): + sorted_contributors = sorted( + self.dataset_related_item_contributor, + key=lambda creator: creator.created_at, + ) + creators = [creator for creator in sorted_contributors if creator.creator] + + contributors = [ + contributor for contributor in sorted_contributors if not contributor.creator] + return { "id": self.id, "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, - # "title": self.dataset_related_item_title.title - # if self.dataset_related_item_title - # else None, - # "title_type": self.dataset_related_item_title.type - # if self.dataset_related_item_title - # else None, + "titles": [i.to_dict() for i in self.dataset_related_item_title], + "creators": [c.to_dict() for c in creators], + "contributors": [c.to_dict() for c in contributors], + "identifiers": [i.to_dict() for i in self.dataset_related_item_identifier] } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_contributor.py b/model/dataset_metadata/dataset_related_item_contributor.py index fbdd68af..83b3a7aa 100644 --- a/model/dataset_metadata/dataset_related_item_contributor.py +++ b/model/dataset_metadata/dataset_related_item_contributor.py @@ -6,10 +6,11 @@ class DatasetRelatedItemContributor(db.Model): # type: ignore - def __init__(self, dataset_related_item): + def __init__(self, dataset_related_item, creator): self.id = str(uuid.uuid4()) self.dataset_related_item = dataset_related_item self.created_at = datetime.datetime.now(timezone.utc).timestamp() + self.creator = creator __tablename__ = "dataset_related_item_contributor" id = db.Column(db.CHAR(36), primary_key=True) @@ -31,21 +32,22 @@ def to_dict(self): "id": self.id, "name": self.name, "name_type": self.name_type, - "creator": False, "contributor_type": self.contributor_type, "created_at": self.created_at, } @staticmethod - def from_data(dataset_related_item, data: dict): - contributor_ = DatasetRelatedItemContributor(dataset_related_item) + def from_data(dataset_related_item, data: dict, creator): + contributor_ = DatasetRelatedItemContributor(dataset_related_item, creator) contributor_.update(data) return contributor_ def update(self, data: dict): - self.name = data["name"] if "name" in data else "" - self.name_type = data["name_type"] if "name_type" in data else None - self.creator = False + self.name = data["name"] \ + if "name" in data else "" + self.name_type = data["name_type"] \ + if "name_type" in data else None self.contributor_type = ( - data["contributor_type"] if "contributor_type" in data else None + data["contributor_type"] + if "contributor_type" in data else None ) diff --git a/model/dataset_metadata/dataset_related_item_identifier.py b/model/dataset_metadata/dataset_related_item_identifier.py index 0795299a..3fb63a02 100644 --- a/model/dataset_metadata/dataset_related_item_identifier.py +++ b/model/dataset_metadata/dataset_related_item_identifier.py @@ -45,8 +45,8 @@ def from_data(dataset_related_item, data: dict): return identifier_ def update(self, data: dict): - self.identifier = data["identifier"] - self.type = data["identifier_type"] - self.metadata_scheme = data["metadata_scheme"] - self.scheme_uri = data["scheme_uri"] - self.scheme_type = data["scheme_type"] + self.identifier = data["identifier"] if "identifier" in data else "" + self.type = data["identifier_type"] if "identifier_type" in data else None + self.metadata_scheme = data["metadata_scheme"] if "metadata_scheme" in data else "" + self.scheme_uri = data["scheme_uri"] if "scheme_uri" in data else "" + self.scheme_type = data["scheme_type"] if "scheme_type" in data else "" diff --git a/model/dataset_metadata/dataset_related_item_other.py b/model/dataset_metadata/dataset_related_item_other.py index 30200385..9e88b341 100644 --- a/model/dataset_metadata/dataset_related_item_other.py +++ b/model/dataset_metadata/dataset_related_item_other.py @@ -4,15 +4,15 @@ class DatasetRelatedItemOther(db.Model): # type: ignore def __init__(self, dataset_related_item): self.dataset_related_item = dataset_related_item - self.publication_year = None - self.volume = "" - self.issue = "" - self.number_value = "" - self.number_type = None - self.first_page = "" - self.last_page = "" - self.publisher = "" - self.edition = "" + # self.publication_year = None + # self.volume = "" + # self.issue = "" + # self.number_value = "" + # self.number_type = None + # self.first_page = "" + # self.last_page = "" + # self.publisher = "" + # self.edition = "" __tablename__ = "dataset_related_item_other" publication_year = db.Column(db.BigInteger, nullable=True) @@ -55,12 +55,19 @@ def from_data(dataset_related_item, data: dict): return dataset_related_item_other def update(self, data: dict): - self.publication_year = data["publication_year"] - self.volume = data["volume"] - self.issue = data["issue"] - self.number_value = data["number_value"] - self.number_type = data["number_type"] - self.first_page = data["first_page"] - self.last_page = data["last_page"] - self.publisher = data["publisher"] - self.edition = data["edition"] + self.publication_year = data["publication_year"] \ + if "publication_year" in data else None + self.volume = data["volume"] if "volume" in data else "" + self.issue = data["issue"] if "issue" in data else "" + self.number_value = data["number_value"] \ + if "number_value" in data else "" + self.number_type = data["number_type"] \ + if "number_type" in data else None + self.first_page = data["first_page"] \ + if "first_page" in data else "" + self.last_page = data["last_page"] \ + if "last_page" in data else "" + self.publisher = data["publisher"] \ + if "publisher" in data else "" + self.edition = data["edition"] \ + if "edition" in data else "" diff --git a/model/dataset_metadata/dataset_related_item_title.py b/model/dataset_metadata/dataset_related_item_title.py index ceb61063..2d4ea08d 100644 --- a/model/dataset_metadata/dataset_related_item_title.py +++ b/model/dataset_metadata/dataset_related_item_title.py @@ -39,5 +39,5 @@ def from_data(dataset_related_item, data: dict): return dataset_related_item_title def update(self, data: dict): - self.type = data["title_type"] + self.type = data["type"] self.title = data["title"] From 575cd65fd1e00039489c3cfe6797a41e1f0434d8 Mon Sep 17 00:00:00 2001 From: aydawka Date: Fri, 20 Oct 2023 08:59:03 -0700 Subject: [PATCH 22/46] fix: study identifiers model --- model/__init__.py | 7 ++----- model/study_metadata/study_identification.py | 8 ++------ 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/model/__init__.py b/model/__init__.py index dfa6bdaf..aec84be5 100644 --- a/model/__init__.py +++ b/model/__init__.py @@ -6,9 +6,7 @@ from model.dataset_metadata.dataset_related_item_identifier import ( DatasetRelatedItemIdentifier, ) -from model.dataset_metadata.creators import ( - Creators, -) + from model.dataset_metadata.dataset_related_item_other import DatasetRelatedItemOther from model.dataset_metadata.dataset_related_item_title import DatasetRelatedItemTitle @@ -108,6 +106,5 @@ "EmailVerification", "TokenBlacklist", "UserDetails", - "Notification", - "Creators" + "Notification" ] diff --git a/model/study_metadata/study_identification.py b/model/study_metadata/study_identification.py index b2b7abd8..7af40cc3 100644 --- a/model/study_metadata/study_identification.py +++ b/model/study_metadata/study_identification.py @@ -50,12 +50,8 @@ def update(self, data: dict): """Updates the study from a dictionary""" self.identifier = data["identifier"] self.identifier_type = data["identifier_type"] - self.identifier_domain = ( - data["identifier_domain"] if "identifier_domain" in data else "" - ) - self.identifier_link = ( - data["identifier_link"] if "identifier_link" in data else "" - ) + self.identifier_domain = data["identifier_domain"] + self.identifier_link = data["identifier_link"] self.study.touch() def validate(self): From aa8cd3cfd0b6a356394682d3612a0f88cd3b083a Mon Sep 17 00:00:00 2001 From: aydawka Date: Fri, 20 Oct 2023 09:30:37 -0700 Subject: [PATCH 23/46] style: format errors check --- apis/dataset_metadata/dataset_related_item.py | 31 +++++++++++++------ model/__init__.py | 5 +-- .../dataset_metadata/dataset_related_item.py | 27 ++++++++++------ .../dataset_related_item_contributor.py | 9 ++---- .../dataset_related_item_identifier.py | 4 ++- .../dataset_related_item_other.py | 23 ++++++-------- 6 files changed, 54 insertions(+), 45 deletions(-) diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index bf78b418..b4758396 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -1,4 +1,4 @@ -from typing import Any, Union, List +from typing import Any, List, Union from flask import request from flask_restx import Resource, fields @@ -48,24 +48,29 @@ def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argum update_title.update(title) for identifier in i["identifiers"]: - update_identifier = model.DatasetRelatedItemIdentifier.query.get(identifier["id"]) + update_identifier = model.DatasetRelatedItemIdentifier.query.get( + identifier["id"] + ) update_identifier.update(identifier) contributors_ = i["contributors"] creators_ = i["creators"] for c in contributors_: - related_item_contributors_ = model.DatasetRelatedItemContributor.query.get(c["id"]) + related_item_contributors_ = ( + model.DatasetRelatedItemContributor.query.get(c["id"]) + ) related_item_contributors_.update(c) model.db.session.add(related_item_contributors_) for c in creators_: - related_item_creators_ = model.DatasetRelatedItemContributor.query.get(c["id"]) + related_item_creators_ = ( + model.DatasetRelatedItemContributor.query.get(c["id"]) + ) related_item_creators_.update(c) model.db.session.add(related_item_creators_) # list_of_elements.append(dataset_related_item_.to_dict()) elif "id" not in i or not i["id"]: - dataset_related_item_ = (model.DatasetRelatedItem. - from_data(data_obj, i)) + dataset_related_item_ = model.DatasetRelatedItem.from_data(data_obj, i) model.db.session.add(dataset_related_item_) filtered_related_item = dataset_related_item_.query.filter_by( @@ -92,12 +97,18 @@ def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argum contributors_ = i["contributors"] creators_ = i["creators"] for c in contributors_: - related_item_contributors_ = model.DatasetRelatedItemContributor.from_data( - dataset_related_item_, c, False) + related_item_contributors_ = ( + model.DatasetRelatedItemContributor.from_data( + dataset_related_item_, c, False + ) + ) model.db.session.add(related_item_contributors_) for c in creators_: - related_item_creators_ = model.DatasetRelatedItemContributor.from_data( - dataset_related_item_, c, True) + related_item_creators_ = ( + model.DatasetRelatedItemContributor.from_data( + dataset_related_item_, c, True + ) + ) model.db.session.add(related_item_creators_) # list_of_elements.append(dataset_related_item_.to_dict()) diff --git a/model/__init__.py b/model/__init__.py index aec84be5..371fb631 100644 --- a/model/__init__.py +++ b/model/__init__.py @@ -6,8 +6,6 @@ from model.dataset_metadata.dataset_related_item_identifier import ( DatasetRelatedItemIdentifier, ) - - from model.dataset_metadata.dataset_related_item_other import DatasetRelatedItemOther from model.dataset_metadata.dataset_related_item_title import DatasetRelatedItemTitle @@ -25,7 +23,6 @@ from .dataset_metadata.dataset_rights import DatasetRights from .dataset_metadata.dataset_subject import DatasetSubject from .dataset_metadata.dataset_title import DatasetTitle - from .db import db from .email_verification import EmailVerification from .invited_study_contributor import StudyInvitedContributor @@ -106,5 +103,5 @@ "EmailVerification", "TokenBlacklist", "UserDetails", - "Notification" + "Notification", ] diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 6ef4c222..537a8520 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -2,7 +2,6 @@ import uuid from datetime import timezone - from ..db import db @@ -24,16 +23,25 @@ def __init__(self, dataset): dataset = db.relationship("Dataset", back_populates="dataset_related_item") dataset_related_item_contributor = db.relationship( - "DatasetRelatedItemContributor", back_populates="dataset_related_item" + "DatasetRelatedItemContributor", + back_populates="dataset_related_item", + cascade="all, delete", ) dataset_related_item_identifier = db.relationship( - "DatasetRelatedItemIdentifier", back_populates="dataset_related_item" + "DatasetRelatedItemIdentifier", + back_populates="dataset_related_item", + cascade="all, delete", ) dataset_related_item_other = db.relationship( - "DatasetRelatedItemOther", back_populates="dataset_related_item", uselist=False + "DatasetRelatedItemOther", + back_populates="dataset_related_item", + uselist=False, + cascade="all, delete", ) dataset_related_item_title = db.relationship( - "DatasetRelatedItemTitle", back_populates="dataset_related_item" + "DatasetRelatedItemTitle", + back_populates="dataset_related_item", + cascade="all, delete", ) def to_dict(self): @@ -41,20 +49,19 @@ def to_dict(self): self.dataset_related_item_contributor, key=lambda creator: creator.created_at, ) - creators = [creator for creator in sorted_contributors if creator.creator] + creators = [c for c in sorted_contributors if c.creator] - contributors = [ - contributor for contributor in sorted_contributors if not contributor.creator] + contributors = [c for c in sorted_contributors if not c.creator] return { "id": self.id, "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, - "titles": [i.to_dict() for i in self.dataset_related_item_title], + "titles": [i.to_dict() for i in self.dataset_related_item_title], # type: ignore "creators": [c.to_dict() for c in creators], "contributors": [c.to_dict() for c in contributors], - "identifiers": [i.to_dict() for i in self.dataset_related_item_identifier] + "identifiers": [i.to_dict() for i in self.dataset_related_item_identifier], # type: ignore } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_contributor.py b/model/dataset_metadata/dataset_related_item_contributor.py index 83b3a7aa..b38b3651 100644 --- a/model/dataset_metadata/dataset_related_item_contributor.py +++ b/model/dataset_metadata/dataset_related_item_contributor.py @@ -43,11 +43,8 @@ def from_data(dataset_related_item, data: dict, creator): return contributor_ def update(self, data: dict): - self.name = data["name"] \ - if "name" in data else "" - self.name_type = data["name_type"] \ - if "name_type" in data else None + self.name = data["name"] if "name" in data else "" + self.name_type = data["name_type"] if "name_type" in data else None self.contributor_type = ( - data["contributor_type"] - if "contributor_type" in data else None + data["contributor_type"] if "contributor_type" in data else None ) diff --git a/model/dataset_metadata/dataset_related_item_identifier.py b/model/dataset_metadata/dataset_related_item_identifier.py index 3fb63a02..3bd8082b 100644 --- a/model/dataset_metadata/dataset_related_item_identifier.py +++ b/model/dataset_metadata/dataset_related_item_identifier.py @@ -47,6 +47,8 @@ def from_data(dataset_related_item, data: dict): def update(self, data: dict): self.identifier = data["identifier"] if "identifier" in data else "" self.type = data["identifier_type"] if "identifier_type" in data else None - self.metadata_scheme = data["metadata_scheme"] if "metadata_scheme" in data else "" + self.metadata_scheme = ( + data["metadata_scheme"] if "metadata_scheme" in data else "" + ) self.scheme_uri = data["scheme_uri"] if "scheme_uri" in data else "" self.scheme_type = data["scheme_type"] if "scheme_type" in data else "" diff --git a/model/dataset_metadata/dataset_related_item_other.py b/model/dataset_metadata/dataset_related_item_other.py index 9e88b341..60c2936e 100644 --- a/model/dataset_metadata/dataset_related_item_other.py +++ b/model/dataset_metadata/dataset_related_item_other.py @@ -55,19 +55,14 @@ def from_data(dataset_related_item, data: dict): return dataset_related_item_other def update(self, data: dict): - self.publication_year = data["publication_year"] \ - if "publication_year" in data else None + self.publication_year = ( + data["publication_year"] if "publication_year" in data else None + ) self.volume = data["volume"] if "volume" in data else "" self.issue = data["issue"] if "issue" in data else "" - self.number_value = data["number_value"] \ - if "number_value" in data else "" - self.number_type = data["number_type"] \ - if "number_type" in data else None - self.first_page = data["first_page"] \ - if "first_page" in data else "" - self.last_page = data["last_page"] \ - if "last_page" in data else "" - self.publisher = data["publisher"] \ - if "publisher" in data else "" - self.edition = data["edition"] \ - if "edition" in data else "" + self.number_value = data["number_value"] if "number_value" in data else "" + self.number_type = data["number_type"] if "number_type" in data else None + self.first_page = data["first_page"] if "first_page" in data else "" + self.last_page = data["last_page"] if "last_page" in data else "" + self.publisher = data["publisher"] if "publisher" in data else "" + self.edition = data["edition"] if "edition" in data else "" From 5d3fc11c099d80490237ba6cf6c372976c32fa03 Mon Sep 17 00:00:00 2001 From: aydawka Date: Fri, 20 Oct 2023 10:18:24 -0700 Subject: [PATCH 24/46] style: pylint format --- model/dataset_metadata/dataset_related_item.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 537a8520..15d1a904 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -58,10 +58,13 @@ def to_dict(self): "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, - "titles": [i.to_dict() for i in self.dataset_related_item_title], # type: ignore + "titles": [i.to_dict() for + i in self.dataset_related_item_title], # type: ignore "creators": [c.to_dict() for c in creators], - "contributors": [c.to_dict() for c in contributors], - "identifiers": [i.to_dict() for i in self.dataset_related_item_identifier], # type: ignore + "contributors": [c.to_dict() + for c in contributors], + "identifiers": [i.to_dict() for + i in self.dataset_related_item_identifier], # type: ignore } @staticmethod From a73e643d7cad4d54d5e0b813eeb0f58e33648b00 Mon Sep 17 00:00:00 2001 From: Lint Action Date: Fri, 20 Oct 2023 17:19:05 +0000 Subject: [PATCH 25/46] =?UTF-8?q?style:=20=F0=9F=8E=A8=20fix=20code=20styl?= =?UTF-8?q?e=20issues=20with=20Black?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/dataset_metadata/dataset_related_item.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 15d1a904..f741bdc7 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -58,13 +58,14 @@ def to_dict(self): "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, - "titles": [i.to_dict() for - i in self.dataset_related_item_title], # type: ignore + "titles": [ + i.to_dict() for i in self.dataset_related_item_title + ], # type: ignore "creators": [c.to_dict() for c in creators], - "contributors": [c.to_dict() - for c in contributors], - "identifiers": [i.to_dict() for - i in self.dataset_related_item_identifier], # type: ignore + "contributors": [c.to_dict() for c in contributors], + "identifiers": [ + i.to_dict() for i in self.dataset_related_item_identifier + ], # type: ignore } @staticmethod From 98ab3b3f887ed335954203261fe235bad812ce9f Mon Sep 17 00:00:00 2001 From: aydawka Date: Fri, 20 Oct 2023 16:29:09 -0700 Subject: [PATCH 26/46] style: permissions added to dataset metadata --- apis/dataset.py | 6 ++-- apis/dataset_metadata/dataset_access.py | 5 ++++ .../dataset_alternate_identifier.py | 7 ++++- apis/dataset_metadata/dataset_consent.py | 6 +++- apis/dataset_metadata/dataset_contributor.py | 28 +++++++++++++++---- apis/dataset_metadata/dataset_date.py | 9 +++++- .../dataset_de_ident_level.py | 6 +++- apis/dataset_metadata/dataset_description.py | 11 ++++++-- apis/dataset_metadata/dataset_funder.py | 9 +++++- apis/dataset_metadata/dataset_other.py | 11 ++++++-- apis/dataset_metadata/dataset_readme.py | 6 +++- apis/dataset_metadata/dataset_record_keys.py | 6 +++- apis/dataset_metadata/dataset_rights.py | 11 ++++++-- apis/dataset_metadata/dataset_subject.py | 9 +++++- apis/dataset_metadata/dataset_title.py | 11 ++++++-- model/dataset_metadata/dataset_other.py | 9 ------ 16 files changed, 116 insertions(+), 34 deletions(-) diff --git a/apis/dataset.py b/apis/dataset.py index 5f71b0e0..07fe779a 100644 --- a/apis/dataset.py +++ b/apis/dataset.py @@ -156,9 +156,9 @@ def post(self, study_id: int, dataset_id: int): if not is_granted("publish_version", study): return "Access denied, you can not modify", 403 data: typing.Union[typing.Any, dict] = request.json - data["participants"] = [ - model.Participant.query.get(i) for i in data["participants"] - ] + # data["participants"] = [ + # model.Participant.query.get(i) for i in data["participants"] + # ] data_obj = model.Dataset.query.get(dataset_id) dataset_versions = model.Version.from_data(data_obj, data) model.db.session.add(dataset_versions) diff --git a/apis/dataset_metadata/dataset_access.py b/apis/dataset_metadata/dataset_access.py index 3bc48ea1..8b6e7509 100644 --- a/apis/dataset_metadata/dataset_access.py +++ b/apis/dataset_metadata/dataset_access.py @@ -1,3 +1,4 @@ +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -31,6 +32,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.response(200, "Success") @api.response(400, "Validation Error") def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 + dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_access.update(request.json) model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_alternate_identifier.py b/apis/dataset_metadata/dataset_alternate_identifier.py index 77caf087..d4cabd7a 100644 --- a/apis/dataset_metadata/dataset_alternate_identifier.py +++ b/apis/dataset_metadata/dataset_alternate_identifier.py @@ -1,5 +1,6 @@ from typing import Any, Union +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -31,7 +32,11 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable = unused-argum @api.doc("update identifier") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 + # pylint: disable= unused-argument data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] diff --git a/apis/dataset_metadata/dataset_consent.py b/apis/dataset_metadata/dataset_consent.py index ff8f323a..a00453e6 100644 --- a/apis/dataset_metadata/dataset_consent.py +++ b/apis/dataset_metadata/dataset_consent.py @@ -1,3 +1,4 @@ +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -33,7 +34,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update consent") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def put(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_consent.update(data) diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index dde5c622..a7a6a598 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -1,5 +1,6 @@ from typing import Any, Union +from apis.authentication import is_granted from flask import request from flask_restx import Resource @@ -26,7 +27,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update contributor") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -53,8 +57,13 @@ class DatasetContributorDelete(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") def delete( - self, study_id: int, dataset_id: int, contributor_id: int - ): # pylint: disable= unused-argument + self, study_id: int, + dataset_id: int, # pylint: disable= unused-argument + contributor_id: int): + + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 contributor_ = model.DatasetContributor.query.get(contributor_id) model.db.session.delete(contributor_) @@ -77,7 +86,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update creator") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -103,8 +115,12 @@ class DatasetCreatorDelete(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") def delete( - self, study_id: int, dataset_id: int, creator_id: int - ): # pylint: disable= unused-argument + self, study_id: int, + dataset_id: int, # pylint: disable= unused-argument + creator_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 dataset_creator_ = model.DatasetContributor.query.get(creator_id) model.db.session.delete(dataset_creator_) model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index b01d2b53..3a66ec03 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -1,5 +1,6 @@ from typing import Any, Union +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -31,7 +32,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update date") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -58,6 +62,9 @@ class DatasetDateDeleteResource(Resource): def delete( self, study_id: int, dataset_id: int, date_id: int ): # pylint: disable= unused-argument + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 date_ = model.DatasetDate.query.get(date_id) model.db.session.delete(date_) diff --git a/apis/dataset_metadata/dataset_de_ident_level.py b/apis/dataset_metadata/dataset_de_ident_level.py index 24a6c417..b53aa53c 100644 --- a/apis/dataset_metadata/dataset_de_ident_level.py +++ b/apis/dataset_metadata/dataset_de_ident_level.py @@ -1,3 +1,4 @@ +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -33,7 +34,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update ident level") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def put(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_de_ident_level.update(data) diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 4347ce4e..b9edade5 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -1,5 +1,6 @@ from typing import Any, Union +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -31,7 +32,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_description) - def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -54,10 +58,13 @@ class DatasetDescriptionUpdate(Resource): @api.response(400, "Validation Error") def delete( self, - study_id: int, # pylint: disable= unused-argument + study_id: int, dataset_id: int, # pylint: disable= unused-argument description_id: int, ): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 dataset_description_ = model.DatasetDescription.query.get(description_id) model.db.session.delete(dataset_description_) diff --git a/apis/dataset_metadata/dataset_funder.py b/apis/dataset_metadata/dataset_funder.py index f4310a58..0c7a25cb 100644 --- a/apis/dataset_metadata/dataset_funder.py +++ b/apis/dataset_metadata/dataset_funder.py @@ -1,5 +1,6 @@ from typing import Any, Union +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -37,6 +38,9 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.response(400, "Validation Error") def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument data: Union[Any, dict] = request.json + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] for i in data: @@ -61,10 +65,13 @@ class DatasetFunderUpdate(Resource): @api.response(400, "Validation Error") def delete( self, - study_id: int, # pylint: disable= unused-argument + study_id: int, dataset_id: int, # pylint: disable= unused-argument funder_id: int, ): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 dataset_funder_ = model.DatasetFunder.query.get(funder_id) model.db.session.delete(dataset_funder_) diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index 7001d3a7..11b473b1 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -1,3 +1,4 @@ +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -33,7 +34,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.response(200, "Success") @api.response(400, "Validation Error") @api.marshal_with(dataset_other) - def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def put(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_other.update(data) @@ -55,7 +59,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update publisher") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def put(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_other.update(data) diff --git a/apis/dataset_metadata/dataset_readme.py b/apis/dataset_metadata/dataset_readme.py index 450992a2..f9a7aad1 100644 --- a/apis/dataset_metadata/dataset_readme.py +++ b/apis/dataset_metadata/dataset_readme.py @@ -1,3 +1,4 @@ +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -21,7 +22,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume dataset_readme_ = dataset_.dataset_readme return [d.to_dict() for d in dataset_readme_] - def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def put(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_readme_ = dataset_.dataset_readme.update(data) diff --git a/apis/dataset_metadata/dataset_record_keys.py b/apis/dataset_metadata/dataset_record_keys.py index e250d440..3ebca7c9 100644 --- a/apis/dataset_metadata/dataset_record_keys.py +++ b/apis/dataset_metadata/dataset_record_keys.py @@ -1,3 +1,4 @@ +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -29,7 +30,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update record keys") @api.response(200, "Success") @api.response(400, "Validation Error") - def put(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def put(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data = request.json dataset_ = model.Dataset.query.get(dataset_id) dataset_.dataset_record_keys.update(data) diff --git a/apis/dataset_metadata/dataset_rights.py b/apis/dataset_metadata/dataset_rights.py index bd8a794e..37f7d6f2 100644 --- a/apis/dataset_metadata/dataset_rights.py +++ b/apis/dataset_metadata/dataset_rights.py @@ -1,5 +1,6 @@ from typing import Any, Union +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -33,7 +34,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update rights") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -59,10 +63,13 @@ class DatasetRightsUpdate(Resource): @api.response(400, "Validation Error") def delete( self, - study_id: int, # pylint: disable= unused-argument + study_id: int, dataset_id: int, # pylint: disable= unused-argument rights_id: int, ): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 dataset_rights_ = model.DatasetRights.query.get(rights_id) model.db.session.delete(dataset_rights_) diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index 04bc51db..103e4eaf 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -1,5 +1,6 @@ from typing import Any, Union +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -34,7 +35,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update subject") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -64,6 +68,9 @@ def delete( dataset_id: int, # pylint: disable= unused-argument subject_id: int, ): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 dataset_subject_ = model.DatasetSubject.query.get(subject_id) model.db.session.delete(dataset_subject_) diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index 13693f5f..3c8fc23f 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -1,5 +1,6 @@ from typing import Any, Union +from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields @@ -31,7 +32,10 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update title") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -54,10 +58,13 @@ class DatasetDescriptionUpdate(Resource): @api.response(400, "Validation Error") def delete( self, - study_id: int, # pylint: disable= unused-argument + study_id: int, dataset_id: int, # pylint: disable= unused-argument title_id: int, ): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 dataset_title_ = model.DatasetTitle.query.get(title_id) model.db.session.delete(dataset_title_) model.db.session.commit() diff --git a/model/dataset_metadata/dataset_other.py b/model/dataset_metadata/dataset_other.py index faaa68b5..cdcf2df2 100644 --- a/model/dataset_metadata/dataset_other.py +++ b/model/dataset_metadata/dataset_other.py @@ -7,17 +7,8 @@ class DatasetOther(db.Model): # type: ignore 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.standards_followed = "" - self.acknowledgement = "" - self.publisher = [] __tablename__ = "dataset_other" - resource_type = db.Column(db.String, nullable=False) language = db.Column(db.String, nullable=True) managing_organization_name = db.Column(db.String, nullable=False) From 0bb4d7d09cb2b25515b79eeac53587bc269bb7b5 Mon Sep 17 00:00:00 2001 From: aydawka Date: Fri, 20 Oct 2023 17:07:38 -0700 Subject: [PATCH 27/46] style: formatting --- apis/dataset_metadata/dataset_access.py | 2 +- .../dataset_alternate_identifier.py | 2 +- apis/dataset_metadata/dataset_consent.py | 2 +- apis/dataset_metadata/dataset_contributor.py | 19 +- apis/dataset_metadata/dataset_date.py | 2 +- .../dataset_de_ident_level.py | 2 +- apis/dataset_metadata/dataset_description.py | 7 +- apis/dataset_metadata/dataset_funder.py | 2 +- apis/dataset_metadata/dataset_other.py | 2 +- apis/dataset_metadata/dataset_readme.py | 2 +- apis/dataset_metadata/dataset_record_keys.py | 2 +- apis/dataset_metadata/dataset_related_item.py | 211 +++++++++++++++--- apis/dataset_metadata/dataset_rights.py | 2 +- apis/dataset_metadata/dataset_subject.py | 2 +- apis/dataset_metadata/dataset_title.py | 7 +- .../dataset_metadata/dataset_related_item.py | 42 +++- .../dataset_related_item_identifier.py | 2 +- .../dataset_related_item_other.py | 18 +- 18 files changed, 258 insertions(+), 70 deletions(-) diff --git a/apis/dataset_metadata/dataset_access.py b/apis/dataset_metadata/dataset_access.py index 8b6e7509..21cc2f51 100644 --- a/apis/dataset_metadata/dataset_access.py +++ b/apis/dataset_metadata/dataset_access.py @@ -1,8 +1,8 @@ -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_access = api.model( diff --git a/apis/dataset_metadata/dataset_alternate_identifier.py b/apis/dataset_metadata/dataset_alternate_identifier.py index d4cabd7a..b1edd39f 100644 --- a/apis/dataset_metadata/dataset_alternate_identifier.py +++ b/apis/dataset_metadata/dataset_alternate_identifier.py @@ -1,10 +1,10 @@ from typing import Any, Union -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_identifier = api.model( diff --git a/apis/dataset_metadata/dataset_consent.py b/apis/dataset_metadata/dataset_consent.py index a00453e6..eba6c96d 100644 --- a/apis/dataset_metadata/dataset_consent.py +++ b/apis/dataset_metadata/dataset_consent.py @@ -1,8 +1,8 @@ -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_consent = api.model( diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index a7a6a598..d59ca168 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -1,10 +1,10 @@ from typing import Any, Union -from apis.authentication import is_granted from flask import request from flask_restx import Resource import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_contributor = api.model( @@ -57,10 +57,11 @@ class DatasetContributorDelete(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") def delete( - self, study_id: int, - dataset_id: int, # pylint: disable= unused-argument - contributor_id: int): - + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + contributor_id: int, + ): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): return "Access denied, you can not make any change in dataset metadata", 403 @@ -115,9 +116,11 @@ class DatasetCreatorDelete(Resource): @api.response(200, "Success") @api.response(400, "Validation Error") def delete( - self, study_id: int, - dataset_id: int, # pylint: disable= unused-argument - creator_id: int): + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + creator_id: int, + ): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): return "Access denied, you can not make any change in dataset metadata", 403 diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index 3a66ec03..526f604b 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -1,10 +1,10 @@ from typing import Any, Union -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_date = api.model( diff --git a/apis/dataset_metadata/dataset_de_ident_level.py b/apis/dataset_metadata/dataset_de_ident_level.py index b53aa53c..5d055a20 100644 --- a/apis/dataset_metadata/dataset_de_ident_level.py +++ b/apis/dataset_metadata/dataset_de_ident_level.py @@ -1,8 +1,8 @@ -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api de_ident_level = api.model( diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index b9edade5..99fd2136 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -1,10 +1,10 @@ from typing import Any, Union -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_description = api.model( @@ -64,7 +64,10 @@ def delete( ): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): - return "Access denied, you can not make any change in dataset metadata", 403 + return ( + "Access denied, you can not make any change in dataset metadata", + 403, + ) dataset_description_ = model.DatasetDescription.query.get(description_id) model.db.session.delete(dataset_description_) diff --git a/apis/dataset_metadata/dataset_funder.py b/apis/dataset_metadata/dataset_funder.py index 0c7a25cb..08c4de81 100644 --- a/apis/dataset_metadata/dataset_funder.py +++ b/apis/dataset_metadata/dataset_funder.py @@ -1,10 +1,10 @@ from typing import Any, Union -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_funder = api.model( diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index 11b473b1..2cdadf5a 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -1,8 +1,8 @@ -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_other = api.model( diff --git a/apis/dataset_metadata/dataset_readme.py b/apis/dataset_metadata/dataset_readme.py index f9a7aad1..6c53a760 100644 --- a/apis/dataset_metadata/dataset_readme.py +++ b/apis/dataset_metadata/dataset_readme.py @@ -1,8 +1,8 @@ -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_readme = api.model( diff --git a/apis/dataset_metadata/dataset_record_keys.py b/apis/dataset_metadata/dataset_record_keys.py index 3ebca7c9..38f6cf8d 100644 --- a/apis/dataset_metadata/dataset_record_keys.py +++ b/apis/dataset_metadata/dataset_record_keys.py @@ -1,8 +1,8 @@ -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_record_keys = api.model( diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index b4758396..6f4792dd 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -4,6 +4,7 @@ from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_related_item = api.model( @@ -30,69 +31,113 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update related item") @api.response(200, "Success") @api.response(400, "Validation Error") - def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argument + def post(self, study_id: int, dataset_id: int): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return ("Access denied, you can not" + " make any change in dataset metadata"), 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements: List = [] for i in data: if "id" in i and i["id"]: - dataset_related_item_ = model.DatasetRelatedItem.query.get(i["id"]) + dataset_related_item_ = ( + model.DatasetRelatedItem.query.get(i["id"])) if not dataset_related_item_: return f"{i['id']} Id is not found", 404 dataset_related_item_.update(i) dataset_related_item_.dataset_related_item_other.update(i) + filtered_related_item = dataset_related_item_.query.filter_by( + id=dataset_related_item_.id + ).first() + for title in i["titles"]: - print(title) - update_title = model.DatasetRelatedItemTitle.query.get(title["id"]) - update_title.update(title) + if "id" in title and title["id"]: + print(title) + update_title = model.DatasetRelatedItemTitle.query.get( + title["id"] + ) + update_title.update(title) + else: + title_add = model.DatasetRelatedItemTitle.from_data( + filtered_related_item, title + ) + model.db.session.add(title_add) for identifier in i["identifiers"]: - update_identifier = model.DatasetRelatedItemIdentifier.query.get( - identifier["id"] - ) - update_identifier.update(identifier) - + if "id" in identifier and identifier["id"]: + update_identifier = ( + model.DatasetRelatedItemIdentifier.query.get( + identifier["id"] + ) + ) + update_identifier.update(identifier) + else: + identifier_add = model.DatasetRelatedItemIdentifier.from_data( + filtered_related_item, identifier + ) + model.db.session.add(identifier_add) contributors_ = i["contributors"] creators_ = i["creators"] for c in contributors_: - related_item_contributors_ = ( - model.DatasetRelatedItemContributor.query.get(c["id"]) - ) - related_item_contributors_.update(c) - model.db.session.add(related_item_contributors_) + if "id" in c and c["id"]: + related_item_contributors_ = ( + model.DatasetRelatedItemContributor.query.get(c["id"]) + ) + related_item_contributors_.update(c) + model.db.session.add(related_item_contributors_) + else: + related_item_contributors_ = ( + model.DatasetRelatedItemContributor.from_data( + dataset_related_item_, c, False + ) + ) + model.db.session.add(related_item_contributors_) + for c in creators_: - related_item_creators_ = ( - model.DatasetRelatedItemContributor.query.get(c["id"]) - ) - related_item_creators_.update(c) - model.db.session.add(related_item_creators_) + if "id" in c and c["id"]: + related_item_creators_ = ( + model.DatasetRelatedItemContributor.query.get(c["id"]) + ) + related_item_creators_.update(c) + else: + related_item_creators_ = ( + model.DatasetRelatedItemContributor.from_data( + dataset_related_item_, c, True + ) + ) + model.db.session.add(related_item_creators_) # list_of_elements.append(dataset_related_item_.to_dict()) elif "id" not in i or not i["id"]: dataset_related_item_ = model.DatasetRelatedItem.from_data(data_obj, i) model.db.session.add(dataset_related_item_) + list_of_elements.append(dataset_related_item_.to_dict()) filtered_related_item = dataset_related_item_.query.filter_by( id=dataset_related_item_.id ).first() + other_add = model.DatasetRelatedItemOther.from_data( + filtered_related_item, i + ) + model.db.session.add(other_add) + list_of_elements.append(other_add.to_dict()) + for t in i["titles"]: title_add = model.DatasetRelatedItemTitle.from_data( filtered_related_item, t ) model.db.session.add(title_add) + list_of_elements.append(title_add.to_dict()) for identifier in i["identifiers"]: identifier_add = model.DatasetRelatedItemIdentifier.from_data( filtered_related_item, identifier ) model.db.session.add(identifier_add) - - other_add = model.DatasetRelatedItemOther.from_data( - filtered_related_item, i - ) - model.db.session.add(other_add) + list_of_elements.append(identifier_add.to_dict()) contributors_ = i["contributors"] creators_ = i["creators"] @@ -103,6 +148,8 @@ def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argum ) ) model.db.session.add(related_item_contributors_) + list_of_elements.append(related_item_contributors_.to_dict()) + for c in creators_: related_item_creators_ = ( model.DatasetRelatedItemContributor.from_data( @@ -110,27 +157,131 @@ def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argum ) ) model.db.session.add(related_item_creators_) - # list_of_elements.append(dataset_related_item_.to_dict()) + list_of_elements.append(related_item_creators_.to_dict()) model.db.session.commit() - - return list_of_elements + return [item.to_dict() for item in data_obj.dataset_related_item], 201 -@api.route("/study//dataset//related-item/") +@api.route("/study//dataset/" + "/related-item/") class DatasetRelatedItemUpdate(Resource): @api.doc("delete related item") @api.response(200, "Success") @api.response(400, "Validation Error") def delete( self, - study_id: int, # pylint: disable= unused-argument + study_id: int, dataset_id: int, # pylint: disable= unused-argument related_item_id: int, ): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 dataset_related_item_ = model.DatasetRelatedItem.query.get(related_item_id) model.db.session.delete(dataset_related_item_) model.db.session.commit() return 204 + + +@api.route( + "/study//dataset//related-item/" + "/contributor/" +) +class RelatedItemContributorsDelete(Resource): + @api.doc("delete related item contributors") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + related_item_id: int, # pylint: disable= unused-argument + contributor_id: int, + ): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 + dataset_contributors_ = model.DatasetRelatedItemContributor.query.get( + contributor_id + ) + model.db.session.delete(dataset_contributors_) + model.db.session.commit() + + return 204 + + +@api.route( + "/study//dataset//" + "related-item//title/" +) +class RelatedItemTitlesDelete(Resource): + @api.doc("delete related item title") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + related_item_id: int, # pylint: disable= unused-argument + title_id: int, + ): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 + dataset_title_ = model.DatasetRelatedItemTitle.query.get(title_id) + model.db.session.delete(dataset_title_) + model.db.session.commit() + return 204 + + +@api.route( + "/study//dataset//related-item/" + "/identifier/" +) +class RelatedItemIdentifiersDelete(Resource): + @api.doc("delete related item identifier") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + related_item_id: int, # pylint: disable= unused-argument + identifier_id: int + ): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 + dataset_identifier_ = model.DatasetRelatedItemIdentifier.query.get( + identifier_id + ) + model.db.session.delete(dataset_identifier_) + model.db.session.commit() + return 204 + + +@api.route( + "/study//dataset//related-item/" + "/creator/" # pylint: disable = line-too-long +) +class RelatedItemCreatorDelete(Resource): + @api.doc("delete related item creator") + @api.response(200, "Success") + @api.response(400, "Validation Error") + def delete( + self, + study_id: int, + dataset_id: int, # pylint: disable= unused-argument + related_item_id: int, # pylint: disable= unused-argument + creator_id: int, + ): + study_obj = model.Study.query.get(study_id) + if not is_granted("dataset_metadata", study_obj): + return "Access denied, you can not make any change in dataset metadata", 403 + dataset_creator_ = model.DatasetRelatedItemContributor.query.get(creator_id) + model.db.session.delete(dataset_creator_) + model.db.session.commit() + return 204 diff --git a/apis/dataset_metadata/dataset_rights.py b/apis/dataset_metadata/dataset_rights.py index 37f7d6f2..937c1d43 100644 --- a/apis/dataset_metadata/dataset_rights.py +++ b/apis/dataset_metadata/dataset_rights.py @@ -1,10 +1,10 @@ from typing import Any, Union -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_rights = api.model( diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index 103e4eaf..9cfee5f8 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -1,10 +1,10 @@ from typing import Any, Union -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_subject = api.model( diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index 3c8fc23f..d6617c6c 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -1,10 +1,10 @@ from typing import Any, Union -from apis.authentication import is_granted from flask import request from flask_restx import Resource, fields import model +from apis.authentication import is_granted from apis.dataset_metadata_namespace import api dataset_title = api.model( @@ -64,7 +64,10 @@ def delete( ): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): - return "Access denied, you can not make any change in dataset metadata", 403 + return ( + "Access denied, you can not make any change in dataset metadata", + 403, + ) dataset_title_ = model.DatasetTitle.query.get(title_id) model.db.session.delete(dataset_title_) model.db.session.commit() diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 15d1a904..8bd0fced 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -52,19 +52,47 @@ def to_dict(self): creators = [c for c in sorted_contributors if c.creator] contributors = [c for c in sorted_contributors if not c.creator] - return { "id": self.id, "type": self.type, "relation_type": self.relation_type, "created_at": self.created_at, - "titles": [i.to_dict() for - i in self.dataset_related_item_title], # type: ignore + "titles": [ + i.to_dict() for i in self.dataset_related_item_title # type: ignore + ], "creators": [c.to_dict() for c in creators], - "contributors": [c.to_dict() - for c in contributors], - "identifiers": [i.to_dict() for - i in self.dataset_related_item_identifier], # type: ignore + "contributors": [c.to_dict() for c in contributors], + "publication_year": self.dataset_related_item_other.publication_year + if self.dataset_related_item_other + else None, + "volume": self.dataset_related_item_other.volume + if self.dataset_related_item_other + else None, + "issue": self.dataset_related_item_other.issue + if self.dataset_related_item_other + else None, + "number_value": self.dataset_related_item_other.number_value + if self.dataset_related_item_other + else None, + "number_type": self.dataset_related_item_other.number_type + if self.dataset_related_item_other + else None, + "first_page": self.dataset_related_item_other.first_page + if self.dataset_related_item_other + else None, + "last_page": self.dataset_related_item_other.last_page + if self.dataset_related_item_other + else None, + "publisher": self.dataset_related_item_other.publisher + if self.dataset_related_item_other + else None, + "edition": self.dataset_related_item_other.edition + if self.dataset_related_item_other + else None, + "identifiers": [ + i.to_dict() + for i in self.dataset_related_item_identifier # type: ignore + ], } @staticmethod diff --git a/model/dataset_metadata/dataset_related_item_identifier.py b/model/dataset_metadata/dataset_related_item_identifier.py index 3bd8082b..48b2e548 100644 --- a/model/dataset_metadata/dataset_related_item_identifier.py +++ b/model/dataset_metadata/dataset_related_item_identifier.py @@ -46,7 +46,7 @@ def from_data(dataset_related_item, data: dict): def update(self, data: dict): self.identifier = data["identifier"] if "identifier" in data else "" - self.type = data["identifier_type"] if "identifier_type" in data else None + self.type = data["type"] if "type" in data else None self.metadata_scheme = ( data["metadata_scheme"] if "metadata_scheme" in data else "" ) diff --git a/model/dataset_metadata/dataset_related_item_other.py b/model/dataset_metadata/dataset_related_item_other.py index 60c2936e..39cbe02a 100644 --- a/model/dataset_metadata/dataset_related_item_other.py +++ b/model/dataset_metadata/dataset_related_item_other.py @@ -4,15 +4,15 @@ class DatasetRelatedItemOther(db.Model): # type: ignore def __init__(self, dataset_related_item): self.dataset_related_item = dataset_related_item - # self.publication_year = None - # self.volume = "" - # self.issue = "" - # self.number_value = "" - # self.number_type = None - # self.first_page = "" - # self.last_page = "" - # self.publisher = "" - # self.edition = "" + self.publication_year = None + self.volume = "" + self.issue = "" + self.number_value = "" + self.number_type = None + self.first_page = "" + self.last_page = "" + self.publisher = "" + self.edition = "" __tablename__ = "dataset_related_item_other" publication_year = db.Column(db.BigInteger, nullable=True) From 03551b69fe0a3e0c7c0e8887b85a09d7b6fbde54 Mon Sep 17 00:00:00 2001 From: Lint Action Date: Sat, 21 Oct 2023 00:10:16 +0000 Subject: [PATCH 28/46] =?UTF-8?q?style:=20=F0=9F=8E=A8=20fix=20code=20styl?= =?UTF-8?q?e=20issues=20with=20Black?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apis/dataset_metadata/dataset_related_item.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index 6f4792dd..4f38fe46 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -34,15 +34,15 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume def post(self, study_id: int, dataset_id: int): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): - return ("Access denied, you can not" - " make any change in dataset metadata"), 403 + return ( + "Access denied, you can not" " make any change in dataset metadata" + ), 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements: List = [] for i in data: if "id" in i and i["id"]: - dataset_related_item_ = ( - model.DatasetRelatedItem.query.get(i["id"])) + dataset_related_item_ = model.DatasetRelatedItem.query.get(i["id"]) if not dataset_related_item_: return f"{i['id']} Id is not found", 404 dataset_related_item_.update(i) @@ -163,8 +163,7 @@ def post(self, study_id: int, dataset_id: int): return [item.to_dict() for item in data_obj.dataset_related_item], 201 -@api.route("/study//dataset/" - "/related-item/") +@api.route("/study//dataset/" "/related-item/") class DatasetRelatedItemUpdate(Resource): @api.doc("delete related item") @api.response(200, "Success") @@ -250,7 +249,7 @@ def delete( study_id: int, dataset_id: int, # pylint: disable= unused-argument related_item_id: int, # pylint: disable= unused-argument - identifier_id: int + identifier_id: int, ): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): From f62f1e0a1113da01acd0cf17970be7635e5ddbc6 Mon Sep 17 00:00:00 2001 From: aydawka Date: Fri, 20 Oct 2023 17:42:12 -0700 Subject: [PATCH 29/46] fix: dataset other --- model/dataset_metadata/dataset_other.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/model/dataset_metadata/dataset_other.py b/model/dataset_metadata/dataset_other.py index cdcf2df2..faaa68b5 100644 --- a/model/dataset_metadata/dataset_other.py +++ b/model/dataset_metadata/dataset_other.py @@ -7,8 +7,17 @@ class DatasetOther(db.Model): # type: ignore 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.standards_followed = "" + self.acknowledgement = "" + self.publisher = [] __tablename__ = "dataset_other" + resource_type = db.Column(db.String, nullable=False) language = db.Column(db.String, nullable=True) managing_organization_name = db.Column(db.String, nullable=False) From f72557c10ca1f4d367781dc04cee16596aa692ba Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 23 Oct 2023 09:46:43 -0700 Subject: [PATCH 30/46] feat: dataset version GET --- apis/authentication.py | 1 + apis/contributor.py | 2 ++ apis/dataset.py | 19 +++++++++++++++---- apis/study.py | 3 +-- model/dataset.py | 19 +++++++++++++++---- 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/apis/authentication.py b/apis/authentication.py index 719eb633..8712f7eb 100644 --- a/apis/authentication.py +++ b/apis/authentication.py @@ -280,3 +280,4 @@ def get(self): if not g.user: return None return g.user.to_dict() + diff --git a/apis/contributor.py b/apis/contributor.py index 9338a50b..653e252c 100644 --- a/apis/contributor.py +++ b/apis/contributor.py @@ -44,6 +44,7 @@ def post(self, study_id: int): if not is_granted("invite_contributor", study_obj): return "Access denied, you can not modify", 403 data: Union[dict, Any] = request.json + email_address = data["email_address"] user = model.User.query.filter_by(email_address=email_address).first() permission = data["role"] @@ -53,6 +54,7 @@ def post(self, study_id: int): contributor_ = study_obj.add_user_to_study(user, permission) else: contributor_ = study_obj.invite_user_to_study(email_address, permission) + except model.StudyException as ex: return ex.args[0], 409 model.db.session.commit() diff --git a/apis/dataset.py b/apis/dataset.py index 07fe779a..066b66e6 100644 --- a/apis/dataset.py +++ b/apis/dataset.py @@ -114,7 +114,6 @@ class VersionResource(Resource): @api.response(201, "Success") @api.response(400, "Validation Error") @api.doc("dataset version") - @api.marshal_with(dataset_versions_model) def get( self, study_id: int, dataset_id: int, version_id: int ): # pylint: disable= unused-argument @@ -148,13 +147,25 @@ def delete( @api.route("/study//dataset//version") -@api.response(201, "Success") -@api.response(400, "Validation Error") class VersionList(Resource): + @api.response(201, "Success") + @api.response(400, "Validation Error") + @api.doc("versions") + def get(self, study_id: int, dataset_id: int): + study = model.Study.query.get(study_id) + if not is_granted("publish_version", study): + return "Access denied, you can not modify", 403 + dataset_obj = model.Dataset.query.get(dataset_id) + return [i.to_dict() for i in dataset_obj.dataset_versions.all()], 200 + + @api.response(201, "Success") + @api.response(400, "Validation Error") + @api.doc("version add") def post(self, study_id: int, dataset_id: int): study = model.Study.query.get(study_id) if not is_granted("publish_version", study): return "Access denied, you can not modify", 403 + data: typing.Union[typing.Any, dict] = request.json # data["participants"] = [ # model.Participant.query.get(i) for i in data["participants"] @@ -163,4 +174,4 @@ def post(self, study_id: int, dataset_id: int): dataset_versions = model.Version.from_data(data_obj, data) model.db.session.add(dataset_versions) model.db.session.commit() - return jsonify(dataset_versions.to_dict()) + return dataset_versions.to_dict() diff --git a/apis/study.py b/apis/study.py index 2166d441..84e679f1 100644 --- a/apis/study.py +++ b/apis/study.py @@ -84,7 +84,6 @@ def put(self, study_id: int): update_study = model.Study.query.get(study_id) if not is_granted("update_study", update_study): return "Access denied, you can not modify", 403 - update_study.update(request.json) model.db.session.commit() return update_study.to_dict() @@ -110,4 +109,4 @@ def delete(self, study_id: int): studies = model.Study.query.filter( model.Study.study_contributors.any(model.User.id == g.user.id) ).all() - return [s.to_dict() for s in studies], 201 + return 204 diff --git a/model/dataset.py b/model/dataset.py index 2d736525..8f6b5085 100644 --- a/model/dataset.py +++ b/model/dataset.py @@ -85,16 +85,27 @@ def __init__(self, study): cascade="all, delete", ) dataset_other = db.relationship( - "DatasetOther", back_populates="dataset", uselist=False + "DatasetOther", + back_populates="dataset", + uselist=False, + cascade="all, delete" ) dataset_readme = db.relationship( - "DatasetReadme", back_populates="dataset", uselist=False + "DatasetReadme", + back_populates="dataset", + uselist=False, + cascade="all, delete" ) dataset_record_keys = db.relationship( - "DatasetRecordKeys", back_populates="dataset", uselist=False + "DatasetRecordKeys", + back_populates="dataset", + uselist=False, + cascade="all, delete" ) dataset_related_item = db.relationship( - "DatasetRelatedItem", back_populates="dataset" + "DatasetRelatedItem", + back_populates="dataset", + cascade="all, delete" ) dataset_rights = db.relationship("DatasetRights", back_populates="dataset") dataset_subject = db.relationship("DatasetSubject", back_populates="dataset") From 62f5a0940d15478299e7d687ea014d0c9752e2ef Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 23 Oct 2023 10:46:01 -0700 Subject: [PATCH 31/46] fix: study identifiers --- apis/study.py | 18 +++++++++--------- apis/study_metadata/study_identification.py | 20 ++++++++------------ model/study.py | 5 ++++- model/study_metadata/identifiers.py | 12 +++++------- model/study_metadata/study_identification.py | 4 +++- 5 files changed, 29 insertions(+), 30 deletions(-) diff --git a/apis/study.py b/apis/study.py index 84e679f1..85d8a684 100644 --- a/apis/study.py +++ b/apis/study.py @@ -95,15 +95,15 @@ def delete(self, study_id: int): study = model.Study.query.get(study_id) if not is_granted("delete_study", study): return "Access denied, you can not delete study", 403 - for d in study.dataset: - for version in d.dataset_versions: - version.participants.clear() - for d in study.dataset: - for version in d.dataset_versions: - model.db.session.delete(version) - model.db.session.delete(d) - for p in study.participants: - model.db.session.delete(p) + # for d in study.dataset: + # for version in d.dataset_versions: + # version.participants.clear() + # for d in study.dataset: + # for version in d.dataset_versions: + # model.db.session.delete(version) + # model.db.session.delete(d) + # for p in study.participants: + # model.db.session.delete(p) model.db.session.delete(study) model.db.session.commit() studies = model.Study.query.filter( diff --git a/apis/study_metadata/study_identification.py b/apis/study_metadata/study_identification.py index f04fd167..3a2d83db 100644 --- a/apis/study_metadata/study_identification.py +++ b/apis/study_metadata/study_identification.py @@ -43,18 +43,17 @@ def get(self, study_id: int): @api.expect(study_identification) def post(self, study_id: int): """Create study identification metadata""" - data: typing.Union[dict, typing.Any] = request.json - study_obj = model.Study.query.get(study_id) if not is_granted("study_metadata", study_obj): return "Access denied, you can not delete study", 403 + data: typing.Union[dict, typing.Any] = request.json + identifiers = [i for i in study_obj.study_identification if not i.secondary] + primary_identifier = identifiers[0] if len(identifiers) else None primary: dict = data["primary"] - primary["secondary"] = False - - if "id" in primary and primary["id"]: - study_identification_ = model.StudyIdentification.query.get(primary["id"]) - study_identification_.update(primary) - elif "id" not in primary or not primary["id"]: + # primary["secondary"] = False + if primary_identifier: + primary_identifier.update(primary) + else: study_identification_ = model.StudyIdentification.from_data( study_obj, primary, False ) @@ -62,11 +61,10 @@ def post(self, study_id: int): for i in data["secondary"]: i["secondary"] = True - if "id" in i and i["id"]: study_identification_ = model.StudyIdentification.query.get(i["id"]) study_identification_.update(i) - elif "id" not in i or not i["id"]: + else: study_identification_ = model.StudyIdentification.from_data( study_obj, i, True ) @@ -90,10 +88,8 @@ def delete(self, study_id: int, identification_id: int): study_identification_ = model.StudyIdentification.query.get( identification_id ) - if not study_identification_.secondary: return 400, "primary identifier can not be deleted" - model.db.session.delete(study_identification_) model.db.session.commit() diff --git a/model/study.py b/model/study.py index 9a504cae..7203c1a6 100644 --- a/model/study.py +++ b/model/study.py @@ -21,11 +21,14 @@ def __init__(self): self.created_at = datetime.datetime.now(datetime.timezone.utc).timestamp() # self.study_status = model.StudyStatus(self) - self.study_sponsors_collaborators = model.StudySponsorsCollaborators(self) + self.study_sponsors_collaborators =\ + model.StudySponsorsCollaborators(self) self.study_design = model.StudyDesign(self) self.study_eligibility = model.StudyEligibility(self) self.study_ipdsharing = model.StudyIpdsharing(self) self.study_description = model.StudyDescription(self) + (self.study_identification.append + (model.StudyIdentification(self, False))) self.study_other = model.StudyOther(self) # self.study_contributors = model.StudyContributor(self) diff --git a/model/study_metadata/identifiers.py b/model/study_metadata/identifiers.py index 18b9e6b5..318d975a 100644 --- a/model/study_metadata/identifiers.py +++ b/model/study_metadata/identifiers.py @@ -10,14 +10,13 @@ def __init__(self, study: Study): def to_dict(self): sorted_study_identifications = sorted( self.study.study_identification, - key=lambda identifier: identifier.created_at, + key=lambda i: i.created_at, ) return { "primary": [ - identifier - for identifier in sorted_study_identifications - if not identifier.secondary - ][0].to_dict() + identifier for identifier + in sorted_study_identifications + if not identifier.secondary][0].to_dict() if len( [ identifier @@ -26,12 +25,11 @@ def to_dict(self): ] ) != 0 # noqa: W503 - else [], + else None, "secondary": [ identifier.to_dict() for identifier in sorted_study_identifications if identifier.secondary ], } - # sorted_study_reference = sorted(study_reference_, key=lambda x: x.created_at, reverse=True) # return [s.to_dict() for s in sorted_study_reference] diff --git a/model/study_metadata/study_identification.py b/model/study_metadata/study_identification.py index 7af40cc3..d8d1fab6 100644 --- a/model/study_metadata/study_identification.py +++ b/model/study_metadata/study_identification.py @@ -13,7 +13,9 @@ def __init__(self, study, secondary): self.study = study self.secondary = secondary self.created_at = datetime.datetime.now(timezone.utc).timestamp() - + self.identifier = "" + self.identifier_domain = "" + self.identifier_link = "" __tablename__ = "study_identification" id = db.Column(db.CHAR(36), primary_key=True) identifier = db.Column(db.String, nullable=False) From 27099b3acd27f230ebe928429c79bc64b12adaa3 Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 23 Oct 2023 10:46:32 -0700 Subject: [PATCH 32/46] fix: dataset identifier --- model/dataset.py | 15 ++++++++++++--- .../dataset_alternate_identifier.py | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/model/dataset.py b/model/dataset.py index 8f6b5085..fb35836f 100644 --- a/model/dataset.py +++ b/model/dataset.py @@ -107,9 +107,18 @@ def __init__(self, study): back_populates="dataset", cascade="all, delete" ) - dataset_rights = db.relationship("DatasetRights", back_populates="dataset") - dataset_subject = db.relationship("DatasetSubject", back_populates="dataset") - dataset_title = db.relationship("DatasetTitle", back_populates="dataset") + dataset_rights = db.relationship( + "DatasetRights", + back_populates="dataset", + cascade="all, delete") + dataset_subject = db.relationship( + "DatasetSubject", + back_populates="dataset", + cascade="all, delete") + dataset_title = db.relationship( + "DatasetTitle", + back_populates="dataset", + cascade="all, delete") def to_dict(self): last_published = self.last_published() diff --git a/model/dataset_metadata/dataset_alternate_identifier.py b/model/dataset_metadata/dataset_alternate_identifier.py index e009dcaf..b1aea951 100644 --- a/model/dataset_metadata/dataset_alternate_identifier.py +++ b/model/dataset_metadata/dataset_alternate_identifier.py @@ -36,4 +36,4 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.identifier = data["identifier"] - self.type = data["type"] + self.type = data["type"] if "type" in data else "" From 61fa6431c6603bf1f8c223d8124f14cceac57626 Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 23 Oct 2023 10:46:51 -0700 Subject: [PATCH 33/46] fix: dataset related item other field --- apis/dataset_metadata/dataset_related_item.py | 35 ++++--------------- .../dataset_metadata/dataset_related_item.py | 5 +-- 2 files changed, 10 insertions(+), 30 deletions(-) diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index 4f38fe46..c2a64cdd 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -46,22 +46,17 @@ def post(self, study_id: int, dataset_id: int): if not dataset_related_item_: return f"{i['id']} Id is not found", 404 dataset_related_item_.update(i) - dataset_related_item_.dataset_related_item_other.update(i) - - filtered_related_item = dataset_related_item_.query.filter_by( - id=dataset_related_item_.id - ).first() + # dataset_related_item_.dataset_related_item_other.update(i) for title in i["titles"]: if "id" in title and title["id"]: - print(title) update_title = model.DatasetRelatedItemTitle.query.get( title["id"] ) update_title.update(title) else: title_add = model.DatasetRelatedItemTitle.from_data( - filtered_related_item, title + dataset_related_item_, title ) model.db.session.add(title_add) @@ -75,7 +70,7 @@ def post(self, study_id: int, dataset_id: int): update_identifier.update(identifier) else: identifier_add = model.DatasetRelatedItemIdentifier.from_data( - filtered_related_item, identifier + dataset_related_item_, identifier ) model.db.session.add(identifier_add) contributors_ = i["contributors"] @@ -97,9 +92,8 @@ def post(self, study_id: int, dataset_id: int): for c in creators_: if "id" in c and c["id"]: - related_item_creators_ = ( - model.DatasetRelatedItemContributor.query.get(c["id"]) - ) + related_item_creators_ = model.DatasetRelatedItemContributor.query.get(c["id"]) + related_item_creators_.update(c) else: related_item_creators_ = ( @@ -113,31 +107,18 @@ def post(self, study_id: int, dataset_id: int): elif "id" not in i or not i["id"]: dataset_related_item_ = model.DatasetRelatedItem.from_data(data_obj, i) model.db.session.add(dataset_related_item_) - list_of_elements.append(dataset_related_item_.to_dict()) - - filtered_related_item = dataset_related_item_.query.filter_by( - id=dataset_related_item_.id - ).first() - - other_add = model.DatasetRelatedItemOther.from_data( - filtered_related_item, i - ) - model.db.session.add(other_add) - list_of_elements.append(other_add.to_dict()) for t in i["titles"]: title_add = model.DatasetRelatedItemTitle.from_data( - filtered_related_item, t + dataset_related_item_, t ) model.db.session.add(title_add) - list_of_elements.append(title_add.to_dict()) for identifier in i["identifiers"]: identifier_add = model.DatasetRelatedItemIdentifier.from_data( - filtered_related_item, identifier + dataset_related_item_, identifier ) model.db.session.add(identifier_add) - list_of_elements.append(identifier_add.to_dict()) contributors_ = i["contributors"] creators_ = i["creators"] @@ -148,7 +129,6 @@ def post(self, study_id: int, dataset_id: int): ) ) model.db.session.add(related_item_contributors_) - list_of_elements.append(related_item_contributors_.to_dict()) for c in creators_: related_item_creators_ = ( @@ -157,7 +137,6 @@ def post(self, study_id: int, dataset_id: int): ) ) model.db.session.add(related_item_creators_) - list_of_elements.append(related_item_creators_.to_dict()) model.db.session.commit() return [item.to_dict() for item in data_obj.dataset_related_item], 201 diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 8bd0fced..3c833d74 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -1,7 +1,7 @@ import datetime import uuid from datetime import timezone - +import model from ..db import db @@ -10,7 +10,7 @@ def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset self.created_at = datetime.datetime.now(timezone.utc).timestamp() - # self.dataset_related_item_other = model.DatasetRelatedItemOther(self) + self.dataset_related_item_other = model.DatasetRelatedItemOther(self) __tablename__ = "dataset_related_item" @@ -104,3 +104,4 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.type = data["type"] self.relation_type = data["relation_type"] + self.dataset_related_item_other.update(data) From 2fdf7ae035fa3e4c9ecebd28afec3fd6864f5d39 Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 23 Oct 2023 14:02:28 -0700 Subject: [PATCH 34/46] style: format --- apis/authentication.py | 1 - apis/dataset_metadata/dataset_related_item.py | 12 ++++--- apis/study.py | 4 +-- apis/study_metadata/study_identification.py | 4 +-- model/dataset.py | 31 ++++++------------- .../dataset_metadata/dataset_related_item.py | 2 ++ model/study.py | 6 ++-- model/study_metadata/identifiers.py | 7 +++-- model/study_metadata/study_identification.py | 1 + 9 files changed, 29 insertions(+), 39 deletions(-) diff --git a/apis/authentication.py b/apis/authentication.py index 8712f7eb..719eb633 100644 --- a/apis/authentication.py +++ b/apis/authentication.py @@ -280,4 +280,3 @@ def get(self): if not g.user: return None return g.user.to_dict() - diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index c2a64cdd..110b6662 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -1,4 +1,4 @@ -from typing import Any, List, Union +from typing import Any, Union from flask import request from flask_restx import Resource, fields @@ -35,11 +35,11 @@ def post(self, study_id: int, dataset_id: int): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): return ( - "Access denied, you can not" " make any change in dataset metadata" + "Access denied, you can not" + " make any change in dataset metadata" # noqa: E402 ), 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) - list_of_elements: List = [] for i in data: if "id" in i and i["id"]: dataset_related_item_ = model.DatasetRelatedItem.query.get(i["id"]) @@ -92,7 +92,9 @@ def post(self, study_id: int, dataset_id: int): for c in creators_: if "id" in c and c["id"]: - related_item_creators_ = model.DatasetRelatedItemContributor.query.get(c["id"]) + related_item_creators_ = ( + model.DatasetRelatedItemContributor.query.get(c["id"]) + ) related_item_creators_.update(c) else: @@ -142,7 +144,7 @@ def post(self, study_id: int, dataset_id: int): return [item.to_dict() for item in data_obj.dataset_related_item], 201 -@api.route("/study//dataset/" "/related-item/") +@api.route("/study//dataset//related-item/") class DatasetRelatedItemUpdate(Resource): @api.doc("delete related item") @api.response(200, "Success") diff --git a/apis/study.py b/apis/study.py index 85d8a684..32937040 100644 --- a/apis/study.py +++ b/apis/study.py @@ -106,7 +106,5 @@ def delete(self, study_id: int): # model.db.session.delete(p) model.db.session.delete(study) model.db.session.commit() - studies = model.Study.query.filter( - model.Study.study_contributors.any(model.User.id == g.user.id) - ).all() + return 204 diff --git a/apis/study_metadata/study_identification.py b/apis/study_metadata/study_identification.py index 3a2d83db..f4fcefb3 100644 --- a/apis/study_metadata/study_identification.py +++ b/apis/study_metadata/study_identification.py @@ -72,9 +72,9 @@ def post(self, study_id: int): model.db.session.commit() - identifiers = model.Identifiers(study_obj) + final_identifiers = model.Identifiers(study_obj) - return identifiers.to_dict() + return final_identifiers.to_dict() @api.route("/study//metadata/identification/") class StudyIdentificationdUpdate(Resource): diff --git a/model/dataset.py b/model/dataset.py index fb35836f..3146f17c 100644 --- a/model/dataset.py +++ b/model/dataset.py @@ -85,40 +85,29 @@ def __init__(self, study): cascade="all, delete", ) dataset_other = db.relationship( - "DatasetOther", - back_populates="dataset", - uselist=False, - cascade="all, delete" + "DatasetOther", back_populates="dataset", uselist=False, cascade="all, delete" ) dataset_readme = db.relationship( - "DatasetReadme", - back_populates="dataset", - uselist=False, - cascade="all, delete" + "DatasetReadme", back_populates="dataset", uselist=False, cascade="all, delete" ) dataset_record_keys = db.relationship( "DatasetRecordKeys", back_populates="dataset", uselist=False, - cascade="all, delete" + cascade="all, delete", ) dataset_related_item = db.relationship( - "DatasetRelatedItem", - back_populates="dataset", - cascade="all, delete" + "DatasetRelatedItem", back_populates="dataset", cascade="all, delete" ) dataset_rights = db.relationship( - "DatasetRights", - back_populates="dataset", - cascade="all, delete") + "DatasetRights", back_populates="dataset", cascade="all, delete" + ) dataset_subject = db.relationship( - "DatasetSubject", - back_populates="dataset", - cascade="all, delete") + "DatasetSubject", back_populates="dataset", cascade="all, delete" + ) dataset_title = db.relationship( - "DatasetTitle", - back_populates="dataset", - cascade="all, delete") + "DatasetTitle", back_populates="dataset", cascade="all, delete" + ) def to_dict(self): last_published = self.last_published() diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 3c833d74..209f38b3 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -1,7 +1,9 @@ import datetime import uuid from datetime import timezone + import model + from ..db import db diff --git a/model/study.py b/model/study.py index 7203c1a6..0b0838f1 100644 --- a/model/study.py +++ b/model/study.py @@ -21,14 +21,12 @@ def __init__(self): self.created_at = datetime.datetime.now(datetime.timezone.utc).timestamp() # self.study_status = model.StudyStatus(self) - self.study_sponsors_collaborators =\ - model.StudySponsorsCollaborators(self) + self.study_sponsors_collaborators = model.StudySponsorsCollaborators(self) self.study_design = model.StudyDesign(self) self.study_eligibility = model.StudyEligibility(self) self.study_ipdsharing = model.StudyIpdsharing(self) self.study_description = model.StudyDescription(self) - (self.study_identification.append - (model.StudyIdentification(self, False))) + (self.study_identification.append(model.StudyIdentification(self, False))) self.study_other = model.StudyOther(self) # self.study_contributors = model.StudyContributor(self) diff --git a/model/study_metadata/identifiers.py b/model/study_metadata/identifiers.py index 318d975a..cf9e14fa 100644 --- a/model/study_metadata/identifiers.py +++ b/model/study_metadata/identifiers.py @@ -14,9 +14,10 @@ def to_dict(self): ) return { "primary": [ - identifier for identifier - in sorted_study_identifications - if not identifier.secondary][0].to_dict() + identifier + for identifier in sorted_study_identifications + if not identifier.secondary + ][0].to_dict() if len( [ identifier diff --git a/model/study_metadata/study_identification.py b/model/study_metadata/study_identification.py index d8d1fab6..f6373bf1 100644 --- a/model/study_metadata/study_identification.py +++ b/model/study_metadata/study_identification.py @@ -16,6 +16,7 @@ def __init__(self, study, secondary): self.identifier = "" self.identifier_domain = "" self.identifier_link = "" + __tablename__ = "study_identification" id = db.Column(db.CHAR(36), primary_key=True) identifier = db.Column(db.String, nullable=False) From 1dbd866681c290f7560b6e720ebb1095e2431511 Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 23 Oct 2023 15:23:35 -0700 Subject: [PATCH 35/46] feat: add version readme to the model --- apis/authentication.py | 3 +++ apis/dataset.py | 20 ++++++++++++++++++-- model/__init__.py | 3 ++- model/version.py | 38 +++++++++++++++++++++++++++----------- model/version_readme.py | 30 ++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 model/version_readme.py diff --git a/apis/authentication.py b/apis/authentication.py index 719eb633..1b27024b 100644 --- a/apis/authentication.py +++ b/apis/authentication.py @@ -202,6 +202,7 @@ def is_granted(permission: str, study=None): "add_dataset", "update_dataset", "delete_dataset", + "version", "publish_version", "participant", "study_metadata", @@ -219,6 +220,7 @@ def is_granted(permission: str, study=None): "add_dataset", "update_dataset", "delete_dataset", + "version", "publish_version", "participant", "study_metadata", @@ -234,6 +236,7 @@ def is_granted(permission: str, study=None): "delete_dataset", "participant", "study_metadata", + "version", "dataset_metadata", ], "viewer": ["viewer", "view"], diff --git a/apis/dataset.py b/apis/dataset.py index 066b66e6..8f4877ea 100644 --- a/apis/dataset.py +++ b/apis/dataset.py @@ -153,7 +153,7 @@ class VersionList(Resource): @api.doc("versions") def get(self, study_id: int, dataset_id: int): study = model.Study.query.get(study_id) - if not is_granted("publish_version", study): + if not is_granted("version", study): return "Access denied, you can not modify", 403 dataset_obj = model.Dataset.query.get(dataset_id) return [i.to_dict() for i in dataset_obj.dataset_versions.all()], 200 @@ -163,7 +163,7 @@ def get(self, study_id: int, dataset_id: int): @api.doc("version add") def post(self, study_id: int, dataset_id: int): study = model.Study.query.get(study_id) - if not is_granted("publish_version", study): + if not is_granted("version", study): return "Access denied, you can not modify", 403 data: typing.Union[typing.Any, dict] = request.json @@ -175,3 +175,19 @@ def post(self, study_id: int, dataset_id: int): model.db.session.add(dataset_versions) model.db.session.commit() return dataset_versions.to_dict() + + +@api.route("/study//dataset//version//publish") +class PublishResource(Resource): + @api.response(201, "Success") + @api.response(400, "Validation Error") + @api.doc("version publish") + def post(self, study_id: int, dataset_id: int): + study = model.Study.query.get(study_id) + if not is_granted("publish_version", study): + return "Access denied, you can not modify", 403 + data_obj = model.Dataset.query.get(dataset_id) + data: typing.Union[typing.Any, dict] = request.json + dataset_versions = model.Version.from_data(data_obj, data) + model.db.session.commit() + return dataset_versions.to_dict() diff --git a/model/__init__.py b/model/__init__.py index 371fb631..a5764779 100644 --- a/model/__init__.py +++ b/model/__init__.py @@ -52,7 +52,7 @@ from .user import User from .user_details import UserDetails from .version import Version - +from .version_readme import VersionReadme __all__ = [ "Study", "Dataset", @@ -104,4 +104,5 @@ "TokenBlacklist", "UserDetails", "Notification", + "VersionReadme" ] diff --git a/model/version.py b/model/version.py index 8829659b..e0598538 100644 --- a/model/version.py +++ b/model/version.py @@ -20,7 +20,7 @@ class Version(db.Model): # type: ignore def __init__(self, dataset): self.dataset = dataset self.id = str(uuid.uuid4()) - + self.created_at = datetime.datetime.now(timezone.utc).timestamp() __tablename__ = "version" id = db.Column(db.CHAR(36), primary_key=True) @@ -32,9 +32,24 @@ def __init__(self, dataset): created_at = db.Column(db.BigInteger, nullable=False) published_on = db.Column(db.BigInteger, nullable=False) - dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) - dataset = db.relationship("Dataset", back_populates="dataset_versions") - participants = db.relationship("Participant", secondary=version_participants) + version_readme = db.relationship( + "VersionReadme", + uselist=False, + back_populates="version", + cascade="all, delete", + ) + dataset_id = db.Column( + db.CHAR(36), + db.ForeignKey("dataset.id"), + nullable=False) + dataset = db.relationship( + "Dataset", + back_populates="dataset_versions") + participants = db.relationship( + "Participant", + secondary=version_participants, + cascade="all, delete", + ) def to_dict(self): return { @@ -46,9 +61,10 @@ def to_dict(self): "created_at": self.created_at, "doi": self.doi, "published": self.published, - "participants": [p.id for p in self.participants] - if isinstance(self.participants, (list, set)) - else [], + "readme": self.version_readme.content if self.version_readme else "" + # "participants": [p.id for p in self.participants] + # if isinstance(self.participants, (list, set)) + # else [], } # [p.id for p in self.participants] @@ -61,9 +77,9 @@ def from_data(dataset: Dataset, data: dict): def update(self, data: dict): self.title = data["title"] - self.published = data["published"] - self.doi = data["doi"] + self.published = data["published"] if "published" in data else False + self.doi = data["doi"] if "doi" in data else "" self.published_on = datetime.datetime.now(timezone.utc).timestamp() self.updated_on = datetime.datetime.now(timezone.utc).timestamp() - self.participants[:] = data["participants"] - self.changelog = data["changelog"] + # self.participants[:] = data["participants"] + self.changelog = data["changelog"] if "changelog" in data else "" diff --git a/model/version_readme.py b/model/version_readme.py new file mode 100644 index 00000000..f214283d --- /dev/null +++ b/model/version_readme.py @@ -0,0 +1,30 @@ +from .db import db + + +class VersionReadme(db.Model): # type: ignore + __tablename__ = "version_readme" + content = db.Column(db.String, nullable=True) + + version_id = db.Column( + db.CHAR(36), + db.ForeignKey("version.id"), + primary_key=True, + nullable=False) + version = db.relationship( + "Version", + back_populates="version_readme") + + def to_dict(self): + return { + "content": self.content, + + } + + @staticmethod + def from_data(data: dict): + user = VersionReadme() + user.update(data) + return user + + def update(self, data: dict): + self.content = data["content"] From bfbdca9bc0b9994ff4e368de2c3e6fc5b16b6a2f Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 23 Oct 2023 18:20:44 -0700 Subject: [PATCH 36/46] feat: dataset title permission --- apis/dataset.py | 9 ++++++++- apis/dataset_metadata/dataset_title.py | 15 +++++++++++++++ model/dataset.py | 6 ++++-- model/dataset_metadata/dataset_title.py | 3 ++- model/study.py | 3 ++- 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/apis/dataset.py b/apis/dataset.py index 8f4877ea..cb3937e2 100644 --- a/apis/dataset.py +++ b/apis/dataset.py @@ -55,9 +55,16 @@ def post(self, study_id): if not is_granted("add_dataset", study): return "Access denied, you can not modify", 403 # todo if study.participant id== different study Throw error - # data: typing.Union[typing.Any, dict] = request.json + data: typing.Union[typing.Any, dict] = request.json dataset_ = model.Dataset.from_data(study) model.db.session.add(dataset_) + + title_element = model.DatasetTitle.query.filter_by(dataset_id=dataset_.id).first() + title_element.title = data["title"] + + description_element = model.DatasetDescription.query.filter_by(dataset_id=dataset_.id).first() + description_element.description = data["description"] + model.db.session.commit() return dataset_.to_dict() diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index d6617c6c..94c65f8c 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -42,9 +42,19 @@ def post(self, study_id: int, dataset_id: int): for i in data: if "id" in i and i["id"]: dataset_title_ = model.DatasetTitle.query.get(i["id"]) + if dataset_title_.type == "MainTitle": + return ( + "MainTitle type can not be modified", + 403, + ) dataset_title_.update(i) list_of_elements.append(dataset_title_.to_dict()) elif "id" not in i or not i["id"]: + if i["type"] == "MainTitle": + return ( + "MainTitle type can not be given", + 403, + ) dataset_title_ = model.DatasetTitle.from_data(data_obj, i) model.db.session.add(dataset_title_) list_of_elements.append(dataset_title_.to_dict()) @@ -69,6 +79,11 @@ def delete( 403, ) dataset_title_ = model.DatasetTitle.query.get(title_id) + if dataset_title_.type == "MainTitle": + return ( + "MainTitle type can not be deleted", + 403, + ) model.db.session.delete(dataset_title_) model.db.session.commit() return 204 diff --git a/model/dataset.py b/model/dataset.py index 3146f17c..1c74af3d 100644 --- a/model/dataset.py +++ b/model/dataset.py @@ -23,6 +23,9 @@ def __init__(self, study): self.dataset_readme = model.DatasetReadme(self) self.dataset_other = model.DatasetOther(self) + self.dataset_title.append(model.DatasetTitle(self)) + self.dataset_description.append(model.DatasetDescription(self)) + __tablename__ = "dataset" id = db.Column(db.CHAR(36), primary_key=True) updated_on = db.Column(db.BigInteger, nullable=False) @@ -44,7 +47,6 @@ def __init__(self, study): lazy="dynamic", cascade="all, delete", ) - dataset_access = db.relationship( "DatasetAccess", back_populates="dataset", @@ -118,6 +120,7 @@ def to_dict(self): "created_at": self.created_at, # "dataset_versions": [i.to_dict() for i in self.dataset_versions], "latest_version": last_published.id if last_published else None, + # "title": self.dataset_title.title if self.dataset_title else "" } def last_published(self): @@ -141,4 +144,3 @@ def from_data(study: Study): def update(self): """Creates a new dataset from a dictionary""" self.updated_on = datetime.datetime.now(timezone.utc).timestamp() - # self.dataset_versions = data["dataset_versions"] diff --git a/model/dataset_metadata/dataset_title.py b/model/dataset_metadata/dataset_title.py index 1e6d54d9..b9e5aa7f 100644 --- a/model/dataset_metadata/dataset_title.py +++ b/model/dataset_metadata/dataset_title.py @@ -10,7 +10,8 @@ def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset self.created_at = datetime.datetime.now(timezone.utc).timestamp() - + self.title = "" + self.type = "MainTitle" __tablename__ = "dataset_title" id = db.Column(db.CHAR(36), primary_key=True) title = db.Column(db.String, nullable=False) diff --git a/model/study.py b/model/study.py index 0b0838f1..58a7ca6d 100644 --- a/model/study.py +++ b/model/study.py @@ -26,7 +26,8 @@ def __init__(self): self.study_eligibility = model.StudyEligibility(self) self.study_ipdsharing = model.StudyIpdsharing(self) self.study_description = model.StudyDescription(self) - (self.study_identification.append(model.StudyIdentification(self, False))) + self.study_identification.append( + model.StudyIdentification(self, False)) self.study_other = model.StudyOther(self) # self.study_contributors = model.StudyContributor(self) From 5f8dfb131a0aafeb48dcc2faa63f25900307c549 Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 23 Oct 2023 18:21:00 -0700 Subject: [PATCH 37/46] feat: dataset description permission --- apis/dataset_metadata/dataset_description.py | 18 ++++++++++++++++-- model/dataset_metadata/dataset_description.py | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 99fd2136..7dda5b9d 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -31,7 +31,6 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume @api.doc("update description") @api.response(200, "Success") @api.response(400, "Validation Error") - @api.marshal_with(dataset_description) def post(self, study_id: int, dataset_id: int): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): @@ -42,9 +41,20 @@ def post(self, study_id: int, dataset_id: int): for i in data: if "id" in i and i["id"]: dataset_description_ = model.DatasetDescription.query.get(i["id"]) + if dataset_description_.type == "Abstract": + return ( + "Abstract type can not be modified", + 403, + ) dataset_description_.update(i) list_of_elements.append(dataset_description_.to_dict()) elif "id" not in i or not i["id"]: + if i["type"] == "Abstract": + return ( + "Abstract type in description" + " can not be given", + 403, + ) dataset_description_ = model.DatasetDescription.from_data(data_obj, i) model.db.session.add(dataset_description_) list_of_elements.append(dataset_description_.to_dict()) @@ -69,7 +79,11 @@ def delete( 403, ) dataset_description_ = model.DatasetDescription.query.get(description_id) - + if dataset_description_.type == "Abstract": + return ( + "Abstract description can not be deleted", + 403, + ) model.db.session.delete(dataset_description_) model.db.session.commit() diff --git a/model/dataset_metadata/dataset_description.py b/model/dataset_metadata/dataset_description.py index 3bffb06c..fd0481e9 100644 --- a/model/dataset_metadata/dataset_description.py +++ b/model/dataset_metadata/dataset_description.py @@ -10,7 +10,8 @@ def __init__(self, dataset): self.id = str(uuid.uuid4()) self.dataset = dataset self.created_at = datetime.datetime.now(timezone.utc).timestamp() - + self.description = "" + self.type = "Abstract" __tablename__ = "dataset_description" id = db.Column(db.CHAR(36), primary_key=True) description = db.Column(db.String, nullable=False) From 729bd10bf5b50d2a543218e2a0c75e04dacf184f Mon Sep 17 00:00:00 2001 From: aydawka Date: Mon, 23 Oct 2023 18:59:54 -0700 Subject: [PATCH 38/46] style:format --- apis/dataset.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apis/dataset.py b/apis/dataset.py index cb3937e2..ab1e7443 100644 --- a/apis/dataset.py +++ b/apis/dataset.py @@ -59,10 +59,12 @@ def post(self, study_id): dataset_ = model.Dataset.from_data(study) model.db.session.add(dataset_) - title_element = model.DatasetTitle.query.filter_by(dataset_id=dataset_.id).first() + title_element = (model.DatasetTitle.query. + filter_by(dataset_id=dataset_.id).first()) title_element.title = data["title"] - description_element = model.DatasetDescription.query.filter_by(dataset_id=dataset_.id).first() + description_element = (model.DatasetDescription. + query.filter_by(dataset_id=dataset_.id).first()) description_element.description = data["description"] model.db.session.commit() From 34496645e8384d3eb588d4372f4a39b1e61b3f94 Mon Sep 17 00:00:00 2001 From: Lint Action Date: Tue, 24 Oct 2023 02:01:43 +0000 Subject: [PATCH 39/46] =?UTF-8?q?style:=20=F0=9F=8E=A8=20fix=20code=20styl?= =?UTF-8?q?e=20issues=20with=20Black?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apis/dataset.py | 10 ++++++---- apis/dataset_metadata/dataset_description.py | 3 +-- model/__init__.py | 3 ++- model/dataset_metadata/dataset_description.py | 1 + model/dataset_metadata/dataset_title.py | 1 + model/study.py | 3 +-- model/version.py | 10 +++------- model/version_readme.py | 11 +++-------- 8 files changed, 18 insertions(+), 24 deletions(-) diff --git a/apis/dataset.py b/apis/dataset.py index ab1e7443..45fcb808 100644 --- a/apis/dataset.py +++ b/apis/dataset.py @@ -59,12 +59,14 @@ def post(self, study_id): dataset_ = model.Dataset.from_data(study) model.db.session.add(dataset_) - title_element = (model.DatasetTitle.query. - filter_by(dataset_id=dataset_.id).first()) + title_element = model.DatasetTitle.query.filter_by( + dataset_id=dataset_.id + ).first() title_element.title = data["title"] - description_element = (model.DatasetDescription. - query.filter_by(dataset_id=dataset_.id).first()) + description_element = model.DatasetDescription.query.filter_by( + dataset_id=dataset_.id + ).first() description_element.description = data["description"] model.db.session.commit() diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 7dda5b9d..d96f4be1 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -51,8 +51,7 @@ def post(self, study_id: int, dataset_id: int): elif "id" not in i or not i["id"]: if i["type"] == "Abstract": return ( - "Abstract type in description" - " can not be given", + "Abstract type in description" " can not be given", 403, ) dataset_description_ = model.DatasetDescription.from_data(data_obj, i) diff --git a/model/__init__.py b/model/__init__.py index a5764779..5b91a29a 100644 --- a/model/__init__.py +++ b/model/__init__.py @@ -53,6 +53,7 @@ from .user_details import UserDetails from .version import Version from .version_readme import VersionReadme + __all__ = [ "Study", "Dataset", @@ -104,5 +105,5 @@ "TokenBlacklist", "UserDetails", "Notification", - "VersionReadme" + "VersionReadme", ] diff --git a/model/dataset_metadata/dataset_description.py b/model/dataset_metadata/dataset_description.py index fd0481e9..fa344043 100644 --- a/model/dataset_metadata/dataset_description.py +++ b/model/dataset_metadata/dataset_description.py @@ -12,6 +12,7 @@ def __init__(self, dataset): self.created_at = datetime.datetime.now(timezone.utc).timestamp() self.description = "" self.type = "Abstract" + __tablename__ = "dataset_description" id = db.Column(db.CHAR(36), primary_key=True) description = db.Column(db.String, nullable=False) diff --git a/model/dataset_metadata/dataset_title.py b/model/dataset_metadata/dataset_title.py index b9e5aa7f..0c754b9b 100644 --- a/model/dataset_metadata/dataset_title.py +++ b/model/dataset_metadata/dataset_title.py @@ -12,6 +12,7 @@ def __init__(self, dataset): self.created_at = datetime.datetime.now(timezone.utc).timestamp() self.title = "" self.type = "MainTitle" + __tablename__ = "dataset_title" id = db.Column(db.CHAR(36), primary_key=True) title = db.Column(db.String, nullable=False) diff --git a/model/study.py b/model/study.py index 58a7ca6d..a919bbae 100644 --- a/model/study.py +++ b/model/study.py @@ -26,8 +26,7 @@ def __init__(self): self.study_eligibility = model.StudyEligibility(self) self.study_ipdsharing = model.StudyIpdsharing(self) self.study_description = model.StudyDescription(self) - self.study_identification.append( - model.StudyIdentification(self, False)) + self.study_identification.append(model.StudyIdentification(self, False)) self.study_other = model.StudyOther(self) # self.study_contributors = model.StudyContributor(self) diff --git a/model/version.py b/model/version.py index e0598538..9cff0264 100644 --- a/model/version.py +++ b/model/version.py @@ -21,6 +21,7 @@ def __init__(self, dataset): self.dataset = dataset self.id = str(uuid.uuid4()) self.created_at = datetime.datetime.now(timezone.utc).timestamp() + __tablename__ = "version" id = db.Column(db.CHAR(36), primary_key=True) @@ -38,13 +39,8 @@ def __init__(self, dataset): back_populates="version", cascade="all, delete", ) - dataset_id = db.Column( - db.CHAR(36), - db.ForeignKey("dataset.id"), - nullable=False) - dataset = db.relationship( - "Dataset", - back_populates="dataset_versions") + dataset_id = db.Column(db.CHAR(36), db.ForeignKey("dataset.id"), nullable=False) + dataset = db.relationship("Dataset", back_populates="dataset_versions") participants = db.relationship( "Participant", secondary=version_participants, diff --git a/model/version_readme.py b/model/version_readme.py index f214283d..ec657f54 100644 --- a/model/version_readme.py +++ b/model/version_readme.py @@ -6,18 +6,13 @@ class VersionReadme(db.Model): # type: ignore content = db.Column(db.String, nullable=True) version_id = db.Column( - db.CHAR(36), - db.ForeignKey("version.id"), - primary_key=True, - nullable=False) - version = db.relationship( - "Version", - back_populates="version_readme") + db.CHAR(36), db.ForeignKey("version.id"), primary_key=True, nullable=False + ) + version = db.relationship("Version", back_populates="version_readme") def to_dict(self): return { "content": self.content, - } @staticmethod From c134a727d5321b80b8037112073b3b20ea760041 Mon Sep 17 00:00:00 2001 From: aydawka Date: Tue, 24 Oct 2023 11:21:33 -0700 Subject: [PATCH 40/46] fix: minor fixes in dataset metadata --- apis/contributor.py | 12 ++++++++++++ apis/dataset_metadata/dataset_contributor.py | 2 +- apis/dataset_metadata/dataset_title.py | 10 +++++----- model/dataset.py | 3 +++ model/invited_study_contributor.py | 1 + 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/apis/contributor.py b/apis/contributor.py index 653e252c..46e3a429 100644 --- a/apis/contributor.py +++ b/apis/contributor.py @@ -8,6 +8,7 @@ from .authentication import is_granted + api = Namespace("Contributor", description="Contributors", path="/") @@ -48,7 +49,18 @@ def post(self, study_id: int): email_address = data["email_address"] user = model.User.query.filter_by(email_address=email_address).first() permission = data["role"] + # encoded_jwt_code = jwt.encode( + # { + # "user": user.id, + # "exp": datetime.datetime.now(timezone.utc) + # + datetime.timedelta(minutes=180), # noqa: W503 + # "jti": str(uuid.uuid4()), + # }, # noqa: W503 + # config.FAIRHUB_SECRET, + # algorithm="HS256", + # ) contributor_ = None + try: if user: contributor_ = study_obj.add_user_to_study(user, permission) diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index d59ca168..7ae9be17 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -40,7 +40,6 @@ def post(self, study_id: int, dataset_id: int): dataset_contributor_ = model.DatasetContributor.query.get(i["id"]) if not dataset_contributor_: return f"Study link {i['id']} Id is not found", 404 - dataset_contributor_.update(i) list_of_elements.append(dataset_contributor_.to_dict()) elif "id" not in i or not i["id"]: @@ -103,6 +102,7 @@ def post(self, study_id: int, dataset_id: int): dataset_creator_.update(i) list_of_elements.append(dataset_creator_.to_dict()) elif "id" not in i or not i["id"]: + i["contributor_type"] = None dataset_creator_ = model.DatasetContributor.from_data(data_obj, i) model.db.session.add(dataset_creator_) list_of_elements.append(dataset_creator_.to_dict()) diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index 94c65f8c..a619d08c 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -42,11 +42,11 @@ def post(self, study_id: int, dataset_id: int): for i in data: if "id" in i and i["id"]: dataset_title_ = model.DatasetTitle.query.get(i["id"]) - if dataset_title_.type == "MainTitle": - return ( - "MainTitle type can not be modified", - 403, - ) + # if dataset_title_.type == "MainTitle": + # return ( + # "Main Title type can not be modified", + # 403, + # dataset_title_.update(i) list_of_elements.append(dataset_title_.to_dict()) elif "id" not in i or not i["id"]: diff --git a/model/dataset.py b/model/dataset.py index 1c74af3d..980c2afe 100644 --- a/model/dataset.py +++ b/model/dataset.py @@ -144,3 +144,6 @@ def from_data(study: Study): def update(self): """Creates a new dataset from a dictionary""" self.updated_on = datetime.datetime.now(timezone.utc).timestamp() + + # def touch_dataset(self): + # self.updated_on = datetime.datetime.now(datetime.timezone.utc).timestamp() diff --git a/model/invited_study_contributor.py b/model/invited_study_contributor.py index 0b360288..c06e4486 100644 --- a/model/invited_study_contributor.py +++ b/model/invited_study_contributor.py @@ -35,4 +35,5 @@ def to_dict(self): "status": "invited", "role": self.permission, "email_address": self.email_address, + "token": self.token } From 53cbeabd8a4ef886d94942487d93f88555c1b6b8 Mon Sep 17 00:00:00 2001 From: Lint Action Date: Tue, 24 Oct 2023 18:22:19 +0000 Subject: [PATCH 41/46] =?UTF-8?q?style:=20=F0=9F=8E=A8=20fix=20code=20styl?= =?UTF-8?q?e=20issues=20with=20Black?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/invited_study_contributor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/model/invited_study_contributor.py b/model/invited_study_contributor.py index c06e4486..2bd8edab 100644 --- a/model/invited_study_contributor.py +++ b/model/invited_study_contributor.py @@ -35,5 +35,5 @@ def to_dict(self): "status": "invited", "role": self.permission, "email_address": self.email_address, - "token": self.token + "token": self.token, } From 681267d6174e81ecd50b24e6dd9e43f29f33e2bb Mon Sep 17 00:00:00 2001 From: aydawka Date: Tue, 24 Oct 2023 12:19:44 -0700 Subject: [PATCH 42/46] feat: updates to dataset metadata --- apis/dataset_metadata/dataset_description.py | 2 +- apis/study_metadata/study_identification.py | 8 +++++--- model/dataset.py | 4 ++-- model/dataset_metadata/dataset_access.py | 1 + model/dataset_metadata/dataset_alternate_identifier.py | 1 + model/dataset_metadata/dataset_consent.py | 1 + model/dataset_metadata/dataset_contributor.py | 1 + model/dataset_metadata/dataset_contributor_affiliation.py | 1 + model/dataset_metadata/dataset_date.py | 1 + model/dataset_metadata/dataset_de_ident_level.py | 1 + model/dataset_metadata/dataset_description.py | 1 + model/dataset_metadata/dataset_funder.py | 1 + model/dataset_metadata/dataset_other.py | 1 + model/dataset_metadata/dataset_readme.py | 1 + model/dataset_metadata/dataset_record_keys.py | 4 ++-- model/dataset_metadata/dataset_related_item.py | 1 + model/dataset_metadata/dataset_rights.py | 1 + model/dataset_metadata/dataset_subject.py | 1 + model/dataset_metadata/dataset_title.py | 1 + 19 files changed, 25 insertions(+), 8 deletions(-) diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index d96f4be1..d6f67ceb 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -51,7 +51,7 @@ def post(self, study_id: int, dataset_id: int): elif "id" not in i or not i["id"]: if i["type"] == "Abstract": return ( - "Abstract type in description" " can not be given", + "Abstract type in description can not be given", 403, ) dataset_description_ = model.DatasetDescription.from_data(data_obj, i) diff --git a/apis/study_metadata/study_identification.py b/apis/study_metadata/study_identification.py index 7f4002ad..b137b708 100644 --- a/apis/study_metadata/study_identification.py +++ b/apis/study_metadata/study_identification.py @@ -77,16 +77,16 @@ def post(self, study_id: int): except ValidationError as e: return e.message, 400 - data: typing.Union[dict, typing.Any] = request.json - study_obj = model.Study.query.get(study_id) if not is_granted("study_metadata", study_obj): return "Access denied, you can not delete study", 403 + data: typing.Union[dict, typing.Any] = request.json identifiers = [i for i in study_obj.study_identification if not i.secondary] primary_identifier = identifiers[0] if len(identifiers) else None + primary: dict = data["primary"] - # primary["secondary"] = False + if primary_identifier: primary_identifier.update(primary) else: @@ -121,11 +121,13 @@ def delete(self, study_id: int, identification_id: int): study = model.Study.query.get(study_id) if not is_granted("study_metadata", study): return "Access denied, you can not delete study", 403 + study_identification_ = model.StudyIdentification.query.get( identification_id ) if not study_identification_.secondary: return 400, "primary identifier can not be deleted" + model.db.session.delete(study_identification_) model.db.session.commit() diff --git a/model/dataset.py b/model/dataset.py index 980c2afe..98cdc078 100644 --- a/model/dataset.py +++ b/model/dataset.py @@ -145,5 +145,5 @@ def update(self): """Creates a new dataset from a dictionary""" self.updated_on = datetime.datetime.now(timezone.utc).timestamp() - # def touch_dataset(self): - # self.updated_on = datetime.datetime.now(datetime.timezone.utc).timestamp() + def touch_dataset(self): + self.updated_on = datetime.datetime.now(datetime.timezone.utc).timestamp() diff --git a/model/dataset_metadata/dataset_access.py b/model/dataset_metadata/dataset_access.py index 00148415..4c1ed5c3 100644 --- a/model/dataset_metadata/dataset_access.py +++ b/model/dataset_metadata/dataset_access.py @@ -42,3 +42,4 @@ def update(self, data: dict): self.url = data["url"] self.url_last_checked = datetime.datetime.now(datetime.timezone.utc).timestamp() self.type = data["type"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_alternate_identifier.py b/model/dataset_metadata/dataset_alternate_identifier.py index b1aea951..1b2ebb70 100644 --- a/model/dataset_metadata/dataset_alternate_identifier.py +++ b/model/dataset_metadata/dataset_alternate_identifier.py @@ -37,3 +37,4 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.identifier = data["identifier"] self.type = data["type"] if "type" in data else "" + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_consent.py b/model/dataset_metadata/dataset_consent.py index 5eaaa92c..2258ea5d 100644 --- a/model/dataset_metadata/dataset_consent.py +++ b/model/dataset_metadata/dataset_consent.py @@ -52,3 +52,4 @@ def update(self, data: dict): self.genetic_only = data["genetic_only"] self.no_methods = data["no_methods"] self.details = data["details"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_contributor.py b/model/dataset_metadata/dataset_contributor.py index 81aa8617..6d4f54d7 100644 --- a/model/dataset_metadata/dataset_contributor.py +++ b/model/dataset_metadata/dataset_contributor.py @@ -55,3 +55,4 @@ def update(self, data: dict): self.creator = data["creator"] self.contributor_type = data["contributor_type"] self.affiliations = data["affiliations"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_contributor_affiliation.py b/model/dataset_metadata/dataset_contributor_affiliation.py index 50664015..045cfc55 100644 --- a/model/dataset_metadata/dataset_contributor_affiliation.py +++ b/model/dataset_metadata/dataset_contributor_affiliation.py @@ -44,3 +44,4 @@ def update(self, data: dict): self.identifier = data["identifier"] self.identifier_scheme = data["identifier_scheme"] self.identifier_scheme_uri = data["identifier_scheme_uri"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_date.py b/model/dataset_metadata/dataset_date.py index ac32b1a7..c58a1741 100644 --- a/model/dataset_metadata/dataset_date.py +++ b/model/dataset_metadata/dataset_date.py @@ -41,3 +41,4 @@ def update(self, data: dict): self.date = data["date"] self.type = data["type"] self.information = data["information"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_de_ident_level.py b/model/dataset_metadata/dataset_de_ident_level.py index cf6eff78..5f68b9e3 100644 --- a/model/dataset_metadata/dataset_de_ident_level.py +++ b/model/dataset_metadata/dataset_de_ident_level.py @@ -52,3 +52,4 @@ def update(self, data: dict): self.nonarr = data["nonarr"] self.k_anon = data["k_anon"] self.details = data["details"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_description.py b/model/dataset_metadata/dataset_description.py index fa344043..97f3a8a2 100644 --- a/model/dataset_metadata/dataset_description.py +++ b/model/dataset_metadata/dataset_description.py @@ -39,3 +39,4 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.description = data["description"] self.type = data["type"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_funder.py b/model/dataset_metadata/dataset_funder.py index 87affc42..90c45551 100644 --- a/model/dataset_metadata/dataset_funder.py +++ b/model/dataset_metadata/dataset_funder.py @@ -52,3 +52,4 @@ def update(self, data: dict): self.award_number = data["award_number"] self.award_uri = data["award_uri"] self.award_title = data["award_title"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_other.py b/model/dataset_metadata/dataset_other.py index faaa68b5..7041ffd9 100644 --- a/model/dataset_metadata/dataset_other.py +++ b/model/dataset_metadata/dataset_other.py @@ -67,3 +67,4 @@ def update(self, data: dict): self.publisher = data["publisher"] if "resource_type" in data: self.resource_type = data["resource_type"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_readme.py b/model/dataset_metadata/dataset_readme.py index 34e40581..b443c95b 100644 --- a/model/dataset_metadata/dataset_readme.py +++ b/model/dataset_metadata/dataset_readme.py @@ -27,3 +27,4 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.content = data["content"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_record_keys.py b/model/dataset_metadata/dataset_record_keys.py index aa1f6973..59a9889c 100644 --- a/model/dataset_metadata/dataset_record_keys.py +++ b/model/dataset_metadata/dataset_record_keys.py @@ -30,5 +30,5 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.key_type = data["type"] - if "key_details" in data: - self.key_details = data["key_details"] + self.key_details = data["key_details"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_related_item.py b/model/dataset_metadata/dataset_related_item.py index 209f38b3..579bed63 100644 --- a/model/dataset_metadata/dataset_related_item.py +++ b/model/dataset_metadata/dataset_related_item.py @@ -107,3 +107,4 @@ def update(self, data: dict): self.type = data["type"] self.relation_type = data["relation_type"] self.dataset_related_item_other.update(data) + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_rights.py b/model/dataset_metadata/dataset_rights.py index 863aad44..27ad1a63 100644 --- a/model/dataset_metadata/dataset_rights.py +++ b/model/dataset_metadata/dataset_rights.py @@ -44,3 +44,4 @@ def update(self, data: dict): self.uri = data["uri"] self.identifier = data["identifier"] self.identifier_scheme = data["identifier_scheme"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_subject.py b/model/dataset_metadata/dataset_subject.py index 2d1a1a0c..43ea560e 100644 --- a/model/dataset_metadata/dataset_subject.py +++ b/model/dataset_metadata/dataset_subject.py @@ -47,3 +47,4 @@ def update(self, data: dict): self.scheme_uri = data["scheme_uri"] self.value_uri = data["value_uri"] self.classification_code = data["classification_code"] + self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_title.py b/model/dataset_metadata/dataset_title.py index 0c754b9b..eff54c9f 100644 --- a/model/dataset_metadata/dataset_title.py +++ b/model/dataset_metadata/dataset_title.py @@ -40,3 +40,4 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.title = data["title"] self.type = data["type"] + self.dataset.touch_dataset() From 98a85c81003ebb2124ffd4a0b45fb6bbe164f35d Mon Sep 17 00:00:00 2001 From: aydawka Date: Tue, 24 Oct 2023 13:33:44 -0700 Subject: [PATCH 43/46] fix: dataset metadata and docker file --- Dockerfile | 4 ++-- apis/dataset_metadata/dataset_access.py | 2 +- .../dataset_alternate_identifier.py | 5 +++-- apis/dataset_metadata/dataset_consent.py | 2 +- apis/dataset_metadata/dataset_contributor.py | 9 +++++---- apis/dataset_metadata/dataset_date.py | 4 ++-- apis/dataset_metadata/dataset_de_ident_level.py | 2 +- apis/dataset_metadata/dataset_description.py | 5 +++-- apis/dataset_metadata/dataset_funder.py | 4 ++-- apis/dataset_metadata/dataset_other.py | 4 ++-- apis/dataset_metadata/dataset_readme.py | 2 +- apis/dataset_metadata/dataset_record_keys.py | 2 +- apis/dataset_metadata/dataset_related_item.py | 15 ++++++++------- apis/dataset_metadata/dataset_rights.py | 4 ++-- apis/dataset_metadata/dataset_subject.py | 5 +++-- apis/dataset_metadata/dataset_title.py | 4 ++-- 16 files changed, 39 insertions(+), 34 deletions(-) diff --git a/Dockerfile b/Dockerfile index fdacbf23..24060626 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,8 +6,8 @@ WORKDIR /app ENV POETRY_VERSION=1.3.2 -#RUN apk update -#RUN apk add --no-cache gcc libffi-dev musl-dev postgresql-dev +RUN apk update +RUN apk add --no-cache gcc libffi-dev musl-dev postgresql-dev RUN pip install "poetry==$POETRY_VERSION" diff --git a/apis/dataset_metadata/dataset_access.py b/apis/dataset_metadata/dataset_access.py index 21cc2f51..0a5f3046 100644 --- a/apis/dataset_metadata/dataset_access.py +++ b/apis/dataset_metadata/dataset_access.py @@ -17,7 +17,7 @@ ) -@api.route("/study//dataset//access") +@api.route("/study//dataset//metadata/access") class DatasetAccessResource(Resource): @api.doc("access") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_alternate_identifier.py b/apis/dataset_metadata/dataset_alternate_identifier.py index b1edd39f..33ec00a2 100644 --- a/apis/dataset_metadata/dataset_alternate_identifier.py +++ b/apis/dataset_metadata/dataset_alternate_identifier.py @@ -18,7 +18,7 @@ ) -@api.route("/study//dataset//alternative-identifier") +@api.route("/study//dataset//metadata/alternative-identifier") class DatasetAlternateIdentifierResource(Resource): @api.doc("identifier") @api.response(200, "Success") @@ -59,7 +59,8 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements @api.route( - "/study//dataset//alternative-identifier/" + "/study//dataset//" + "metadata/alternative-identifier/" ) class DatasetAlternateIdentifierUpdate(Resource): @api.doc("delete identifier") diff --git a/apis/dataset_metadata/dataset_consent.py b/apis/dataset_metadata/dataset_consent.py index eba6c96d..7eded36e 100644 --- a/apis/dataset_metadata/dataset_consent.py +++ b/apis/dataset_metadata/dataset_consent.py @@ -20,7 +20,7 @@ ) -@api.route("/study//dataset//consent") +@api.route("/study//dataset//metadata/consent") class DatasetConsentResource(Resource): @api.doc("consent") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index 7ae9be17..dcef69bc 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -13,7 +13,7 @@ ) -@api.route("/study//dataset//contributor") +@api.route("/study//dataset//metadata/contributor") class DatasetContributorResource(Resource): @api.doc("contributor") @api.response(200, "Success") @@ -50,7 +50,8 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements -@api.route("/study//dataset//contributor/") +@api.route("/study//dataset//" + "metadata/contributor/") class DatasetContributorDelete(Resource): @api.doc("delete contributor") @api.response(200, "Success") @@ -72,7 +73,7 @@ def delete( return 204 -@api.route("/study//dataset//creator") +@api.route("/study//dataset//metadata/creator") class DatasetCreatorResource(Resource): @api.doc("creator") @api.response(200, "Success") @@ -110,7 +111,7 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements -@api.route("/study//dataset//creator/") +@api.route("/study//dataset//metadata/creator/") class DatasetCreatorDelete(Resource): @api.doc("delete creator") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index 526f604b..cc5a1ee3 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -18,7 +18,7 @@ ) -@api.route("/study//dataset//date") +@api.route("/study//dataset/metadata//date") class DatasetDateResource(Resource): @api.doc("date") @api.response(200, "Success") @@ -54,7 +54,7 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements -@api.route("/study//dataset//date/") +@api.route("/study//dataset//metadata/date/") class DatasetDateDeleteResource(Resource): @api.doc("delete date") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_de_ident_level.py b/apis/dataset_metadata/dataset_de_ident_level.py index 5d055a20..e1974e7f 100644 --- a/apis/dataset_metadata/dataset_de_ident_level.py +++ b/apis/dataset_metadata/dataset_de_ident_level.py @@ -20,7 +20,7 @@ ) -@api.route("/study//dataset//de-identification-level") +@api.route("/study//dataset//metadata/de-identification-level") class DatasetDeIdentLevelResource(Resource): @api.doc("de_ident_level") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index d6f67ceb..937819b9 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -17,7 +17,7 @@ ) -@api.route("/study//dataset//description") +@api.route("/study//dataset//metadata/description") class DatasetDescriptionResource(Resource): @api.doc("description") @api.response(200, "Success") @@ -60,7 +60,8 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return list_of_elements - @api.route("/study//dataset//description/") + @api.route("/study//dataset//" + "metadata/description/") class DatasetDescriptionUpdate(Resource): @api.doc("delete description") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_funder.py b/apis/dataset_metadata/dataset_funder.py index 08c4de81..8b610a9e 100644 --- a/apis/dataset_metadata/dataset_funder.py +++ b/apis/dataset_metadata/dataset_funder.py @@ -22,7 +22,7 @@ ) -@api.route("/study//dataset//funder") +@api.route("/study//dataset//metadata/funder") class DatasetFunderResource(Resource): @api.doc("funder") @api.response(200, "Success") @@ -58,7 +58,7 @@ def post(self, study_id: int, dataset_id: int): # pylint: disable= unused-argum return list_of_elements -@api.route("/study//dataset//funder/") +@api.route("/study//dataset//metadata/funder/") class DatasetFunderUpdate(Resource): @api.doc("delete funder") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_other.py b/apis/dataset_metadata/dataset_other.py index 2cdadf5a..e78e259f 100644 --- a/apis/dataset_metadata/dataset_other.py +++ b/apis/dataset_metadata/dataset_other.py @@ -19,7 +19,7 @@ ) -@api.route("/study//dataset//other") +@api.route("/study//dataset//metadata/other") class DatasetOtherResource(Resource): @api.doc("other") @api.response(200, "Success") @@ -45,7 +45,7 @@ def put(self, study_id: int, dataset_id: int): return dataset_.dataset_other.to_dict() -@api.route("/study//dataset//publisher") +@api.route("/study//dataset//metadata/publisher") class DatasetPublisherResource(Resource): @api.doc("publisher") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_readme.py b/apis/dataset_metadata/dataset_readme.py index 6c53a760..ec8101f6 100644 --- a/apis/dataset_metadata/dataset_readme.py +++ b/apis/dataset_metadata/dataset_readme.py @@ -11,7 +11,7 @@ ) -@api.route("/study//dataset//readme") +@api.route("/study//dataset//metadata/readme") class DatasetReadmeResource(Resource): @api.doc("readme") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_record_keys.py b/apis/dataset_metadata/dataset_record_keys.py index 38f6cf8d..fe0613dc 100644 --- a/apis/dataset_metadata/dataset_record_keys.py +++ b/apis/dataset_metadata/dataset_record_keys.py @@ -15,7 +15,7 @@ ) -@api.route("/study//dataset//record-keys") +@api.route("/study//dataset//metadata/record-keys") class DatasetRecordKeysResource(Resource): @api.doc("record keys") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index 110b6662..1098a494 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -17,7 +17,7 @@ ) -@api.route("/study//dataset//related-item") +@api.route("/study//dataset//metadata/related-item") class DatasetRelatedItemResource(Resource): @api.doc("related item") @api.response(200, "Success") @@ -144,7 +144,8 @@ def post(self, study_id: int, dataset_id: int): return [item.to_dict() for item in data_obj.dataset_related_item], 201 -@api.route("/study//dataset//related-item/") +@api.route("/study//dataset//" + "metadata/related-item/") class DatasetRelatedItemUpdate(Resource): @api.doc("delete related item") @api.response(200, "Success") @@ -167,7 +168,7 @@ def delete( @api.route( - "/study//dataset//related-item/" + "/study//dataset//metadata/related-item/" "/contributor/" ) class RelatedItemContributorsDelete(Resource): @@ -194,7 +195,7 @@ def delete( @api.route( - "/study//dataset//" + "/study//dataset//metadata/" "related-item//title/" ) class RelatedItemTitlesDelete(Resource): @@ -218,8 +219,8 @@ def delete( @api.route( - "/study//dataset//related-item/" - "/identifier/" + "/study//dataset//metadata/" + "related-item//identifier/" ) class RelatedItemIdentifiersDelete(Resource): @api.doc("delete related item identifier") @@ -244,7 +245,7 @@ def delete( @api.route( - "/study//dataset//related-item/" + "/study//dataset//metadata/related-item/" "/creator/" # pylint: disable = line-too-long ) class RelatedItemCreatorDelete(Resource): diff --git a/apis/dataset_metadata/dataset_rights.py b/apis/dataset_metadata/dataset_rights.py index 937c1d43..350589be 100644 --- a/apis/dataset_metadata/dataset_rights.py +++ b/apis/dataset_metadata/dataset_rights.py @@ -19,7 +19,7 @@ ) -@api.route("/study//dataset//rights") +@api.route("/study//dataset//metadata/rights") class DatasetRightsResource(Resource): @api.doc("rights") @api.response(200, "Success") @@ -56,7 +56,7 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements -@api.route("/study//dataset//rights/") +@api.route("/study//dataset//metadata/rights/") class DatasetRightsUpdate(Resource): @api.doc("delete rights") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index 9cfee5f8..0892e5f2 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -20,7 +20,7 @@ ) -@api.route("/study//dataset//subject") +@api.route("/study//dataset//metadata/subject") class DatasetSubjectResource(Resource): @api.doc("subject") @api.response(200, "Success") @@ -57,7 +57,8 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements -@api.route("/study//dataset//subject/") +@api.route("/study//dataset//metadata/" + "subject/") class DatasetSubjectUpdate(Resource): @api.doc("delete subject") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_title.py b/apis/dataset_metadata/dataset_title.py index a619d08c..f452506c 100644 --- a/apis/dataset_metadata/dataset_title.py +++ b/apis/dataset_metadata/dataset_title.py @@ -17,7 +17,7 @@ ) -@api.route("/study//dataset//title") +@api.route("/study//dataset//metadata/title") class DatasetTitleResource(Resource): @api.doc("title") @api.response(200, "Success") @@ -61,7 +61,7 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return list_of_elements - @api.route("/study//dataset//title/") + @api.route("/study//dataset//metadata/title/") class DatasetDescriptionUpdate(Resource): @api.doc("delete title") @api.response(200, "Success") From 645489321c56c147da95ce681f2aab6ec491fbfa Mon Sep 17 00:00:00 2001 From: Lint Action Date: Tue, 24 Oct 2023 20:34:23 +0000 Subject: [PATCH 44/46] =?UTF-8?q?style:=20=F0=9F=8E=A8=20fix=20code=20styl?= =?UTF-8?q?e=20issues=20with=20Black?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apis/dataset_metadata/dataset_contributor.py | 5 +++-- apis/dataset_metadata/dataset_description.py | 6 ++++-- apis/dataset_metadata/dataset_related_item.py | 5 +++-- apis/dataset_metadata/dataset_subject.py | 3 +-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index dcef69bc..7bc61b68 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -50,8 +50,9 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements -@api.route("/study//dataset//" - "metadata/contributor/") +@api.route( + "/study//dataset//" "metadata/contributor/" +) class DatasetContributorDelete(Resource): @api.doc("delete contributor") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 937819b9..573550f9 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -60,8 +60,10 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return list_of_elements - @api.route("/study//dataset//" - "metadata/description/") + @api.route( + "/study//dataset//" + "metadata/description/" + ) class DatasetDescriptionUpdate(Resource): @api.doc("delete description") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index 1098a494..82c887ff 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -144,8 +144,9 @@ def post(self, study_id: int, dataset_id: int): return [item.to_dict() for item in data_obj.dataset_related_item], 201 -@api.route("/study//dataset//" - "metadata/related-item/") +@api.route( + "/study//dataset//" "metadata/related-item/" +) class DatasetRelatedItemUpdate(Resource): @api.doc("delete related item") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index 0892e5f2..8c3b48cd 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -57,8 +57,7 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements -@api.route("/study//dataset//metadata/" - "subject/") +@api.route("/study//dataset//metadata/" "subject/") class DatasetSubjectUpdate(Resource): @api.doc("delete subject") @api.response(200, "Success") From 7919c40eeca9d3b20dd0039d3c780db8d5974f47 Mon Sep 17 00:00:00 2001 From: aydawka Date: Tue, 24 Oct 2023 15:00:27 -0700 Subject: [PATCH 45/46] fix: dataset metadata --- apis/contributor.py | 1 - apis/dataset_metadata/dataset_contributor.py | 7 ++++--- apis/dataset_metadata/dataset_date.py | 2 +- apis/dataset_metadata/dataset_description.py | 16 +++++++++------- apis/dataset_metadata/dataset_related_item.py | 5 +++-- apis/dataset_metadata/dataset_subject.py | 7 +++---- model/dataset_metadata/dataset_access.py | 5 ++--- model/dataset_metadata/dataset_de_ident_level.py | 2 +- model/dataset_metadata/dataset_other.py | 2 +- model/dataset_metadata/dataset_record_keys.py | 2 +- 10 files changed, 25 insertions(+), 24 deletions(-) diff --git a/apis/contributor.py b/apis/contributor.py index 46e3a429..72621e80 100644 --- a/apis/contributor.py +++ b/apis/contributor.py @@ -8,7 +8,6 @@ from .authentication import is_granted - api = Namespace("Contributor", description="Contributors", path="/") diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index dcef69bc..19cb1385 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -30,7 +30,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume def post(self, study_id: int, dataset_id: int): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): - return "Access denied, you can not make any change in dataset metadata", 403 + return "Access denied, can't modify dataset metadata", 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -50,8 +50,9 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements -@api.route("/study//dataset//" - "metadata/contributor/") +@api.route( + "/study//dataset//metadata/contributor/" +) class DatasetContributorDelete(Resource): @api.doc("delete contributor") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_date.py b/apis/dataset_metadata/dataset_date.py index cc5a1ee3..da2f9f3a 100644 --- a/apis/dataset_metadata/dataset_date.py +++ b/apis/dataset_metadata/dataset_date.py @@ -18,7 +18,7 @@ ) -@api.route("/study//dataset/metadata//date") +@api.route("/study//dataset//metadata/date") class DatasetDateResource(Resource): @api.doc("date") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_description.py b/apis/dataset_metadata/dataset_description.py index 937819b9..fa2f3df8 100644 --- a/apis/dataset_metadata/dataset_description.py +++ b/apis/dataset_metadata/dataset_description.py @@ -41,11 +41,11 @@ def post(self, study_id: int, dataset_id: int): for i in data: if "id" in i and i["id"]: dataset_description_ = model.DatasetDescription.query.get(i["id"]) - if dataset_description_.type == "Abstract": - return ( - "Abstract type can not be modified", - 403, - ) + # if dataset_description_.type == "Abstract": + # return ( + # "Abstract type can not be modified", + # 403, + # ) dataset_description_.update(i) list_of_elements.append(dataset_description_.to_dict()) elif "id" not in i or not i["id"]: @@ -60,8 +60,10 @@ def post(self, study_id: int, dataset_id: int): model.db.session.commit() return list_of_elements - @api.route("/study//dataset//" - "metadata/description/") + @api.route( + "/study//dataset//" + "metadata/description/" + ) class DatasetDescriptionUpdate(Resource): @api.doc("delete description") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_related_item.py b/apis/dataset_metadata/dataset_related_item.py index 1098a494..35d938b8 100644 --- a/apis/dataset_metadata/dataset_related_item.py +++ b/apis/dataset_metadata/dataset_related_item.py @@ -144,8 +144,9 @@ def post(self, study_id: int, dataset_id: int): return [item.to_dict() for item in data_obj.dataset_related_item], 201 -@api.route("/study//dataset//" - "metadata/related-item/") +@api.route( + "/study//dataset//metadata/related-item/" +) class DatasetRelatedItemUpdate(Resource): @api.doc("delete related item") @api.response(200, "Success") diff --git a/apis/dataset_metadata/dataset_subject.py b/apis/dataset_metadata/dataset_subject.py index 0892e5f2..256aff56 100644 --- a/apis/dataset_metadata/dataset_subject.py +++ b/apis/dataset_metadata/dataset_subject.py @@ -38,7 +38,7 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume def post(self, study_id: int, dataset_id: int): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): - return "Access denied, you can not make any change in dataset metadata", 403 + return "Access denied, you can't modify dataset metadata", 403 data: Union[Any, dict] = request.json data_obj = model.Dataset.query.get(dataset_id) list_of_elements = [] @@ -57,8 +57,7 @@ def post(self, study_id: int, dataset_id: int): return list_of_elements -@api.route("/study//dataset//metadata/" - "subject/") +@api.route("/study//dataset//metadata/subject/") class DatasetSubjectUpdate(Resource): @api.doc("delete subject") @api.response(200, "Success") @@ -71,7 +70,7 @@ def delete( ): study_obj = model.Study.query.get(study_id) if not is_granted("dataset_metadata", study_obj): - return "Access denied, you can not make any change in dataset metadata", 403 + return "Access denied, you can't make change in dataset metadata", 403 dataset_subject_ = model.DatasetSubject.query.get(subject_id) model.db.session.delete(dataset_subject_) diff --git a/model/dataset_metadata/dataset_access.py b/model/dataset_metadata/dataset_access.py index 4c1ed5c3..577a5e14 100644 --- a/model/dataset_metadata/dataset_access.py +++ b/model/dataset_metadata/dataset_access.py @@ -1,5 +1,3 @@ -import datetime - from model import Dataset from ..db import db @@ -28,6 +26,7 @@ def to_dict(self): return { "type": self.type, "description": self.description, + "url_last_checked": self.url_last_checked, "url": self.url, } @@ -40,6 +39,6 @@ def from_data(dataset: Dataset, data: dict): def update(self, data: dict): self.description = data["description"] self.url = data["url"] - self.url_last_checked = datetime.datetime.now(datetime.timezone.utc).timestamp() + self.url_last_checked = data["url_last_checked"] self.type = data["type"] self.dataset.touch_dataset() diff --git a/model/dataset_metadata/dataset_de_ident_level.py b/model/dataset_metadata/dataset_de_ident_level.py index 5f68b9e3..4d8e1cc1 100644 --- a/model/dataset_metadata/dataset_de_ident_level.py +++ b/model/dataset_metadata/dataset_de_ident_level.py @@ -10,7 +10,7 @@ def __init__(self, dataset): self.dates = False self.nonarr = False self.k_anon = False - self.details = False + self.details = "" __tablename__ = "dataset_de_ident_level" diff --git a/model/dataset_metadata/dataset_other.py b/model/dataset_metadata/dataset_other.py index 7041ffd9..00694625 100644 --- a/model/dataset_metadata/dataset_other.py +++ b/model/dataset_metadata/dataset_other.py @@ -14,7 +14,7 @@ def __init__(self, dataset): self.size = "" self.standards_followed = "" self.acknowledgement = "" - self.publisher = [] + self.publisher = "" __tablename__ = "dataset_other" diff --git a/model/dataset_metadata/dataset_record_keys.py b/model/dataset_metadata/dataset_record_keys.py index 59a9889c..993af3f2 100644 --- a/model/dataset_metadata/dataset_record_keys.py +++ b/model/dataset_metadata/dataset_record_keys.py @@ -30,5 +30,5 @@ def from_data(dataset, data: dict): def update(self, data: dict): self.key_type = data["type"] - self.key_details = data["key_details"] + self.key_details = data["details"] self.dataset.touch_dataset() From 1565d3af87c2bea05d7d01f50c2ab700cc6a1d6c Mon Sep 17 00:00:00 2001 From: aydawka Date: Tue, 24 Oct 2023 15:52:03 -0700 Subject: [PATCH 46/46] fix: minor fix for contributor metadata --- apis/dataset_metadata/dataset_contributor.py | 1 + 1 file changed, 1 insertion(+) diff --git a/apis/dataset_metadata/dataset_contributor.py b/apis/dataset_metadata/dataset_contributor.py index 19cb1385..dd514624 100644 --- a/apis/dataset_metadata/dataset_contributor.py +++ b/apis/dataset_metadata/dataset_contributor.py @@ -98,6 +98,7 @@ def post(self, study_id: int, dataset_id: int): for i in data: i["creator"] = True if "id" in i and i["id"]: + i["contributor_type"] = None dataset_creator_ = model.DatasetContributor.query.get(i["id"]) if not dataset_creator_: return f"Study link {i['id']} Id is not found", 404