示例#1
0
文件: bus.py 项目: Aeromg/queuemagic
    def __init__(self, email, data, service_resolver):
        assert isinstance(email, EmailFacade)
        assert isinstance(data, dict)
        assert isinstance(service_resolver, ServiceResolver)

        self._service_resolver = service_resolver
        self._snapshot = EmailSnapshotBranch(email=email)
        self._data = data
        self._modules = {}
        self._is_disposing = False
        self._identity = None
        self._is_authorised = None
示例#2
0
文件: bus.py 项目: Aeromg/queuemagic
class Bus(object):
    def __init__(self, email, data, service_resolver):
        assert isinstance(email, EmailFacade)
        assert isinstance(data, dict)
        assert isinstance(service_resolver, ServiceResolver)

        self._service_resolver = service_resolver
        self._snapshot = EmailSnapshotBranch(email=email)
        self._data = data
        self._modules = {}
        self._is_disposing = False
        self._identity = None
        self._is_authorised = None

    @property
    def user(self):
        return self._data['sasl_username'] if 'sasl_username' in self._data.keys() else self.sender.split('@')[0]

    @property
    def sender(self):
        return self._data['sender'] if 'sender' in self._data.keys() else self._snapshot.email.from_address.address

    @property
    def recipient(self):
        if 'recipient' in self._data.keys():
            return self._data['recipient']
        else:
            return self._snapshot.email.to_addresses[0].address if len(self._snapshot.email.to_addresses) > 0 else None

    @property
    def identity(self):
        """
        :rtype : Identification
        """
        if self._is_authorised is None:
            auth_source = self._service_resolver.get_service(IdentificationSource)
            assert isinstance(auth_source, IdentificationSource)
            info = auth_source.try_get_auth(self.sender)
            self._is_authorised = not info is None
            self._identity = info

        return self._identity

    @property
    def email(self):
        return self._snapshot.email

    @property
    def data(self):
        return self._data

    @property
    def modules(self):
        return self._modules

    def append_module_data(self, module, key, data):
        assert isinstance(key, str)
        assert isinstance(data, dict)

        if module.alias in self.modules.keys():
            module_dict = self.modules[module.alias]
        else:
            module_dict = {}
            self.modules[module.alias] = module_dict

        if key in module_dict.keys():
            module_dict[key].update(data)
        else:
            module_dict[key] = data.copy()

    def append_bus_data(self, key, data):
        self._data[key] = data

    def snapshot_push(self):
        log_debug('Snapshot PUSH from version {0}', self._snapshot.version)
        self._snapshot.push()
        log_debug('Current snapshot version {0}', self._snapshot.version)

    def snapshot_pull(self):
        log_debug('Snapshot PULL from version {0}', self._snapshot.version)
        self._snapshot.pull()
        log_debug('Current snapshot version {0}', self._snapshot.version)

    def snapshot_throw(self):
        log_debug('Snapshot THROW from version {0}', self._snapshot.version)
        self._snapshot.throw()
        log_debug('Current snapshot version {0}', self._snapshot.version)

    def snapshot_pull_all(self):
        log_debug('Snapshot PUSH ALL from version {0}', self._snapshot.version)
        self._snapshot.pull_all()
        log_debug('Current snapshot version {0}', self._snapshot.version)

    def snapshot_throw_all(self):
        log_debug('Snapshot PULL ALL from version {0}', self._snapshot.version)
        self._snapshot.throw_all()
        log_debug('Current snapshot version {0}', self._snapshot.version)

    @property
    def snapshot_version(self):
        return self._snapshot.version

    def append_stage_result(self, module, run=None, filter_result=None):
        run_result = StageResult(module=module)

        if 'modules_run' not in self.data.keys():
            modules_run_section = {}
            self.data['modules_run'] = modules_run_section
        else:
            modules_run_section = self.data['modules_run']

        if not run is None:
            run_result.run = run

        if not filter_result is None:
            run_result.filter = filter_result

        modules_run_section[len(modules_run_section)] = run_result
        return run_result

    @property
    def is_disposing(self):
        return self._is_disposing

    def dispose(self):
        log_debug('Calling pipeline disposing. Previous disposing bus: {0}', self._is_disposing)
        self._is_disposing = True