kopia lustrzana https://github.com/OpenDroneMap/WebODM
Plugins API signals, OAM plugin DS cleanup
rodzic
8f0791aacc
commit
37b4dff624
|
@ -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
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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"])
|
|
@ -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/"
|
||||||
};
|
};
|
|
@ -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.)")
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue