def patch(self, request, registry_id): """Update oai-pmh information for a given registry (Data provider) Args: request: HTTP request registry_id: ObjectId Returns: - code: 200 content: Success message - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: registry = oai_registry_api.get_by_id(registry_id) registry = oai_registry_api.update_registry_info(registry, request=request) content = OaiPmhMessage.get_message_labelled( "Registry {0} information updated with success.".format( registry.name)) return Response(content, status=status.HTTP_200_OK) except exceptions.DoesNotExist as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def get(self, request, set_id): """Get a OaiProviderSet Args: request: HTTP request set_id: ObjectId Returns: - code: 200 content: Registry - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: set_ = oai_provider_set_api.get_by_id(set_id) serializer = serializers.OaiProviderSetSerializer( set_, context={"request": request} ) return Response(serializer.data, status=status.HTTP_200_OK) except exceptions.DoesNotExist: content = OaiPmhMessage.get_message_labelled( "No Set found with the given id." ) return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def patch(self, request, registry_id): """ Deactivate a given registry (Data provider) Args: request: HTTP request registry_id: ObjectId Returns: - code: 200 content: Success message - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: registry = oai_registry_api.get_by_id(registry_id) registry.is_activated = False oai_registry_api.upsert(registry) content = OaiPmhMessage.get_message_labelled( 'Registry {0} deactivated with success.'.format(registry.name)) return Response(content, status=status.HTTP_200_OK) except exceptions.DoesNotExist: content = OaiPmhMessage.get_message_labelled( 'No registry found with the given id.') return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def get(self, request): """Check if the registry is available to answer OAI-PMH requests Args: request: HTTP request Returns: - code: 200 content: Success label - code: 500 content: Internal server error """ try: base_url = request.build_absolute_uri( reverse("core_oaipmh_provider_app_server_index")) http_response = send_get_request(base_url) is_available = http_response.status_code == status.HTTP_200_OK content = OaiPmhMessage.get_message_labelled( "Registry available? : {0}.".format(is_available)) return Response(content, status=http_response.status_code) except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def sickle_list_metadata_formats(url): """Performs an Oai-Pmh listMetadataFormat request. Args: url: URL of the Data Provider. Returns: Data. Status code. """ try: sickle = _sickle_init(url) list_metadata_formats = sickle.ListMetadataFormats() serializer = sickle_serializers.MetadataFormatSerializer( list_metadata_formats, many=True) return serializer.data, status.HTTP_200_OK except NoMetadataFormat as e: # This repository does not support sets content = OaiPmhMessage.get_message_labelled("%s" % str(e)) return content, status.HTTP_204_NO_CONTENT except Exception as e: content = OaiPmhMessage.get_message_labelled( "An error occurred when attempting to get the metadata formats: %s" % str(e)) return content, status.HTTP_500_INTERNAL_SERVER_ERROR
def delete(self, request, set_id): """Delete a OaiProviderSet Args: request: HTTP request set_id: ObjectId Returns: - code: 204 content: Deletion succeed - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: set_ = oai_provider_set_api.get_by_id(set_id) oai_provider_set_api.delete(set_) return Response(status=status.HTTP_204_NO_CONTENT) except exceptions.DoesNotExist: content = OaiPmhMessage.get_message_labelled( "No Set found with the given id." ) return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def get(self, request, registry_id): """ Retrieve a Registry (Data provider) Args: request: HTTP request registry_id: ObjectId Returns: - code: 200 content: Registry - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: registry = oai_registry_api.get_by_id(registry_id) serializer = serializers.RegistrySerializer(registry) return Response(serializer.data, status=status.HTTP_200_OK) except exceptions.DoesNotExist: content = OaiPmhMessage.get_message_labelled( 'No registry found with the given id.') return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def delete(self, request, registry_id): """ Delete a Registry (Data provider) Args: request: HTTP request registry_id: ObjectId Returns: - code: 204 content: Deletion succeed - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: registry = oai_registry_api.get_by_id(registry_id) oai_registry_api.delete(registry) return Response(status=status.HTTP_204_NO_CONTENT) except exceptions.DoesNotExist: content = OaiPmhMessage.get_message_labelled('No registry found with the given id.') return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(e.message) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def delete(self, request): """Remove the mapping between a template, a metadata format and a XSLT Parameters: { "template_id": "value", "metadata_format_id": "value" } Args: request: HTTP request Returns: - code: 204 content: Deletion succeed - code: 400 content: Validation error - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: # Build serializer serializer = serializers.TemplateToMFUnMappingXSLTSerializer( data=request.data) # Validate data serializer.is_valid(True) # Get template id template_id = serializer.data.get("template_id") # Get metadata format id metadata_format_id = serializer.data.get("metadata_format_id") # Get mapping oai_xsl_template = ( oai_xsl_template_api.get_by_template_id_and_metadata_format_id( template_id, metadata_format_id)) # Delete the mapping oai_xsl_template_api.delete(oai_xsl_template) return Response(status=status.HTTP_204_NO_CONTENT) except ValidationError as validation_exception: content = OaiPmhMessage.get_message_labelled( validation_exception.detail) return Response(content, status=status.HTTP_400_BAD_REQUEST) except exceptions.DoesNotExist as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def patch(self, request, metadata_format_id): """Update a MetadataFormat Parameters: { "metadata_prefix" : "value" } Args: request: HTTP request metadata_format_id: ObjectId Returns: - code: 200 content: Success message - code: 400 content: Validation error - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: metadata_format = oai_provider_metadata_format_api.get_by_id( metadata_format_id) # Build serializer serializer = serializers.UpdateMetadataFormatSerializer( instance=metadata_format, data=request.data, context={"request": request}, ) # Validate data serializer.is_valid(True) # Save data serializer.save() content = OaiPmhMessage.get_message_labelled( "Metadata Format updated with success.") return Response(content, status=status.HTTP_200_OK) except ValidationError as validation_exception: content = OaiPmhMessage.get_message_labelled( validation_exception.detail) return Response(content, status=status.HTTP_400_BAD_REQUEST) except exceptions.DoesNotExist: content = OaiPmhMessage.get_message_labelled( "No Metadata Format found with the given id.") return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def patch(self, request, set_id): """ Update a OaiProviderSet Parameters: { "set_spec":"value", "set_name":"value", "templates_manager": ["id1", "id2"], "description":"value" } Args: request: HTTP request Returns: - code: 200 content: Success message - code: 400 content: Validation error - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: set_ = oai_provider_set_api.get_by_id(set_id) # Build serializer serializer = serializers.OaiProviderSetSerializer( instance=set_, data=request.data) # Validate data serializer.is_valid(True) # Save data serializer.save() content = OaiPmhMessage.get_message_labelled( 'Set updated with success.') return Response(content, status=status.HTTP_200_OK) except ValidationError as validation_exception: content = OaiPmhMessage.get_message_labelled( validation_exception.detail) return Response(content, status=status.HTTP_400_BAD_REQUEST) except exceptions.DoesNotExist: content = OaiPmhMessage.get_message_labelled( 'No Set found with the given id.') return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(e.message) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def post(self, request): """Map a template, a metadata format and a XSLT. Used for the transformation of the template toward the metadata format thanks to the XSLT. Parameters: { "template": "value", "oai_metadata_format": "value", "xslt": "value" } Args: request: HTTP request Returns: - code: 200 content: Success Label - code: 400 content: Validation error - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: # Build serializer serializer = serializers.TemplateToMFMappingXSLTSerializer( data=request.data) # Validate data serializer.is_valid(True) # Try to set the instance serializer.init_instance() # Save data serializer.save() content = OaiPmhMessage.get_message_labelled( "Mapping configured with success.") return Response(content, status=status.HTTP_200_OK) except ValidationError as validation_exception: content = OaiPmhMessage.get_message_labelled( validation_exception.detail) return Response(content, status=status.HTTP_400_BAD_REQUEST) except exceptions.DoesNotExist as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def patch(self, request, registry_id): """Update oai-pmh configuration for a given registry (Data provider) Parameters: { "harvest_rate" : "value", "harvest" : "True or False" } Args: request: HTTP request registry_id: ObjectId Returns: - code: 200 content: Success message - code: 400 content: Validation error - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: registry = oai_registry_api.get_by_id(registry_id) # Build serializer serializer = serializers.UpdateRegistrySerializer( instance=registry, data=request.data) # Validate data serializer.is_valid(True) # Save data serializer.save() content = OaiPmhMessage.get_message_labelled( "Registry {0} updated with success.".format(registry.name)) return Response(content, status=status.HTTP_200_OK) except ValidationError as validation_exception: content = OaiPmhMessage.get_message_labelled( validation_exception.detail) return Response(content, status=status.HTTP_400_BAD_REQUEST) except exceptions.DoesNotExist: content = OaiPmhMessage.get_message_labelled( "No registry found with the given id.") return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def test_update_registry_info_raises_exception_if_bad_sets( self, mock_get, mock_registry, mock_sets, mock_identify): """ Args: mock_get: mock_registry: mock_sets: mock_identify: Returns: """ # Arrange mock_user = create_mock_user("1", is_superuser=True) mock_request = create_mock_request(user=mock_user) mock_oai_registry = _create_mock_oai_registry() mock_get.return_value = mock_oai_registry mock_identify.return_value = [], status.HTTP_200_OK mock_registry.return_value = False mock_sets.return_value = ( OaiPmhMessage.get_message_labelled(self.error_message % "sets"), status.HTTP_500_INTERNAL_SERVER_ERROR, ) # Act + Assert with self.assertRaises( oai_pmh_exceptions.OAIAPILabelledException) as ex: oai_registry_api.update_registry_info(mock_oai_registry, request=mock_request) self.assertEqual(ex.exception.message, self.error_message % "sets") self.assertEqual(ex.exception.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR)
def test_harvest_records_returns_errors_if_not_HTTP_200_OK( self, mock_list_records): """ Args: mock_list_records: Returns: """ # Arrange resumption_token = None content = OaiPmhMessage.get_message_labelled("Error") status_code = status.HTTP_500_INTERNAL_SERVER_ERROR mock_list_records.return_value = ( Response(content, status=status_code), resumption_token, ) expected_error = [{"status_code": status_code, "error": "Error"}] registry = Mock(spec=OaiRegistry()) registry.url = "dummy_url" metadata_format = Mock(spec=OaiHarvesterMetadataFormat()) metadata_format.metadata_prefix = "oai_dummy" last_update = registry_all_sets = None # Act result = oai_registry_api._harvest_records(registry, metadata_format, last_update, registry_all_sets) # Assert self.assertEquals(result, expected_error)
def test_update_registry_info_raises_exception_if_bad_metadata_formats( self, mock_get, mock_registry, mock_metadata_formats, mock_identify, mock_sets): """ Args: mock_get: mock_registry: mock_metadata_formats: mock_identify: mock_sets: Returns: """ # Arrange mock_oai_registry = _create_mock_oai_registry() mock_get.return_value = mock_oai_registry mock_sets.return_value = [], status.HTTP_200_OK mock_identify.return_value = [], status.HTTP_200_OK mock_registry.return_value = False mock_metadata_formats.return_value = OaiPmhMessage.get_message_labelled(self.error_message % "metadataFormat"),\ status.HTTP_500_INTERNAL_SERVER_ERROR # Act + Assert with self.assertRaises( oai_pmh_exceptions.OAIAPILabelledException) as ex: oai_registry_api.update_registry_info(mock_oai_registry) self.assertEqual(ex.exception.message, self.error_message % "metadataFormat") self.assertEqual(ex.exception.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR)
def test_add_registry_by_url_raises_exception_if_bad_metadata_formats( self, mock_registry, mock_metadata_formats, mock_identify, mock_sets): """ Args: mock_registry: mock_metadata_formats: mock_identify: mock_sets: Returns: """ # Arrange mock_sets.return_value = [], status.HTTP_200_OK mock_identify.return_value = [], status.HTTP_200_OK mock_registry.return_value = False mock_metadata_formats.return_value = OaiPmhMessage.get_message_labelled(self.error_message % "metadataFormats"),\ status.HTTP_500_INTERNAL_SERVER_ERROR # Act + Assert with self.assertRaises( oai_pmh_exceptions.OAIAPILabelledException) as ex: oai_registry_api.add_registry_by_url(self.url, self.harvest_rate, self.harvest) self.assertEqual(ex.exception.message, self.error_message % "metadataFormats") self.assertEqual(ex.exception.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR)
def test_add_registry_by_url_raises_exception_if_bad_identify( self, mock_registry, mock): """ Args: mock_registry: mock: Returns: """ # Arrange mock_user = create_mock_user("1", is_superuser=True) mock_request = create_mock_request(user=mock_user) mock_registry.return_value = False mock.return_value = ( OaiPmhMessage.get_message_labelled(self.error_message % "identify"), status.HTTP_500_INTERNAL_SERVER_ERROR, ) # Act + Assert with self.assertRaises( oai_pmh_exceptions.OAIAPILabelledException) as ex: oai_registry_api.add_registry_by_url(self.url, self.harvest_rate, self.harvest, request=mock_request) self.assertEqual(ex.exception.message, self.error_message % "identify") self.assertEqual(ex.exception.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR)
def test_get_metadata_formats_as_object_raises_exception_if_not_200_OK( self, mock): """ Args: mock: Returns: """ # Arrange mock.return_value = ( OaiPmhMessage.get_message_labelled(self.error_message % "metadata formats"), status.HTTP_500_INTERNAL_SERVER_ERROR, ) # Act + Assert with self.assertRaises( oai_pmh_exceptions.OAIAPILabelledException) as ex: oai_registry_api._get_metadata_formats_as_object("dummy_url") self.assertEqual(ex.exception.message, self.error_message % "metadata formats") self.assertEqual(ex.exception.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR)
def patch(self, request): """Edit the OAI-PMH server settings Parameters: { "repository_name":"value", "repository_identifier":"value", "enable_harvesting":"True or False" } Args: request: HTTP request Returns: - code: 200 content: Success message - code: 400 content: Validation error - code: 500 content: Internal server error """ try: settings_ = oai_settings_api.get() # Build serializer serializer = serializers.SettingsSerializer(instance=settings_, data=request.data) # Validate data serializer.is_valid(True) # Save data serializer.save() content = OaiPmhMessage.get_message_labelled( "OAI-PMH Settings updated with success.") return Response(content, status=status.HTTP_200_OK) except ValidationError as validation_exception: content = OaiPmhMessage.get_message_labelled( validation_exception.detail) return Response(content, status=status.HTTP_400_BAD_REQUEST) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def post(self, request): """ Create a OaiProviderSet Parameters: { "set_spec": "value", "set_name":"value", "templates_manager": ["id1", "id2"], "description":"value" } Args: request: HTTP request Returns: - code: 201 content: Success Label - code: 400 content: Validation error - code: 500 content: Internal server error """ try: # Build serializer serializer = serializers.OaiProviderSetSerializer( data=request.data) # Validate data serializer.is_valid(True) # Save data serializer.save() content = OaiPmhMessage.get_message_labelled( 'Set added with success.') return Response(content, status=status.HTTP_201_CREATED) except ValidationError as validation_exception: content = OaiPmhMessage.get_message_labelled( validation_exception.detail) return Response(content, status=status.HTTP_400_BAD_REQUEST) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(e.message) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def post(self, request): """Create a Registry (Data provider) Parameters: { "url" : "value", "harvest_rate" : "number", "harvest" : "True or False" } Args: request: HTTP request Returns: - code: 201 content: Created Registry - code: 400 content: Validation error - code: 500 content: Internal server error """ try: # Build serializer serializer = serializers.RegistrySerializer( data=request.data, context={"request": request}) # Validate data serializer.is_valid(True) # Save data registry = serializer.save() content = OaiPmhMessage.get_message_labelled( "Registry {0} added with success.".format(registry.name)) return Response(content, status=status.HTTP_201_CREATED) except ValidationError as validation_exception: content = OaiPmhMessage.get_message_labelled( validation_exception.detail) return Response(content, status=status.HTTP_400_BAD_REQUEST) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def post(self, request): """Add a new MetadataFormat Parameters: { "metadata_prefix" : "value", "schema_url" : "URL" } Args: request: HTTP request Returns: - code: 201 content: Success Label - code: 400 content: Bad request - code: 500 content: Internal server error """ try: # Build serializer serializer = serializers.OaiProviderMetadataFormatSerializer( data=request.data, context={"request": request}) # Validate data serializer.is_valid(True) # Save data return serializer.save() except ValidationError as validation_exception: content = OaiPmhMessage.get_message_labelled( validation_exception.detail) return Response(content, status=status.HTTP_400_BAD_REQUEST) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def get(self, request, metadata_format_id): """Get a MetadataFormat Parameters: { "metadata_prefix" : "value", "schema_url" : "URL" } Args: request: HTTP request metadata_format_id: ObjectId Returns: - code: 200 content: MetadataFormat - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: metadata_format = oai_provider_metadata_format_api.get_by_id( metadata_format_id) serializer = serializers.OaiProviderMetadataFormatSerializer( metadata_format, context={"request": request}) return Response(serializer.data, status=status.HTTP_200_OK) except exceptions.DoesNotExist: content = OaiPmhMessage.get_message_labelled( "No Metadata Format found with the given id.") return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def add_template_metadata_format(metadata_prefix, template_id, request): """Add a new template metadata format. Args: metadata_prefix: Metadata Prefix. template_id: Id of the template. request: Returns: Response. """ try: template = template_api.get(template_id, request=request) version_manager = version_manager_api.get_from_version(template, request=request) xml_schema = template.content target_namespace = _get_target_namespace(xml_schema) version_number = version_manager_api.get_version_number( version_manager, template_id, request=request) schema_url = _get_simple_template_metadata_format_schema_url( version_manager.title, version_number) obj = OaiProviderMetadataFormat( metadata_prefix=metadata_prefix, schema=schema_url, xml_schema=xml_schema, is_default=False, is_template=True, metadata_namespace=target_namespace, template=template, ) upsert(obj, request=request) content = OaiPmhMessage.get_message_labelled( "Metadata format added with success.") return Response(content, status=status.HTTP_201_CREATED) except oai_pmh_exceptions.OAIAPILabelledException as e: raise e except DoesNotExist: raise oai_pmh_exceptions.OAIAPILabelledException( message="Unable to add the new metadata format. " "Impossible to retrieve the template with the " "given template", status_code=status.HTTP_404_NOT_FOUND, ) except exceptions.XMLError as e: raise oai_pmh_exceptions.OAIAPILabelledException( message="Unable to add the new metadata format.%s" % str(e), status_code=status.HTTP_400_BAD_REQUEST, ) except Exception as e: raise oai_pmh_exceptions.OAIAPILabelledException( message="Unable to add the new metadata format.%s" % str(e), status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, )
def add_metadata_format(metadata_prefix, schema_url, request): """Add a new metadata format. Args: metadata_prefix: Metadata Prefix. schema_url: URL of the schema. request: Returns: Response. """ try: # TODO: refactor send request with cookies (same code in other apps) try: session_id = request.session.session_key except: session_id = None http_response = send_get_request(schema_url, cookies={"sessionid": session_id}) if http_response.status_code == status.HTTP_200_OK: xml_schema = http_response.text target_namespace = _get_target_namespace(xml_schema) obj = OaiProviderMetadataFormat( metadata_prefix=metadata_prefix, schema=schema_url, xml_schema=xml_schema, is_default=False, metadata_namespace=target_namespace, is_template=False, ) upsert(obj, request=request) content = OaiPmhMessage.get_message_labelled( "Metadata format added with success.") return Response(content, status=status.HTTP_201_CREATED) else: raise oai_pmh_exceptions.OAIAPILabelledException( message="Unable to add the new metadata format. Impossible" " to retrieve the schema at the given URL", status_code=status.HTTP_400_BAD_REQUEST, ) except oai_pmh_exceptions.OAIAPILabelledException as e: raise e except (exceptions.XMLError, XSDError) as e: raise oai_pmh_exceptions.OAIAPILabelledException( message="Unable to add the new metadata format. %s" % str(e), status_code=status.HTTP_400_BAD_REQUEST, ) except Exception as e: raise oai_pmh_exceptions.OAIAPILabelledException( message="Unable to add the new metadata format.%s" % str(e), status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, )
def patch(self, request, registry_id): """ Harvest a given registry (Data provider) Args: request: HTTP request registry_id: ObjectId Returns: - code: 200 content: Success message - code: 404 content: Object was not found - code: 500 content: Internal server error """ try: registry = oai_registry_api.get_by_id(registry_id) all_errors = oai_registry_api.harvest_registry(registry) if len(all_errors) > 0: raise exceptions_oai.\ OAIAPISerializeLabelledException(errors=all_errors, status_code=status.HTTP_400_BAD_REQUEST) else: content = OaiPmhMessage.get_message_labelled( 'Registry {0} harvested with success.'.format( registry.name)) return Response(content, status=status.HTTP_200_OK) except exceptions.DoesNotExist as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_404_NOT_FOUND) except exceptions_oai.OAIAPIException as e: return e.response() except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def sickle_list_sets(url): """ Performs an Oai-Pmh listSet request. Args: url: URL of the Data Provider. Returns: Data. Status code. """ try: sickle = _sickle_init(url) list_sets = sickle.ListSets() serializer = sickle_serializers.SetSerializer(list_sets, many=True) return serializer.data, status.HTTP_200_OK except NoSetHierarchy as e: content = OaiPmhMessage.get_message_labelled('%s' % str(e)) return content, status.HTTP_204_NO_CONTENT except Exception as e: content = OaiPmhMessage.get_message_labelled( 'An error occurred when attempting to get the sets: %s' % str(e)) return content, status.HTTP_500_INTERNAL_SERVER_ERROR
def sickle_identify(url): """ Performs an Oai-Pmh identity request. Args: url: URL of the Data Provider. Returns: Data. Status code. """ try: sickle = _sickle_init(url) identify = sickle.Identify() serializer = sickle_serializers.IdentifySerializer(identify) return serializer.data, status.HTTP_200_OK except Exception as e: content = OaiPmhMessage.get_message_labelled('An error occurred when attempting to identify resource: %s' % e.message) return content, status.HTTP_500_INTERNAL_SERVER_ERROR
def get(self, request): """ Get all Registries (Data provider) Args: request: HTTP request Returns: - code: 200 content: List of Registries - code: 500 content: Internal server error """ try: registry = oai_registry_api.get_all() serializer = serializers.RegistrySerializer(registry, many=True) return Response(serializer.data, status=status.HTTP_200_OK) except Exception as e: content = OaiPmhMessage.get_message_labelled(e.message) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)