new REST API
This commit is contained in:
parent
ac29041a3c
commit
6bbac4a7ba
12 changed files with 265 additions and 205 deletions
|
@ -30,6 +30,18 @@ class GeometryMixin(EditorFormMixin):
|
|||
('geometry', format_geojson(mapping(self.geometry), round=False)),
|
||||
))
|
||||
|
||||
def serialize(self, geometry=True, **kwargs):
|
||||
result = super().serialize(geometry=geometry, **kwargs)
|
||||
if geometry:
|
||||
result.move_to_end('geometry')
|
||||
return result
|
||||
|
||||
def _serialize(self, geometry=True, **kwargs):
|
||||
result = super()._serialize(**kwargs)
|
||||
if geometry:
|
||||
result['geometry'] = format_geojson(mapping(self.geometry), round=False)
|
||||
return result
|
||||
|
||||
def get_shadow_geojson(self):
|
||||
pass
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
from collections import OrderedDict
|
||||
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
@ -7,7 +5,7 @@ from c3nav.mapdata.fields import GeometryField
|
|||
from c3nav.mapdata.models.geometry.base import GeometryMixin
|
||||
from c3nav.mapdata.models.locations import SpecificLocation
|
||||
|
||||
SECTION_MODELS = OrderedDict()
|
||||
SECTION_MODELS = []
|
||||
|
||||
|
||||
class SectionGeometryMixin(GeometryMixin):
|
||||
|
@ -16,9 +14,15 @@ class SectionGeometryMixin(GeometryMixin):
|
|||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def get_geojson_properties(self):
|
||||
def get_geojson_properties(self) -> dict:
|
||||
result = super().get_geojson_properties()
|
||||
result['section'] = self.section.id
|
||||
result['layer'] = getattr(self, 'level', 'base')
|
||||
return result
|
||||
|
||||
def _serialize(self, section=True, **kwargs):
|
||||
result = super()._serialize(**kwargs)
|
||||
if section:
|
||||
result['section'] = self.section.id
|
||||
return result
|
||||
|
||||
|
||||
|
@ -33,11 +37,6 @@ class LevelSectionGeometryMixin(SectionGeometryMixin):
|
|||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def get_geojson_properties(self):
|
||||
result = super().get_geojson_properties()
|
||||
result['level'] = self.level
|
||||
return result
|
||||
|
||||
|
||||
class Building(SectionGeometryMixin, models.Model):
|
||||
"""
|
||||
|
@ -55,7 +54,6 @@ class Space(SpecificLocation, LevelSectionGeometryMixin, models.Model):
|
|||
"""
|
||||
An accessible space. Shouldn't overlap with spaces on same secion and level.
|
||||
"""
|
||||
|
||||
CATEGORIES = (
|
||||
('', _('normal')),
|
||||
('stairs', _('stairs')),
|
||||
|
@ -63,7 +61,6 @@ class Space(SpecificLocation, LevelSectionGeometryMixin, models.Model):
|
|||
('elevator', _('elevator')),
|
||||
)
|
||||
geometry = GeometryField('polygon')
|
||||
public = models.BooleanField(verbose_name=_('public'), default=True)
|
||||
category = models.CharField(verbose_name=_('category'), choices=CATEGORIES, default='', max_length=16)
|
||||
|
||||
class Meta:
|
||||
|
@ -71,11 +68,12 @@ class Space(SpecificLocation, LevelSectionGeometryMixin, models.Model):
|
|||
verbose_name_plural = _('Spaces')
|
||||
default_related_name = 'spaces'
|
||||
|
||||
def get_geojson_properties(self):
|
||||
result = super().get_geojson_properties()
|
||||
result['category'] = self.category
|
||||
result['level'] = self.level
|
||||
result['public'] = self.public
|
||||
def _serialize(self, space=True, **kwargs):
|
||||
result = super()._serialize(**kwargs)
|
||||
if space:
|
||||
result['category'] = self.category
|
||||
result['level'] = self.level
|
||||
result['public'] = self.public
|
||||
return result
|
||||
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ from c3nav.mapdata.models.geometry.base import GeometryMixin
|
|||
from c3nav.mapdata.models.locations import SpecificLocation
|
||||
from c3nav.mapdata.utils.json import format_geojson
|
||||
|
||||
SPACE_MODELS = OrderedDict()
|
||||
SPACE_MODELS = []
|
||||
|
||||
|
||||
class SpaceGeometryMixin(GeometryMixin):
|
||||
|
@ -18,9 +18,10 @@ class SpaceGeometryMixin(GeometryMixin):
|
|||
class Meta:
|
||||
abstract = True
|
||||
|
||||
def get_geojson_properties(self):
|
||||
result = super().get_geojson_properties()
|
||||
result['space'] = self.space.id
|
||||
def _serialize(self, space=True, **kwargs):
|
||||
result = super()._serialize(**kwargs)
|
||||
if space:
|
||||
result['space'] = self.space.id
|
||||
return result
|
||||
|
||||
|
||||
|
@ -36,6 +37,11 @@ class Area(SpecificLocation, SpaceGeometryMixin, models.Model):
|
|||
verbose_name_plural = _('Areas')
|
||||
default_related_name = 'areas'
|
||||
|
||||
def _serialize(self, **kwargs):
|
||||
result = super()._serialize(**kwargs)
|
||||
result['stuffed'] = self.stuffed
|
||||
return result
|
||||
|
||||
|
||||
class Stair(SpaceGeometryMixin, models.Model):
|
||||
"""
|
||||
|
@ -65,7 +71,6 @@ class Stair(SpaceGeometryMixin, models.Model):
|
|||
('type', 'shadow'),
|
||||
('original_type', self.__class__.__name__.lower()),
|
||||
('original_id', self.id),
|
||||
('space', self.space.id),
|
||||
))),
|
||||
('geometry', format_geojson(mapping(shadow), round=False)),
|
||||
))
|
||||
|
@ -95,6 +100,19 @@ class LineObstacle(SpaceGeometryMixin, models.Model):
|
|||
verbose_name_plural = _('Line Obstacles')
|
||||
default_related_name = 'lineobstacles'
|
||||
|
||||
def serialize(self, geometry=True, **kwargs):
|
||||
result = super().serialize(geometry=geometry, **kwargs)
|
||||
if geometry:
|
||||
result.move_to_end('buffered_geometry')
|
||||
return result
|
||||
|
||||
def _serialize(self, geometry=True, **kwargs):
|
||||
result = super()._serialize(geometry=geometry, **kwargs)
|
||||
result['width'] = float(str(self.width))
|
||||
if geometry:
|
||||
result['buffered_geometry'] = format_geojson(mapping(self.buffered_geometry))
|
||||
return result
|
||||
|
||||
@property
|
||||
def buffered_geometry(self):
|
||||
return self.geometry.buffer(self.width / 2, join_style=JOIN_STYLE.mitre, cap_style=CAP_STYLE.flat)
|
||||
|
@ -106,12 +124,6 @@ class LineObstacle(SpaceGeometryMixin, models.Model):
|
|||
result['original_geometry'] = original_geometry
|
||||
return result
|
||||
|
||||
def get_geojson_properties(self):
|
||||
result = super().get_geojson_properties()
|
||||
# noinspection PyTypeChecker
|
||||
result['width'] = float(self.width)
|
||||
return result
|
||||
|
||||
|
||||
class Point(SpecificLocation, SpaceGeometryMixin, models.Model):
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue