Skip to content

Commit

Permalink
Major feature addition:
Browse files Browse the repository at this point in the history
- Add celery shake task to process_shake remotely
- Add celery shake task to check existing event
- Fix error uninitiated QGIS APP
- Push Shake now also push grid.xml file
  • Loading branch information
lucernae committed Mar 9, 2016
1 parent dcf0f1b commit fb1bdf5
Show file tree
Hide file tree
Showing 10 changed files with 96 additions and 11 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Expand Up @@ -58,4 +58,4 @@ setup.cfg
venv
# This is a temporary working file for building the windows installer that does string replacement on version name
scripts/build.nsi

gdalwmscache
6 changes: 6 additions & 0 deletions headless/celery_app.py
Expand Up @@ -12,6 +12,12 @@
'headless',
)


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


app.autodiscover_tasks(packages)

if __name__ == '__main__':
Expand Down
4 changes: 4 additions & 0 deletions realtime/celery_app.py
Expand Up @@ -12,6 +12,10 @@
'realtime',
)

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

app.autodiscover_tasks(packages)

if __name__ == '__main__':
Expand Down
21 changes: 19 additions & 2 deletions realtime/earthquake/push_shake.py
Expand Up @@ -104,18 +104,35 @@ def push_shake_event_to_rest(shake_event, fail_silent=True):
},
'location_description': event_dict.get('shake-grid-location')
}
earthquake_file = {
'shake_grid': (
'%s-grid.xml' % shake_event.event_id,
open(shake_event.grid_file_path())),
}
# check does the shake event already exists?
response = session.earthquake(
earthquake_data['shake_id']).GET()
if response.status_code == requests.codes.ok:
# event exists, we should update using PUT Url
response = session.earthquake(
earthquake_data['shake_id']).PUT(
data=json.dumps(earthquake_data), headers=headers)
data=json.dumps(earthquake_data),
headers=headers)
elif response.status_code == requests.codes.not_found:
# event does not exists, create using POST url
response = session.earthquake.POST(
data=json.dumps(earthquake_data), headers=headers)
data=json.dumps(earthquake_data),
headers=headers)

# upload grid.xml
headers = {
'X-CSRFTOKEN': inasafe_django.csrf_token,
}
if response.status_code == requests.codes.ok:
response = session.earthquake(
earthquake_data['shake_id']).PUT(
files=earthquake_file,
headers=headers)

if not (response.status_code == requests.codes.ok or
response.status_code == requests.codes.created):
Expand Down
6 changes: 4 additions & 2 deletions realtime/earthquake/shake_event.py
Expand Up @@ -60,10 +60,12 @@
# noinspection PyPackageRequirements
from PyQt4.QtXml import QDomDocument

from safe.test.utilities import get_qgis_app
QGIS_APP, CANVAS, IFACE, PARENT = get_qgis_app()

from safe.impact_functions.impact_function_manager import ImpactFunctionManager
from safe.storage.core import read_layer as safe_read_layer
from safe.engine.core import calculate_impact as safe_calculate_impact
from safe.test.utilities import get_qgis_app
from safe.common.version import get_version
from safe.common.utilities import romanise
from safe.utilities.clipper import extent_to_geoarray, clip_layer
Expand All @@ -89,8 +91,8 @@
EmptyShakeDirectoryError,
EventIdError)


LOGGER = logging.getLogger(realtime_logger_name())
QGIS_APP, CANVAS, IFACE, PARENT = get_qgis_app()


class ShakeEvent(QObject):
Expand Down
6 changes: 4 additions & 2 deletions realtime/flood/flood_event.py
Expand Up @@ -28,14 +28,17 @@
from realtime.flood.dummy_source_api import DummySourceAPI
from realtime.flood.peta_jakarta_api import PetaJakartaAPI
from realtime.utilities import realtime_logger_name

from safe.test.utilities import get_qgis_app
QGIS_APP, CANVAS, IFACE, PARENT = get_qgis_app()

