Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 42 additions & 74 deletions src/headless/celery_app.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# coding=utf-8
import importlib
import contextlib
import json
import os
import qgis # noqa

from celery import Celery
from headless import settings as headless_settings
Expand All @@ -12,6 +11,7 @@
from headless.utils import set_logger, get_headless_logger
from safe.gui.tools.minimum_needs.needs_profile import NeedsProfile
from safe.utilities.settings import import_setting
from safe.utilities.utilities import reload_inasafe_modules

__copyright__ = "Copyright 2018, The InaSAFE Project"
__license__ = "GPL version 3"
Expand Down Expand Up @@ -77,42 +77,7 @@ def load_minimum_needs(locale='en_US'):
profile.save()


def reload_definitions():
"""Brute force reload all related InaSAFE definitions to apply
current locale."""
package_list = [
# Reload minimum needs
'safe.definitions.minimum_needs',
# Reload everything that depends on minimum_needs
'safe.definitions.fields',
'safe.definitions',

# Reload min needs postprocessors
'safe.processors.minimum_needs_post_processors',
# Reload everything that depends on postprocessors
'safe.processors',
'safe.impact_function.postprocessors',
'safe.impact_function',

# Reload everything that depends on reporting
'safe.report.extractors.aggregate_postprocessors',
'safe.report.extractors.minimum_needs',
'safe.report'
]
for p in package_list:
reload(importlib.import_module(p))

from safe.definitions import minimum_needs
from safe import processors
LOGGER.debug('Minimum Needs list:')
for m in minimum_needs.minimum_needs_fields:
LOGGER.debug(m)

LOGGER.debug('Minimum Needs Processors list:')
for m in processors.minimum_needs_post_processors:
LOGGER.debug(m)


@contextlib.contextmanager
def start_inasafe(locale='en_US'):
"""Initialize QGIS application and prepare InaSAFE settings.

Expand All @@ -122,42 +87,45 @@ def start_inasafe(locale='en_US'):
:return: Tuple of QGIS application object and IFACE.
:rtype: tuple
"""
set_logger()

# Initialize qgis_app
from safe.test.utilities import get_qgis_app
QGIS_APP, CANVAS, IFACE, PARENT = get_qgis_app(locale)

# Setting
from safe.utilities.settings import set_setting

# Reload default settings first
from safe.definitions import default_settings
from safe.utilities import settings
reload(default_settings)
reload(settings)
reload(headless_settings)

load_inasafe_settings()
load_minimum_needs(locale)

# reload minimum needs definitions
# redeclarations are needed for report
reload_definitions()

# Load QGIS Expression
from safe.utilities.expressions import qgis_expressions # noqa

if headless_settings.OUTPUT_DIRECTORY:
try:
os.makedirs(headless_settings.OUTPUT_DIRECTORY)
except OSError:
if not os.path.isdir(headless_settings.OUTPUT_DIRECTORY):
raise
set_setting(
'defaultUserDirectory', headless_settings.OUTPUT_DIRECTORY)

return QGIS_APP, IFACE
try:
set_logger()

# Initialize qgis_app
from safe.test.utilities import get_qgis_app
QGIS_APP, CANVAS, IFACE, PARENT = get_qgis_app(locale)

# Setting
from safe.utilities.settings import set_setting

# Reload default settings first
from safe.definitions import default_settings
from safe.utilities import settings
reload(default_settings)
reload(settings)
reload(headless_settings)

load_inasafe_settings()
load_minimum_needs(locale)

# reload minimum needs definitions
# redeclarations are needed for report
reload_inasafe_modules()

# Load QGIS Expression
from safe.utilities.expressions import qgis_expressions # noqa

if headless_settings.OUTPUT_DIRECTORY:
try:
os.makedirs(headless_settings.OUTPUT_DIRECTORY)
except OSError:
if not os.path.isdir(headless_settings.OUTPUT_DIRECTORY):
raise
set_setting(
'defaultUserDirectory', headless_settings.OUTPUT_DIRECTORY)

