示例#1
0
    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()
示例#2
0
    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)
示例#6
0
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")
示例#7
0
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,
    )
示例#8
0
    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)
示例#9
0
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.")
示例#10
0
    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)
示例#11
0
    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,
            )
示例#12
0
    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)