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 = []
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)