def view_registry(request): """View a registry. Args: request: Returns: """ try: registry_id = request.GET["id"] template = loader.get_template( "core_oaipmh_harvester_app/admin/registries/list/modals/view_registry_table.html" ) context = { "registry": oai_registry_api.get_by_id(registry_id), "identify": oai_identify_api.get_by_registry_id(registry_id), "metadata_formats": oai_metadata_format_api.get_all_by_registry_id(registry_id), "sets": oai_set_api.get_all_by_registry_id(registry_id), "nb_records": oai_record_api.get_count_by_registry_id(registry_id, request.user), } return HttpResponse( json.dumps({"template": template.render(context)}), content_type="application/javascript", ) except Exception as e: return HttpResponseBadRequest(escape(str(e)), content_type="application/javascript")
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, 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, context={"request": request}) 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 view_registry(request): """ View a registry. Args: request: Returns: """ try: registry_id = request.GET['id'] template = loader.\ get_template('core_oaipmh_harvester_app/admin/registries/list/modals/view_registry_table.html') context = { 'registry': oai_registry_api.get_by_id(registry_id), 'identify': oai_identify_api.get_by_registry_id(registry_id), 'metadata_formats': oai_metadata_format_api.get_all_by_registry_id(registry_id), 'sets': oai_set_api.get_all_by_registry_id(registry_id), 'nb_records': oai_record_api.get_count_by_registry_id(registry_id), } return HttpResponse(json.dumps({'template': template.render(context)}), content_type='application/javascript') except Exception, e: return HttpResponseBadRequest(e.message, content_type='application/javascript')
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 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(str(e)) return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def test_get_by_id_raises_exception_if_object_does_not_exist( self, mock_get_by_id): """ Args: mock_get_by_id: Returns: """ # Arrange mock_absent_id = ObjectId() mock_get_by_id.side_effect = exceptions.DoesNotExist("Error") # Act + Assert with self.assertRaises(exceptions.DoesNotExist): registry_api.get_by_id(mock_absent_id)
def test_get_by_id_raises_exception_if_internal_error( self, mock_get_by_id): """ Args: mock_get_by_id: Returns: """ # Arrange mock_absent_id = ObjectId() mock_get_by_id.side_effect = exceptions.ModelError("Error") # Act + Assert with self.assertRaises(exceptions.ModelError): registry_api.get_by_id(mock_absent_id)
def update_data_source_list_oaipmh(request): """Ajax method to update query data sources in data base. Args: request: Returns: """ try: id_query = request.GET.get("id_query", None) id_instance = request.GET.get("id_instance", None) added = request.GET.get("to_be_added", None) to_be_added = json.loads(added) if added is not None else False # Get query from id if id_query is not None: query = api_query.get_by_id(id_query, request.user) url_instance = request.build_absolute_uri( reverse("core_explore_oaipmh_rest_execute_query")) instance = oai_registry_api.get_by_id(id_instance) if to_be_added: # Instance have to be added in the query as a data source authentication = Authentication(type="session") data_source = DataSource( name=instance.name, url_query=url_instance, authentication=authentication, order_by_field=",".join(DATA_SORTING_FIELDS), ) data_source.query_options = {"instance_id": str(instance.id)} if "core_linked_records_app" in settings.INSTALLED_APPS: data_source.capabilities = { "url_pid": request.build_absolute_uri( reverse("core_linked_records_app_query_oaipmh")) } api_oaipmh_query.add_oaipmh_data_source( query, data_source, request.user) else: api_oaipmh_query.remove_oaipmh_data_source( query, id_instance, request.user) return HttpResponse() else: return HttpResponseBadRequest( "Error during data source selection.") except AccessControlError: return HttpResponseForbidden() except Exception as e: return HttpResponseBadRequest( "Error during data source selection: %s" % escape(str(e)))
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 delete_registry(request): """ Delete a registry. Args: request: Returns: """ try: registry = oai_registry_api.get_by_id(request.GET['id']) oai_registry_api.delete(registry) except Exception, e: return HttpResponseBadRequest(e.message, content_type='application/javascript')
def activate_registry(request): """ Activate a registry. Args: request: Returns: """ try: registry = oai_registry_api.get_by_id(request.GET['id']) registry.is_activated = True oai_registry_api.upsert(registry) except Exception, e: return HttpResponseBadRequest(e.message, content_type='application/javascript')
def delete_registry(request): """ Delete a registry. Args: request: Returns: """ try: registry = oai_registry_api.get_by_id(request.GET['id']) oai_registry_api.delete(registry) except Exception as e: return HttpResponseBadRequest(str(e), content_type='application/javascript') return HttpResponse(json.dumps({}), content_type='application/javascript')
def harvest_task(registry_id): """ Manage the harvest process of the given registry. Check if the harvest should continue. Args: registry_id: Registry id. """ try: registry = oai_registry_api.get_by_id(registry_id) # Check if the registry is activated and has to be harvested. if registry.is_activated and registry.harvest: _harvest_registry(registry) else: _stop_harvest_registry(registry) except DoesNotExist: logger.error('ERROR: Registry {0} does not exist anymore. ' 'Harvesting stopped.'.format(registry_id))
def harvest_registry(request): """ Harvest a registry. Args: request: Returns: """ try: registry = oai_registry_api.get_by_id(request.GET['id']) oai_registry_api.harvest_registry(registry) return HttpResponse(json.dumps({}), content_type='application/javascript') except Exception, e: return HttpResponseBadRequest(e.message, content_type='application/javascript')
def harvest_registry(request): """Harvest a registry. Args: request: Returns: """ try: registry = oai_registry_api.get_by_id(request.GET["id"]) oai_registry_api.harvest_registry(registry) return HttpResponse(json.dumps({}), content_type="application/javascript") except Exception as e: return HttpResponseBadRequest(escape(str(e)), content_type="application/javascript")
def update_registry(request): """ Update information of a registry. Args: request: Returns: """ try: registry = oai_registry_api.get_by_id(request.GET['id']) oai_registry_api.update_registry_info(registry) return HttpResponse(json.dumps({}), content_type='application/javascript') except Exception as e: return HttpResponseBadRequest(str(e), content_type='application/javascript')
def activate_registry(request): """Activate a registry. Args: request: Returns: """ try: registry = oai_registry_api.get_by_id(request.GET["id"]) registry.is_activated = True oai_registry_api.upsert(registry) except Exception as e: return HttpResponseBadRequest(escape(str(e)), content_type="application/javascript") return HttpResponse(json.dumps({}), content_type="application/javascript")
def test_get_by_id_return_object(self, mock_get_by_id): """ Args: mock_get_by_id: Returns: """ # Arrange mock_oai_registry = _create_mock_oai_registry() mock_get_by_id.return_value = mock_oai_registry # Act result = registry_api.get_by_id(mock_oai_registry.id) # Assert self.assertIsInstance(result, OaiRegistry)
def harvest_task(registry_id): """Manage the harvest process of the given registry. Check if the harvest should continue. Args: registry_id: Registry id. """ from core_oaipmh_harvester_app.components.oai_registry import ( api as oai_registry_api, ) try: registry = oai_registry_api.get_by_id(registry_id) # Check if the registry is activated and has to be harvested. if registry.is_activated and registry.harvest: _harvest_registry(registry) else: # Registry should not be harvested _stop_harvest_registry(registry) except DoesNotExist: logger.error(f"ERROR: Registry {registry_id} does not exist anymore. " "Harvesting stopped.")
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 update_data_source_list_oaipmh(request): """ Ajax method to update query data sources in data base. Args: request: Returns: """ try: id_query = request.GET.get('id_query', None) id_instance = request.GET.get('id_instance', None) added = request.GET.get('to_be_added', None) to_be_added = json.loads(added) if added is not None else False # Get query from id if id_query is not None: query = api_query.get_by_id(id_query) url_instance = request.build_absolute_uri(reverse("core_explore_oaipmh_rest_execute_query")) instance = oai_registry_api.get_by_id(id_instance) if to_be_added: # Instance have to be added in the query as a data source authentication = Authentication(type='session') data_source = DataSource(name=instance.name, url_query=url_instance, authentication=authentication) data_source.query_options = {'instance_id': str(instance.id)} api_query.add_data_source(query, data_source) else: # Data source have to be remove from the query data_source = api_query.get_data_source_by_name_and_url_query(query, instance.name, url_instance) api_query.remove_data_source(query, data_source) return HttpResponse() else: return HttpResponseBadRequest("Error during data source selection.") except Exception as e: return HttpResponseBadRequest("Error during data source selection: %s" % e.message)