class TempResource(Resource): class Meta: resource_name = 'temp_resource' object_class = temp_resource.delay authorization = Authorization() allowed_methods = ['post', 'get'] always_return_data = True def get_resource_uri(self, bundle_or_obj): """ We use the celery task id in the uri """ kwargs = { 'resource_name': self._meta.resource_name, } if isinstance(bundle_or_obj, Bundle): kwargs['pk'] = bundle_or_obj.obj.task_id else: kwargs['pk'] = bundle_or_obj.task_id if self._meta.api_name is not None: kwargs['api_name'] = self._meta.api_name return self._build_reverse_url("api_dispatch_detail", kwargs=kwargs) def obj_get_list(self, request=None, **kwargs): # Filtering disabled for brevity... return self.get_object_list(request) def obj_get(self, request=None, **kwargs): result = temp_resource.AsyncResult(kwargs['pk']) return result def obj_create(self, bundle, request=None, **kwargs): bundle.obj = temp_resource.delay(kwargs['foo'], kwargs['bar']) return bundle def full_dehydrate(self, bundle): """ Add fields from temp_resource during dehydration """ temp_resource_info = bundle.obj.get() for field, value in temp_resource_info.items(): bundle.data[field] = value return super(TempResource, self).full_dehydrate(bundle)