no longer needed to pass instance to some model methods
This commit is contained in:
parent
aab4230a3a
commit
ca9cfc1e14
6 changed files with 24 additions and 30 deletions
|
@ -105,7 +105,7 @@ def conditional_geojson(obj, update_cache_key_match):
|
||||||
if update_cache_key_match and not obj._affected_by_changeset:
|
if update_cache_key_match and not obj._affected_by_changeset:
|
||||||
return obj.get_geojson_key()
|
return obj.get_geojson_key()
|
||||||
|
|
||||||
result = obj.to_geojson(instance=obj)
|
result = obj.to_geojson()
|
||||||
result['properties']['changed'] = obj._affected_by_changeset
|
result['properties']['changed'] = obj._affected_by_changeset
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
|
@ -58,10 +58,10 @@ class GeometryMixin(SerializableMixin):
|
||||||
def get_geojson_key(self):
|
def get_geojson_key(self):
|
||||||
return (self.__class__.__name__.lower(), self.id)
|
return (self.__class__.__name__.lower(), self.id)
|
||||||
|
|
||||||
def to_geojson(self, instance=None) -> dict:
|
def to_geojson(self) -> dict:
|
||||||
result = {
|
result = {
|
||||||
'type': 'Feature',
|
'type': 'Feature',
|
||||||
'properties': self.get_geojson_properties(instance=instance),
|
'properties': self.get_geojson_properties(),
|
||||||
'geometry': format_geojson(smart_mapping(self.geometry), rounded=False),
|
'geometry': format_geojson(smart_mapping(self.geometry), rounded=False),
|
||||||
}
|
}
|
||||||
original_geometry = getattr(self, 'original_geometry', None)
|
original_geometry = getattr(self, 'original_geometry', None)
|
||||||
|
|
|
@ -40,12 +40,12 @@ class LevelGeometryMixin(GeometryMixin):
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
def get_geojson_properties(self, *args, instance=None, **kwargs) -> dict:
|
def get_geojson_properties(self, *args, **kwargs) -> dict:
|
||||||
result = super().get_geojson_properties(*args, **kwargs)
|
result = super().get_geojson_properties(*args, **kwargs)
|
||||||
result['level'] = self.level_id
|
result['level'] = self.level_id
|
||||||
if hasattr(self, 'get_color'):
|
if hasattr(self, 'get_color'):
|
||||||
from c3nav.mapdata.render.theme import ColorManager
|
from c3nav.mapdata.render.theme import ColorManager
|
||||||
color = self.get_color(ColorManager.for_theme(None), instance=instance)
|
color = self.get_color(ColorManager.for_theme(None))
|
||||||
if color:
|
if color:
|
||||||
result['color'] = color
|
result['color'] = color
|
||||||
if hasattr(self, 'opacity'):
|
if hasattr(self, 'opacity'):
|
||||||
|
|
|
@ -39,11 +39,11 @@ class SpaceGeometryMixin(GeometryMixin):
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_geojson_properties(self, *args, instance=None, **kwargs) -> dict:
|
def get_geojson_properties(self, *args, **kwargs) -> dict:
|
||||||
result = super().get_geojson_properties(*args, **kwargs)
|
result = super().get_geojson_properties(*args, **kwargs)
|
||||||
if hasattr(self, 'get_color'):
|
if hasattr(self, 'get_color'):
|
||||||
from c3nav.mapdata.render.theme import ColorManager
|
from c3nav.mapdata.render.theme import ColorManager
|
||||||
color = self.get_color(ColorManager.for_theme(None), instance=instance)
|
color = self.get_color(ColorManager.for_theme(None))
|
||||||
if color:
|
if color:
|
||||||
result['color'] = color
|
result['color'] = color
|
||||||
if hasattr(self, 'opacity'):
|
if hasattr(self, 'opacity'):
|
||||||
|
@ -226,10 +226,10 @@ class Obstacle(SpaceGeometryMixin, models.Model):
|
||||||
default_related_name = 'obstacles'
|
default_related_name = 'obstacles'
|
||||||
ordering = ('altitude', 'height')
|
ordering = ('altitude', 'height')
|
||||||
|
|
||||||
def get_geojson_properties(self, *args, instance=None, **kwargs) -> dict:
|
def get_geojson_properties(self, *args, **kwargs) -> dict:
|
||||||
result = super().get_geojson_properties(*args, **kwargs)
|
result = super().get_geojson_properties(*args, **kwargs)
|
||||||
from c3nav.mapdata.render.theme import ColorManager
|
from c3nav.mapdata.render.theme import ColorManager
|
||||||
color = self.get_color(ColorManager.for_theme(None), instance=instance)
|
color = self.get_color(ColorManager.for_theme(None))
|
||||||
if color:
|
if color:
|
||||||
result['color'] = color
|
result['color'] = color
|
||||||
return result
|
return result
|
||||||
|
@ -242,12 +242,10 @@ class Obstacle(SpaceGeometryMixin, models.Model):
|
||||||
result['color'] = self.get_color(ColorManager.for_theme(None))
|
result['color'] = self.get_color(ColorManager.for_theme(None))
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_color(self, color_manager: 'ThemeColorManager', instance=None):
|
def get_color(self, color_manager: 'ThemeColorManager'):
|
||||||
if instance is None:
|
|
||||||
instance = self
|
|
||||||
return (
|
return (
|
||||||
color_manager.obstaclegroup_fill_color(instance.group)
|
color_manager.obstaclegroup_fill_color(self.group)
|
||||||
if instance.group is not None
|
if self.group is not None
|
||||||
else color_manager.obstacles_default_fill
|
else color_manager.obstacles_default_fill
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -270,10 +268,10 @@ class LineObstacle(SpaceGeometryMixin, models.Model):
|
||||||
default_related_name = 'lineobstacles'
|
default_related_name = 'lineobstacles'
|
||||||
ordering = ('altitude', 'height')
|
ordering = ('altitude', 'height')
|
||||||
|
|
||||||
def get_geojson_properties(self, *args, instance=None, **kwargs) -> dict:
|
def get_geojson_properties(self, *args, **kwargs) -> dict:
|
||||||
result = super().get_geojson_properties(*args, **kwargs)
|
result = super().get_geojson_properties(*args, **kwargs)
|
||||||
from c3nav.mapdata.render.theme import ColorManager
|
from c3nav.mapdata.render.theme import ColorManager
|
||||||
color = self.get_color(ColorManager.for_theme(None), instance=instance)
|
color = self.get_color(ColorManager.for_theme(None))
|
||||||
if color:
|
if color:
|
||||||
result['color'] = color
|
result['color'] = color
|
||||||
return result
|
return result
|
||||||
|
@ -289,13 +287,11 @@ class LineObstacle(SpaceGeometryMixin, models.Model):
|
||||||
result['buffered_geometry'] = format_geojson(mapping(self.buffered_geometry))
|
result['buffered_geometry'] = format_geojson(mapping(self.buffered_geometry))
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_color(self, color_manager: 'ThemeColorManager', instance=None):
|
def get_color(self, color_manager: 'ThemeColorManager'):
|
||||||
if instance is None:
|
|
||||||
instance = self
|
|
||||||
# TODO: should line obstacles use border color?
|
# TODO: should line obstacles use border color?
|
||||||
return (
|
return (
|
||||||
color_manager.obstaclegroup_fill_color(instance.group)
|
color_manager.obstaclegroup_fill_color(self.group)
|
||||||
if instance.group is not None
|
if self.group is not None
|
||||||
else color_manager.obstacles_default_fill
|
else color_manager.obstacles_default_fill
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ class GraphEdge(AccessRestrictionMixin, models.Model):
|
||||||
default_related_name = 'graphedges'
|
default_related_name = 'graphedges'
|
||||||
unique_together = (('from_node', 'to_node'), )
|
unique_together = (('from_node', 'to_node'), )
|
||||||
|
|
||||||
def to_geojson(self, instance=None) -> dict:
|
def to_geojson(self) -> dict:
|
||||||
result = {
|
result = {
|
||||||
'type': 'Feature',
|
'type': 'Feature',
|
||||||
'properties': {
|
'properties': {
|
||||||
|
|
|
@ -75,10 +75,10 @@ class LocationSlug(SerializableMixin, models.Model):
|
||||||
|
|
||||||
objects = LocationSlugManager()
|
objects = LocationSlugManager()
|
||||||
|
|
||||||
def get_child(self, instance=None):
|
def get_child(self):
|
||||||
for model in get_submodels(Location)+[LocationRedirect]:
|
for model in get_submodels(Location)+[LocationRedirect]:
|
||||||
with suppress(AttributeError):
|
with suppress(AttributeError):
|
||||||
return getattr(instance or self, model._meta.default_related_name)
|
return getattr(self, model._meta.default_related_name)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_slug(self):
|
def get_slug(self):
|
||||||
|
@ -159,16 +159,14 @@ class Location(LocationSlug, AccessRestrictionMixin, TitledMixin, models.Model):
|
||||||
def grid_square(self):
|
def grid_square(self):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_color(self, color_manager: 'ThemeColorManager', instance=None) -> str | None:
|
def get_color(self, color_manager: 'ThemeColorManager') -> str | None:
|
||||||
# don't filter in the query here so prefetch_related works
|
# don't filter in the query here so prefetch_related works
|
||||||
result = self.get_color_sorted(color_manager, instance)
|
result = self.get_color_sorted(color_manager)
|
||||||
return None if result is None else result[1]
|
return None if result is None else result[1]
|
||||||
|
|
||||||
def get_color_sorted(self, color_manager: 'ThemeColorManager', instance=None) -> tuple[tuple, str] | None:
|
def get_color_sorted(self, color_manager: 'ThemeColorManager') -> tuple[tuple, str] | None:
|
||||||
# don't filter in the query here so prefetch_related works
|
# don't filter in the query here so prefetch_related works
|
||||||
if instance is None:
|
for group in self.groups.all():
|
||||||
instance = self
|
|
||||||
for group in instance.groups.all():
|
|
||||||
color = color_manager.locationgroup_fill_color(group)
|
color = color_manager.locationgroup_fill_color(group)
|
||||||
if color and getattr(group.category, 'allow_'+self.__class__._meta.default_related_name):
|
if color and getattr(group.category, 'allow_'+self.__class__._meta.default_related_name):
|
||||||
return (0, group.category.priority, group.hierarchy, group.priority), color
|
return (0, group.category.priority, group.hierarchy, group.priority), color
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue