File tree Expand file tree Collapse file tree 14 files changed +87
-53
lines changed
Expand file tree Collapse file tree 14 files changed +87
-53
lines changed Original file line number Diff line number Diff 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 ,
Original file line number Diff line number Diff 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 )
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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' ]))
Original file line number Diff line number Diff 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 )
2731def delete_content (sender , instance , ** kwargs ):
Original file line number Diff line number Diff 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
2327class 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
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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' ]))
Original file line number Diff line number Diff 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 )
Original file line number Diff line number Diff 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.' )
You can’t perform that action at this time.
0 commit comments