Plugins API signals, OAM plugin DS cleanup

pull/492/head
Piero Toffanin 2018-07-27 15:16:14 -04:00
rodzic 8f0791aacc
commit 37b4dff624
6 zmienionych plików z 37 dodań i 4 usunięć

Wyświetl plik

@ -499,6 +499,9 @@ class Task(models.Model):
self.update_available_assets_field() self.update_available_assets_field()
self.save() self.save()
from app.plugins import signals as plugin_signals
plugin_signals.task_completed.send_robust(sender=self.__class__, task_id=self.id)
else: else:
# FAILED, CANCELED # FAILED, CANCELED
self.save() self.save()
@ -576,6 +579,10 @@ class Task(models.Model):
def delete(self, using=None, keep_parents=False): def delete(self, using=None, keep_parents=False):
task_id = self.id
from app.plugins import signals as plugin_signals
plugin_signals.task_removing.send_robust(sender=self.__class__, task_id=task_id)
directory_to_delete = os.path.join(settings.MEDIA_ROOT, directory_to_delete = os.path.join(settings.MEDIA_ROOT,
task_directory_path(self.id, self.project.id)) task_directory_path(self.id, self.project.id))
@ -587,6 +594,8 @@ class Task(models.Model):
except FileNotFoundError as e: except FileNotFoundError as e:
logger.warning(e) logger.warning(e)
plugin_signals.task_removed.send_robust(sender=self.__class__, task_id=task_id)
def set_failure(self, error_message): def set_failure(self, error_message):
logger.error("FAILURE FOR {}: {}".format(self, error_message)) logger.error("FAILURE FOR {}: {}".format(self, error_message))
self.last_error = error_message self.last_error = error_message

Wyświetl plik

@ -67,6 +67,14 @@ class DataStore(ABC):
def has_key(self, key): def has_key(self, key):
return self.get_datum(key) is not None return self.get_datum(key) is not None
def del_key(self, key):
datum = self.get_datum(key)
if datum is not None:
datum.delete()
return True
else:
return False
class UserDataStore(DataStore): class UserDataStore(DataStore):
def __init__(self, namespace, user): def __init__(self, namespace, user):

Wyświetl plik

@ -0,0 +1,5 @@
import django.dispatch
task_completed = django.dispatch.Signal(providing_args=["task_id"])
task_removing = django.dispatch.Signal(providing_args=["task_id"])
task_removed = django.dispatch.Signal(providing_args=["task_id"])

Wyświetl plik

@ -7,5 +7,6 @@ module.exports = {
}, },
setupFiles: ["<rootDir>/app/static/app/js/tests/setup/shims.js", setupFiles: ["<rootDir>/app/static/app/js/tests/setup/shims.js",
"<rootDir>/app/static/app/js/tests/setup/setupTests.js", "<rootDir>/app/static/app/js/tests/setup/setupTests.js",
"<rootDir>/app/static/app/js/tests/setup/browserMock.js"] "<rootDir>/app/static/app/js/tests/setup/browserMock.js"],
testURL: "http://localhost:8000/"
}; };

Wyświetl plik

@ -10,11 +10,12 @@ from rest_framework import status
from rest_framework.response import Response from rest_framework.response import Response
from app.models import ImageUpload from app.models import ImageUpload
from app.plugins import GlobalDataStore, get_site_settings from app.plugins import GlobalDataStore, get_site_settings, signals as plugin_signals
from app.plugins.views import TaskView from app.plugins.views import TaskView
from app.plugins.worker import task from app.plugins.worker import task
from webodm import settings from webodm import settings
from django.dispatch import receiver
import requests import requests
@ -35,11 +36,15 @@ def get_task_info(task_id):
'error': '' 'error': ''
}) })
def set_task_info(task_id, json): def set_task_info(task_id, json):
return ds.set_json(get_key_for(task_id, "info"), json) return ds.set_json(get_key_for(task_id, "info"), json)
# TODO: task info cleanup when task is deleted via signal @receiver(plugin_signals.task_removed, dispatch_uid="oam_on_task_removed")
def on_task_removed(sender, task_id, **kwargs):
logger.info("Cleaning up OAM datastore for task {}".format(str(task_id)))
ds.del_key(get_key_for(task_id, "info"))
class Info(TaskView): class Info(TaskView):
@ -85,6 +90,7 @@ class Info(TaskView):
return Response(task_info, status=status.HTTP_200_OK) return Response(task_info, status=status.HTTP_200_OK)
class JSONSerializer(serializers.Serializer): class JSONSerializer(serializers.Serializer):
oamParams = serializers.JSONField(help_text="OpenAerialMap share parameters (sensor, title, provider, etc.)") oamParams = serializers.JSONField(help_text="OpenAerialMap share parameters (sensor, title, provider, etc.)")

Wyświetl plik

@ -30,7 +30,11 @@ class Plugin(PluginBase):
def load_buttons_cb(request): def load_buttons_cb(request):
if request.user.is_authenticated: if request.user.is_authenticated:
ds = self.get_user_data_store(request.user) ds = self.get_user_data_store(request.user)
return {'token': ds.get_string('token')} token = ds.get_string('token')
if token == '':
return False
return {'token': token}
else: else:
return False return False