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")
Beispiel #2
0
    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)
Beispiel #4
0
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)
Beispiel #7
0
    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)
Beispiel #8
0
    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)
Beispiel #9
0
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)
Beispiel #11
0
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')
Beispiel #12
0
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')
Beispiel #13
0
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')
Beispiel #14
0
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))
Beispiel #15
0
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")
Beispiel #17
0
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")
Beispiel #19
0
    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)
Beispiel #20
0
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.")
Beispiel #21
0
    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)