yield QGIS_APP, IFACE
finally:
QGIS_APP.exit()


class SentryCelery(Celery):
Expand Down
73 changes: 37 additions & 36 deletions src/headless/tasks/inasafe_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ def get_keywords(layer_uri, keyword=None):
:rtype: dict, basestring
"""
# Initialize QGIS and InaSAFE
start_inasafe()
with start_inasafe():

reload(inasafe_analysis)
metadata = inasafe_analysis.get_keywords(layer_uri, keyword)
return metadata
reload(inasafe_analysis)
metadata = inasafe_analysis.get_keywords(layer_uri, keyword)
return metadata


@app.task(
Expand Down Expand Up @@ -74,13 +74,13 @@ def run_analysis(
}
"""
# Initialize QGIS and InaSAFE
start_inasafe(locale)
with start_inasafe(locale):

reload(inasafe_analysis)
retval = inasafe_analysis.inasafe_analysis(
hazard_layer_uri, exposure_layer_uri, aggregation_layer_uri, crs)
reload(inasafe_analysis)
retval = inasafe_analysis.inasafe_analysis(
hazard_layer_uri, exposure_layer_uri, aggregation_layer_uri, crs)

return retval
return retval


@app.task(
Expand Down Expand Up @@ -133,13 +133,13 @@ def run_multi_exposure_analysis(
}
"""
# Initialize QGIS and InaSAFE
start_inasafe(locale)
with start_inasafe(locale):

reload(inasafe_analysis)
retval = inasafe_analysis.inasafe_multi_exposure_analysis(
hazard_layer_uri, exposure_layer_uris, aggregation_layer_uri, crs)
reload(inasafe_analysis)
retval = inasafe_analysis.inasafe_multi_exposure_analysis(
hazard_layer_uri, exposure_layer_uris, aggregation_layer_uri, crs)

return retval
return retval


@app.task(
Expand Down Expand Up @@ -193,18 +193,19 @@ def generate_report(

"""
# Initialize QGIS and InaSAFE
_, IFACE = start_inasafe(locale)
with start_inasafe(locale) as app_instance:
__, IFACE = app_instance

reload(inasafe_analysis)
retval = inasafe_analysis.generate_report(
impact_layer_uri,
custom_report_template_uri,
custom_layer_order,
custom_legend_layer,
use_template_extent,
IFACE)
reload(inasafe_analysis)
retval = inasafe_analysis.generate_report(
impact_layer_uri,
custom_report_template_uri,
custom_layer_order,
custom_legend_layer,
use_template_extent,
IFACE)

return retval
return retval


@app.task(
Expand Down Expand Up @@ -246,11 +247,11 @@ def get_generated_report(impact_layer_uri):
}
"""
# Initialize QGIS and InaSAFE
start_inasafe()
with start_inasafe():

reload(inasafe_analysis)
result = inasafe_analysis.get_generated_report(impact_layer_uri)
return result
reload(inasafe_analysis)
result = inasafe_analysis.get_generated_report(impact_layer_uri)
return result


@app.task(
Expand All @@ -270,11 +271,11 @@ def generate_contour(layer_uri):
current_datetime format: 25January2018_09h25-17.597909
"""
# Initialize QGIS and InaSAFE
start_inasafe()
with start_inasafe():

reload(inasafe_analysis)
result = inasafe_analysis.generate_contour(layer_uri)
return result
reload(inasafe_analysis)
result = inasafe_analysis.generate_contour(layer_uri)
return result


@app.task(
Expand Down Expand Up @@ -311,8 +312,8 @@ def push_to_geonode(layer_uri):
}
"""
# Initialize QGIS and InaSAFE
start_inasafe()
with start_inasafe():

reload(inasafe_analysis)
result = inasafe_analysis.push_to_geonode(layer_uri)
return result
reload(inasafe_analysis)
result = inasafe_analysis.push_to_geonode(layer_uri)
return result