def init():
    """ Init default metadata formats for OAI-PMH
    """
    try:
        metadata_formats = oai_provider_metadata_format_api.get_all()
        if len(metadata_formats) == 0:
            # Add dublin core metadata prefix
            schema_url = "http://www.openarchives.org/OAI/2.0/oai_dc.xsd"
            metadata_namespace = "http://www.openarchives.org/OAI/2.0/oai_dc/"
            with open(
                    finders.find(
                        join('core_oaipmh_provider_app', 'xsd',
                             'oai_dc.xsd'))) as f:
                xml_schema = f.read()
            oai_dublin_core = OaiProviderMetadataFormat(
                metadata_prefix='oai_dc',
                metadata_namespace=metadata_namespace,
                schema=schema_url,
                xml_schema=xml_schema,
                is_default=True,
                is_template=False)

            oai_provider_metadata_format_api.upsert(oai_dublin_core)
    except Exception, e:
        print('ERROR : Impossible to init the metadata formats : %s' %
              e.message)
 def test_get_all_by_metadata_format_contains_only_oai_xsl_template(
         self, mock_get_all):
     _generic_get_all_test(
         self,
         mock_get_all,
         oai_xsl_template_api.get_all_by_metadata_format(
             OaiProviderMetadataFormat()),
     )
def get_all_no_template_metadata_format():
    """ Get all OaiProviderMetadataFormat except the metadata formats based on a template.

     Returns:
         List of metadata format.

     """
    return OaiProviderMetadataFormat.get_all_no_template_metadata_format()
def get_all_by_templates(templates):
    """ Get all OaiProviderMetadataFormat used by a list of templates.

    Returns:
        List of metadata format.

    """
    return OaiProviderMetadataFormat.get_all_by_templates(templates)
def get_all():
    """ Get all OaiProviderMetadataFormat.

    Returns:
        List of OaiProviderMetadataFormat.

    """
    return OaiProviderMetadataFormat.get_all()
Example #6
0
 def mock_oai_metadata_format(version=""):
     with open(
             join(DUMP_OAI_PMH_TEST_PATH,
                  "oai_metadata_format{0}.json".format(version))) as f:
         data = f.read()
     data_json = json.loads(data)
     list_metadata_format = [
         OaiProviderMetadataFormat(**x) for x in data_json
     ]
     return list_metadata_format
    def test_get_template_ids_by_metadata_format(self, mock_get):
        # Arrange
        mock_oai_xsl_template1 = _create_mock_oai_xsl_template()

        mock_get.return_value = [mock_oai_xsl_template1]

        # Act
        result = oai_xsl_template_api.get_template_ids_by_metadata_format(OaiProviderMetadataFormat())

        # Assert
        self.assertEquals(mock_oai_xsl_template1.template.id, result[0])
    def test_update_metadata_format_serializer_invalid(self, mock_metadata_format):
        # Arrange
        mock_metadata_format.return_value = Mock(spec=OaiProviderMetadataFormat())
        # Act
        response = RequestMock. \
            do_request_patch(rest_oai_provider_metadata_format.MetadataFormatDetail.as_view(),
                             user=create_mock_user("1", is_staff=True), data=self.bad_data,
                             param=self.param)

        # Assert
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def get_all_default_metadata_format(order_by_field=None):
    """ Get all default OaiProviderMetadataFormat.

    Args:
        order_by_field: Order by field.

    Returns:
        List of metadata format.

    """
    return OaiProviderMetadataFormat.get_all_default_metadata_format(order_by_field)
def get_by_metadata_prefix(metadata_prefix):
    """ Get an OaiProviderMetadataFormat by its metadata prefix.

    Args:
        metadata_prefix: metadata_prefix of the OaiProviderMetadataFormat.

    Returns:
        OaiProviderMetadataFormat instance.

    """
    return OaiProviderMetadataFormat.get_by_metadata_prefix(metadata_prefix=metadata_prefix)
def get_all_template_metadata_format(order_by_field=None):
    """ Get all OaiProviderMetadataFormat based on a template.

    Args:
        order_by_field: Order by field.

    Returns:
        List of metadata format.

    """
    return OaiProviderMetadataFormat.get_all_template_metadata_format(order_by_field)
