def wrapper(request, *args, **kwargs): resourceid = kwargs["resourceid"] if "resourceid" in kwargs else None if user_can_edit_resources(request.user, resourceid=resourceid): return function(request, *args, **kwargs) else: raise PermissionDenied return function(request, *args, **kwargs)
def post(self, request, resourceid=None): try: indent = int(request.POST.get('indent', None)) except: indent = None try: if user_can_edit_resources(user=request.user): data = JSONDeserializer().deserialize(request.body) reader = JsonLdReader() reader.read_resource(data) if reader.errors: response = [] for value in reader.errors.itervalues(): response.append(value.message) return JSONResponse(data, indent=indent, status=400, reason=response) else: response = [] for resource in reader.resources: with transaction.atomic(): resource.save(request=request) response.append(JSONDeserializer().deserialize( self.get(request, resource.resourceinstanceid).content)) return JSONResponse(response, indent=indent) else: return JSONResponse(status=403) except Exception as e: return JSONResponse(status=500, reason=e)
def post(self, request, resourceid=None, slug=None, graphid=None): try: indent = int(request.POST.get("indent", None)) except Exception: indent = None try: if user_can_edit_resources(user=request.user): data = JSONDeserializer().deserialize(request.body) reader = JsonLdReader() if slug is not None: graphid = models.GraphModel.objects.get(slug=slug).pk reader.read_resource(data, graphid=graphid) if reader.errors: response = [] for value in reader.errors.values(): response.append(value.message) return JSONResponse({"error": response}, indent=indent, status=400) else: response = [] for resource in reader.resources: with transaction.atomic(): resource.save(request=request) response.append(JSONDeserializer().deserialize(self.get(request, resource.resourceinstanceid).content)) return JSONResponse(response, indent=indent, status=201) else: return JSONResponse(status=403) except Exception as e: if settings.DEBUG is True: exc_type, exc_value, exc_traceback = sys.exc_info() formatted = traceback.format_exception(exc_type, exc_value, exc_traceback) if len(formatted): for message in formatted: print(message) return JSONResponse({"error": "resource data could not be saved: %s" % e}, status=500, reason=e)
def put(self, request, resourceid): if user_can_edit_resources(user=request.user): data = JSONDeserializer().deserialize(request.body) #print data reader = JsonLdReader() reader.read_resource(data) else: return JSONResponse(status=500) return JSONResponse(self.get(request, resourceid))
def delete(self, request, resourceid, slug=None, graphid=None): if user_can_edit_resources(user=request.user): try: resource_instance = Resource.objects.get(pk=resourceid) resource_instance.delete() except models.ResourceInstance.DoesNotExist: return JSONResponse(status=404) else: return JSONResponse(status=500) return JSONResponse(status=200)
def put(self, request, resourceid, slug=None, graphid=None): try: indent = int(request.PUT.get("indent", None)) except Exception: indent = None if not user_can_edit_resources(user=request.user, resourceid=resourceid): return JSONResponse(status=403) else: with transaction.atomic(): try: # DELETE resource_instance = Resource.objects.get(pk=resourceid) resource_instance.delete() except models.ResourceInstance.DoesNotExist: pass try: # POST data = JSONDeserializer().deserialize(request.body) reader = JsonLdReader() if slug is not None: graphid = models.GraphModel.objects.get(slug=slug).pk reader.read_resource(data, resourceid=resourceid, graphid=graphid) if reader.errors: response = [] for value in reader.errors.values(): response.append(value.message) return JSONResponse({"error": response}, indent=indent, status=400) else: response = [] for resource in reader.resources: with transaction.atomic(): resource.save(request=request) response.append(JSONDeserializer().deserialize( self.get(request, resource.resourceinstanceid).content)) return JSONResponse(response, indent=indent, status=201) except models.ResourceInstance.DoesNotExist: return JSONResponse(status=404) except Exception as e: return JSONResponse( {"error": "resource data could not be saved"}, status=500, reason=e)
def put(self, request, resourceid): try: indent = int(request.POST.get('indent', None)) except: indent = None try: if user_can_edit_resources(user=request.user): data = JSONDeserializer().deserialize(request.body) reader = JsonLdReader() reader.read_resource(data, use_ids=True) if reader.errors: response = [] for value in reader.errors.itervalues(): response.append(value.message) return JSONResponse(data, indent=indent, status=400, reason=response) else: response = [] for resource in reader.resources: if resourceid != str(resource.pk): raise Exception( 'Resource id in the URI does not match the resource @id supplied in the document' ) old_resource = Resource.objects.get(pk=resource.pk) old_resource.load_tiles() old_tile_ids = set( [str(tile.pk) for tile in old_resource.tiles]) new_tile_ids = set([ str(tile.pk) for tile in resource.get_flattened_tiles() ]) tileids_to_delete = old_tile_ids.difference( new_tile_ids) tiles_to_delete = models.TileModel.objects.filter( pk__in=tileids_to_delete) with transaction.atomic(): tiles_to_delete.delete() resource.save(request=request) response.append(JSONDeserializer().deserialize( self.get(request, resource.resourceinstanceid).content)) return JSONResponse(response, indent=indent) else: return JSONResponse(status=403) except Exception as e: return JSONResponse(status=500, reason=e)
def put(self, request, resourceid): try: indent = int(request.PUT.get('indent', None)) except: indent = None if user_can_edit_resources(user=request.user): with transaction.atomic(): try: # DELETE resource_instance = Resource.objects.get(pk=resourceid) resource_instance.delete() except models.ResourceInstance.DoesNotExist: pass try: # POST data = JSONDeserializer().deserialize(request.body) reader = JsonLdReader() reader.read_resource(data, resourceid=resourceid) if reader.errors: response = [] for value in reader.errors.itervalues(): response.append(value.message) return JSONResponse(data, indent=indent, status=400, reason=response) else: response = [] for resource in reader.resources: with transaction.atomic(): resource.save(request=request) response.append(JSONDeserializer().deserialize( self.get(request, resource.resourceinstanceid).content)) return JSONResponse(response, indent=indent, status=201) except models.ResourceInstance.DoesNotExist: return JSONResponse(status=404) else: return JSONResponse(status=500)