def mirror(request, id=None): @logged_in_or_basicauth() def handle_update(request, mirror): data = simplejson.loads(request.raw_post_data) mirror.from_json(data, request.user) mirror.save() return json_response(request, mirror) if id == None and request.method == "POST": m = Mirror() return handle_update(request, m) elif id != None: m = Mirror.objects.get(pk=id) if request.method == "DELETE": m.delete() return json_response(request, "") elif request.method == "POST": return handle_update(request, m) return json_response(request, m) else: mirrors = Mirror.objects.all() if 'image' in request.GET: mirrors = mirrors.filter(image__id=request.GET['image']) data = {'mirrors': [mirror.to_json() for mirror in mirrors]} return json_response(request, data)
def license(request, id=None): @logged_in_or_basicauth() def handle_update(request, license): data = simplejson.loads(request.raw_post_data) warnings = [] if not license.id: if 'url' in data: ls = License.objects.filter(url=data['url']) if ls.count(): license = ls[0] warnings.append( "URL of license matched existing license %s; updating that license instead of creating a new license." % ls[0].id) license.from_json(data) license.save() return json_response(request, license, warnings=warnings) if id == None and request.method == "POST": l = License() return handle_update(request, l) elif id != None: l = License.objects.get(pk=id) if request.method == "DELETE": l.delete() return json_response(request, "") if request.method == "POST": return handle_update(request, l) return json_response(request, l) else: licenses = License.objects.all() data = {'licenses': [l.to_json() for l in licenses]} return json_response(request, data)
def license(request, id=None): @logged_in_or_basicauth() def handle_update(request, license): data = simplejson.loads(request.raw_post_data) warnings = [] if not license.id: if 'url' in data: ls = License.objects.filter(url=data['url']) if ls.count(): license = ls[0] warnings.append("URL of license matched existing license %s; updating that license instead of creating a new license." % ls[0].id) license.from_json(data) license.save() return json_response(request, license, warnings=warnings) if id == None and request.method == "POST": l = License() return handle_update(request, l) elif id != None: l = License.objects.get(pk=id) if request.method == "DELETE": l.delete() return json_response(request, "") if request.method == "POST": return handle_update(request, l) return json_response(request, l) else: licenses = License.objects.all() data = {'licenses': [ l.to_json() for l in licenses ] } return json_response(request, data)
def image(request, id=None): @logged_in_or_basicauth() def handle_update(request, image): data = simplejson.loads(request.raw_post_data) image.from_json(data, request.user) image.save() return json_response(request, image) if id == None and request.method == "POST": i = Image() return handle_update(request, i) elif id != None: i = Image.objects.get(pk=id) if request.method == "DELETE": i.delete() return json_response(request, "") elif request.method == "POST": return handle_update(request, i) return json_response(request, i) else: images = Image.objects.all().select_related() output = request.GET.get('output', 'simple') if 'archive' in request.GET and request.GET['archive'].lower() in ( "true", "t", "1"): images = images.filter(archive=True) else: images = images.filter(archive=False) if 'layer' in request.GET: images = images.filter(layers__id=request.GET['layer']) if 'bbox' in request.GET: left, bottom, right, top = map(float, request.GET['bbox'].split(",")) box = Polygon.from_bbox([left, bottom, right, top]) images = images.filter(bbox__intersects=box) limit = min(int(request.GET.get("limit", 1000)), 10000) start = int(request.GET.get("start", 0)) end = start + limit images = images.order_by("-id") # Instantiating full image objects for thousands of images is slow; # instead, just use .values and make our own dict here. Adding more # properties here should be done with consideration. if output == 'simple': data = { 'images': [ dict(x) for x in images[start:end].values( "id", "width", "height", "url", "bbox") ] } for i in data['images']: i['bbox'] = list(i['bbox'].extent) else: data = { 'images': [i.to_json(output=output) for i in images[start:end]] } return json_response(request, data)
def image_layer(request, image=None, layer=None): image = get_object_or_404(Image, pk=image) layer = get_object_or_404(Layer, pk=layer) if request.method == "POST": image.layers.add(layer) return json_response(request, image.to_json()) elif request.method == "DELETE": image.layers.remove(layer) return json_response(request, image.to_json()) else: raise Exception("Only POST or DELETE to this resource.")
def image(request, id=None): @logged_in_or_basicauth() def handle_update(request, image): data = simplejson.loads(request.raw_post_data) image.from_json(data, request.user) image.save() return json_response(request, image) if id == None and request.method == "POST": i = Image() return handle_update(request,i) elif id != None: i = Image.objects.get(pk=id) if request.method == "DELETE": i.delete() return json_response(request, "") elif request.method == "POST": return handle_update(request, i) return json_response(request, i) else: images = Image.objects.all().select_related() output = request.GET.get('output', 'simple') if 'archive' in request.GET and request.GET['archive'].lower() in ("true", "t", "1"): images = images.filter(archive=True) else: images = images.filter(archive=False) if 'layer' in request.GET: images = images.filter(layers__id=request.GET['layer']) if 'bbox' in request.GET: left, bottom, right, top = map(float, request.GET['bbox'].split(",")) box = Polygon.from_bbox([left, bottom, right, top]) images = images.filter(bbox__intersects=box) limit = min(int(request.GET.get("limit", 1000)), 10000) start = int(request.GET.get("start", 0)) end = start + limit images = images.order_by("-id") # Instantiating full image objects for thousands of images is slow; # instead, just use .values and make our own dict here. Adding more # properties here should be done with consideration. if output == 'simple': data = {'images': [dict(x) for x in images[start:end].values("id", "width", "height", "url", "bbox")] } for i in data['images']: i['bbox'] = list(i['bbox'].extent) else: data = {'images': [ i.to_json(output=output) for i in images[start:end] ] } return json_response(request, data)
def map_list(request): maps = Map.objects.filter(private=False) maplist = {} for obj in maps: maplist[obj.id] = obj.to_json() return json_response(request, maplist)
def layer(request, id=None): @logged_in_or_basicauth() def handle_update(request, layer): data = simplejson.loads(request.raw_post_data) warnings = [] layer.from_json(data, request.user) layer.save() return json_response(request, layer) if id == None and request.method == "POST": l = Layer() return handle_update(request, l) elif id != None and request.method == "POST": l = Layer.objects.get(pk=id) return handle_update(request, l) elif id != None: l = Layer.objects.get(pk=id) if request.method == "DELETE": i.delete() return json_response(request, "") return json_response(request, l) else: layers = Layer.objects.all() if 'q' in request.GET: for term in request.GET['q'].split(" "): layers = layers.filter(name__icontains=term) if request.GET.get('output') == "simple": layers = layers.annotate(Count('image')) data = { 'layers': [ dict(x) for x in layers.values("id", "name", "description", "image__count") ] } for l in data['layers']: l['image_count'] = l['image__count'] del l['image__count'] else: data = {'layers': [l.to_json() for l in layers]} return json_response(request, data)
def add_gcp(request, id): map = Map.objects.get(pk=id) if 'gcp' in request.GET: gcp = GCP.objects.get(pk=request.GET['gcp']) else: gcp = GCP(map=map) for field in ('lon', 'lat', 'x', 'y'): setattr(gcp, field, request.GET[field]) gcp.save() map.estimate_error() return json_response(request, map)
def handle_update(request, license): data = simplejson.loads(request.raw_post_data) warnings = [] if not license.id: if 'url' in data: ls = License.objects.filter(url=data['url']) if ls.count(): license = ls[0] warnings.append("URL of license matched existing license %s; updating that license instead of creating a new license." % ls[0].id) license.from_json(data) license.save() return json_response(request, license, warnings=warnings)
def layer(request, id=None): @logged_in_or_basicauth() def handle_update(request, layer): data = simplejson.loads(request.raw_post_data) warnings = [] layer.from_json(data, request.user) layer.save() return json_response(request, layer) if id == None and request.method == "POST": l = Layer() return handle_update(request, l) elif id != None and request.method == "POST": l = Layer.objects.get(pk=id) return handle_update(request, l) elif id != None: l = Layer.objects.get(pk=id) if request.method == "DELETE": i.delete() return json_response(request, "") return json_response(request, l) else: layers = Layer.objects.all() if 'q' in request.GET: for term in request.GET['q'].split(" "): layers = layers.filter(name__icontains=term) if request.GET.get('output') == "simple": layers = layers.annotate(Count('image')) data = {'layers': [dict(x) for x in layers.values("id", "name", "description", "image__count")] } for l in data['layers']: l['image_count'] = l['image__count'] del l['image__count'] else: data = {'layers': [ l.to_json() for l in layers ] } return json_response(request, data)
def handle_update(request, license): data = simplejson.loads(request.raw_post_data) warnings = [] if not license.id: if 'url' in data: ls = License.objects.filter(url=data['url']) if ls.count(): license = ls[0] warnings.append( "URL of license matched existing license %s; updating that license instead of creating a new license." % ls[0].id) license.from_json(data) license.save() return json_response(request, license, warnings=warnings)
def warp(request, id): map = Map.objects.get(pk=id) order = 1 map_name = os.path.basename(map.file.path) target = "%s-%s.tif" % (map_name, time.time()) os.system("%s/scripts/warpviavrt.sh %s %s %s" % (settings.BASE_PATH, map_name, target, order)) final_path = "%s/%s" % (settings.MAP_PATH, target) if os.access(final_path, os.R_OK): if map.warped: try: os.unlink(map.warped) except OSError: pass map.warped = "%s/%s" % (settings.MAP_DIRNAME, target) map.set_extent() map.save() return json_response(request, map)
def delete_gcp(request, id): gcp = GCP.objects.get(pk=request.GET['gcp']) gcp.delete() map = Map.objects.get(pk=id) map.estimate_error() return json_response(request, map)
def map_info(request, id): map = Map.objects.get(pk=id) return json_response(request, map)
def handle_update(request, layer): data = simplejson.loads(request.raw_post_data) warnings = [] layer.from_json(data, request.user) layer.save() return json_response(request, layer)
def handle_update(request, image): data = simplejson.loads(request.raw_post_data) image.from_json(data, request.user) image.save() return json_response(request, image)
def handle_update(request, mirror): data = simplejson.loads(request.raw_post_data) mirror.from_json(data, request.user) mirror.save() return json_response(request, mirror)