diff --git a/alembic/versions/0defbfc71c59_add_identifier_to_version.py b/alembic/versions/0defbfc71c59_add_identifier_to_version.py deleted file mode 100644 index 5dbdd7d2..00000000 --- a/alembic/versions/0defbfc71c59_add_identifier_to_version.py +++ /dev/null @@ -1,29 +0,0 @@ -"""add identifier to version - -Revision ID: 0defbfc71c59 -Revises: 29e42ce4be3f -Create Date: 2024-01-05 13:25:15.547450 - -""" -from typing import Sequence, Union - -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision: str = "0defbfc71c59" -down_revision: Union[str, None] = "29e42ce4be3f" -branch_labels: Union[str, Sequence[str], None] = None -depends_on: Union[str, Sequence[str], None] = None - - -def upgrade() -> None: - op.execute( - """ALTER TABLE version - ADD COLUMN identifier SERIAL - """ - ) - op.execute("UPDATE version SET identifier = 1") - op.create_unique_constraint("unique_identifier", "version", ["identifier"]) - op.create_unique_constraint("unique_doi", "version", ["doi"]) diff --git a/apis/dataset.py b/apis/dataset.py index c1b0ac09..0c32921c 100644 --- a/apis/dataset.py +++ b/apis/dataset.py @@ -17,11 +17,10 @@ "title": fields.String(required=True), "changelog": fields.String(required=True), "created_at": fields.String(required=True), - "doi": fields.String(required=False), + "doi": fields.String(required=True), "published": fields.Boolean(required=True), "participants": fields.List(fields.String, required=True), "published_on": fields.String(required=True), - "identifier": fields.Integer(required=True), }, ) @@ -193,8 +192,6 @@ 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() - dataset_versions.doi = f"10.fairhub/{dataset_versions.identifier}" - model.db.session.commit() return dataset_versions.to_dict(), 201 diff --git a/model/version.py b/model/version.py index f1d34245..3aa3bb5c 100644 --- a/model/version.py +++ b/model/version.py @@ -1,7 +1,8 @@ import datetime import uuid from datetime import timezone -from sqlalchemy import Table, Sequence + +from sqlalchemy import Table import model from model.dataset import Dataset @@ -30,19 +31,10 @@ def __init__(self, dataset): published = db.Column(db.BOOLEAN, nullable=False) changelog = db.Column(db.String, nullable=False) updated_on = db.Column(db.BigInteger, nullable=False) + doi = db.Column(db.String, nullable=False) created_at = db.Column(db.BigInteger, nullable=False) published_on = db.Column(db.BigInteger, nullable=False) - identifier = db.Column( - db.Integer, - Sequence("version_identifier_seq"), - nullable=False, - unique=True, - server_default=Sequence("version_identifier_seq").next_value(), - ) - - doi = db.Column(db.String, nullable=True, unique=True) - version_readme = db.relationship( "VersionReadme", uselist=False, @@ -65,7 +57,6 @@ def to_dict(self): "published_on": self.published_on, "updated_on": self.updated_on, "created_at": self.created_at, - "identifier": self.identifier, "doi": self.doi, "published": self.published, "readme": self.version_readme.content if self.version_readme else "" @@ -85,6 +76,7 @@ def from_data(dataset: Dataset, data: dict): def update(self, data: dict): self.title = data["title"] 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"] diff --git a/tests/functional/test_study_version_api.py b/tests/functional/test_study_version_api.py index fea3398a..874c18dc 100644 --- a/tests/functional/test_study_version_api.py +++ b/tests/functional/test_study_version_api.py @@ -22,15 +22,17 @@ def test_post_dataset_version(clients): json={ "title": "Dataset Version 1.0", "published": False, + "doi": "doi:test", "changelog": "changelog testing here", }, ) + assert response.status_code == 201 response_data = json.loads(response.data) pytest.global_dataset_version_id = response_data["id"] assert response_data["title"] == "Dataset Version 1.0" assert response_data["published"] is False - assert response_data["doi"] == f"10.fairhub/{response_data['identifier']}" + assert response_data["doi"] == "doi:test" assert response_data["changelog"] == "changelog testing here" @@ -68,23 +70,20 @@ def test_get_all_dataset_versions(clients): assert len(response_data) == 1 assert len(admin_response_data) == 1 assert len(editor_response_data) == 1 + assert response_data[0]["title"] == "Dataset Version 1.0" assert response_data[0]["published"] is False + assert response_data[0]["doi"] == "doi:test" assert response_data[0]["changelog"] == "changelog testing here" - assert response_data[0]["doi"] == f"10.fairhub/{response_data[0]['identifier']}" assert admin_response_data[0]["title"] == "Dataset Version 1.0" assert admin_response_data[0]["published"] is False - assert ( - admin_response_data[0]["doi"] == f"10.fairhub/{response_data[0]['identifier']}" - ) + assert admin_response_data[0]["doi"] == "doi:test" assert admin_response_data[0]["changelog"] == "changelog testing here" assert editor_response_data[0]["title"] == "Dataset Version 1.0" assert editor_response_data[0]["published"] is False - assert ( - editor_response_data[0]["doi"] == f"10.fairhub/{response_data[0]['identifier']}" - ) + assert editor_response_data[0]["doi"] == "doi:test" assert editor_response_data[0]["changelog"] == "changelog testing here" @@ -123,17 +122,17 @@ def test_get_dataset_version(clients): assert response_data["title"] == "Dataset Version 1.0" assert response_data["published"] is False + assert response_data["doi"] == "doi:test" assert response_data["changelog"] == "changelog testing here" - assert response_data["doi"] == f"10.fairhub/{response_data['identifier']}" assert admin_response_data["title"] == "Dataset Version 1.0" assert admin_response_data["published"] is False - assert admin_response_data["doi"] == f"10.fairhub/{response_data['identifier']}" + assert admin_response_data["doi"] == "doi:test" assert admin_response_data["changelog"] == "changelog testing here" assert editor_response_data["title"] == "Dataset Version 1.0" assert editor_response_data["published"] is False - assert editor_response_data["doi"] == f"10.fairhub/{response_data['identifier']}" + assert editor_response_data["doi"] == "doi:test" assert editor_response_data["changelog"] == "changelog testing here" @@ -155,18 +154,19 @@ def test_put_dataset_version(clients): "title": "Dataset Version 2.0", "changelog": "Updating the changelog", "published": False, + "doi": "doi:test123", "readme": "readme testing here", }, ) assert response.status_code == 200 response_data = json.loads(response.data) + print(response_data) assert response_data["title"] == "Dataset Version 2.0" assert response_data["changelog"] == "Updating the changelog" - assert response_data["doi"] == f"10.fairhub/{response_data['identifier']}" + assert response_data["doi"] == "doi:test123" assert response_data["readme"] == "" - assert response_data["published"] is False admin_response = _admin_client.put( f"/study/{study_id}/dataset/{dataset_id}/version/{version_id}", @@ -174,6 +174,7 @@ def test_put_dataset_version(clients): "title": "Dataset Version 3.0", "changelog": "Changelog modified by admin", "published": False, + "doi": "doi:test", "readme": "readme modified by editor", }, ) @@ -184,8 +185,7 @@ def test_put_dataset_version(clients): assert admin_response_data["title"] == "Dataset Version 3.0" assert admin_response_data["changelog"] == "Changelog modified by admin" assert admin_response_data["published"] is False - assert admin_response_data["doi"] == f"10.fairhub/{response_data['identifier']}" - + assert admin_response_data["doi"] == "doi:test" assert admin_response_data["readme"] == "" editor_response = _editor_client.put( @@ -194,6 +194,7 @@ def test_put_dataset_version(clients): "title": "Dataset Version 4.0", "changelog": "Changelog modified by editor", "published": False, + "doi": "doi:test", "readme": "readme modified by editor", }, ) @@ -206,6 +207,7 @@ def test_put_dataset_version(clients): "title": "Dataset Version 5.0", "changelog": "Changelog modified by viewer", "published": False, + "doi": "test:doi", "readme": "readme modified by viewer", }, )