Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "merge: version into staging" #23

Merged
merged 1 commit into from
Nov 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,4 @@ COPY core ./core
COPY app.py .
COPY config.py .

# run database migrations
RUN alembic upgrade head

CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]
22 changes: 0 additions & 22 deletions alembic/versions/72ac2b020c7c_delete_dataset_readme_table.py

This file was deleted.

2 changes: 2 additions & 0 deletions apis/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from .dataset_metadata.dataset_description import api as description
from .dataset_metadata.dataset_funder import api as funder
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
from .dataset_metadata.dataset_related_item import api as related_item
from .dataset_metadata.dataset_rights import api as rights
Expand Down Expand Up @@ -62,6 +63,7 @@
"description",
"funder",
"dataset_other",
"readme",
"record_keys",
"related_item",
"api",
Expand Down
146 changes: 33 additions & 113 deletions apis/dataset.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import typing

from flask import jsonify, request
from flask import Response, jsonify, request
from flask_restx import Namespace, Resource, fields

import model
Expand Down Expand Up @@ -32,8 +32,6 @@
"created_at": fields.String(required=True),
"dataset_versions": fields.Nested(dataset_versions_model, required=True),
"latest_version": fields.String(required=True),
"title": fields.String(required=True),
"description": fields.String(required=True),
},
)

Expand All @@ -43,20 +41,20 @@ class DatasetList(Resource):
@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.marshal_with(dataset)
@api.doc("view datasets")
def get(self, study_id):
study = model.Study.query.get(study_id)
datasets = model.Dataset.query.filter_by(study=study)
return [d.to_dict() for d in datasets]

