Example #1
0
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)
Example #2
0
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)
Example #3
0
File: views.py Project: aaronr/oam
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)
Example #4
0
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)
Example #5
0
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.")
Example #6
0
File: views.py Project: aaronr/oam
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.")
Example #7
0
File: views.py Project: aaronr/oam
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)
Example #8
0
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)
Example #9
0
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)
Example #10
0
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)
Example #11
0
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)
Example #12
0
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) 
Example #13
0
File: views.py Project: aaronr/oam
 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)
Example #14
0
File: views.py Project: aaronr/oam
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)
Example #15
0
 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)
Example #16
0
File: views.py Project: aaronr/oam
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) 
Example #17
0
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) 
Example #18
0
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)
Example #19
0
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)
Example #20
0
def map_info(request, id):
    map = Map.objects.get(pk=id)
    return json_response(request, map)
Example #21
0
File: views.py Project: aaronr/oam
 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)
Example #22
0
File: views.py Project: aaronr/oam
 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)
Example #23
0
 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)
Example #24
0
 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)
Example #25
0
File: views.py Project: aaronr/oam
 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)
Example #26
0
 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)
Example #27
0
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)
Example #28
0
def map_info(request, id):
    map = Map.objects.get(pk=id)
    return json_response(request, map)