Skip to content

Commit 39484ba

Browse files
author
Alessio Fabiani
authored
[Fixes GeoNode#7989] Misbehavior with upload resources requiring further user inputs (GeoNode#7990)
* [Fixes GeoNode#7989] Misbehavior with upload resources requiring further user inputs * [Fixes GeoNode#7989] Misbehavior with upload resources requiring further user inputs
1 parent fd8a575 commit 39484ba

18 files changed

+192
-176
lines changed

geonode/resource/manager.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ def delete(self, uuid: str, /, instance: ResourceBase = None) -> int:
238238
_resource = instance or ResourceManager._get_instance(uuid)
239239
if _resource and ResourceBase.objects.filter(uuid=uuid).exists():
240240
try:
241+
_resource.set_processing_state(enumerations.STATE_RUNNING)
241242
self._concrete_resource_manager.delete(uuid, instance=_resource)
242243
if isinstance(_resource.get_real_instance(), Dataset):
243244
"""
@@ -320,8 +321,7 @@ def create(self, uuid: str, /, resource_type: typing.Optional[object] = None, de
320321
_resource = self._concrete_resource_manager.create(uuid, resource_type=resource_type, defaults=defaults)
321322
except Exception as e:
322323
logger.exception(e)
323-
_resource.set_processing_state(enumerations.STATE_INVALID)
324-
_resource.delete()
324+
self.delete(instance=_resource)
325325
raise e
326326
finally:
327327
_resource.set_processing_state(enumerations.STATE_PROCESSED)
@@ -419,6 +419,7 @@ def ingest(self, files: typing.List[str], /, uuid: str = None, resource_type: ty
419419
def copy(self, instance: ResourceBase, /, uuid: str = None, owner: settings.AUTH_USER_MODEL = None, defaults: dict = {}) -> ResourceBase:
420420
if instance:
421421
try:
422+
instance.set_processing_state(enumerations.STATE_RUNNING)
422423
with transaction.atomic():
423424
_owner = owner or instance.get_real_instance().owner
424425
_perms = instance.get_real_instance().get_all_level_info()

geonode/static/geonode/js/upload/upload.js

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -317,36 +317,6 @@ define(['underscore',
317317
.fail(function () {});
318318
}
319319

320-
function handleResume(options) {
321-
$.ajax({
322-
url: options.url,
323-
async: false,
324-
mode: "queue",
325-
contentType: false,
326-
})
327-
.done(function (data) {
328-
if('redirect_to' in data) {
329-
common.make_request({
330-
url: data.redirect_to,
331-
async: false,
332-
failure: function (resp, status) {
333-
common.logError(resp, status);
334-
},
335-
success: function (resp, status) {
336-
window.location = resp.url;
337-
}
338-
});
339-
} else if ('url' in data) {
340-
window.location = data.url;
341-
} else {
342-
common.logError("unexpected response");
343-
}
344-
})
345-
.fail(function (resp) {
346-
common.logError(resp);
347-
});
348-
}
349-
350320
function progressBar(properties) {
351321
properties.parent.style.position = 'relative';
352322
// add a small progress bar in the progressNode
@@ -421,7 +391,7 @@ define(['underscore',
421391
resumeTool.setAttribute('data-toggle', 'tooltip');
422392
resumeTool.setAttribute('data-placement', 'top');
423393
resumeTool.innerHTML = '<i class="fa fa-play"></i>';
424-
resumeTool.onclick = function() { handleResume({ id: properties.id, url: properties.resume_url }); };
394+
resumeTool.onclick = function () { window.location = properties.resume_url; };
425395
infoTools.appendChild(resumeTool);
426396
$(resumeTool).tooltip();
427397
} else {

geonode/static/lib/js/assets.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

geonode/static/lib/js/openlayers-plugins.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.4 on 2021-08-25 00:14
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('upload', '0033_auto_20210531_1252'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='upload',
15+
name='resume_url',
16+
field=models.CharField(blank=True, max_length=256, null=True),
17+
),
18+
]

geonode/upload/models.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ class Upload(models.Model):
9595
mosaic_elev_regex = models.CharField(max_length=128, null=True)
9696
mosaic_elev_value = models.CharField(max_length=128, null=True)
9797

98+
resume_url = models.CharField(max_length=256, null=True, blank=True)
99+
98100
class Meta:
99101
ordering = ['-date']
100102

@@ -166,9 +168,14 @@ def progress(self):
166168
return 66.0
167169
return 80.0
168170

171+
def set_resume_url(self, resume_url):
172+
if self.resume_url != resume_url:
173+
self.resume_url = resume_url
174+
Upload.objects.filter(id=self.id).update(resume_url=resume_url)
175+
169176
def get_resume_url(self):
170177
if self.state == enumerations.STATE_WAITING and self.import_id:
171-
return f"{reverse('data_upload')}?id={self.import_id}"
178+
return self.resume_url
172179
return None
173180

174181
def get_delete_url(self):

geonode/upload/tasks.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,11 @@ def _update_upload_session_state(self, upload_session_id: int):
180180
if isinstance(content, bytes):
181181
content = content.decode('UTF-8')
182182
response_json = json.loads(content)
183-
if response_json['success'] and 'redirect_to' in response_json:
184-
if 'upload/final' not in response_json['redirect_to'] and 'upload/check' not in response_json['redirect_to']:
183+
_success = response_json.get('success', False)
184+
_redirect_to = response_json.get('redirect_to', '')
185+
if _success:
186+
if 'upload/final' not in _redirect_to and 'upload/check' not in _redirect_to:
187+
_upload.set_resume_url(_redirect_to)
185188
_upload.set_processing_state(enumerations.STATE_WAITING)
186189
else:
187190
if session.state == enumerations.STATE_COMPLETE and _upload.state == enumerations.STATE_PENDING:

0 commit comments

Comments
 (0)