示例#1
0
    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
示例#2
0
    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 {}
示例#3
0
    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 {}
示例#4
0
    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
示例#5
0
 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
示例#6
0
文件: activity.py 项目: ecreall/dace
 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
示例#7
0
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))
示例#8
0
文件: process.py 项目: ecreall/dace
 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
示例#9
0
文件: util.py 项目: ecreall/dace
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))
示例#10
0
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))
示例#11
0
文件: util.py 项目: ecreall/dace
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))
示例#12
0
    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
示例#13
0
    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
示例#14
0
    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
示例#15
0
文件: activity.py 项目: ecreall/dace
    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)
示例#16
0
文件: activity.py 项目: ecreall/dace
    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)
示例#17
0
文件: util.py 项目: ecreall/daceui
    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
示例#18
0
    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
示例#19
0
    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
示例#20
0
    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 {}
示例#21
0
    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 {}
示例#22
0
文件: util.py 项目: ecreall/dace
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
示例#23
0
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
示例#24
0
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.')
示例#25
0
def _get_lock_service(resource):
    locks = find_service('locks')
    if locks is None:
        raise ValueError('No lock service in lineage')
    return locks