From 53d8ebbddcde2747b89e5eca1207434370004c3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Fri, 26 May 2017 20:25:24 +0200 Subject: [PATCH] rename empty string Space level and category to normal --- src/c3nav/editor/api.py | 2 +- .../0004_space_level_category_name.py | 36 +++++++++++++++++++ src/c3nav/mapdata/models/geometry/section.py | 26 ++++++-------- src/c3nav/mapdata/models/section.py | 16 ++++----- 4 files changed, 55 insertions(+), 25 deletions(-) create mode 100644 src/c3nav/mapdata/migrations/0004_space_level_category_name.py diff --git a/src/c3nav/editor/api.py b/src/c3nav/editor/api.py index 6f20c810..b7bb3e38 100644 --- a/src/c3nav/editor/api.py +++ b/src/c3nav/editor/api.py @@ -48,7 +48,7 @@ class EditorViewSet(ViewSet): for door in section.doors.all(): results.append(door) - add_spaces('') + add_spaces('normal') add_spaces('upper') return Response([obj.to_geojson() for obj in results]) elif space is not None: diff --git a/src/c3nav/mapdata/migrations/0004_space_level_category_name.py b/src/c3nav/mapdata/migrations/0004_space_level_category_name.py new file mode 100644 index 00000000..ba4f648b --- /dev/null +++ b/src/c3nav/mapdata/migrations/0004_space_level_category_name.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-05-26 18:18 +from __future__ import unicode_literals + +from django.db import migrations, models + + +def set_space_level_category(apps, schema_editor): + Space = apps.get_model('mapdata', 'Space') + Space.objects.filter(level='').update(level='normal') + Space.objects.filter(category='').update(category='normal') + + +class Migration(migrations.Migration): + + dependencies = [ + ('mapdata', '0003_space_outside'), + ] + + operations = [ + migrations.RemoveField( + model_name='door', + name='level', + ), + migrations.AlterField( + model_name='space', + name='category', + field=models.CharField(choices=[('normal', 'normal'), ('stairs', 'stairs'), ('escalator', 'escalator'), ('elevator', 'elevator')], default='normal', max_length=16, verbose_name='category'), + ), + migrations.AlterField( + model_name='space', + name='level', + field=models.CharField(choices=[('normal', 'normal'), ('upper', 'upper'), ('lower', 'lower')], default='normal', max_length=16, verbose_name='level'), + ), + migrations.RunPython(set_space_level_category), + ] diff --git a/src/c3nav/mapdata/models/geometry/section.py b/src/c3nav/mapdata/models/geometry/section.py index 51a9c5b9..8c65ba0c 100644 --- a/src/c3nav/mapdata/models/geometry/section.py +++ b/src/c3nav/mapdata/models/geometry/section.py @@ -30,18 +30,6 @@ class SectionGeometryMixin(GeometryMixin): return result -class LevelSectionGeometryMixin(SectionGeometryMixin): - LEVELS = ( - ('', _('normal')), - ('upper', _('upper')), - ('lower', _('lower')), - ) - level = models.CharField(verbose_name=_('level'), choices=LEVELS, default='', max_length=16) - - class Meta: - abstract = True - - class Building(SectionGeometryMixin, models.Model): """ The outline of a building on a specific level @@ -54,18 +42,24 @@ class Building(SectionGeometryMixin, models.Model): default_related_name = 'buildings' -class Space(SpecificLocation, LevelSectionGeometryMixin, models.Model): +class Space(SpecificLocation, SectionGeometryMixin, models.Model): """ An accessible space. Shouldn't overlap with spaces on same secion and level. """ + LEVELS = ( + ('normal', _('normal')), + ('upper', _('upper')), + ('lower', _('lower')), + ) CATEGORIES = ( - ('', _('normal')), + ('normal', _('normal')), ('stairs', _('stairs')), ('escalator', _('escalator')), ('elevator', _('elevator')), ) geometry = GeometryField('polygon') - category = models.CharField(verbose_name=_('category'), choices=CATEGORIES, default='', max_length=16) + level = models.CharField(verbose_name=_('level'), choices=LEVELS, default='normal', max_length=16) + category = models.CharField(verbose_name=_('category'), choices=CATEGORIES, default='normal', max_length=16) outside = models.BooleanField(default=False, verbose_name=_('is outside of building')) class Meta: @@ -92,7 +86,7 @@ class Space(SpecificLocation, LevelSectionGeometryMixin, models.Model): return color -class Door(LevelSectionGeometryMixin, models.Model): +class Door(SectionGeometryMixin, models.Model): """ A connection between two spaces """ diff --git a/src/c3nav/mapdata/models/section.py b/src/c3nav/mapdata/models/section.py index 2cd0c892..ed270205 100644 --- a/src/c3nav/mapdata/models/section.py +++ b/src/c3nav/mapdata/models/section.py @@ -73,7 +73,7 @@ class Section(SpecificLocation, EditorFormMixin, models.Model): space_levels = { 'upper': [], 'lower': [], - '': [], + 'normal': [], } for space in spaces: space_levels[space.level].append(space) @@ -83,7 +83,7 @@ class Section(SpecificLocation, EditorFormMixin, models.Model): for level, level_spaces in space_levels.items()} hole_geometries = cascaded_union(tuple(h.geometry for h in self.holes.all())) - hole_geometries = hole_geometries.intersection(space_geometries['']) + hole_geometries = hole_geometries.intersection(space_geometries['normal']) lower_spaces_by_color = {} for space in space_levels['lower']: @@ -98,14 +98,14 @@ class Section(SpecificLocation, EditorFormMixin, models.Model): # draw space background door_geometries = cascaded_union(tuple(d.geometry for d in self.doors.all())) - section_geometry = cascaded_union((space_geometries[''], building_geometries, door_geometries)) + section_geometry = cascaded_union((space_geometries['normal'], building_geometries, door_geometries)) section_geometry = section_geometry.difference(hole_geometries) section_clip = svg.register_geometry(section_geometry, defid='section', as_clip_path=True) svg.add_geometry(fill_color='#d1d1d1', clip_path=section_clip) # color in spaces spaces_by_color = {} - for space in space_levels['']: + for space in space_levels['normal']: spaces_by_color.setdefault(space.get_color(), []).append(space) spaces_by_color.pop(None, None) spaces_by_color.pop('', None) @@ -113,11 +113,11 @@ class Section(SpecificLocation, EditorFormMixin, models.Model): geometries = cascaded_union(tuple(space.geometry for space in color_spaces)) svg.add_geometry(geometries, fill_color=color) - for space in space_levels['']: + for space in space_levels['normal']: self._render_space_ground(svg, space) # calculate walls - wall_geometry = building_geometries.difference(space_geometries['']).difference(door_geometries) + wall_geometry = building_geometries.difference(space_geometries['normal']).difference(door_geometries) # draw wall shadow if effects: @@ -125,7 +125,7 @@ class Section(SpecificLocation, EditorFormMixin, models.Model): svg.add_geometry(wall_dilated_geometry, fill_color='#000000', opacity=0.1, filter='wallblur', clip_path=section_clip) - for space in space_levels['']: + for space in space_levels['normal']: self._render_space_inventory(svg, space) # draw walls @@ -133,7 +133,7 @@ class Section(SpecificLocation, EditorFormMixin, models.Model): # draw doors door_geometries = cascaded_union(tuple(d.geometry for d in self.doors.all())) - door_geometries = door_geometries.difference(space_geometries['']) + door_geometries = door_geometries.difference(space_geometries['normal']) svg.add_geometry(door_geometries, fill_color='#ffffff', stroke_color='#929292', stroke_width=0.07) # draw upper spaces