def _start_subprocess(self, action): proposal = self.process.execution_context.created_entity('proposal') working_group = proposal.working_group work_mode_ballot = getattr(working_group, 'work_mode_configuration_ballot', None) if work_mode_ballot is not None and work_mode_ballot.report.voters: electeds = work_mode_ballot.report.get_electeds() if electeds: working_group.work_mode_id = electeds[0] root = proposal.__parent__ work_mode = getattr(working_group, 'work_mode', root.get_default_work_mode()) def_container = find_service('process_definition_container') pd = def_container.get_definition(work_mode.work_mode_process_id) proc = pd() proc.__name__ = proc.id runtime = find_service('runtime') runtime.addtoproperty('processes', proc) proc.defineGraph(pd) self.definition._init_subprocess(self.process, proc) proc.attachedTo = action proc.execute() self.sub_processes.append(proc) return proc
def start(self, context, request, appstruct, **kw): user = get_current() if not hasattr(user, 'customeraccount') and\ context.customer: user = context.customer.user if '_csrf_token_' in appstruct: appstruct.pop('_csrf_token_') service = self.service(**appstruct) service.configure(context, user) subscribed = service.subscribe(context, user) if subscribed: grant_roles( service.delegate, roles=(("Moderator", context),)) service.delegate.reindex() def_container = find_service('process_definition_container') runtime = find_service('runtime') for process_id in service.processes_id: pd = def_container.get_definition(process_id) proc = pd() proc.__name__ = proc.id runtime.addtoproperty('processes', proc) proc.defineGraph(pd) proc.execution_context.add_involved_entity('site', context) proc.execution_context.add_created_entity('service', service) proc.execute() context.modified_at = datetime.datetime.now(tz=pytz.UTC) service.reindex() return {}
def start(self, context, request, appstruct, **kw): user = get_current() if not hasattr(user, 'customeraccount') and\ context.customer: user = context.customer.user if '_csrf_token_' in appstruct: appstruct.pop('_csrf_token_') service = self.service(**appstruct) service.configure(context, user) subscribed = service.subscribe(context, user) if subscribed: grant_roles(service.delegate, roles=(("Moderator", context), )) service.delegate.reindex() def_container = find_service('process_definition_container') runtime = find_service('runtime') for process_id in service.processes_id: pd = def_container.get_definition(process_id) proc = pd() proc.__name__ = proc.id runtime.addtoproperty('processes', proc) proc.defineGraph(pd) proc.execution_context.add_involved_entity('site', context) proc.execution_context.add_created_entity('service', service) proc.execute() context.modified_at = datetime.datetime.now(tz=pytz.UTC) service.reindex() return {}
def _start_subprocess(self, action): proposal = self.process.execution_context.created_entity('proposal') working_group = proposal.working_group work_mode_ballot = getattr( working_group, 'work_mode_configuration_ballot', None) if work_mode_ballot is not None and work_mode_ballot.report.voters: electeds = work_mode_ballot.report.get_electeds() if electeds: working_group.work_mode_id = electeds[0] root = proposal.__parent__ work_mode = getattr( working_group, 'work_mode', root.get_default_work_mode()) def_container = find_service('process_definition_container') pd = def_container.get_definition( work_mode.work_mode_process_id) proc = pd() proc.__name__ = proc.id runtime = find_service('runtime') runtime.addtoproperty('processes', proc) proc.defineGraph(pd) self.definition._init_subprocess(self.process, proc) proc.attachedTo = action proc.execute() self.sub_processes.append(proc) return proc
def _start_subprocess(self, action): def_container = find_service('process_definition_container') pd = def_container.get_definition(getattr(self.definition.sub_process_definition, 'id', self.definition.sub_process_definition)) proc = pd() proc.__name__ = proc.id runtime = find_service('runtime') runtime.addtoproperty('processes', proc) proc.defineGraph(pd) self.definition._init_subprocess(self.process, proc) proc.attachedTo = action proc.execute() self.sub_processes.append(proc) return proc
def get_roles(user=None, obj=None, root=None, ignore_groups=False): if user is None: user = get_current() if isinstance(user, Anonymous): return [RoleAnonymous.name] if root is None: root = getSite() if obj is None: obj = root opts = {u'source_id': get_oid(user), u'target_id': get_oid(obj)} opts[u'reftype'] = 'Role' roles = [r.relation_id for r in find_relations(obj, opts).all()] principals = find_service('principals') sd_admin = principals['users']['admin'] if sd_admin is user and 'Admin' not in roles: roles.append('Admin') groups = [] if not ignore_groups: groups.extend(getattr(user, 'user_groups', [])) for group in groups: roles.extend(get_roles(group, obj, root)) return list(set(roles))
def definition(self): def_container = find_service('process_definition_container') pd = None if def_container is not None: pd = def_container.get_definition(self.id) return pd
def get_access_keys(user, root=None, to_exclude=[]): if isinstance(user, Anonymous): return ['anonymous'] principals = find_service('principals') sd_admin = principals['users']['admin'] pricipal_root = getSite() if root is None: root = pricipal_root root_oid = get_oid(root) principal_root_oid = get_oid(pricipal_root) if sd_admin is user: return list( set([('admin' + '_' + str(root_oid)).lower(), ('admin' + '_' + str(principal_root_oid)).lower()])) groups = list(getattr(user, 'user_groups', [])) groups.append(user) relations = [] for group in groups: opts = {u'source_id': get_oid(group)} opts[u'reftype'] = 'Role' relations.extend(list(find_relations(group, opts).all())) result = [(t.relation_id+'_'+str(t.target_id)).lower() \ for t in relations if t.target_id not in to_exclude] for relation in relations: if relation.relation_id == 'Admin': result.append(('admin' + '_' + str(principal_root_oid)).lower()) break return list(set(result))
def get_access_keys(user, root=None, to_exclude=[]): if isinstance(user, Anonymous): return ['anonymous'] principals = find_service('principals') sd_admin = principals['users']['admin'] pricipal_root = getSite() if root is None: root = pricipal_root root_oid = get_oid(root) principal_root_oid = get_oid(pricipal_root) if sd_admin is user: return list(set([('admin'+'_'+str(root_oid)).lower(), ('admin'+'_'+str(principal_root_oid)).lower()])) groups = list(getattr(user, 'user_groups', [])) groups.append(user) relations = [] for group in groups: opts = {u'source_id': get_oid(group)} opts[u'reftype'] = 'Role' relations.extend(list(find_relations(group, opts).all())) result = [(t.relation_id+'_'+str(t.target_id)).lower() \ for t in relations if t.target_id not in to_exclude] for relation in relations: if relation.relation_id == 'Admin': result.append(('admin'+'_'+str(principal_root_oid)).lower()) break return list(set(result))
def run_ballot(self, context=None): """Run range voting processes for all electors""" processes = [] def_container = find_service('process_definition_container') runtime = find_service('runtime') pd = def_container.get_definition(self.vote_process_id) if context is None: context = self.report.subjects[0].__parent__ proc = pd() proc.__name__ = proc.id runtime.addtoproperty('processes', proc) proc.defineGraph(pd) proc.execution_context.add_involved_entity('subject', context) proc.ballot = self.report.ballot proc.execute() processes.append(proc) return processes
def stop(self): runtime = find_service('runtime') for process in self.sub_processes: process._finished = True for node in process.nodes: node.stop() node.setproperty('workitems', []) runtime.delfromproperty('processes', process)
def _get_start_action(self): action = None pd_id = self.params('pd_id') action_id = self.params('action_id') behavior_id = self.params('behavior_id') def_container = find_service('process_definition_container') pd = def_container.get_definition(pd_id) start_wi = pd.start_process(action_id)[action_id] for start_action in start_wi.actions: if start_action.behavior_id == behavior_id: action = start_action break return action
def consume(self): def_container = find_service('process_definition_container') pd = def_container.get_definition(self.process_id) started_processes = pd.started_processes if pd.isUnique and started_processes: proc = started_processes[0] self.process = proc wi = proc[self.node.__name__]._get_workitem() if wi is None: return wi.set_actions(self.actions) if self.dont_lock: self.call(wi) return wi, proc proc = pd() runtime = find_service('runtime') proc.__name__ = proc.id runtime.addtoproperty('processes', proc) proc.defineGraph(pd) proc.start() self.process = proc self.path.transitions = [proc[t.__name__] \ for t in self.path.transitions] self.path._dirty() start_transaction = proc.global_transaction.start_subtransaction( 'Start', (self.path.first[0]), initiator=self) proc[self.path.sources[0].__name__].start(start_transaction) replay_transaction = proc.global_transaction.start_subtransaction( 'Replay', path=self.path, initiator=self) proc.replay_path(self, replay_transaction) proc.global_transaction.remove_subtransaction(replay_transaction) wi = proc[self.node.__name__]._get_workitem() #wi.start(*args) return wi, proc
def start(self, context, request, appstruct, **kw): if isinstance(context.perimeter, SiteFolder): processes = [ p for p in context.involvers if p.discriminator == 'Service' ] if processes: runtime = find_service('runtime') for process in processes: runtime.delfromproperty('processes', process) revoke_roles(context.delegate, roles=(('Moderator', context.perimeter), ), root=context.perimeter) context.delegate.reindex() context.unsubscribe(context.perimeter, context.customer.user) return {}
def start(self, context, request, appstruct, **kw): if isinstance(context.perimeter, SiteFolder): processes = [p for p in context.involvers if p.discriminator == 'Service'] if processes: runtime = find_service('runtime') for process in processes: runtime.delfromproperty('processes', process) revoke_roles( context.delegate, roles=(('Moderator', context.perimeter),), root=context.perimeter) context.delegate.reindex() context.unsubscribe(context.perimeter, context.customer.user) return {}
def has_any_roles(user=None, roles=(), ignore_superiors=False, root=None): if not roles: return True normalized_roles = {} if root is None: root = getSite() for role in roles: if isinstance(role, basestring): normalized_roles[role] = root if not ignore_superiors: normalized_roles.update(dict(_get_allsuperiors(role, root))) else: normalized_roles[role[0]] = role[1] if not ignore_superiors: normalized_roles.update(dict(_get_allsuperiors(role[0], root))) if user is None: user = get_current() if isinstance(user, Anonymous): return RoleAnonymous.name in normalized_roles if 'Admin' in normalized_roles: principals = find_service('principals') sd_admin = principals['users']['admin'] if sd_admin is user: return True groups = list(getattr(user, 'user_groups', [])) groups.append(user) for role in normalized_roles: context = normalized_roles[role] opts = {u'source_id': ( 'any', tuple(sorted([get_oid(g) for g in groups]))), u'target_id': get_oid(context)} opts[u'relation_id'] = role opts[u'reftype'] = 'Role' if find_relations(root, opts): return True return False
def has_any_roles(user=None, roles=(), ignore_superiors=False, root=None): if not roles: return True normalized_roles = {} if root is None: root = getSite() for role in roles: if isinstance(role, basestring): normalized_roles[role] = root if not ignore_superiors: normalized_roles.update(dict(_get_allsuperiors(role, root))) else: normalized_roles[role[0]] = role[1] if not ignore_superiors: normalized_roles.update(dict(_get_allsuperiors(role[0], root))) if user is None: user = get_current() if isinstance(user, Anonymous): return RoleAnonymous.name in normalized_roles if 'Admin' in normalized_roles: principals = find_service('principals') sd_admin = principals['users']['admin'] if sd_admin is user: return True groups = list(getattr(user, 'user_groups', [])) groups.append(user) for role in normalized_roles: context = normalized_roles[role] opts = { u'source_id': ('any', tuple(sorted([get_oid(g) for g in groups]))), u'target_id': get_oid(context) } opts[u'relation_id'] = role opts[u'reftype'] = 'Role' if find_relations(root, opts): return True return False
def evolve_process_def(root, registry): def_container = find_service('process_definition_container') for pd in def_container.definitions: pd.contexts = PersistentList([]) log.info('Process def evolved.')
def _get_lock_service(resource): locks = find_service('locks') if locks is None: raise ValueError('No lock service in lineage') return locks