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.save()
from app.plugins import signals as plugin_signals
plugin_signals.task_completed.send_robust(sender=self.__class__, task_id=self.id)
else:
# FAILED, CANCELED
self.save()
@ -576,6 +579,10 @@ class Task(models.Model):
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,
task_directory_path(self.id, self.project.id))
@ -587,6 +594,8 @@ class Task(models.Model):
except FileNotFoundError as e:
logger.warning(e)
plugin_signals.task_removed.send_robust(sender=self.__class__, task_id=task_id)
def set_failure(self, error_message):
logger.error("FAILURE FOR {}: {}".format(self, error_message))
self.last_error = error_message

Wyświetl plik

@ -67,6 +67,14 @@ class DataStore(ABC):
def has_key(self, key):
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):
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",
"<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 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.worker import task
from webodm import settings
from django.dispatch import receiver
import requests
@ -35,11 +36,15 @@ def get_task_info(task_id):
'error': ''
})
def set_task_info(task_id, 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):
@ -85,6 +90,7 @@ class Info(TaskView):
return Response(task_info, status=status.HTTP_200_OK)
class JSONSerializer(serializers.Serializer):
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):
if request.user.is_authenticated:
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:
return False