Skip to content

Commit 4635e1b

Browse files
authored
Merge pull request #246 from OpenGeoscience/refactor-guardian
Move model-specific logic out of `GuardianPermission` class
2 parents 0bd2975 + 8afcd9f commit 4635e1b

File tree

14 files changed

+87
-53
lines changed

14 files changed

+87
-53
lines changed

geoinsight/core/models/chart.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ class Chart(models.Model):
1616
def __str__(self):
1717
return f'{self.name} ({self.id})'
1818

19+
@classmethod
20+
def filter_queryset_by_projects(cls, queryset, projects):
21+
return queryset.filter(project__in=projects)
22+
1923
def spawn_conversion_task(
2024
self,
2125
conversion_options=None,

geoinsight/core/models/colormap.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ class Colormap(models.Model):
3737
def __str__(self):
3838
return f'{self.name} ({self.id})'
3939

40+
@classmethod
41+
def filter_queryset_by_projects(cls, queryset, projects):
42+
return queryset.filter(models.Q(project__isnull=True) | models.Q(project__in=projects))
43+
4044
def clean(self):
4145
if len(self.markers):
4246
validate(instance=self.markers, schema=MARKER_SCHEMA)

geoinsight/core/models/data.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ class RasterData(models.Model):
2323
def __str__(self):
2424
return f'{self.name} ({self.id})'
2525

26+
@classmethod
27+
def filter_queryset_by_projects(cls, queryset, projects):
28+
return queryset.filter(dataset__project__in=projects)
29+
2630
def get_image_data(self, resolution: float = 1.0):
2731
with tempfile.TemporaryDirectory() as tmp:
2832
raster_path = Path(tmp, 'raster')
@@ -48,6 +52,10 @@ class VectorData(models.Model):
4852
def __str__(self):
4953
return f'{self.name} ({self.id})'
5054

55+
@classmethod
56+
def filter_queryset_by_projects(cls, queryset, projects):
57+
return queryset.filter(dataset__project__in=projects)
58+
5159
def write_geojson_data(self, content: str | dict):
5260
if isinstance(content, str):
5361
data = content

geoinsight/core/models/dataset.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ class Meta:
2929
def __str__(self):
3030
return f'{self.name} ({self.id})'
3131

32+
@classmethod
33+
def filter_queryset_by_projects(cls, queryset, projects):
34+
# Dataset permissions are not determined by Project permissions
35+
return queryset
36+
3237
def owner(self) -> User | None:
3338
users = typing.cast(
3439
list[User], list(get_users_with_perms(self, only_with_perms_in=['owner']))

geoinsight/core/models/file_item.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ class FileItem(TimeStampedModel):
2222
def __str__(self):
2323
return f'{self.name} ({self.id})'
2424

25+
@classmethod
26+
def filter_queryset_by_projects(cls, queryset, projects):
27+
return queryset.filter(dataset__project__in=projects)
28+
2529

2630
@receiver(models.signals.post_delete, sender=FileItem)
2731
def delete_content(sender, instance, **kwargs):

geoinsight/core/models/layer.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ class Layer(models.Model):
1919
def __str__(self):
2020
return f'{self.name} ({self.id})'
2121

22+
@classmethod
23+
def filter_queryset_by_projects(cls, queryset, projects):
24+
return queryset.filter(dataset__project__in=projects)
25+
2226

2327
class LayerFrame(models.Model):
2428
name = models.CharField(max_length=255, default='Layer Frame')
@@ -41,6 +45,10 @@ class Meta:
4145
def __str__(self):
4246
return f'{self.name} ({self.id})'
4347

48+
@classmethod
49+
def filter_queryset_by_projects(cls, queryset, projects):
50+
return queryset.filter(layer__dataset__project__in=projects)
51+
4452
def get_data(self):
4553
if self.raster is not None:
4654
return self.raster

geoinsight/core/models/networks.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ class Network(models.Model):
5353
def __str__(self):
5454
return f'{self.name} ({self.id})'
5555

56+
@classmethod
57+
def filter_queryset_by_projects(cls, queryset, projects):
58+
return queryset.filter(vector_data__dataset__project__in=projects)
59+
5660
@property
5761
def dataset(self):
5862
return self.vector_data.dataset
@@ -109,6 +113,10 @@ class NetworkNode(models.Model):
109113
def __str__(self):
110114
return f'{self.name} ({self.id})'
111115

116+
@classmethod
117+
def filter_queryset_by_projects(cls, queryset, projects):
118+
return queryset.filter(network__dataset__project__in=projects)
119+
112120
@property
113121
def dataset(self):
114122
return self.network.dataset
@@ -145,6 +153,10 @@ class NetworkEdge(models.Model):
145153
def __str__(self):
146154
return f'{self.name} ({self.id})'
147155

156+
@classmethod
157+
def filter_queryset_by_projects(cls, queryset, projects):
158+
return queryset.filter(network__dataset__project__in=projects)
159+
148160
@property
149161
def dataset(self):
150162
return self.network.dataset

geoinsight/core/models/project.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ class Project(models.Model):
1818
def __str__(self):
1919
return f'{self.name} ({self.id})'
2020

21+
@classmethod
22+
def filter_queryset_by_projects(cls, queryset, projects):
23+
return queryset.filter(id__in=projects.values_list('id', flat=True))
24+
2125
def owner(self) -> User:
2226
users = typing.cast(
2327
list[User], list(get_users_with_perms(self, only_with_perms_in=['owner']))

geoinsight/core/models/regions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,7 @@ class Meta:
2222

2323
def __str__(self):
2424
return f'{self.name} ({self.id})'
25+
26+
@classmethod
27+
def filter_queryset_by_projects(cls, queryset, projects):
28+
return queryset.filter(dataset__project__in=projects)

geoinsight/core/models/styles.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ class Meta:
2929
def __str__(self):
3030
return f'{self.name} ({self.id})'
3131

32+
@classmethod
33+
def filter_queryset_by_projects(cls, queryset, projects):
34+
return queryset.filter(layer__dataset__project__in=projects)
35+
3236
def save_style_configs(self, style_spec):
3337
if style_spec is None:
3438
raise ValueError('style_spec must not be None.')

0 commit comments

Comments
 (0)