@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("add datasets")
@api.doc("update dataset")
@api.expect(dataset)
def post(self, study_id):
study = model.Study.query.get(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
dataset_ = model.Dataset.from_data(study)
model.db.session.add(dataset_)
Expand All @@ -79,7 +77,6 @@ def post(self, study_id):
@api.route("/study/<study_id>/dataset/<dataset_id>")
@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("view dataset")
class DatasetResource(Resource):
@api.response(201, "Success")
@api.response(400, "Validation Error")
Expand All @@ -89,7 +86,6 @@ def get(self, study_id: int, dataset_id: int): # pylint: disable= unused-argume

@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("update dataset")
def put(self, study_id: int, dataset_id: int):
study = model.Study.query.get(study_id)

Expand All @@ -106,20 +102,26 @@ def put(self, study_id: int, dataset_id: int):

@api.response(200, "Success")
@api.response(400, "Validation Error")
@api.doc("delete dataset")
def delete(self, study_id: int, dataset_id: int):
study = model.Study.query.get(study_id)
if not is_granted("delete_dataset", study):
return "Access denied, you can not modify", 403

data_obj = model.Dataset.query.get(dataset_id)
for version in data_obj.dataset_versions:
model.db.session.delete(version)

model.db.session.delete(data_obj)
model.db.session.commit()
return 204

# def delete(self, study_id: int, dataset_id: int, version_id: int):
# data_obj = Dataset.query.get(dataset_id)
# for version in data_obj.dataset_versions:
# db.session.delete(version)
# db.session.commit()
# db.session.delete(data_obj)
# db.session.commit()
# return Response(status=204)


@api.route("/study/<study_id>/dataset/<dataset_id>/version/<version_id>")
class VersionResource(Resource):
Expand All @@ -129,15 +131,9 @@ class VersionResource(Resource):
def get(
self, study_id: int, dataset_id: int, version_id: int
): # pylint: disable= unused-argument
study = model.Study.query.get(study_id)
if not is_granted("version", study):
return "Access denied, you can not modify", 403
dataset_version = model.Version.query.get(version_id)
return dataset_version.to_dict()

@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("update dataset version")
def put(
self, study_id: int, dataset_id: int, version_id: int
): # pylint: disable= unused-argument
Expand All @@ -149,86 +145,26 @@ def put(
model.db.session.commit()
return jsonify(data_version_obj.to_dict()), 201

@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("delete dataset version")
def delete(
self, study_id: int, dataset_id: int, version_id: int
): # pylint: disable= unused-argument
study = model.Study.query.get(study_id)
if not is_granted("delete_dataset", study):
return "Access denied, you can not modify", 403
version_obj = model.Version.query.get(version_id)
model.db.session.delete(version_obj)
model.db.session.commit()
return 204


@api.route("/study/<study_id>/dataset/<dataset_id>/version/<version_id>/changelog")
class VersionDatasetChangelog(Resource):
@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("version changelog")
def get(self, study_id: str, dataset_id: str, version_id: str):
study = model.Study.query.get(study_id)
if not is_granted("version", study):
return "Access denied, you can not modify", 403
version = model.Version.query.filter_by(
id=version_id, dataset_id=dataset_id
).one_or_none()
return {"changelog": version.changelog}

@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("version changelog update")
def put(
self, study_id: str, dataset_id: str, version_id: str
): # pylint: disable= unused-argument
study = model.Study.query.get(study_id)
if not is_granted("version", study):
return "Access denied, you can not modify", 403
data: typing.Union[typing.Any, dict] = request.json
version_ = model.Version.query.get(version_id)
version_.changelog = data["changelog"]
model.db.session.commit()
return 201


@api.route("/study/<study_id>/dataset/<dataset_id>/version/<version_id>/readme")
class VersionDatasetReadme(Resource):
@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("version readme")
def get(self, study_id: str, dataset_id: str, version_id: str):
study = model.Study.query.get(study_id)
if not is_granted("version", study):
return "Access denied, you can not modify", 403
version = model.Version.query.filter_by(
id=version_id, dataset_id=dataset_id
).one_or_none()
return version.version_readme.to_dict(), 200

@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("version readme update")
def put(
self, study_id: str, dataset_id: str, version_id: str
): # pylint: disable= unused-argument
study = model.Study.query.get(study_id)
if not is_granted("version", study):
return "Access denied, you can not modify", 403
data = request.json
version_ = model.Version.query.get(version_id)
version_.version_readme.update(data)
data_obj = model.Dataset.query.get(dataset_id)
for version in data_obj.dataset_versions:
model.db.session.delete(version)
model.db.session.commit()
model.db.session.delete(data_obj)
model.db.session.commit()
return 201
return Response(status=204)


@api.route("/study/<study_id>/dataset/<dataset_id>/version")
class VersionList(Resource):
@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("view versions")
@api.doc("versions")
def get(self, study_id: int, dataset_id: int):
study = model.Study.query.get(study_id)
if not is_granted("version", study):
Expand Down Expand Up @@ -266,37 +202,21 @@ def post(self, study_id: int, dataset_id: int):
# return "Access denied, you can not modify", 403
# data_obj = model.Version.query.get(version_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()


@api.route("/study/<study_id>/dataset/<dataset_id>/version/<version_id>/study-metadata")
class VersionDatasetMetadataResource(Resource):
@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("version study metadata get")
def get(self, study_id: str, dataset_id: str, version_id: str):
study = model.Study.query.get(study_id)
if not is_granted("version", study):
return "Access denied, you can not modify", 403
version = model.Version.query.filter_by(
id=version_id, dataset_id=dataset_id
).one_or_none()
return version.dataset.study.to_dict_study_metadata()


@api.route(
"/study/<study_id>/dataset/<dataset_id>/version/<version_id>/dataset-metadata"
)
class VersionStudyMetadataResource(Resource):
@api.response(201, "Success")
@api.response(400, "Validation Error")
@api.doc("version dataset metadata get")
def get(self, study_id: str, dataset_id: str, version_id: str):
study = model.Study.query.get(study_id)
if not is_granted("version", study):
return "Access denied, you can not modify", 403
version = model.Version.query.filter_by(
id=version_id, dataset_id=dataset_id
).one_or_none()
return version.dataset.to_dict_dataset_metadata()
#
# @api.route("/study/<study_id>/dataset/<dataset_id>
# /version/<version_id>/dataset-metadata")
# class VersionStudyMetadataResource(Resource):
# @api.response(201, "Success")
# @api.response(400, "Validation Error")
# @api.doc("version dataset metadata get")
# def get(self, study_id: int, dataset_id: int, version_id):
# study = model.Study.query.get(study_id)
# if not is_granted("dataset", study):
# return "Access denied, you can not modify", 403
# version = dataset.dataset_version.get(version_id)
# pass
33 changes: 33 additions & 0 deletions apis/dataset_metadata/dataset_readme.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
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(
"DatasetReadme",
{"id": fields.String(required=True), "content": fields.String(required=True)},
)


@api.route("/study/<study_id>/dataset/<dataset_id>/metadata/readme")
class DatasetReadmeResource(Resource):
@api.doc("readme")
@api.response(200, "Success")
@api.response(400, "Validation Error")
@api.marshal_with(dataset_readme)
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 dataset_readme_.to_dict()

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_readme.update(data)
model.db.session.commit()
return dataset_.dataset_readme.to_dict()
1 change: 1 addition & 0 deletions apis/dataset_metadata/dataset_related_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ def post(self, study_id: int, dataset_id: int):
"Subtitle",
"TranslatedTitle",
"OtherTitle",
"MainTitle",
],
},
},
Expand Down
10 changes: 8 additions & 2 deletions apis/dataset_metadata/dataset_title.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ def post(self, study_id: int, dataset_id: int):
"Subtitle",
"TranslatedTitle",
"OtherTitle",
"MainTitle",
],
},
},
Expand All @@ -82,12 +83,17 @@ 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 (
# "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"]:
if i["type"] == "MainTitle":
return (
"Main Title type can not be given",
"MainTitle type can not be given",
403,
)
dataset_title_ = model.DatasetTitle.from_data(data_obj, i)
Expand Down Expand Up @@ -119,7 +125,7 @@ def delete(
dataset_title_ = model.DatasetTitle.query.get(title_id)
if dataset_title_.type == "MainTitle":
return (
"Main Title type can not be deleted",
"MainTitle type can not be deleted",
403,
)
model.db.session.delete(dataset_title_)
Expand Down
Loading
Loading