def test_get_raises_exception_if_internal_error(self, mock_get): # Arrange mock_get.side_effect = exceptions.ModelError("Error") # Act + Assert with self.assertRaises(exceptions.ModelError): settings_api.get()
def test_get_raises_exception_if_object_does_not_exist(self, mock_get): # Arrange mock_get.side_effect = exceptions.DoesNotExist("Error") # Act + Assert with self.assertRaises(exceptions.DoesNotExist): settings_api.get()
def get(self, request, *args, **kwargs): try: # Check if the server is enabled for providing information. information = oai_settings_api.get() if information and not information.enable_harvesting: return HttpResponseNotFound( '<h1>OAI-PMH not available for harvesting</h1>') # Get verb self.oai_verb = request.GET.get('verb', None) self.request = request # Check if the verb and arguments are illegal. CheckOaiPmhRequest.check_bad_argument(self.oai_verb, request.GET) # Get arguments. self.metadata_prefix = request.GET.get('metadataPrefix', None) self.set = request.GET.get('set', None) self.From = request.GET.get('from', None) self.until = request.GET.get('until', None) self.identifier = request.GET.get('identifier', None) self.resumption_token = request.GET.get('resumptionToken', None) # Verb processing. if self.oai_verb == 'Identify': return self.identify() elif self.oai_verb == 'GetRecord': return self.get_record() elif self.oai_verb == 'ListSets': return self.list_sets() elif self.oai_verb == 'ListIdentifiers': return self.list_identifiers() elif self.oai_verb == 'ListMetadataFormats': return self.list_metadata_formats() elif self.oai_verb == 'ListRecords': return self.list_records() except oai_provider_exceptions.OAIExceptions, e: return self.errors(e.errors)
def identify(self): """ Response to identify request. Returns: XML type response. """ from core_oaipmh_provider_app import settings # Template name self.template_name = 'core_oaipmh_provider_app/user/xml/identify.html' # Get settings information from database information = oai_settings_api.get() # Fill the identify response identify_data = { 'name': information.repository_name, 'protocol_version': settings.OAI_PROTOCOL_VERSION, 'admins': (email for name, email in settings.OAI_ADMINS), 'earliest_date': self._get_earliest_date(), 'deleted': settings.OAI_DELETED_RECORD, 'granularity': settings.OAI_GRANULARITY, 'identifier_scheme': settings.OAI_SCHEME, 'repository_identifier': information.repository_identifier, 'identifier_delimiter': settings.OAI_DELIMITER, 'sample_identifier': settings.OAI_SAMPLE_IDENTIFIER } return self.render_to_response(identify_data)
def identify(self): """Response to identify request. Returns: XML type response. """ from core_oaipmh_provider_app import settings # Template name self.template_name = "core_oaipmh_provider_app/user/xml/identify.html" # Get settings information from database information = oai_settings_api.get() # Fill the identify response identify_data = { "name": information.repository_name, "protocol_version": settings.OAI_PROTOCOL_VERSION, "admins": (email for name, email in settings.OAI_ADMINS), "earliest_date": self._get_earliest_date(), "deleted": settings.OAI_DELETED_RECORD, "granularity": settings.OAI_GRANULARITY, "identifier_scheme": settings.OAI_SCHEME, "repository_identifier": information.repository_identifier, "identifier_delimiter": settings.OAI_DELIMITER, "sample_identifier": settings.OAI_SAMPLE_IDENTIFIER, } return self.render_to_response(identify_data)
def insert_data_task(): """Insert XML data into OAI Data to allow for harvesting.""" logger.info("START OAI Data discovery...") # Exit early if harvesting is disable oai_settings = oai_settings_api.get() if not oai_settings.enable_harvesting: logger.info("Harvesting OFF. Exiting discovery...") return try: # Retrieve the Data ids in OAI Data oai_data = oai_data_api.get_all() oai_data_ids = oai_data.only("data").to_json() registered_data_id = [ data["data"]["$oid"] for data in json.loads(oai_data_ids) ] # Retrieve all data not registered in OAI and insert them in OAI data data = data_system_api.get_all_except(registered_data_id) logger.debug("XML Data retrieved.") for document in data: oai_data_api.upsert_from_data(document, force_update=False) logger.debug("OAI Data inserted.") except Exception as e: logger.error("Impossible to init the OAI-PMH data: %s" % str(e)) logger.info("OAI Data discovery done")
def identity_view(request): assets = { "js": [ { "path": "core_oaipmh_provider_app/admin/js/registry/identity/check_registry.js", "is_raw": False, }, EditObjectModalView.get_modal_js_path(), ], "css": [ "core_oaipmh_provider_app/admin/css/registry/identity/table_info.css" ], } modals = [EditObjectModalView.get_modal_html_path()] info = oai_settings_api.get() data_provider = { "id": info.id, "name": info.repository_name, "baseURL": request.build_absolute_uri( reverse("core_oaipmh_provider_app_server_index")), "protocol_version": settings.OAI_PROTOCOL_VERSION, "admins": (email for name, email in settings.OAI_ADMINS), "deleted": settings.OAI_DELETED_RECORD, "granularity": settings.OAI_GRANULARITY, "identifier_scheme": settings.OAI_SCHEME, "repository_identifier": info.repository_identifier, "identifier_delimiter": settings.OAI_DELIMITER, "sample_identifier": settings.OAI_SAMPLE_IDENTIFIER, "enable_harvesting": info.enable_harvesting, } context = { "data_provider": data_provider, "object_name": info.repository_name } return admin_render( request, "core_oaipmh_provider_app/admin/registry/identity.html", assets=assets, context=context, modals=modals, )
def test_get_return_object(self, mock_get): # Arrange mock_oai_settings = _create_mock_oai_settings() mock_get.return_value = mock_oai_settings # Act result = settings_api.get() # Assert self.assertIsInstance(result, OaiSettings)
def init(): """Init settings for the OAI-PMH feature. Set the name, identifier and the harvesting information """ logger.info("START oai settings discovery.") try: # Get OAI-PMH settings information about this server oai_settings_api.get() except exceptions.DoesNotExist: oai_settings = OaiSettings( repository_name=settings.OAI_NAME, repository_identifier=settings.OAI_REPO_IDENTIFIER, enable_harvesting=settings.OAI_ENABLE_HARVESTING, ) oai_settings_api.upsert(oai_settings) except Exception as e: logger.error("Impossible to init the settings: %s" % str(e)) logger.info("FINISH oai settings discovery.")
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 get(self, request, *args, **kwargs): try: # Check if the server is enabled for providing information. information = oai_settings_api.get() if information and not information.enable_harvesting: return HttpResponseNotFound( "<h1>OAI-PMH not available for harvesting</h1>") # Get verb self.oai_verb = request.GET.get("verb", None) self.request = request # Check if the verb and arguments are illegal. request_checker.check_bad_argument(self.oai_verb, request.GET) # Get arguments. self.metadata_prefix = request.GET.get("metadataPrefix", None) self.set = request.GET.get("set", None) self.from_date = request.GET.get("from", None) self.until_date = request.GET.get("until", None) self.identifier = request.GET.get("identifier", None) self.resumption_token = request.GET.get("resumptionToken", None) # Verb processing. if self.oai_verb == "Identify": return self.identify() elif self.oai_verb == "GetRecord": return self.get_record() elif self.oai_verb == "ListSets": return self.list_sets() elif self.oai_verb == "ListIdentifiers": return self.list_identifiers() elif self.oai_verb == "ListMetadataFormats": return self.list_metadata_formats() elif self.oai_verb == "ListRecords": return self.list_records() except oai_provider_exceptions.OAIExceptions as e: return self.errors(e.errors) except oai_provider_exceptions.OAIException as e: return self.error(e) except Exception as e: return HttpResponse( {"content": escape(str(e))}, status=status.HTTP_500_INTERNAL_SERVER_ERROR, )
def get(self, request): """Return the OAI-PMH server settings Args: request: HTTP request Returns: - code: 200 content: List of Registries - code: 500 content: Internal server error """ try: settings_ = oai_settings_api.get() serializer = serializers.SettingsSerializer(settings_) return Response(serializer.data, status=status.HTTP_200_OK) except Exception as e: content = OaiPmhMessage.get_message_labelled(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)