Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions Pipfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]
psycopg2 = "*"

[packages]
django = "*"
mercantile = "*"
geojson = "*"
djangorestframework = "*"
pyyaml = "*"
drf-yasg = "*" # django-rest-framework yet-another-swagger-generator required for documentation generation
dynamic-rest = "*"

[requires]
python_version = "3"
267 changes: 267 additions & 0 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Tileserver Mapping

This is a django application whose role it is to keep track of available [Tileservers](https://github.com/Map-Data/regiontileserver),
the region which each one provides data for and route incoming traffic to the correct one.


12 changes: 0 additions & 12 deletions tileservermapping/mapping/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,6 @@
import mercantile


class Mapping(models.Model):
z = models.IntegerField(null=False)
x = models.IntegerField(null=False)
y = models.IntegerField(null=False)
land = models.IntegerField(null=False) #TODO: remodel to Forigin key to a country -> server mapping

class Meta:
indexes = [
models.Index(fields=['z', 'x', 'y']),
]


class Server(models.Model):
z = models.IntegerField(null=False)
x = models.IntegerField(null=False)
Expand Down
10 changes: 10 additions & 0 deletions tileservermapping/mapping/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from dynamic_rest import serializers

from . import models


class ServerSerializer(serializers.DynamicModelSerializer):
class Meta:
model = models.Server
fields = ["name", "x", "y", "z", "active", "scheme", "host", "url", "url_postfix"]

12 changes: 9 additions & 3 deletions tileservermapping/mapping/urls.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
from django.conf.urls import url
from django.urls import path, include, re_path
from dynamic_rest import routers

from . import views
from .views import get_server, get_cur_tiles

router = routers.DefaultRouter()
router.register(r"servers", views.ServerViewSet)

urlpatterns = [
url(r'^vector/v1/512/all/(\d+)/(\d+)/(\d+)\.([a-zA-Z]+)$', get_server, name='mapping_server'),
url(r'^cur_tiles.js$', get_cur_tiles , name='mapping_get_cur_tiles'),
path("", include(router.urls)),
re_path(r'^vector/v1/512/all/(?P<z>\d+)/(?P<x>\d+)/(?P<y>\d+)\.(?P<file_ending>[a-zA-Z]+)$', get_server, name='mapping_server'),
path(r'cur_tiles.js', get_cur_tiles , name='mapping_get_cur_tiles'),
]
22 changes: 17 additions & 5 deletions tileservermapping/mapping/views.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,27 @@
from django.http import HttpResponse
from dynamic_rest import viewsets
from django.shortcuts import render
from geojson import Polygon, Feature
import mercantile
from rest_framework.decorators import api_view
from rest_framework.response import Response

# Create your views here.
from .models import Mapping, Server
from .models import Server
from . import serializers


def get_server(request, z, x, y, format):
response = HttpResponse()
response['X-Accel-Redirect'] = Server.get_redirect_server(int(z), int(x), int(y), format)
class ServerViewSet(viewsets.DynamicModelViewSet):
"""
API endpoint that allows servers to be viewed or edited
"""
queryset = Server.objects.all()
serializer_class = serializers.ServerSerializer


@api_view(http_method_names=["GET"])
def get_server(request, z, x, y, file_ending):
response = Response()
response['X-Accel-Redirect'] = Server.get_redirect_server(int(z), int(x), int(y), file_ending)
return response


Expand Down
Loading