def testListWFStatesByTitle(self): from Products.CMFPlone.WorkflowTool import WorkflowTool from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition from Products.DCWorkflow.States import StateDefinition tool = WorkflowTool() # Test without workflows self.assertListEqual(tool.listWFStatesByTitle(), []) self.assertListEqual(tool.listWFStatesByTitle(filter_similar=True), []) # Test with an empty workflow tool["foo"] = DCWorkflowDefinition("foo") self.assertListEqual(tool.listWFStatesByTitle(), []) self.assertListEqual(tool.listWFStatesByTitle(filter_similar=True), []) # Test with dummy states tool["foo"].states["private"] = StateDefinition("private") tool["foo"].states["published"] = StateDefinition("published") expected = [( "", "private", ), ("", "published")] self.assertListEqual(tool.listWFStatesByTitle(), expected) self.assertListEqual(tool.listWFStatesByTitle(filter_similar=True), expected) # Test with concurrent states tool["bar"] = DCWorkflowDefinition("bar") tool["bar"].states["private"] = StateDefinition("private") tool["bar"].states["pending"] = StateDefinition("pending") tool["bar"].states["published"] = StateDefinition("published") tool["bar"].states["published"].setProperties(title="Published") expected = [ ( "", "private", ), ("", "published"), ( "", "private", ), ("", "pending"), ("Published", "published"), ] self.assertListEqual(tool.listWFStatesByTitle(), expected) expected = [ ( "", "private", ), ("", "published"), ("", "pending"), ("Published", "published"), ] self.assertListEqual(tool.listWFStatesByTitle(filter_similar=True), expected)
def createHansardWorkflow(self, id): """Create the workflow for Bungeni. """ ob = DCWorkflowDefinition(id) setupHansardWorkflow(self, ob) return ob
def setUp(self): from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI from Products.CMFCore.tests.base.dummy import DummySite from Products.CMFCore.tests.base.dummy import DummyUserFolder from Products.CMFCore.tests.base.tidata import FTIDATA_DUMMY SecurityTest.setUp(self) self.site = DummySite('site').__of__(self.root) self.acl_users = self.site._setObject('acl_users', DummyUserFolder()) self.ttool = self.site._setObject('portal_types', self._makeOne()) fti = FTIDATA_DUMMY[0].copy() self.ttool._setObject('Dummy Content', FTI(**fti)) # setup workflow tool # to test 'Instance creation conditions' of workflows from Products.CMFCore.WorkflowTool import WorkflowTool self.site._setObject('portal_workflow', WorkflowTool()) wftool = self.site.portal_workflow from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition wftool._setObject('wf', DCWorkflowDefinition('wf')) wftool.setDefaultChain('wf') wf = wftool.wf wf.states.addState('initial') wf.states.setInitialState('initial') from Products.DCWorkflow.Guard import Guard g = Guard() wf.creation_guard = g
def createWestminsterBillWorkflow(self, id): """Create the workflow for Bungeni. """ ob = DCWorkflowDefinition(id) setupWestminsterBillWorkflow(self, ob) return ob
def createLensWorkflow(self, id): """Create the workflow for Lensmaker. """ ob = DCWorkflowDefinition(id) setupLensWorkflow(self, ob) return ob
def createRotaFolderWorkflow(self, id): """Create the workflow for Bungeni. """ ob = DCWorkflowDefinition(id) setupRotaFolderWorkflow(self, ob) return ob
def createMemberAutoWorkflow(self, id): """Create the workflow for Bungeni. """ ob = DCWorkflowDefinition(id) setupMemberAutoWorkflow(self, ob) return ob
def createOfficeWorkflow(self, id): """Create the workflow for Bungeni. """ ob = DCWorkflowDefinition(id) setupOfficeWorkflow(self, ob) return ob
def createParliamentWorkflow(self, id): """Create the workflow for Bungeni. """ ob = DCWorkflowDefinition(id) setupParliamentWorkflow(self, ob) return ob
def add_singlestate_workflow(tool): """2.1.x to 2.2.0 upgrade step handler """ wf_tool = getToolByName(tool, 'portal_workflow') if wf_tool.getWorkflowById(_SINGLESTATE_WF_ID) is None: from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition wf = DCWorkflowDefinition(_SINGLESTATE_WF_ID) wf.title = 'Single-state workflow' wf.initial_state = 'published' wf.state_var = 'review_state' wf.manager_bypass = False wf.permissions = ( access_contents_information , ModifyPortalContent , view ) wf.states.addState('published') public = wf.states.published public.title = 'Public' public.setPermission( access_contents_information , True , ('Anonymous', 'Manager') ) public.setPermission(ModifyPortalContent, False, ('Manager', 'Owner')) public.setPermission(view, True, ('Anonymous', 'Manager')) wf_tool._setObject(_SINGLESTATE_WF_ID, wf)
def createPoliticalGroupWorkflow(self, id): """Create the workflow for Bungeni. """ ob = DCWorkflowDefinition(id) setupPoliticalGroupWorkflow(self, ob) return ob
def _constructDummyWorkflow(self): from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition wftool = self.site.portal_workflow wftool._setObject('wf', DCWorkflowDefinition('wf')) wftool.setDefaultChain('wf') wf = wftool.wf wf.states.addState('private') sdef = wf.states['private'] sdef.setProperties(transitions=('publish', )) wf.states.addState('published') wf.states.setInitialState('private') wf.transitions.addTransition('publish') tdef = wf.transitions['publish'] tdef.setProperties(title='', new_state_id='published', actbox_name='') wf.variables.addVariable('comments') vdef = wf.variables['comments'] vdef.setProperties( description='', default_expr="python:state_change.kwargs.get('comment', '')", for_status=1, update_always=1)
def addMissingWorkflows(context): """Add new Plone 3.0 workflows """ portal = getToolByName(context, 'portal_url').getPortalObject() wft = getToolByName(portal, 'portal_workflow', None) if wft is None: return new_workflow_ids = [ 'intranet_workflow', 'intranet_folder_workflow', 'one_state_workflow', 'simple_publication_workflow'] encoding = 'utf-8' path_prefix = os.path.join(package_home(cmfplone_globals), 'profiles', 'default', 'workflows') for wf_id in new_workflow_ids: if wf_id in wft.objectIds(): logger.info("Workflow %s already installed; doing nothing" % wf_id) continue path = os.path.join(path_prefix, wf_id, 'definition.xml') body = open(path,'r').read() wft._setObject(wf_id, DCWorkflowDefinition(wf_id)) wf = wft[wf_id] wfdc = WorkflowDefinitionConfigurator(wf) ( workflow_id , title , state_variable , initial_state , states , transitions , variables , worklists , permissions , scripts , description , manager_bypass , creation_guard ) = wfdc.parseWorkflowXML(body, encoding) _initDCWorkflow( wf , title , description , manager_bypass , creation_guard , state_variable , initial_state , states , transitions , variables , worklists , permissions , scripts , portal # not sure what to pass here # the site or the wft? # (does it matter at all?) ) logger.info("Added workflow %s" % wf_id)
def _constructDummyWorkflow(self): from Products.DCWorkflow.DCWorkflow import DCWorkflowDefinition wftool = self.site.portal_workflow wftool._setObject('wf', DCWorkflowDefinition('wf')) wftool.setDefaultChain('wf') wf = wftool.wf wf.worklists.addWorklist('reviewer_queue')
def setUp(self): self.site = DummySite('site') self.site._setObject('portal_types', DummyTool()) self.site._setObject('portal_workflow', WorkflowTool()) # Construct a workflow wftool = self.site.portal_workflow wftool._setObject('wf', DCWorkflowDefinition('wf')) wftool.setDefaultChain('wf')
def setUp(self): self.site = DummySite('site') # Construct a workflow self.wtool = WorkflowTool() self.wtool._setObject('wf', DCWorkflowDefinition('wf')) self.wtool.setDefaultChain('wf') sm = getSiteManager() sm.registerUtility(self.wtool, IWorkflowTool) sm.registerUtility(DummyTool(), ITypesTool)
def create(workflow_id): """create a workflow >>> from Products.AlphaFlow.Extensions import dcworkflow >>> wf = dcworkflow.create('simple') >>> wf.getId() 'simple' >>> wf = dcworkflow.create('complex') >>> wf.getId() 'complex' """ ob = DCWorkflowDefinition(workflow_id) return ob
def createPSC_improvementproposal_workflow(id): "..." ob = DCWorkflowDefinition(id) setupPSC_improvementproposal_workflow(ob) return ob
def createERP5Workflow(id): """Creates an ERP5 Workflow """ ob = DCWorkflowDefinition(id) setupERP5Workflow(ob) return ob
def importWorkflowTool(context): """ Import worflow tool and contained workflow definitions. o 'context' must implement IImportContext. o Register via Python: registry = site.portal_setup.getImportStepRegistry() registry.registerStep( 'importWorkflowTool' , '20040602-01' , Products.CMFSetup.workflow.importWorkflowTool , () , 'Workflow import' , 'Import worflow tool and contained workflow ' 'definitions.' ) o Register via XML: <setup-step id="importWorkflowTool" version="20040602-01" handler="Products.CMFSetup.workflow.importWorkflowTool" title="Workflow import" >Import worflow tool and contained workflow definitions.</setup-step> """ site = context.getSite() encoding = context.getEncoding() tool = getToolByName(site, 'portal_workflow') if context.shouldPurge(): tool.setDefaultChain('') if tool._chains_by_type is not None: tool._chains_by_type.clear() for workflow_id in tool.getWorkflowIds(): tool._delObject(workflow_id) text = context.readDataFile(_FILENAME) if text is not None: wftc = WorkflowToolConfigurator(site, encoding) tool_info = wftc.parseXML(text) wfdc = WorkflowDefinitionConfigurator(site) for info in tool_info['workflows']: if info['meta_type'] == DCWorkflowDefinition.meta_type: filename = info['filename'] sep = filename.rfind('/') if sep == -1: wf_text = context.readDataFile(filename) else: wf_text = context.readDataFile(filename[sep + 1:], filename[:sep]) (workflow_id, title, state_variable, initial_state, states, transitions, variables, worklists, permissions, scripts) = wfdc.parseWorkflowXML(wf_text, encoding) workflow_id = str(workflow_id) # No unicode! tool._setObject(workflow_id, DCWorkflowDefinition(workflow_id)) workflow = tool._getOb(workflow_id) _initDCWorkflow(workflow, title, state_variable, initial_state, states, transitions, variables, worklists, permissions, scripts, context) else: pass # TODO: handle non-DCWorkflows for type_id, workflow_ids in tool_info['bindings'].items(): chain = ','.join(workflow_ids) if type_id is None: tool.setDefaultChain(chain) else: tool.setChainForPortalTypes((type_id, ), chain) return 'Workflows imported.'
def createCollector_issue_workflow(id): "..." ob = DCWorkflowDefinition(id) setupCollector_issue_workflow(ob) return ob
def createPatchWorkflow(id): wf = DCWorkflowDefinition(id) wf.setProperties(title='Patch Workflow [Rhaptos]') for s in ('created', 'submitted', 'applied', 'rejected'): wf.states.addState(s) for t in ('submit', 'apply', 'reject'): wf.transitions.addTransition(t) for v in ('action', 'actor', 'comments', 'review_history', 'time'): wf.variables.addVariable(v) wf.states.setInitialState('created') # Configure states sdef = wf.states['created'] sdef.setProperties(title='Newly created', transitions=('submit', )) sdef = wf.states['submitted'] sdef.setProperties( title='Submitted and pending review', transitions=( 'apply', 'reject', ), description= 'Waiting on a reviewer to accept the patch and apply it to the correct content' ) sdef = wf.states['applied'] sdef.setProperties( title='Accepted by a reviwer', description= 'The patch has been accepted and applied to a working copy of the content item. The changes will not be public, however, until the item is published' ) sdef = wf.states['rejected'] sdef.setProperties( title='Rejected by a reviwer', description='The changes have been rejected by a reviewer.') # Configure transitions tdef = wf.transitions['apply'] tdef.setProperties(title='Reviewer applies changes', new_state_id='applied') tdef = wf.transitions['reject'] tdef.setProperties(title='Reviewer rejects changes', new_state_id='rejected') tdef = wf.transitions['submit'] tdef.setProperties(title='Submit for review', new_state_id='submitted') # Configure variables wf.variables.setStateVar('review_state') vdef = wf.variables['action'] vdef.setProperties(description='The last transition', default_expr='transition/getId|nothing', for_status=1, update_always=1) vdef = wf.variables['actor'] vdef.setProperties(description='The ID of the user who performed ' 'the last transition', default_expr='user/getId', for_status=1, update_always=1) vdef = wf.variables['comments'] vdef.setProperties( description='Comments about the last transition', default_expr="python:state_change.kwargs.get('comment', '')", for_status=1, update_always=1) vdef = wf.variables['review_history'] vdef.setProperties(description='Provides access to workflow history', default_expr="state_change/getHistory", props={'guard_permissions': View}) vdef = wf.variables['time'] vdef.setProperties(description='Time of the last transition', default_expr="state_change/getDateTime", for_status=1, update_always=1) configureEventPermissions(wf) return wf
def create_UWOshOIEProgramWorkflow(id): """Create, setup and return the workflow. """ ob = DCWorkflowDefinition(id) setup_UWOshOIEProgramWorkflow(ob) return ob
def createPSC_release_workflow(id): "..." ob = DCWorkflowDefinition(id) setupPSC_release_workflow(ob) return ob
def createDefaultWorkflowRev2(id): ''' ''' ob = DCWorkflowDefinition(id) setupDefaultWorkflowRev2(ob) return ob
def createDefaultWorkflowClassic(id): ''' ''' ob = DCWorkflowDefinition(id) setupDefaultWorkflowClassic(ob) return ob
def createEasyshop_order_workflow(id): "..." ob = DCWorkflowDefinition(id) setupEasyshop_order_workflow(ob) return ob