def layerJson(request, layerId): layer = get_object_or_404(LibraryLayer, id=layerId) if request.method in ('PUT', 'POST'): layerObject = json.loads(request.raw_post_data) if 'id' in layerObject: assert layerObject['id'] == layerId else: layerObject['id'] = layerId form = LibraryLayerMetaForm(layerObject) if form.is_valid(): updatedLayer = form.save(commit=False) keepFields = ('id', 'externalUrl', 'localCopy') for f in keepFields: setattr(updatedLayer, f, getattr(layer, f)) updatedLayer.complete = True updatedLayer.save() return jsonResponse(updatedLayer.json, raw=True) else: return jsonFormErrorsResponse(form) elif request.method == 'GET': return jsonResponse(layer.json, raw=True) else: return HttpResponseNotAllowed(('PUT', 'POST', 'GET'))
def create(self, request, *args, **kwargs): if not self.has_model(): return rc.NOT_IMPLEMENTED attrs = self.flatten_dict(request.data) try: inst = self.queryset(request).get(**attrs) return rc.DUPLICATE_ENTRY except self.model.DoesNotExist: form = LibraryLayerMetaForm(request.data, request.FILES) if form.is_valid(): form.save() inst = form.instance if request.FILES.get("localCopy"): uploaded_file = request.FILES['localCopy'] inst.localCopy.save(uploaded_file.name, ContentFile(uploaded_file.read()) ) inst.save() return inst else: return BadRequestResponse("Validation error: " + str(form.errors) ) except self.model.MultipleObjectsReturned: return rc.DUPLICATE_ENTRY