Skip to content

Commit a4c3138

Browse files
Alessio Fabianimattiagiupponi
Alessio Fabiani
andauthored
[Fixes GeoNode#9016] Geoserver importer NO_CRS task status doesn't trigger t… (GeoNode#9021)
* [Fixes GeoNode#9016] Geoserver importer NO_CRS task status doesn't trigger the CRS selection step * [CircleCI] Fix tests * [CircleCI] Fix tests * [Minor * [Minor] Improve syntax and tests * [Minor] Improve syntax and tests * [CircleCI] Fix tests * [CircleCI] Fix tests * [CircleCI] Fix tests * [CircleCI] Fix tests * [CircleCI] Fix tests * [Pep8] Flake8 issues fixes Co-authored-by: mattiagiupponi <51856725+mattiagiupponi@users.noreply.github.com>
1 parent 7ddad0b commit a4c3138

16 files changed

+232
-173
lines changed

.env_test

+1
Original file line numberDiff line numberDiff line change
@@ -194,3 +194,4 @@ FAVORITE_ENABLED=True
194194

195195
# Upload Size Limiting
196196
DEFAULT_MAX_UPLOAD_SIZE=5368709120
197+
DEFAULT_MAX_PARALLEL_UPLOADS_PER_USER=100

geonode/base/api/tests.py

-3
Original file line numberDiff line numberDiff line change
@@ -793,9 +793,6 @@ def test_perms_resources(self):
793793
self.assertTrue(self.client.login(username='admin', password='admin'))
794794

795795
resource = ResourceBase.objects.filter(owner__username='bobby').first()
796-
if not resource.uuid:
797-
resource.uuid = str(uuid1())
798-
resource.save()
799796
set_perms_url = urljoin(f"{reverse('base-resources-detail', kwargs={'pk': resource.pk})}/", 'permissions')
800797
get_perms_url = urljoin(f"{reverse('base-resources-detail', kwargs={'pk': resource.pk})}/", 'permissions')
801798

geonode/base/populate_test_data.py

+89-82
Original file line numberDiff line numberDiff line change
@@ -157,13 +157,13 @@ def create_models(type=None, integration=False):
157157
obj_ids = []
158158
with transaction.atomic():
159159
map_data, user_data, people_data, dataset_data, document_data = create_fixtures()
160-
registeredmembers_group, created = Group.objects.get_or_create(name='registered-members')
161-
anonymous_group, created = Group.objects.get_or_create(name='anonymous')
162-
cont_group, created = Group.objects.get_or_create(name='contributors')
160+
registeredmembers_group, _ = Group.objects.get_or_create(name='registered-members')
161+
anonymous_group, _ = Group.objects.get_or_create(name='anonymous')
162+
cont_group, _ = Group.objects.get_or_create(name='contributors')
163163
perm = Permission.objects.get(codename='add_resourcebase')
164164
cont_group.permissions.add(perm)
165165
logger.debug("[SetUp] Get or create user admin")
166-
u, created = get_user_model().objects.get_or_create(username='admin')
166+
u, _ = get_user_model().objects.get_or_create(username='admin')
167167
u.set_password('admin')
168168
u.is_superuser = True
169169
u.first_name = 'admin'
@@ -174,7 +174,7 @@ def create_models(type=None, integration=False):
174174
for ud, pd in zip(user_data, cycle(people_data)):
175175
user_name, password, first_name, last_name = ud
176176
logger.debug(f"[SetUp] Get or create user {user_name}")
177-
u, created = get_user_model().objects.get_or_create(username=user_name)
177+
u, _ = get_user_model().objects.get_or_create(username=user_name)
178178
u.set_password(password)
179179
u.first_name = first_name
180180
u.last_name = last_name
@@ -194,18 +194,19 @@ def create_models(type=None, integration=False):
194194
for md, user in zip(map_data, cycle(users)):
195195
title, abstract, kws, (bbox_x0, bbox_x1, bbox_y0, bbox_y1), category = md
196196
logger.debug(f"[SetUp] Add map {title}")
197-
m = Map(
198-
uuid=str(uuid4()),
197+
m, _ = Map.objects.get_or_create(
199198
title=title,
200-
abstract=abstract,
201-
owner=user,
202-
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
203-
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
204-
srid='EPSG:4326',
205-
category=category,
206-
metadata_only=title == 'map metadata true'
199+
defaults=dict(
200+
uuid=str(uuid4()),
201+
abstract=abstract,
202+
owner=user,
203+
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
204+
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
205+
srid='EPSG:4326',
206+
category=category,
207+
metadata_only=title == 'map metadata true'
208+
)
207209
)
208-
m.save()
209210
m.set_default_permissions(owner=user)
210211
m.clear_dirty_state()
211212
m.set_processing_state(enumerations.STATE_PROCESSED)
@@ -218,19 +219,20 @@ def create_models(type=None, integration=False):
218219
for dd, user in zip(document_data, cycle(users)):
219220
title, abstract, kws, (bbox_x0, bbox_x1, bbox_y0, bbox_y1), category = dd
220221
logger.debug(f"[SetUp] Add document {title}")
221-
m = Document(
222-
uuid=str(uuid4()),
222+
m, _ = Document.objects.get_or_create(
223223
title=title,
224-
abstract=abstract,
225-
owner=user,
226-
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
227-
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
228-
srid='EPSG:4326',
229-
files=dfile,
230-
extension="gif",
231-
metadata_only=title == 'doc metadata true'
224+
defaults=dict(
225+
uuid=str(uuid4()),
226+
abstract=abstract,
227+
owner=user,
228+
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
229+
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
230+
srid='EPSG:4326',
231+
files=dfile,
232+
extension="gif",
233+
metadata_only=title == 'doc metadata true'
234+
)
232235
)
233-
m.save()
234236
m.set_default_permissions(owner=user)
235237
m.clear_dirty_state()
236238
m.set_processing_state(enumerations.STATE_PROCESSED)
@@ -244,24 +246,25 @@ def create_models(type=None, integration=False):
244246
title, abstract, name, alternate, (bbox_x0, bbox_x1, bbox_y0, bbox_y1), start, kws, category = ld
245247
end = start + timedelta(days=365)
246248
logger.debug(f"[SetUp] Add dataset {title}")
247-
dataset = Dataset(
248-
title=title,
249-
abstract=abstract,
250-
name=name,
249+
dataset, _ = Dataset.objects.get_or_create(
251250
alternate=alternate,
252-
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
253-
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
254-
srid='EPSG:4326',
255-
uuid=str(uuid4()),
256-
owner=user,
257-
temporal_extent_start=start,
258-
temporal_extent_end=end,
259-
date=start,
260-
subtype=subtype,
261-
category=category,
262-
metadata_only=title == 'dataset metadata true'
251+
defaults=dict(
252+
title=title,
253+
abstract=abstract,
254+
name=name,
255+
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
256+
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
257+
srid='EPSG:4326',
258+
uuid=str(uuid4()),
259+
owner=user,
260+
temporal_extent_start=start,
261+
temporal_extent_end=end,
262+
date=start,
263+
subtype=subtype,
264+
category=category,
265+
metadata_only=title == 'dataset metadata true'
266+
)
263267
)
264-
dataset.save()
265268
dataset.set_default_permissions(owner=user)
266269
dataset.clear_dirty_state()
267270
dataset.set_processing_state(enumerations.STATE_PROCESSED)
@@ -332,26 +335,27 @@ def create_single_dataset(name, keywords=None, owner=None, group=None, **kwargs)
332335
ll = (name, 'lorem ipsum', name, f'geonode:{name}', [
333336
0, 22, 0, 22], test_datetime, ('populartag',), "farming")
334337
title, abstract, name, alternate, (bbox_x0, bbox_x1, bbox_y0, bbox_y1), start, kws, category = ll
335-
dataset = Dataset(
336-
title=title,
337-
abstract=abstract,
338-
name=name,
338+
dataset, _ = Dataset.objects.get_or_create(
339339
alternate=alternate,
340-
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
341-
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
342-
srid='EPSG:4326',
343-
uuid=str(uuid4()),
344-
owner=owner or admin,
345-
temporal_extent_start=test_datetime,
346-
temporal_extent_end=test_datetime,
347-
date=start,
348-
subtype="vector",
349-
resource_type="dataset",
350-
typename=f"geonode:{title}",
351-
group=group,
352-
**kwargs
340+
defaults=dict(
341+
title=title,
342+
abstract=abstract,
343+
name=name,
344+
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
345+
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
346+
srid='EPSG:4326',
347+
uuid=str(uuid4()),
348+
owner=owner or admin,
349+
temporal_extent_start=test_datetime,
350+
temporal_extent_end=test_datetime,
351+
date=start,
352+
subtype="vector",
353+
resource_type="dataset",
354+
typename=f"geonode:{title}",
355+
group=group,
356+
**kwargs
357+
)
353358
)
354-
dataset.save()
355359

356360
if isinstance(keywords, list):
357361
dataset = add_keywords_to_resource(dataset, keywords)
@@ -362,7 +366,7 @@ def create_single_dataset(name, keywords=None, owner=None, group=None, **kwargs)
362366
return dataset
363367

364368

365-
def create_single_map(name, owner=None):
369+
def create_single_map(name, owner=None, **kwargs):
366370
admin, created = get_user_model().objects.get_or_create(username='admin')
367371
if created:
368372
admin.is_superuser = True
@@ -373,24 +377,26 @@ def create_single_map(name, owner=None):
373377
ll = (name, 'lorem ipsum', name, f'{name}', [
374378
0, 22, 0, 22], test_datetime, ('populartag',))
375379
title, abstract, name, alternate, (bbox_x0, bbox_x1, bbox_y0, bbox_y1), start, kws = ll
376-
m = Map(
377-
uuid=str(uuid4()),
380+
m, _ = Map.objects.get_or_create(
378381
title=title,
379-
abstract=abstract,
380-
owner=owner or admin,
381-
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
382-
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
383-
srid='EPSG:4326',
384-
resource_type="map"
382+
defaults=dict(
383+
uuid=str(uuid4()),
384+
abstract=abstract,
385+
owner=owner or admin,
386+
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
387+
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
388+
srid='EPSG:4326',
389+
resource_type="map",
390+
**kwargs
391+
)
385392
)
386-
m.save()
387393
m.set_default_permissions(owner=owner or admin)
388394
m.clear_dirty_state()
389395
m.set_processing_state(enumerations.STATE_PROCESSED)
390396
return m
391397

392398

393-
def create_single_doc(name, owner=None):
399+
def create_single_doc(name, owner=None, **kwargs):
394400
admin, created = get_user_model().objects.get_or_create(username='admin')
395401
if created:
396402
admin.is_superuser = True
@@ -402,18 +408,20 @@ def create_single_doc(name, owner=None):
402408
0, 22, 0, 22], test_datetime, ('populartag',))
403409
title, abstract, name, alternate, (bbox_x0, bbox_x1, bbox_y0, bbox_y1), start, kws = dd
404410
logger.debug(f"[SetUp] Add document {title}")
405-
m = Document(
406-
uuid=str(uuid4()),
411+
m, _ = Document.objects.get_or_create(
407412
title=title,
408-
abstract=abstract,
409-
owner=owner or admin,
410-
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
411-
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
412-
srid='EPSG:4326',
413-
files=dfile,
414-
resource_type="document"
413+
defaults=dict(
414+
uuid=str(uuid4()),
415+
abstract=abstract,
416+
owner=owner or admin,
417+
bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
418+
ll_bbox_polygon=Polygon.from_bbox((bbox_x0, bbox_y0, bbox_x1, bbox_y1)),
419+
srid='EPSG:4326',
420+
files=dfile,
421+
resource_type="document",
422+
**kwargs
423+
)
415424
)
416-
m.save()
417425
m.set_default_permissions(owner=owner or admin)
418426
m.clear_dirty_state()
419427
m.set_processing_state(enumerations.STATE_PROCESSED)
@@ -423,7 +431,6 @@ def create_single_doc(name, owner=None):
423431
def add_keywords_to_resource(resource, keywords):
424432
for keyword in keywords:
425433
resource.keywords.add(keyword)
426-
427434
resource.save()
428435
return resource
429436

geonode/documents/views.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -212,13 +212,7 @@ def form_valid(self, form):
212212
title=doc_form.pop('title', None))
213213
)
214214

215-
if settings.ADMIN_MODERATE_UPLOADS:
216-
self.object.is_approved = False
217-
self.object.was_approved = False
218-
if settings.RESOURCE_PUBLISHING:
219-
self.object.is_published = False
220-
self.object.was_published = False
221-
215+
self.object.handle_moderated_uploads()
222216
resource_manager.set_permissions(
223217
None, instance=self.object, permissions=form.cleaned_data["permissions"], created=True
224218
)

geonode/geoserver/helpers.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,18 @@ def gs_slurp(
743743
)
744744
created = True
745745

746+
bbox = resource.native_bbox
747+
ll_bbox = resource.latlon_bbox
748+
try:
749+
layer.set_bbox_polygon([bbox[0], bbox[2], bbox[1], bbox[3]], resource.projection)
750+
except GeoNodeException as e:
751+
if not ll_bbox:
752+
raise
753+
else:
754+
logger.exception(e)
755+
layer.srid = 'EPSG:4326'
756+
layer.set_ll_bbox_polygon([ll_bbox[0], ll_bbox[2], ll_bbox[1], ll_bbox[3]])
757+
746758
# sync permissions in GeoFence
747759
perm_spec = json.loads(_perms_info_json(layer))
748760
resource_manager.set_permissions(
@@ -1075,7 +1087,7 @@ def set_attributes_from_geoserver(layer, overwrite=False):
10751087
tb = traceback.format_exc()
10761088
logger.debug(tb)
10771089
attribute_map = []
1078-
elif layer.subtype in ["coverageStore"]:
1090+
elif layer.subtype in ["raster"]:
10791091
typename = layer.alternate if layer.alternate else layer.typename
10801092
dc_url = f"{server_url}wcs?{urlencode({'service': 'wcs', 'version': '1.1.0', 'request': 'DescribeCoverage', 'identifiers': typename})}"
10811093
try:

geonode/resource/manager.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -693,8 +693,7 @@ def set_permissions(self, uuid: str, /, instance: ResourceBase = None, owner: se
693693
raise Exception("Could not acquire 'anonymous' Group.")
694694

695695
# Anonymous
696-
anonymous_can_view = settings.DEFAULT_ANONYMOUS_VIEW_PERMISSION
697-
if anonymous_can_view:
696+
if AdvancedSecurityWorkflowManager.is_anonymous_can_view():
698697
assign_perm('view_resourcebase',
699698
anonymous_group, _resource.get_self_resource())
700699
_prev_perm = _perm_spec["groups"].get(anonymous_group, []) if "groups" in _perm_spec else []
@@ -708,8 +707,7 @@ def set_permissions(self, uuid: str, /, instance: ResourceBase = None, owner: se
708707
_perm_spec["groups"][user_group] = set.union(perms_as_set(_prev_perm), perms_as_set('view_resourcebase'))
709708

710709
if AdvancedSecurityWorkflowManager.assignable_perm_condition('download_resourcebase', _resource_type):
711-
anonymous_can_download = settings.DEFAULT_ANONYMOUS_DOWNLOAD_PERMISSION
712-
if anonymous_can_download:
710+
if AdvancedSecurityWorkflowManager.is_anonymous_can_download():
713711
assign_perm('download_resourcebase',
714712
anonymous_group, _resource.get_self_resource())
715713
_prev_perm = _perm_spec["groups"].get(anonymous_group, []) if "groups" in _perm_spec else []

geonode/security/models.py

+3
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,9 @@ def set_permissions(self, perm_spec=None, created=False, approval_status_changed
261261
return resource_manager.set_permissions(self.uuid, instance=self, permissions=perm_spec, created=created,
262262
approval_status_changed=approval_status_changed, group_status_changed=group_status_changed)
263263

264+
def handle_moderated_uploads(self):
265+
AdvancedSecurityWorkflowManager.handle_moderated_uploads(self.uuid, instance=self)
266+
264267
def compare_perms(self, prev_perm_spec, perm_spec):
265268
"""
266269
Compare two perm_specs in the form

0 commit comments

Comments
 (0)