コード例 #1
0
ファイル: views.py プロジェクト: spearous0001/SHARE
    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)
コード例 #2
0
 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)
コード例 #3
0
ファイル: util.py プロジェクト: CenterForOpenScience/SHARE
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
コード例 #4
0
ファイル: util.py プロジェクト: sheriefvt/SHARE
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
コード例 #5
0
ファイル: views.py プロジェクト: CenterForOpenScience/SHARE
    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)
コード例 #6
0
ファイル: renderers.py プロジェクト: sheriefvt/SHARE
 def encode_id(resource_id, resource_type):
     return encoding.force_text(
         IDObfuscator.encode_id(resource_id,
                                apps.get_model('share', resource_type)))
コード例 #7
0
ファイル: fetchers.py プロジェクト: spearous0001/SHARE
 def post_process(self, data):
     return {
         'id': IDObfuscator.encode_id(data['id'], models.Tag),
         'type': 'tag',
         'name': data['name']
     }
コード例 #8
0
ファイル: fetchers.py プロジェクト: spearous0001/SHARE
 def post_process(self, data):
     return {
         'id': IDObfuscator.encode_id(data['id'], models.Subject),
         'type': 'subject',
         'name': data['name']
     }
コード例 #9
0
ファイル: renderers.py プロジェクト: Stevenholloway/SHARE
 def encode_id(resource_id, resource_type):
     return encoding.force_text(IDObfuscator.encode_id(resource_id, apps.get_model('share', resource_type)))
コード例 #10
0
 def post_process(self, data):
     return {'id': IDObfuscator.encode_id(data['id'], models.Tag), 'type': 'tag', 'name': data['name']}
コード例 #11
0
 def post_process(self, data):
     return {'id': IDObfuscator.encode_id(data['id'], models.Subject), 'type': 'subject', 'name': data['name']}
コード例 #12
0
 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)