diff --git a/dandiapi/api/services/asset/__init__.py b/dandiapi/api/services/asset/__init__.py index a597e626d..b2a92febf 100644 --- a/dandiapi/api/services/asset/__init__.py +++ b/dandiapi/api/services/asset/__init__.py @@ -14,7 +14,7 @@ AssetAlreadyExistsError, AssetPathConflictError, DandisetOwnerRequiredError, - DraftDandisetNotModifiableError, + PublishedDandisetNotModifiableError, ZarrArchiveBelongsToDifferentDandisetError, ) from dandiapi.api.services.permissions.dandiset import is_dandiset_owner @@ -121,7 +121,7 @@ def change_asset( # noqa: PLR0913 if not is_dandiset_owner(version.dandiset, user): raise DandisetOwnerRequiredError if version.version != 'draft': - raise DraftDandisetNotModifiableError + raise PublishedDandisetNotModifiableError path = new_metadata['path'] new_metadata_stripped = Asset.strip_metadata(new_metadata) @@ -171,7 +171,7 @@ def add_asset_to_version( if not is_dandiset_owner(version.dandiset, user): raise DandisetOwnerRequiredError if version.version != 'draft': - raise DraftDandisetNotModifiableError + raise PublishedDandisetNotModifiableError # Check if there are already any assets with the same path path = metadata['path'] @@ -203,7 +203,7 @@ def remove_asset_from_version(*, user, asset: Asset, version: Version) -> Versio if not is_dandiset_owner(version.dandiset, user): raise DandisetOwnerRequiredError if version.version != 'draft': - raise DraftDandisetNotModifiableError + raise PublishedDandisetNotModifiableError with transaction.atomic(): _remove_asset_from_version(asset=asset, version=version) diff --git a/dandiapi/api/services/asset/exceptions.py b/dandiapi/api/services/asset/exceptions.py index a86f0864c..25f3e19d1 100644 --- a/dandiapi/api/services/asset/exceptions.py +++ b/dandiapi/api/services/asset/exceptions.py @@ -10,7 +10,7 @@ class DandisetOwnerRequiredError(DandiError): message = 'A dandiset owner is required to perform this action.' -class DraftDandisetNotModifiableError(DandiError): +class PublishedDandisetNotModifiableError(DandiError): http_status_code = status.HTTP_405_METHOD_NOT_ALLOWED message = 'Only draft versions can be modified.' diff --git a/dandiapi/api/views/asset.py b/dandiapi/api/views/asset.py index de3a2350f..2ee4d1337 100644 --- a/dandiapi/api/views/asset.py +++ b/dandiapi/api/views/asset.py @@ -24,7 +24,7 @@ change_asset, remove_asset_from_version, ) -from dandiapi.api.services.asset.exceptions import DraftDandisetNotModifiableError +from dandiapi.api.services.asset.exceptions import PublishedDandisetNotModifiableError from dandiapi.api.services.embargo.exceptions import DandisetUnembargoInProgressError from dandiapi.api.services.permissions.dandiset import ( is_dandiset_owner, @@ -360,7 +360,7 @@ def update(self, request, versions__dandiset__pk, versions__version, **kwargs): version=versions__version, ) if version.version != 'draft': - raise DraftDandisetNotModifiableError + raise PublishedDandisetNotModifiableError if version.dandiset.unembargo_in_progress: raise DandisetUnembargoInProgressError diff --git a/dandiapi/api/views/version.py b/dandiapi/api/views/version.py index bcd1f9d4d..2d526a15a 100644 --- a/dandiapi/api/views/version.py +++ b/dandiapi/api/views/version.py @@ -13,6 +13,7 @@ from dandiapi.api.models import Dandiset, Version from dandiapi.api.services import audit +from dandiapi.api.services.asset.exceptions import PublishedDandisetNotModifiableError from dandiapi.api.services.embargo.exceptions import DandisetUnembargoInProgressError from dandiapi.api.services.permissions.dandiset import ( is_dandiset_owner, @@ -96,10 +97,7 @@ def update(self, request, **kwargs): """Update the metadata of a version.""" version: Version = self.get_object() if version.version != 'draft': - return Response( - 'Only draft versions can be modified.', - status=status.HTTP_405_METHOD_NOT_ALLOWED, - ) + raise PublishedDandisetNotModifiableError if version.dandiset.unembargo_in_progress: raise DandisetUnembargoInProgressError