diff options
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 |
commit | 94a213cc95235f73b6d6f7fb6ff30ad4309b4ce6 (patch) | |
tree | 23c5c4c8ed7ee1dfbf74fde85bcce0d8720d0c36 /chimere | |
parent | 4a37fa206752e4816a0f9e182dba2d7db2fae54f (diff) | |
download | Chimère-94a213cc95235f73b6d6f7fb6ff30ad4309b4ce6.tar.bz2 Chimère-94a213cc95235f73b6d6f7fb6ff30ad4309b4ce6.zip |
Refactoring
Diffstat (limited to 'chimere')
-rw-r--r-- | chimere/views.py | 193 |
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") |