def publish(self, request, pk): """ Dispatches a publish task. """ publisher = self.get_object() serializer = RepositoryPublishURLSerializer( data=request.data, context={'request': request} ) serializer.is_valid(raise_exception=True) repository_version = serializer.validated_data.get('repository_version') # Safe because version OR repository is enforced by serializer. if not repository_version: repository = serializer.validated_data.get('repository') repository_version = RepositoryVersion.latest(repository) result = enqueue_with_reservation( tasks.publish, [repository_version.repository, publisher], kwargs={ 'publisher_pk': publisher.pk, 'repository_version_pk': repository_version.pk } ) return platform.OperationPostponedResponse(result, request)
def sync(self, request, pk): """ <!-- User-facing documentation, rendered as html--> Trigger an asynchronous task to sync python content. The sync task will retrieve Python content from the specified `Remote` and " update the specified `Respository`, creating a new `RepositoryVersion`. """ repository = self.get_object() serializer = RepositorySyncURLSerializer( data=request.data, context={'request': request} ) serializer.is_valid(raise_exception=True) remote = serializer.validated_data.get('remote') mirror = serializer.validated_data.get('mirror') result = enqueue_with_reservation( tasks.sync, [repository, remote], kwargs={ 'remote_pk': remote.pk, 'repository_pk': repository.pk, 'mirror': mirror } ) return core_viewsets.OperationPostponedResponse(result, request)
def sync(self, request, pk): importer = self.get_object() if not importer.feed_url: # TODO(asmacdo) make sure this raises a 400 raise ValueError(_("An importer must have a 'feed_url' attribute to sync.")) async_result = tasks.sync.apply_async_with_reservation( viewsets.tags.RESOURCE_REPOSITORY_TYPE, str(importer.repository.pk), kwargs={'importer_pk': importer.pk} ) return viewsets.OperationPostponedResponse([async_result], request)
def sync(self, request, pk): """ Synchronizes a repository. The ``repository`` field has to be provided. """ remote = self.get_object() serializer = RepositorySyncURLSerializer(data=request.data, context={'request': request}) # Validate synchronously to return 400 errors. serializer.is_valid(raise_exception=True) repository = serializer.validated_data.get('repository') result = enqueue_with_reservation(tasks.synchronize, [repository, remote], kwargs={ 'remote_pk': remote.pk, 'repository_pk': repository.pk }) return core.OperationPostponedResponse(result, request)
def sync(self, request, pk): """ Dispatches a sync task. """ remote = self.get_object() serializer = RepositorySyncURLSerializer(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) repository = serializer.validated_data.get('repository') mirror = serializer.validated_data.get('mirror') result = enqueue_with_reservation(tasks.sync, [repository, remote], kwargs={ 'remote_pk': remote.pk, 'repository_pk': repository.pk, 'mirror': mirror }) return platform.OperationPostponedResponse(result, request)
def create(self, request): """ <!-- User-facing documentation, rendered as html--> Dispatches a publish task, which generates metadata that will be used by pip. """ serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) repository_version = serializer.validated_data.get( 'repository_version') # Safe because version OR repository is enforced by serializer. if not repository_version: repository = serializer.validated_data.get('repository') repository_version = RepositoryVersion.latest(repository) result = enqueue_with_reservation( tasks.publish, [repository_version.repository], kwargs={'repository_version_pk': repository_version.pk}) return core_viewsets.OperationPostponedResponse(result, request)
def sync(self, request, pk): """ Dispatches a sync task. """ repository = self.get_object() serializer = RepositorySyncURLSerializer(data=request.data, context={"request": request}) serializer.is_valid(raise_exception=True) remote = serializer.validated_data.get("remote") result = enqueue_with_reservation( tasks.synchronize, [repository, remote], kwargs={ "remote_pk": remote.pk, "repository_pk": repository.pk }, ) return core.OperationPostponedResponse(result, request)
def publish(self, request, pk): """ Publishes a repository. Either the ``repository`` or the ``repository_version`` fields can be provided but not both at the same time. """ publisher = self.get_object() serializer = RepositoryPublishURLSerializer( data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) repository_version = serializer.validated_data.get( 'repository_version') result = enqueue_with_reservation( tasks.publish, [repository_version.repository, publisher], kwargs={ 'publisher_pk': str(publisher.pk), 'repository_version_pk': str(repository_version.pk) }) return core.OperationPostponedResponse(result, request)