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