Handle geodata and offline requests
This commit is contained in:
parent
984eaa68f6
commit
386ea46310
4 changed files with 1185 additions and 1 deletions
54
app/templates/app/offline.html
Normal file
54
app/templates/app/offline.html
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>GMBA Connect</title>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<!--[if lte IE 8]><script src="{% static 'app/assets/js/ie/html5shiv.js' %}"></script><![endif]-->
|
||||||
|
<!--[if lte IE 8]><link rel="stylesheet" href="{% static 'app/assets/ss/ie8.css' %}" /><![endif]-->
|
||||||
|
<!--[if lte IE 9]><link rel="stylesheet" href="{% static 'app/assets/ss/ie9.css' %}" /><![endif]-->
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.0.5/es5-shim.min.js"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link rel="stylesheet" href="{% static 'app/assets/js/leaflet/leaflet.css' %}">
|
||||||
|
<link rel="stylesheet" href="{% static 'app/assets/css/blaze.min.css' %}">
|
||||||
|
<link rel="stylesheet" href="{% static 'app/assets/css/material-icons.css' %}">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="{% static 'app/gmba-index.css' %}">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<blaze-site>
|
||||||
|
|
||||||
|
<!-- Main -->
|
||||||
|
<main>
|
||||||
|
<div class="container">
|
||||||
|
<gmba-search></gmba-search>
|
||||||
|
<noscript>
|
||||||
|
<u>This application requires JavaScript to work.</u>
|
||||||
|
</noscript>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
<h5 style="display:none"><a href="#" id="logo"><em>GMBA</em> Connect</a></h5>
|
||||||
|
|
||||||
|
</blaze-site>
|
||||||
|
|
||||||
|
<!-- Riot tags -->
|
||||||
|
<script src="{% static 'app/gmba-search.tag' %}" type="riot/tag"></script>
|
||||||
|
|
||||||
|
<!-- Scripts -->
|
||||||
|
<script src="{% static 'app/assets/js/zepto.min.js' %}"></script>
|
||||||
|
<script src="{% static 'app/assets/js/qs.min.js' %}"></script>
|
||||||
|
<script src="{% static 'app/assets/js/leaflet/leaflet.js' %}"></script>
|
||||||
|
<script src="{% static 'app/assets/js/leaflet/leaflet.ajax.min.js' %}"></script>
|
||||||
|
<script src="{% static 'app/assets/js/riot+compiler.min.js' %}"></script>
|
||||||
|
<script src="{% static 'app/assets/js/rg.min.js' %}"></script>
|
||||||
|
|
||||||
|
<script language="JavaScript">riot.mount('gmba-search')</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
25
app/views.py
25
app/views.py
|
@ -1,8 +1,10 @@
|
||||||
|
import os
|
||||||
|
|
||||||
from django.views.generic.base import TemplateView
|
from django.views.generic.base import TemplateView
|
||||||
|
from django.http import FileResponse
|
||||||
import os.path as ospath
|
import os.path as ospath
|
||||||
|
|
||||||
from os import makedirs
|
from os import makedirs
|
||||||
from shutil import move
|
|
||||||
from tempfile import gettempdir
|
from tempfile import gettempdir
|
||||||
from .formats import *
|
from .formats import *
|
||||||
|
|
||||||
|
@ -31,3 +33,24 @@ class HomePageView(TemplateView):
|
||||||
f['ready'] = ospath.isfile(get_datafile(f))
|
f['ready'] = ospath.isfile(get_datafile(f))
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class OfflinePageView(TemplateView):
|
||||||
|
|
||||||
|
template_name = "app/offline.html"
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
def send_from_file(request, path):
|
||||||
|
request_for = ''
|
||||||
|
if request.path.startswith('/geodata'):
|
||||||
|
request_for = 'geodata'
|
||||||
|
elif request.path.startswith('/data'):
|
||||||
|
request_for = 'data'
|
||||||
|
file_path = ospath.join(DATA_PATH, request_for, path)
|
||||||
|
file_to_send = open(file_path, 'rb')
|
||||||
|
response = FileResponse(file_to_send)
|
||||||
|
return response
|
||||||
|
|
1050
geodata/gmba.geojson
Normal file
1050
geodata/gmba.geojson
Normal file
File diff suppressed because one or more lines are too long
|
@ -15,7 +15,64 @@ Including another URLconf
|
||||||
"""
|
"""
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
|
from django.views.generic import TemplateView
|
||||||
|
from app.views import HomePageView, OfflinePageView, send_from_file
|
||||||
|
|
||||||
|
FILTER_QUERIES = [ 'country', 'range', 'field', 'taxon' ]
|
||||||
|
|
||||||
|
|
||||||
|
def get_paginated(query, request):
|
||||||
|
page = int(request.args.get('page', 1))
|
||||||
|
per_page = int(request.args.get('per_page', 10))
|
||||||
|
ppp = query.paginate(page, per_page, error_out=False)
|
||||||
|
filters = {
|
||||||
|
'country': [],
|
||||||
|
'range': [],
|
||||||
|
'field': [],
|
||||||
|
'taxon': [],
|
||||||
|
}
|
||||||
|
for p in ppp.items:
|
||||||
|
filters['country'].append(p.country)
|
||||||
|
for r in p.ranges:
|
||||||
|
filters['range'].append(r.name)
|
||||||
|
for r in p.research_fields:
|
||||||
|
filters['field'].append(r.name)
|
||||||
|
for r in p.research_taxa:
|
||||||
|
filters['taxon'].append(r.name)
|
||||||
|
filters = {
|
||||||
|
'country': sorted(set(filters['country'])),
|
||||||
|
'range': sorted(set(filters['range'])),
|
||||||
|
'field': sorted(set(filters['field'])),
|
||||||
|
'taxon': sorted(set(filters['taxon'])),
|
||||||
|
}
|
||||||
|
if len(query.all()) > len(ppp.items) and ppp.pages == 1:
|
||||||
|
ppp.items = query.all()
|
||||||
|
ppp.total = len(ppp.items)
|
||||||
|
return {
|
||||||
|
'items': [p.dict() for p in ppp.items],
|
||||||
|
'filters': filters,
|
||||||
|
'page': page, 'pages': ppp.pages, 'total': ppp.total,
|
||||||
|
'has_next': ppp.has_next, 'has_prev': ppp.has_prev
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', HomePageView.as_view(), name='home'),
|
path('', HomePageView.as_view(), name='home'),
|
||||||
|
path('offline', OfflinePageView.as_view(), name='offline'),
|
||||||
|
path('demo/', admin.site.urls),
|
||||||
|
path('geodata/<path:path>/', send_from_file, name='send_file'),
|
||||||
|
path('data/<path:path>', admin.site.urls),
|
||||||
|
path('reindex/', admin.site.urls),
|
||||||
|
path('progress/', admin.site.urls),
|
||||||
|
path('refresh/', admin.site.urls),
|
||||||
|
path('upload/', admin.site.urls),
|
||||||
|
path('api/taxa', admin.site.urls),
|
||||||
|
path('api/fields', admin.site.urls),
|
||||||
|
path('api/ranges', admin.site.urls),
|
||||||
|
path('api/resources', admin.site.urls),
|
||||||
|
path('api/people', admin.site.urls),
|
||||||
|
path('api/people/<int:people_id>', admin.site.urls),
|
||||||
|
path('api/search', admin.site.urls),
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue