def create(self, request, *args, **kwargs): serializer = self.get_serializer_class()(data=request.data, context={ 'request': request }) serializer.is_valid(raise_exception=True) with transaction.atomic(): # Hack for back-compat: Ingest halfway synchronously, then apply changes asynchronously ingester = Ingester(serializer.validated_data['data']).as_user( request.user).ingest(apply_changes=False) ingester.job.reschedule(claim=True) nd_id = models.NormalizedData.objects.filter( raw=ingester.raw, ingest_jobs=ingester.job).order_by('-created_at').values_list( 'id', flat=True).first() async_result = ingest.delay(job_id=ingester.job.id, urgent=True) # TODO Use an actual serializer return Response( { 'id': IDObfuscator.encode_id(nd_id, models.NormalizedData), 'type': 'NormalizedData', 'attributes': { 'task': async_result.id, 'ingest_job': request.build_absolute_uri( reverse('api:ingestjob-detail', args=[IDObfuscator.encode(ingester.job)])), } }, status=status.HTTP_202_ACCEPTED)
def oai_identifier(self, work): if isinstance(work, int): share_id = IDObfuscator.encode_id(work, AbstractCreativeWork) else: share_id = IDObfuscator.encode(work) return 'oai{delim}{repository}{delim}{id}'.format( id=share_id, repository=self.REPOSITORY_IDENTIFIER, delim=self.IDENTIFER_DELIMITER)
def populate_types(data): model = apps.get_model(data['type']) data['id'] = IDObfuscator.encode_id(data['id'], model) data['type'] = model._meta.verbose_name data['types'] = [] for parent in model.mro(): if not parent._meta.proxy: break data['types'].append(parent._meta.verbose_name) return data
def create(self, request, *args, **kwargs): serializer = self.get_serializer_class()(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) with transaction.atomic(): # Hack for back-compat: Ingest halfway synchronously, then apply changes asynchronously ingester = Ingester(serializer.validated_data['data']).as_user(request.user).ingest(apply_changes=False) ingester.job.reschedule(claim=True) nd_id = models.NormalizedData.objects.filter( raw=ingester.raw, ingest_jobs=ingester.job ).order_by('-created_at').values_list('id', flat=True).first() async_result = ingest.delay(job_id=ingester.job.id, urgent=True) # TODO Use an actual serializer return Response({ 'id': IDObfuscator.encode_id(nd_id, models.NormalizedData), 'type': 'NormalizedData', 'attributes': { 'task': async_result.id, 'ingest_job': request.build_absolute_uri(reverse('api:ingestjob-detail', args=[IDObfuscator.encode(ingester.job)])), } }, status=status.HTTP_202_ACCEPTED)
def encode_id(resource_id, resource_type): return encoding.force_text( IDObfuscator.encode_id(resource_id, apps.get_model('share', resource_type)))
def post_process(self, data): return { 'id': IDObfuscator.encode_id(data['id'], models.Tag), 'type': 'tag', 'name': data['name'] }
def post_process(self, data): return { 'id': IDObfuscator.encode_id(data['id'], models.Subject), 'type': 'subject', 'name': data['name'] }
def encode_id(resource_id, resource_type): return encoding.force_text(IDObfuscator.encode_id(resource_id, apps.get_model('share', resource_type)))
def post_process(self, data): return {'id': IDObfuscator.encode_id(data['id'], models.Tag), 'type': 'tag', 'name': data['name']}
def post_process(self, data): return {'id': IDObfuscator.encode_id(data['id'], models.Subject), 'type': 'subject', 'name': data['name']}
def oai_identifier(self, work): if isinstance(work, int): share_id = IDObfuscator.encode_id(work, AbstractCreativeWork) else: share_id = IDObfuscator.encode(work) return 'oai{delim}{repository}{delim}{id}'.format(id=share_id, repository=self.REPOSITORY_IDENTIFIER, delim=self.IDENTIFER_DELIMITER)