diff --git a/api/tests/routes/object_modifications.py b/api/tests/routes/object_modifications.py index 1df90b62b1d8473a1fbd699a220af8b379cd458f..5f5047db64d8475f8af7441a2fb2cf85dceafa7c 100644 --- a/api/tests/routes/object_modifications.py +++ b/api/tests/routes/object_modifications.py @@ -1624,32 +1624,26 @@ class ObjectModificationsTest(ApiTest): assert_empty_response=True, use_moderator_login=True, ) - self.do_json_request( - "DELETE", - f"/object_management/publish_medium/204", - assert_empty_response=True, - use_moderator_login=True, - ) self.do_json_request( "POST", - f"/object_management/publish_medium/204/resurrect", - expected_response_status=HTTP_401_UNAUTHORIZED + f"/object_management/lecture/290000/resurrect", + expected_response_status=HTTP_404_NOT_FOUND, + use_moderator_login=True ) self.do_json_request( "POST", - f"/object_management/publish_medium/12000/resurrect", - expected_response_status=HTTP_404_NOT_FOUND, - use_moderator_login=True + f"/object_management/lecture/29/resurrect", + expected_response_status=HTTP_401_UNAUTHORIZED ) self.do_json_request( "POST", - f"/object_management/publish_medium/204/resurrect", + f"/object_management/lecture/29/resurrect", assert_empty_response=True, - use_moderator_login=True, + use_moderator_login=True ) self.do_json_request( "POST", - f"/object_management/publish_medium/204/resurrect", + f"/object_management/lecture/29/resurrect", expected_response_status=HTTP_400_BAD_REQUEST, use_moderator_login=True ) diff --git a/common_py/src/videoag_common/api_object/object_class.py b/common_py/src/videoag_common/api_object/object_class.py index ab0b3627cfdd2370e73d6ffa05086baf89d3a981..ed5040b87fe0b58fe6acd0415bc3af74ba633ebe 100644 --- a/common_py/src/videoag_common/api_object/object_class.py +++ b/common_py/src/videoag_common/api_object/object_class.py @@ -31,11 +31,13 @@ class ApiObjectClass: parent_relationship_config_ids: list[str] or None = None, enable_config: bool or None = None, config_allow_creation: bool = True, + config_allow_deletion: bool = True, enable_data: bool or None = None, ): self._parent_relationship_config_ids = parent_relationship_config_ids self.enable_config = enable_config self.config_allow_creation = config_allow_creation + self.config_allow_deletion = config_allow_deletion self.enable_data = enable_data self.orm_class = None @@ -356,7 +358,7 @@ class ApiObjectClass: return self._creation_config_json def is_deletion_allowed(self) -> bool: - return issubclass(self.orm_class, DeletableApiObject) + return issubclass(self.orm_class, DeletableApiObject) and self.config_allow_deletion def get_current_config(self, session: SessionDb, object_id: int): if not self.enable_config: diff --git a/common_py/src/videoag_common/objects/medium.py b/common_py/src/videoag_common/objects/medium.py index 3de3f29026f209f689fcda64a53c03c4dcb002e6..1e81565deccaeb01ac784fce6cae2081186a3002 100644 --- a/common_py/src/videoag_common/objects/medium.py +++ b/common_py/src/videoag_common/objects/medium.py @@ -360,7 +360,8 @@ class MediumMetadata(ApiObject, Base): class PublishMedium(VisibilityApiObject, DeletableApiObject, Base): __api_class__ = ApiObjectClass( parent_relationship_config_ids=["lecture"], - config_allow_creation=False + config_allow_creation=False, + config_allow_deletion=False, ) # Yes, this is a bit redundant since medium_metadata.file.lecture_id already has it. However, after struggling with