Example #12
0
def _create_oai_provider_metadata_format():
    """ Get an OaiProviderMetadataFormat object.

    Returns:
        OaiProviderMetadataFormat instance.

    """
    oai_provider_metadata_format = OaiProviderMetadataFormat()
    _set_oai_provider_metadata_format_fields(oai_provider_metadata_format)

    return oai_provider_metadata_format
Example #13
0
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,
        )
Example #14
0
def get_by_id(oai_provider_metadata_format_id):
    """Get an OaiProviderMetadataFormat by its id.

    Args:
        oai_provider_metadata_format_id: Id of the OaiProviderMetadataFormat.

    Returns:
        OaiProviderMetadataFormat instance.

    """
    return OaiProviderMetadataFormat.get_by_id(
        oai_metadata_format_id=oai_provider_metadata_format_id)
Example #15
0
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 test_template_to_metadata_format_mapping_xslt_impossible_temp_meta_form(self,
                                                                                mock_get_xslt,
                                                                                mock_get_template,
                                                                                mock_get_meta_form):
        # Arrange
        mock_get_xslt.return_value = Mock(spec=XslTransformation)
        mock_get_template.return_value = Mock(spec=Template)
        mock_metadata_format = OaiProviderMetadataFormat()
        # Metadata format is template
        mock_metadata_format.is_template = True
        mock_get_meta_form.return_value = mock_metadata_format

        # Act
        response = RequestMock. \
            do_request_post(rest_oai_provider_metadata_format.
                            TemplateMetadataFormatXSLT.as_view(),
                            user=create_mock_user("1", is_staff=True), data=self.data)

        # Assert
        self.assertEqual(response.data['message']['oai_metadata_format'],
                         ["Impossible to map a XSLT to a template metadata format"])
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def _set_oai_xsl_template_fields(oai_xsl_template):
    """ Set OaiXslTemplate fields.

    Returns:
        OaiXslTemplate with assigned fields.

    """
    oai_xsl_template.template = Template()
    oai_xsl_template.template.id = ObjectId()
    oai_xsl_template.xslt = XslTransformation()
    oai_xsl_template.oai_metadata_format = OaiProviderMetadataFormat()

    return oai_xsl_template
Example #18
0
def init():
    from core_oaipmh_provider_app.components.oai_provider_metadata_format import (
        api as oai_provider_metadata_format_api, )
    from core_oaipmh_provider_app.components.oai_provider_metadata_format.models import (
        OaiProviderMetadataFormat, )
    """Init default metadata formats for OAI-PMH"""
    logger.info("START oai provider metadata format discovery.")

    try:
        metadata_formats = oai_provider_metadata_format_api.get_all()
        if len(metadata_formats) == 0:
            # Add dublin core metadata prefix
            schema_url = "http://www.openarchives.org/OAI/2.0/oai_dc.xsd"
            metadata_namespace = "http://www.openarchives.org/OAI/2.0/oai_dc/"
            with open(
                    finders.find(
                        join("core_oaipmh_provider_app", "xsd",
                             "oai_dc.xsd"))) as f:
                xml_schema = f.read()
                simpledc_path = finders.find(
                    join("core_oaipmh_provider_app", "xsd",
                         "simpledc20021212.xsd"))

                # replace the simpledc schema URL with the local file version to avoid the HTTPS bug
                xml_schema = xml_schema.replace(
                    "http://dublincore.org/schemas/xmls/simpledc20021212.xsd",
                    simpledc_path,
                )

                oai_dublin_core = OaiProviderMetadataFormat(
                    metadata_prefix="oai_dc",
                    metadata_namespace=metadata_namespace,
                    schema=schema_url,
                    xml_schema=xml_schema,
                    is_default=True,
                    is_template=False,
                )

                system_api.upsert_oai_provider_metadata_format(oai_dublin_core)
    except Exception as e:
        logger.error("ERROR : Impossible to init the metadata formats: %s" %
                     str(e))

    logger.info("FINISH oai provider metadata format discovery.")
def add_metadata_format(metadata_prefix, schema_url):
    """ Add a new metadata format.
    Args:
        metadata_prefix: Metadata Prefix.
        schema_url: URL of the schema.

    Returns: Response.

    """
    try:
        http_response = send_get_request(schema_url)
        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)
            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' % e.message,
                                    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' % e.message,
                                    status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)