summaryrefslogtreecommitdiff
path: root/chimere
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-09-28 10:54:19 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-09-28 10:54:19 +0200
commit94a213cc95235f73b6d6f7fb6ff30ad4309b4ce6 (patch)
tree23c5c4c8ed7ee1dfbf74fde85bcce0d8720d0c36 /chimere
parent4a37fa206752e4816a0f9e182dba2d7db2fae54f (diff)
downloadChimère-94a213cc95235f73b6d6f7fb6ff30ad4309b4ce6.tar.bz2
Chimère-94a213cc95235f73b6d6f7fb6ff30ad4309b4ce6.zip
Refactoring
Diffstat (limited to 'chimere')
-rw-r--r--chimere/views.py193
1 files changed, 98 insertions, 95 deletions
diff --git a/chimere/views.py b/chimere/views.py
index 0a4c1f9..83b0b28 100644
--- a/chimere/views.py
+++ b/chimere/views.py
@@ -42,15 +42,9 @@ from django.utils.translation import ugettext as _
from django.views.generic import TemplateView, ListView
from chimere.actions import actions
-from chimere.models import Category, SubCategory, PropertyModel, Page,\
- Marker, Route, Polygon, SimpleArea, Area, Color, TinyUrl, RouteFile,\
- AggregatedRoute, AggregatedPolygon, PropertyModelChoice
-
-from chimere.widgets import PointChooserWidget, RouteChooserWidget, AreaWidget,\
- PolygonChooserWidget
-from chimere.forms import MarkerForm, RouteForm, ContactForm, FileForm, \
- FullFileForm, MultimediaFileFormSet, PictureFileFormSet, notifySubmission,\
- notifyStaff, AreaForm, RoutingForm, PolygonForm
+from chimere import models
+from chimere import forms
+from chimere import widgets
from chimere.route import router
from chimere.version import get_version
@@ -81,12 +75,12 @@ def get_area(area_name=""):
area_name = area_name[:-1]
if area_name:
try:
- area = Area.objects.get(urn=area_name, available=True)
+ area = models.Area.objects.get(urn=area_name, available=True)
except ObjectDoesNotExist:
pass
if not area:
try:
- area = Area.objects.get(default=True)
+ area = models.Area.objects.get(default=True)
area_name = area.urn
except ObjectDoesNotExist:
pass
@@ -183,12 +177,12 @@ def index(request, area_name=None, default_area=None, simple=False,
zoomout = None
if hasattr(settings, 'CHIMERE_ENABLE_ROUTING') and \
settings.CHIMERE_ENABLE_ROUTING:
- response_dct['itinerary_form'] = RoutingForm()
+ response_dct['itinerary_form'] = forms.RoutingForm()
response_dct['routing_transport'] = settings.CHIMERE_ROUTING_TRANSPORT
if request.GET and "current_feature" in request.GET:
item_key = request.GET['current_feature']
current_cls = None
- for cls in (Marker, Polygon, Route):
+ for cls in (models.Marker, models.Polygon, models.Route):
if item_key.startswith(cls.__name__.lower() + '-'):
current_cls = cls
break
@@ -208,11 +202,11 @@ def index(request, area_name=None, default_area=None, simple=False,
'is_map': True,
'news_visible': news_visible,
'areas_visible': settings.CHIMERE_DISPLAY_AREAS
- and Area.objects.filter(available=True).count() > 1,
+ and models.Area.objects.filter(available=True).count() > 1,
'map_layer': settings.CHIMERE_DEFAULT_MAP_LAYER,
'dynamic_categories': response_dct['dynamic_categories'],
'zoomout': zoomout,
- 'has_default_area': Area.objects.filter(default=True).count(),
+ 'has_default_area': models.Area.objects.filter(default=True).count(),
'has_search': response_dct['area'].use_search if response_dct['area']
else None,
})
@@ -250,8 +244,8 @@ def edit(request, area_name="", item_id=None, submited=False):
def get_edit_page(redirect_url, item_cls, item_form,
- multimediafile_formset=MultimediaFileFormSet,
- picturefile_formset=PictureFileFormSet):
+ multimediafile_formset=forms.MultimediaFileFormSet,
+ picturefile_formset=forms.PictureFileFormSet):
"""
Edition page
"""
@@ -261,8 +255,8 @@ def get_edit_page(redirect_url, item_cls, item_form,
return redir, None, None
if 'area_name' in response_dct:
area_name = response_dct['area_name']
- subcategories = SubCategory.getAvailable(cat_type, area_name,
- public=True)
+ subcategories = models.SubCategory.getAvailable(cat_type, area_name,
+ public=True)
listed_subcats = []
if subcategories:
for cat, subcats in subcategories:
@@ -341,7 +335,7 @@ def get_edit_page(redirect_url, item_cls, item_form,
for f in formset_picture:
f.save(item)
base_uri = get_base_uri(request)
- notifySubmission(base_uri, item)
+ forms.notifySubmission(base_uri, item)
response_dct = get_base_response(request, area_name)
return redirect(
redirect_url + '-item',
@@ -385,13 +379,13 @@ def uploadFile(request, category_id='', area_name=''):
response_dct, redir = get_base_response(request, area_name)
if redir:
return redir
- Form = FileForm if not category_id else FullFileForm
+ Form = forms.FileForm if not category_id else forms.FullFileForm
category = None
if category_id:
try:
- category = SubCategory.objects.get(pk=category_id)
+ category = models.SubCategory.objects.get(pk=category_id)
response_dct['category'] = str(category)
- except SubCategory.DoesNotExist:
+ except models.SubCategory.DoesNotExist:
pass
# If the form has been submited
if request.method == 'POST':
@@ -401,7 +395,7 @@ def uploadFile(request, category_id='', area_name=''):
raw_file = form.cleaned_data['raw_file']
name = raw_file.name.split('.')[0]
file_type = raw_file.name.split('.')[-1][0].upper()
- routefile = RouteFile(raw_file=raw_file, name=name,
+ routefile = models.RouteFile(raw_file=raw_file, name=name,
file_type=file_type)
routefile.save()
if not category_id:
@@ -417,9 +411,9 @@ def uploadFile(request, category_id='', area_name=''):
return render(
request,
'chimere/upload_file.html', response_dct)
- route = Route(name=form.cleaned_data['name'],
- route=routefile.route, associated_file=routefile,
- status='S')
+ route = models.Route(name=form.cleaned_data['name'],
+ route=routefile.route,
+ associated_file=routefile, status='S')
route.save()
route.categories.add(category)
route.save()
@@ -435,7 +429,7 @@ def uploadFile(request, category_id='', area_name=''):
def processRouteFile(request, area_name='', file_id=None):
if file_id:
try:
- route_file = RouteFile.objects.get(pk=file_id)
+ route_file = models.RouteFile.objects.get(pk=file_id)
route_file.process()
route = route_file.route
if not route:
@@ -448,9 +442,13 @@ def processRouteFile(request, area_name='', file_id=None):
else:
return HttpResponse(status=400)
-get_edit_marker = get_edit_page('chimere:editmarker', Marker, MarkerForm)
-get_edit_route = get_edit_page('chimere:editroute', Route, RouteForm)
-get_edit_polygon = get_edit_page('chimere:editpolygon', Polygon, PolygonForm)
+
+get_edit_marker = get_edit_page('chimere:editmarker', models.Marker,
+ forms.MarkerForm)
+get_edit_route = get_edit_page('chimere:editroute', models.Route,
+ forms.RouteForm)
+get_edit_polygon = get_edit_page('chimere:editpolygon', models.Polygon,
+ forms.PolygonForm)
def edit_page(get_edit, types, geom_name, widget, init_widget=True):
@@ -469,7 +467,7 @@ def edit_page(get_edit, types, geom_name, widget, init_widget=True):
return redirect(redir)
# get the "manualy" declared_fields. Ie: properties
- querys = PropertyModel.getAvailable(area_name=area_name)
+ querys = models.PropertyModel.getAvailable(area_name=area_name)
declared_fields, filtered_properties = [], []
for query in querys:
declared_fields += query.all()
@@ -510,11 +508,11 @@ def edit_page(get_edit, types, geom_name, widget, init_widget=True):
editMarker = edit_page(get_edit_marker, ['M', 'B'], 'marker',
- PointChooserWidget)
+ widgets.PointChooserWidget)
editRoute = edit_page(get_edit_route, ['R', 'B'], 'route',
- RouteChooserWidget)
+ widgets.RouteChooserWidget)
editPolygon = edit_page(get_edit_polygon, ['P'], 'polygon',
- PolygonChooserWidget)
+ widgets.PolygonChooserWidget)
def submited(request, area_name="", action=""):
@@ -552,10 +550,10 @@ def contactus(request, area_name=""):
msg = ''
# If the form has been submited
if request.method == 'POST':
- form = ContactForm(request.POST)
+ form = forms.ContactForm(request.POST)
# All validation rules pass
if form.is_valid():
- response = notifyStaff(
+ response = forms.notifyStaff(
_("Comments/request on the map"),
form.cleaned_data['content'], form.cleaned_data['email'])
if response:
@@ -565,7 +563,7 @@ def contactus(request, area_name=""):
else:
msg = _("Temporary error. Renew your message later.")
else:
- form = ContactForm()
+ form = forms.ContactForm()
response_dct, redir = get_base_response(request, area_name)
if redir:
return redir
@@ -580,7 +578,7 @@ def extraPage(request, area_name="", page_id=""):
Extra dynamic pages
"""
try:
- page = Page.objects.get(available=True, mnemonic=page_id)
+ page = models.Page.objects.get(available=True, mnemonic=page_id)
except ObjectDoesNotExist:
return redirect(reverse(settings.MAIN_INDEX))
response_dct, redir = get_base_response(request, area_name)
@@ -600,19 +598,19 @@ def getDetailUndefined(request, area_name):
def getDetail(request, area_name, key, popup=False):
- '''
+ """
Get the detail of a geographic item
- '''
- cls = Marker
+ """
+ cls = models.Marker
pk = key
if '-' in key:
geo_type, pk = key.split('-')
if geo_type == 'route':
- cls = Route
+ cls = models.Route
elif geo_type == 'aggroute':
- cls = AggregatedRoute
+ cls = models.AggregatedRoute
elif geo_type == 'polygon':
- cls = Polygon
+ cls = models.Polygon
else:
geo_type = 'marker'
try:
@@ -646,11 +644,11 @@ def getDetail(request, area_name, key, popup=False):
def getDescriptionDetail(request, area_name, category_id):
- '''
+ """
Get the description for a category
- '''
+ """
try:
- category = Category.objects.filter(id=int(category_id))[0]
+ category = models.Category.objects.filter(id=int(category_id))[0]
except (ValueError, IndexError):
return HttpResponse('no results')
response_dct, redir = get_base_response(request, area_name)
@@ -678,15 +676,15 @@ def checkDate(q):
def _getGeoObjects(area_name, category_ids, status='A', getjson=True,
item_types=('Marker', 'Route', 'Polygon'),
bounding_box=None, zoom_level=None):
- '''
+ """
Get geo objects
- '''
+ """
zoom_need_reload = None
items = []
empty = [] if not getjson else {}
subcategories = list(
- SubCategory.getAvailable(None, area_name, public=True,
- instance=True).all())
+ models.SubCategory.getAvailable(None, area_name, public=True,
+ instance=True).all())
aggregated_category_ids = []
try:
zoom_level = int(zoom_level)
@@ -712,7 +710,7 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True,
if 'Marker' in item_types:
try:
q = checkDate(Q(status__in=status, categories__in=category_ids))
- query = Marker.objects.filter(q)
+ query = models.Marker.objects.filter(q)
if bounding_box:
query = query.filter(point__contained=bounding_box)
query = query.distinct('pk').order_by('-pk')
@@ -720,7 +718,7 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True,
return empty, zoom_need_reload
if getjson:
- items += Marker.getGeoJSONs(
+ items += models.Marker.getGeoJSONs(
query, limit_to_categories=category_ids)
else:
items += list(query)
@@ -729,7 +727,7 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True,
if 'Polygon' in item_types:
try:
q = checkDate(Q(status__in=status, categories__in=category_ids))
- query = Polygon.objects.filter(q)
+ query = models.Polygon.objects.filter(q)
if bounding_box:
query = query.filter(polygon__contained=bounding_box)
query = query.distinct('pk').order_by('-pk')
@@ -737,7 +735,7 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True,
return empty, zoom_need_reload
if aggregated_category_ids:
- query = AggregatedPolygon.objects.filter(
+ query = models.AggregatedPolygon.objects.filter(
status__in=status,
subcategory__in=aggregated_category_ids).order_by(
'subcategory', '-pk')
@@ -750,7 +748,7 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True,
else:
if getjson:
current_cat, colors, idx = None, None, 0
- items += Polygon.getGeoJSONs(
+ items += models.Polygon.getGeoJSONs(
query, limit_to_categories=category_ids)
else:
items += list(query)
@@ -759,7 +757,7 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True,
if 'Route' in item_types:
# TODO: manage non aggregated and bounding box in non-aggregated
if aggregated_category_ids:
- query = AggregatedRoute.objects.filter(
+ query = models.AggregatedRoute.objects.filter(
status__in=status, subcategory__in=category_ids).order_by(
'subcategory', '-pk')
if getjson:
@@ -778,7 +776,7 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True,
if c_cat and not current_cat or current_cat != c_cat:
idx = 0
current_cat = c_cat
- colors = list(Color.objects.filter(
+ colors = list(models.Color.objects.filter(
color_theme=c_cat.color_theme))
if colors:
color = colors[idx % len(colors)].code
@@ -789,11 +787,11 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True,
else:
items += list(query)
else:
- query = Route.objects.filter(
+ query = models.Route.objects.filter(
status__in=status, categories__pk__in=category_ids)
if getjson:
current_cat, colors, idx = None, None, 0
- items += Route.getGeoJSONs(
+ items += models.Route.getGeoJSONs(
query, limit_to_categories=category_ids)
else:
items += list(query)
@@ -804,9 +802,9 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True,
def getGeoObjects(request, area_name, category_ids, status):
- '''
+ """
Get the JSON for markers and routes
- '''
+ """
if not status:
status = 'A'
status = status.split('_')
@@ -836,7 +834,7 @@ def getGeoObjects(request, area_name, category_ids, status):
def getMarker(request, area_name, pk):
- q = Marker.objects.filter(pk=pk, status='A')
+ q = models.Marker.objects.filter(pk=pk, status='A')
if not q.count():
return HttpResponse('{}')
data = q.all()[0].getGeoJSON()
@@ -854,7 +852,7 @@ def get_all_categories(request, area_name=None):
subcategories = list(area.getCategories(
'A', area_name=context_data['area_name']))
else:
- categories = SubCategory.getAvailable()
+ categories = models.SubCategory.getAvailable()
for cat, subcats in categories:
subcategories += subcats
subcats = [subcat.getJSONDict() for subcat in subcategories]
@@ -879,7 +877,7 @@ def get_available_categories(request, area_name=None, area=None, status='A',
if not area or not area.dynamic_categories:
# Categories are not updated dynamicaly when the user move the map
# so we return ALL the categories
- subcategories = SubCategory.getAvailable(
+ subcategories = models.SubCategory.getAvailable(
area_name=context_data['area_name'])
context_data['sub_categories'] = subcategories
return render(
@@ -892,7 +890,8 @@ def get_available_categories(request, area_name=None, area=None, status='A',
status = status.split('_')
current_extent = request.GET["current_extent"].replace('M', '-')\
.replace('D', '.')
- area = SimpleArea([float(pt) for pt in current_extent.split('_')])
+ area = models.SimpleArea([float(pt)
+ for pt in current_extent.split('_')])
except:
# bad extent format
return HttpResponse(default_message)
@@ -912,11 +911,11 @@ def get_available_categories(request, area_name=None, area=None, status='A',
def getCategory(request, area_name='', category_id=0):
- '''
+ """
Get the JSON for a category (mainly in order to get the description)
- '''
+ """
try:
- category = SubCategory.objects.get(pk=category_id)
+ category = models.SubCategory.objects.get(pk=category_id)
except ObjectDoesNotExist:
return HttpResponse('[]', content_type="application/json")
return HttpResponse(category.getJSON(), content_type="application/json")
@@ -928,7 +927,7 @@ def getTinyfiedUrl(request, parameters, area_name=''):
"""
data = {"urn": "", "url": "", "text": ""}
try:
- urn = TinyUrl.getUrnByParameters(parameters)
+ urn = models.TinyUrl.getUrnByParameters(parameters)
except:
return {}
response_dct, redir = get_base_response(request, area_name)
@@ -944,8 +943,8 @@ def getTinyfiedUrl(request, parameters, area_name=''):
for item in parameters.split('&'):
if 'current_feature' in item:
try:
- text = str(Marker.objects.get(id=item.split('=')[1]))
- except (IndexError, Marker.DoesNotExist):
+ text = str(models.Marker.objects.get(id=item.split('=')[1]))
+ except (IndexError, models.Marker.DoesNotExist):
pass
data["urn"] = urlquote(urn)
data["url"] = urlquote(url)
@@ -957,7 +956,7 @@ def redirectFromTinyURN(request, area_name='', tiny_urn=''):
"""
Redirect from a tiny Urn
"""
- parameters = TinyUrl.getParametersByUrn(tiny_urn)
+ parameters = models.TinyUrl.getParametersByUrn(tiny_urn)
detail = parameters.split(';')
current_item = None
@@ -981,13 +980,14 @@ class CategoryDirectoryView(ListView):
self.area_name = self.kwargs.get('area_name', None)
if self.area_name:
self.area_name = self.area_name.split('/')[0]
- area = get_object_or_404(Area, urn=self.area_name, available=True)
+ area = get_object_or_404(models.Area, urn=self.area_name,
+ available=True)
q = area.subcategories.filter(
available=True, category__available=True).order_by(
'category__order', 'category__id', 'order')
if q.count():
return q
- return SubCategory.objects.filter(
+ return models.SubCategory.objects.filter(
available=True, category__available=True).order_by(
'category__order', 'category__id', 'order')
@@ -1013,14 +1013,15 @@ class CategoryView(TemplateView):
q = None
if self.area_name:
self.area_name = self.area_name.split('/')[0]
- area = get_object_or_404(Area, urn=self.area_name, available=True)
+ area = get_object_or_404(models.Area, urn=self.area_name,
+ available=True)
q = area.subcategories.filter(available=True,
category__available=True)
if not q.count():
q = None
if not q:
- q = SubCategory.objects.filter(available=True,
- category__available=True)
+ q = models.SubCategory.objects.filter(available=True,
+ category__available=True)
self.category = None
for subcat in q:
if defaultfilters.slugify(subcat.name) == category_slug:
@@ -1092,22 +1093,22 @@ def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2,
jsondecoder.decode(jsons[0])['geometry']))
except OGRException:
return HttpResponse(_("Bad geometry"), status=500)
- cats = SubCategory.objects.filter(routing_warn=True)
+ cats = models.SubCategory.objects.filter(routing_warn=True)
message = ''
if cats.count():
st_string = '{"type":"Feature", "geometry":{ "type": "Point", '\
'"coordinates": [ %f, %f ] }, "properties":{"icon_path":"%s",'\
'"icon_width":%d, "icon_height":%d}}'
points = [(m.point, m.categories.all()[0].icon)
- for m in list(Marker.objects.filter(
+ for m in list(models.Marker.objects.filter(
status='A', categories__in=cats,
point__distance_lte=(route, D(m=15))).all())]
for pt, icon in points:
st = st_string % (pt.x, pt.y, icon.image.url, icon.image.width,
icon.image.height)
jsons.append(st)
- routes = Route.objects.filter(status='A', categories__in=cats,
- route__crosses=route)
+ routes = models.Route.objects.filter(status='A', categories__in=cats,
+ route__crosses=route)
intersect = False
for rout in routes.intersection(route):
pts = rout.intersection
@@ -1155,20 +1156,21 @@ def rss(request, area_name=''):
# User wants to follow all the new POI by category or subcategory
elif request.POST['rss_category'] == 'poi':
response_dct['category_rss_feed'] = 'category'
- response_dct['sub_categories'] = SubCategory.getAvailable()
+ response_dct['sub_categories'] = \
+ models.SubCategory.getAvailable()
return render(
request, 'chimere/feeds/rss.html', response_dct)
# User wants to follow all the new POI situated in a defined area
elif request.POST['rss_category'] == 'area':
# An unbound form
- form = AreaForm()
- area_widget = AreaWidget().render('area', None)
+ form = forms.AreaForm()
+ area_widget = widgets.AreaWidget().render('area', None)
response_dct.update({
'map_layer': settings.CHIMERE_DEFAULT_MAP_LAYER,
'extra_head': form.media,
'form': form,
'category_rss_feed': 'area',
- 'area_id': Area.getAvailable(),
+ 'area_id': models.Area.getAvailable(),
'area_widget': area_widget
})
return render(request, 'chimere/feeds/rss.html', response_dct)
@@ -1178,7 +1180,7 @@ def rss(request, area_name=''):
response_dct.update({
'error_message': error,
'category_rss_feed': '',
- 'sub_categories': SubCategory.getAvailable()})
+ 'sub_categories': models.SubCategory.getAvailable()})
return render(request, 'chimere/feeds/rss.html', response_dct)
# User has specified the category or subcategory he wants to follow =>
@@ -1229,19 +1231,19 @@ def rss(request, area_name=''):
return redirect(feeds_link)
if request.GET['rss_category'] == 'poi':
response_dct['category_rss_feed'] = 'category'
- response_dct['sub_categories'] = SubCategory.getAvailable(
+ response_dct['sub_categories'] = models.SubCategory.getAvailable(
['M', 'B'])
return render(request, 'chimere/feeds/rss.html', response_dct)
if request.GET['rss_category'] == 'area':
# An unbound form
- form = AreaForm()
+ form = forms.AreaForm()
response_dct.update({
'map_layer': settings.MAP_LAYER,
'extra_head': form.media,
'form': form,
'category_rss_feed': 'area',
- 'area_id': Area.getAvailable(),
- 'area_widget': AreaWidget().render('area', None)})
+ 'area_id': models.Area.getAvailable(),
+ 'area_widget': widgets.AreaWidget().render('area', None)})
return render(request, 'chimere/feeds/rss.html', response_dct)
# User access to the RSS tab
@@ -1254,8 +1256,9 @@ def rss(request, area_name=''):
def property_choice_list(request, area_name='', property_slug=''):
data = {}
try:
- pm = PropertyModel.objects.get(slug=property_slug, available=True)
- except PropertyModel.DoesNotExist:
+ pm = models.PropertyModel.objects.get(slug=property_slug,
+ available=True)
+ except models.PropertyModel.DoesNotExist:
return HttpResponse(json.dumps(data),
content_type="application/json")
if not request.GET or not request.GET.get('term') or \
@@ -1264,7 +1267,7 @@ def property_choice_list(request, area_name='', property_slug=''):
content_type="application/json")
fltr = {'propertymodel': pm, 'available': True,
'value__icontains': request.GET.get('term')}
- q = PropertyModelChoice.objects.filter(**fltr).order_by('value')
+ q = models.PropertyModelChoice.objects.filter(**fltr).order_by('value')
data = [{"id": p.pk, "value": p.value} for p in q.all()]
return HttpResponse(json.dumps(data),
content_type="application/json")