Skip to content

Commit

Permalink
[Fixes #4831] GeoNode Importer mode not really asynchronous
Browse files Browse the repository at this point in the history
  • Loading branch information
afabiani committed Sep 6, 2019
1 parent 1643283 commit 6af327f
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 23 deletions.
3 changes: 3 additions & 0 deletions geonode/layers/templates/layers/layer_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
{% block title %}{{ resource.title|default:resource.alternate }} — {{ block.super }}{% endblock %}

{% block head %}

<META HTTP-EQUIV="Access-Control-Allow-Origin" CONTENT="{{ SITEURL }}">

{% if TWITTER_CARD %}
{% include "base/_resourcebase_twittercard.html" %}
{% endif %}
Expand Down
12 changes: 4 additions & 8 deletions geonode/upload/tests/integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,17 +296,13 @@ def check_upload_model(self, original_name):
return
upload = None
try:
# AF: TODO Headhakes here... nose is not accessing to the test
# db!!!
uploads = Upload.objects.all()
if uploads:
upload = Upload.objects.filter(name=str(original_name)).last()
upload = Upload.objects.filter(name=str(original_name)).last()
except Upload.DoesNotExist:
self.fail('expected to find Upload object for %s' % original_name)

# AF: TODO Headhakes here... nose is not accessing to the test db!!!
if upload:
self.assertTrue(upload.complete)
# Making sure the Upload object is present on the DB and
# the import session is COMPLETE
self.assertTrue(upload.complete)

def check_layer_complete(self, layer_page, original_name):
'''check everything to verify the layer is complete'''
Expand Down
4 changes: 2 additions & 2 deletions geonode/upload/upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ def upload(
presentation_strategy, precision_value, precision_step,
end_time_attribute=end_time_attribute,
end_time_transform_type=end_time_transform_type,
time_format=None, srs=None, use_big_date=use_big_date)
time_format=None)

utils.run_import(upload_session, async_upload=False)

Expand Down Expand Up @@ -306,7 +306,7 @@ def save_step(user, layer, spatial_files, overwrite=True, mosaic=False,
max_length = Upload._meta.get_field('name').max_length
name = name[:max_length]
# save record of this whether valid or not - will help w/ debugging
upload = Upload.objects.create(
upload, _ = Upload.objects.get_or_create(
user=user,
name=name,
state=Upload.STATE_INVALID,
Expand Down
50 changes: 37 additions & 13 deletions geonode/upload/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,22 +94,28 @@ def _log(msg, *args):
logger.debug(msg, *args)


def _get_upload_session(req):
upload_session = None
if 'id' in req.GET:
upload_id = str(req.GET['id'])
upload_obj = get_object_or_404(
Upload, import_id=upload_id, user=req.user)
upload_session = upload_obj.get_session()
return upload_session


def data_upload_progress(req):
"""This would not be needed if geoserver REST did not require admin role
and is an inefficient way of getting this information"""
if 'id' in req.GET:
upload_id = str(req.GET['id'])
if upload_id in req.session:
upload_obj = get_object_or_404(
Upload, import_id=upload_id, user=req.user)
upload_session = upload_obj.get_session()
else:
upload_session = req.session[upload_id]
upload_session = _get_upload_session(req)

if upload_session:
import_session = upload_session.import_session
if upload_session:
import_session = upload_session.import_session
try:
progress = import_session.tasks[0].get_progress()
return json_response(progress)
except BaseException:
pass

return json_response({'state': 'NONE'})

Expand Down Expand Up @@ -225,7 +231,9 @@ def save_step_view(req, session):
mosaic_time_value=form.cleaned_data['mosaic_time_value'],
user=req.user
)
Upload.objects.update_from_session(upload_session)
req.session[str(upload_session.import_session.id)] = upload_session
req.session.modified = True
_log('saved session : %s',
req.session[str(upload_session.import_session.id)])
return next_step_response(req, upload_session, force_ajax=True)
Expand All @@ -237,6 +245,8 @@ def save_step_view(req, session):


def srs_step_view(request, upload_session):
if not upload_session:
upload_session = _get_upload_session(request)
import_session = upload_session.import_session
assert import_session is not None

Expand Down Expand Up @@ -310,6 +320,8 @@ def srs_step_view(request, upload_session):


def csv_step_view(request, upload_session):
if not upload_session:
upload_session = _get_upload_session(request)
import_session = upload_session.import_session
assert import_session is not None

Expand Down Expand Up @@ -403,6 +415,8 @@ def csv_step_view(request, upload_session):


def check_step_view(request, upload_session):
if not upload_session:
upload_session = _get_upload_session(request)
import_session = upload_session.import_session
assert import_session is not None

Expand All @@ -428,6 +442,8 @@ def check_step_view(request, upload_session):


def create_time_form(request, upload_session, form_data):
if not upload_session:
upload_session = _get_upload_session(request)
feature_type = upload_session.import_session.tasks[0].layer

(has_time, layer_values) = layer_eligible_for_time_dimension(
Expand All @@ -452,6 +468,8 @@ def filter_type(b):


def time_step_view(request, upload_session):
if not upload_session:
upload_session = _get_upload_session(request)
import_session = upload_session.import_session
assert import_session is not None

Expand Down Expand Up @@ -534,6 +552,8 @@ def tx(type_name):

def final_step_view(req, upload_session):
_json_response = None
if not upload_session:
upload_session = _get_upload_session(req)
if upload_session:
import_session = upload_session.import_session
_log('Checking session %s validity', import_session.id)
Expand Down Expand Up @@ -620,12 +640,14 @@ def view(req, step):
session = upload_obj.get_session()
if session:
req.session[upload_id] = session
req.session.modified = True
return next_step_response(req, session)
step = 'save'

# delete existing session
if upload_id and upload_id in req.session:
del req.session[upload_id]
req.session.modified = True
else:
if not upload_id:
return render(
Expand All @@ -640,7 +662,7 @@ def view(req, step):
if session:
upload_session = session
else:
upload_session = req.session[upload_id]
upload_session = _get_upload_session(req)
except BaseException:
traceback.print_exc()
try:
Expand All @@ -666,15 +688,17 @@ def view(req, step):
Upload.objects.update_from_session(upload_session)
upload_session = None
del req.session[upload_id]
req.session.modified = True
except BaseException:
pass
else:
try:
req.session[upload_id] = upload_session
req.session.modified = True
except BaseException:
traceback.print_exc()
elif upload_id in req.session:
upload_session = req.session[upload_id]
else:
upload_session = _get_upload_session(req)
if upload_session:
Upload.objects.update_from_session(upload_session)
return resp
Expand Down

0 comments on commit 6af327f

Please sign in to comment.