from safe.common.exceptions import ZeroImpactException, TranslationLoadError
from safe.engine.core import calculate_impact as safe_calculate_impact
from safe.impact_functions.impact_function_manager import \
ImpactFunctionManager
from safe.report.impact_report import ImpactReport
from safe.storage.safe_layer import SafeLayer
from safe.storage.core import read_layer, read_qgis_layer
from safe.test.utilities import get_qgis_app
from safe.utilities.keyword_io import KeywordIO
from safe.utilities.styling import set_vector_categorized_style, \
set_vector_graduated_style, setRasterStyle
Expand All @@ -46,7 +49,6 @@


LOGGER = logging.getLogger(realtime_logger_name())
QGIS_APP, CANVAS, IFACE, PARENT = get_qgis_app()


class FloodEvent(QObject):
Expand Down
55 changes: 54 additions & 1 deletion realtime/tasks/earthquake.py
@@ -1,4 +1,57 @@
# coding=utf-8

import logging

import os

from realtime.celery_app import app
from realtime.celeryconfig import EARTHQUAKE_WORKING_DIRECTORY
from realtime.earthquake.make_map import process_event
from realtime.utilities import realtime_logger_name

__author__ = 'Rizky Maulana Nugraha <lana.pcfre@gmail.com>'
__date__ = '12/11/15'
__date__ = '2/16/16'


# Initialized in realtime.__init__
LOGGER = logging.getLogger(realtime_logger_name())


@app.task(
name='realtime.tasks.earthquake.process_shake', queue='inasafe-realtime')
def process_shake(event_id=None):
LOGGER.info('-------------------------------------------')

if 'INASAFE_LOCALE' in os.environ:
locale_option = os.environ['INASAFE_LOCALE']
else:
locale_option = 'en'

working_directory = EARTHQUAKE_WORKING_DIRECTORY

if not check_event_exists(event_id):
LOGGER.info('Shake grid not exists')
return False

try:
process_event(working_directory, event_id, locale_option)
LOGGER.info('Process event end.')
return True
except Exception as e:
LOGGER.exception(e)

return False


@app.task(
name='realtime.tasks.earthquake.check_event_exists',
queue='inasafe-realtime')
def check_event_exists(event_id=None):
LOGGER.info('-------------------------------------------')

working_directory = EARTHQUAKE_WORKING_DIRECTORY
grid_path = os.path.join(
working_directory,
event_id,
'output/grid.xml')
return os.path.exists(grid_path)
5 changes: 3 additions & 2 deletions realtime/tasks/flood.py
Expand Up @@ -18,7 +18,7 @@

@app.task(
name='realtime.tasks.flood.process_flood', queue='inasafe-realtime')
def process_flood():
def process_flood(event_folder=None):
LOGGER.info('-------------------------------------------')

if 'INASAFE_LOCALE' in os.environ:
Expand All @@ -28,7 +28,8 @@ def process_flood():

working_directory = FLOOD_WORKING_DIRECTORY
try:
process_event(working_directory, locale_option)
process_event(
working_directory, locale_option, dummy_folder=event_folder)
LOGGER.info('Process event end.')
return True
except Exception as e:
Expand Down
1 change: 0 additions & 1 deletion realtime/test/test_inasafe_django_rest.py
Expand Up @@ -2,7 +2,6 @@
import unittest

from hammock import Hammock
from requests.models import Response
from requests import codes

from realtime.push_rest import INASAFE_REALTIME_REST_URL, InaSAFEDjangoREST
Expand Down
1 change: 1 addition & 0 deletions realtime/test/test_push_rest.py
Expand Up @@ -5,6 +5,7 @@
from requests import codes

from realtime.earthquake.push_shake import notify_realtime_rest
from realtime.earthquake.shake_event import ShakeEvent
from realtime.push_rest import InaSAFEDjangoREST

__author__ = 'Rizky Maulana Nugraha <lana.pcfre@gmail.com>'
Expand Down

0 comments on commit fb1bdf5

Please sign in to comment.