Beispiel #1
0
    def __init__(self, **kwargs):
        self.workflow_name = kwargs.pop('workflow_name', '')
        self.request = kwargs.pop('request', {})
        self.response = kwargs.pop('response', {})
        try:
            self.session = self.request.env['session']
            self.input = self.request.context['data']
            self.output = self.request.context['result']
        except AttributeError:
            # when we want to use engine functions independently,
            # we need to create a fake current object
            self.session = {}
            self.input = {}
            self.output = {}
        self.spec = None
        self.user_id = None
        self.workflow = None
        self.task_type = ''
        self.task_data = {}
        self.task = None
        self.log = log
        self.name = ''
        self.activity = ''

        self.auth = lazy_object_proxy.Proxy(lambda: AuthBackend(self.session))
        self.user = lazy_object_proxy.Proxy(lambda: self.auth.get_user())

        if 'token' in self.input:
            self.token = self.input['token']
            log.info("TOKEN iNCOMiNG: %s " % self.token)
            self.new_token = False
        else:
            self.token = uuid4().hex
            self.new_token = True
            log.info("TOKEN NEW: %s " % self.token)

        self.wfcache = Cache(key=self.token, json=True)
        log.info("\n\nWFCACHE: %s" % self.wfcache.get())
        self.set_task_data()
        self.permissions = []
Beispiel #2
0
class Current(object):
    """
    This object holds and passes the whole state of the app to task methods (views/tasks)

    :type task: Task | None
    :type response: Response | None
    :type request: Request | None
    :type spec: WorkflowSpec | None
    :type workflow: Workflow | None
    :type session: Session | None
    """

    def __init__(self, **kwargs):
        self.workflow_name = kwargs.pop('workflow_name', '')
        self.request = kwargs.pop('request', {})
        self.response = kwargs.pop('response', {})
        try:
            self.session = self.request.env['session']
            self.input = self.request.context['data']
            self.output = self.request.context['result']
        except AttributeError:
            # when we want to use engine functions independently,
            # we need to create a fake current object
            self.session = {}
            self.input = {}
            self.output = {}
        self.spec = None
        self.user_id = None
        self.workflow = None
        self.task_type = ''
        self.task_data = {}
        self.task = None
        self.log = log
        self.name = ''
        self.activity = ''

        self.auth = lazy_object_proxy.Proxy(lambda: AuthBackend(self.session))
        self.user = lazy_object_proxy.Proxy(lambda: self.auth.get_user())

        if 'token' in self.input:
            self.token = self.input['token']
            log.info("TOKEN iNCOMiNG: %s " % self.token)
            self.new_token = False
        else:
            self.token = uuid4().hex
            self.new_token = True
            log.info("TOKEN NEW: %s " % self.token)

        self.wfcache = Cache(key=self.token, json=True)
        log.info("\n\nWFCACHE: %s" % self.wfcache.get())
        self.set_task_data()
        self.permissions = []

    @property
    def is_auth(self):
        if self.user_id is None:
            self.user_id = self.session.get('user_id', '')
        return bool(self.user_id)



    def has_permission(self, perm):
        return self.auth.has_permission(perm)

    def get_permissions(self):
        return self.auth.get_permissions()

    def update_task(self, task):
        """
        updates self.task with current task step
        then updates the task's data with self.task_data
        """
        self.task = task
        self.task.data.update(self.task_data)
        self.task_type = task.task_spec.__class__.__name__
        self.spec = task.task_spec
        self.name = task.get_name()
        self.activity = getattr(self.spec, 'service_class', '')

    def set_task_data(self, internal_cmd=None):
        """
        updates task data according to client input
        internal_cmd overrides client cmd if exists
        eihter way cmd should be one of ALLOWED_CLIENT_COMMANDS
        """
        if 'IS' not in self.task_data:
            self.task_data['IS'] = Condition()
        for cmd in ALLOWED_CLIENT_COMMANDS:
            self.task_data[cmd] = None
        # this cmd coming from inside of the app
        if internal_cmd and internal_cmd in ALLOWED_CLIENT_COMMANDS:
            self.task_data[internal_cmd] = True
            self.task_data['cmd'] = internal_cmd
        else:
            if 'cmd' in self.input and self.input['cmd'] in ALLOWED_CLIENT_COMMANDS:
                self.task_data[self.input['cmd']] = True
                self.task_data['cmd'] = self.input['cmd']
            else:
                self.task_data['cmd'] = None
        self.task_data['object_id'] = self.input.get('object_id', None)