class DefaultEditUtils: def __init__(self, request): self.request = request @classmethod def from_obj(cls, obj, request): return cls(request) @property def can_access_child_base_mapdata(self): return self.request.user_permissions.can_access_base_mapdata @property def can_create(self): return self.can_access_child_base_mapdata @property def _geometry_url(self): return None @property def geometry_url(self): return self._geometry_url if self.can_access_child_base_mapdata else None class LevelChildEditUtils(DefaultEditUtils): def __init__(self, level, request): super().__init__(request) self.level = level @classmethod def from_obj(cls, obj, request): return cls(obj, request) @property def _geometry_url(self): return '/api/editor/geometries/?level=' + str(self.level.primary_level_pk) class SpaceChildEditUtils(DefaultEditUtils): def __init__(self, space, request): super().__init__(request) self.space = space @classmethod def from_obj(cls, obj, request): return cls(obj, request) @property def can_access_child_base_mapdata(self): return (self.request.user_permissions.can_access_base_mapdata or self.space.base_mapdata_accessible or self.space.pk in self.request.user_space_access) @property def _geometry_url(self): return '/api/editor/geometries/?space='+str(self.space.pk)