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()
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)
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
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 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)
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
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)