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.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 | ||||
|  |  | |||
|  | @ -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): | ||||
|  |  | |||
|  | @ -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", | ||||
|   				"<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 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.)") | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 | ||||
| 
 | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Piero Toffanin
						Piero Toffanin