コード例 #1
0
def watch_registry_harvest_task():
    """Check each WATCH_REGISTRY_HARVEST_RATE seconds if new registries need
    to be harvested."""
    from core_oaipmh_harvester_app.components.oai_registry import (
        api as oai_registry_api, )

    try:
        logger.info("START watching registries.")
        registries = oai_registry_api.get_all_activated_registry()
        # We launch the background task for each registry
        for registry in registries:
            # If we need to harvest and a task doesn't already exist for this
            # registry.
            if registry.harvest and not registry.is_queued:
                harvest_task.apply_async((str(registry.id), ))
                registry.is_queued = True
                oai_registry_api.upsert(registry)
                logger.info(
                    f"Registry {registry.name} has been queued and will be "
                    f"harvested.")
        logger.info("FINISH watching registries.")
    except Exception as e:
        logger.error(
            f"ERROR : Error while watching new registries to harvest: {str(e)}"
        )
    finally:
        # Periodic call every WATCH_REGISTRY_HARVEST_RATE seconds
        watch_registry_harvest_task.apply_async(
            countdown=WATCH_REGISTRY_HARVEST_RATE)
コード例 #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)
コード例 #3
0
def watch_registry_harvest_task():
    """ Check each WATCH_REGISTRY_HARVEST_RATE seconds if new registries need to be harvested.
    """
    try:
        logger.info('START watching registries.')
        registries = oai_registry_api.get_all_activated_registry()
        # We launch the background task for each registry
        for registry in registries:
            # If we need to harvest and a task doesn't already exist for this registry.
            if registry.harvest and not registry.is_queued:
                harvest_task.apply_async((str(registry.id), ))
                registry.is_queued = True
                oai_registry_api.upsert(registry)
                logger.info(
                    'Registry {0} has been queued and will be harvested.'.
                    format(registry.name.encode("utf-8")))
        logger.info('FINISH watching registries.')
    except Exception as e:
        logger.error(
            'ERROR : Error while watching new registries to harvest: {0}'.
            format(e.message))
    finally:
        # Periodic call every WATCH_REGISTRY_HARVEST_RATE seconds
        watch_registry_harvest_task.apply_async(
            countdown=WATCH_REGISTRY_HARVEST_RATE)
コード例 #4
0
def _stop_harvest_registry(registry):
    """ Stop the harvest process for the given registry.
    Args:
        registry: Registry to stop harvest process.

    """
    try:
        registry.is_queued = False
        oai_registry_api.upsert(registry)
        logger.info('Harvesting for Registry {0} has been deactivated.'.format(registry.name))
    except Exception as e:
        logger.error('ERROR : Error while stopping the harvest process for the registry {0}: '
                     '{1}.'.format(registry.name, str(e)))
コード例 #5
0
def init_harvest():
    """ Init harvest process.
    """
    # Revoke all scheduled tasks
    _revoke_all_scheduled_tasks()

    # Init all registry is_queued to False in case of a server reboot after an issue.
    registries = oai_registry_api.get_all_activated_registry()
    for registry in registries:
        registry.is_queued = False
        oai_registry_api.upsert(registry)

    # Watch Registries
    watch_registry_harvest_task.apply_async()
コード例 #6
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')
コード例 #7
0
    def test_upsert_oai_registry_raises_exception_if_save_failed(
            self, mock_save):
        """

        Args:
            mock_save:

        Returns:

        """
        # Arrange
        mock_save.side_effect = Exception()

        # Act + Assert
        with self.assertRaises(Exception):
            registry_api.upsert(self.oai_registry)
コード例 #8
0
def deactivate_registry(request):
    """ Deactivate a registry.
    Args:
        request:

    Returns:

    """
    try:
        registry = oai_registry_api.get_by_id(request.GET['id'])
        registry.is_activated = False
        oai_registry_api.upsert(registry)
    except Exception as e:
        return HttpResponseBadRequest(str(e),
                                      content_type='application/javascript')

    return HttpResponse(json.dumps({}), content_type='application/javascript')
コード例 #9
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 as e:
        return HttpResponseBadRequest(escape(str(e)),
                                      content_type="application/javascript")

    return HttpResponse(json.dumps({}), content_type="application/javascript")
コード例 #10
0
def _stop_harvest_registry(registry):
    """Stop the harvest process for the given registry.
    Args:
        registry: Registry to stop harvest process.

    """
    from core_oaipmh_harvester_app.components.oai_registry import (
        api as oai_registry_api, )

    try:
        registry.is_queued = False
        oai_registry_api.upsert(registry)
        logger.info(
            f"Harvesting for Registry {registry.name} has been deactivated.")
    except Exception as e:
        logger.error(
            f"ERROR : Error while stopping the harvest process for the registry "
            f"{registry.name}: {str(e)}.")
コード例 #11
0
 def _save(self, form):
     # Save treatment.
     try:
         oai_registry_api.upsert(self.object)
     except Exception, e:
         form.add_error(None, e.message)
コード例 #12
0
 def update(self, instance, validated_data):
     instance.harvest_rate = validated_data.get('harvest_rate',
                                                instance.harvest_rate)
     instance.harvest = validated_data.get('harvest', instance.harvest)
     return oai_registry_api.upsert(instance)