work in progressL: classification quality workflow
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2532 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
fd4be51425
commit
cbe2d994c5
3 changed files with 96 additions and 4 deletions
|
@ -70,12 +70,44 @@ Controlling classification quality
|
||||||
>>> from loops.organize.stateful.quality import ClassificationQualityCheckable
|
>>> from loops.organize.stateful.quality import ClassificationQualityCheckable
|
||||||
>>> component.provideAdapter(ClassificationQualityCheckable,
|
>>> component.provideAdapter(ClassificationQualityCheckable,
|
||||||
... name='loops.classification_quality')
|
... name='loops.classification_quality')
|
||||||
|
>>> from loops.organize.stateful.quality import assign, deassign
|
||||||
|
>>> component.provideHandler(assign)
|
||||||
|
>>> component.provideHandler(deassign)
|
||||||
|
|
||||||
>>> qcheckedDoc01 = component.getAdapter(doc01, IStateful,
|
>>> qcheckedDoc01 = component.getAdapter(doc01, IStateful,
|
||||||
... name='loops.classification_quality')
|
... name='loops.classification_quality')
|
||||||
>>> qcheckedDoc01.state
|
>>> qcheckedDoc01.state
|
||||||
'unclassified'
|
'unclassified'
|
||||||
|
|
||||||
|
>>> tCustomer = concepts['customer']
|
||||||
|
>>> from loops.concept import Concept
|
||||||
|
>>> from loops.setup import addAndConfigureObject
|
||||||
|
>>> c01 = addAndConfigureObject(concepts, Concept, 'c01', conceptType=tCustomer,
|
||||||
|
... title='im publishing')
|
||||||
|
>>> c02 = addAndConfigureObject(concepts, Concept, 'c02', conceptType=tCustomer,
|
||||||
|
... title='DocFive')
|
||||||
|
|
||||||
|
>>> c01.assignResource(doc01)
|
||||||
|
>>> qcheckedDoc01 = component.getAdapter(doc01, IStateful,
|
||||||
|
... name='loops.classification_quality')
|
||||||
|
>>> qcheckedDoc01.state
|
||||||
|
'classified'
|
||||||
|
|
||||||
|
>>> c02.assignResource(doc01)
|
||||||
|
>>> qcheckedDoc01.state
|
||||||
|
'classified'
|
||||||
|
|
||||||
|
>>> qcheckedDoc01.doTransition('verify')
|
||||||
|
>>> qcheckedDoc01.state
|
||||||
|
'verified'
|
||||||
|
|
||||||
|
>>> c02.deassignResource(doc01)
|
||||||
|
>>> qcheckedDoc01.state
|
||||||
|
'classified'
|
||||||
|
|
||||||
|
>>> c01.deassignResource(doc01)
|
||||||
|
>>> qcheckedDoc01.state
|
||||||
|
'unclassified'
|
||||||
|
|
||||||
|
|
||||||
Fin de partie
|
Fin de partie
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
xmlns:browser="http://namespaces.zope.org/browser"
|
xmlns:browser="http://namespaces.zope.org/browser"
|
||||||
i18n_domain="loops">
|
i18n_domain="loops">
|
||||||
|
|
||||||
|
<!-- stateful definitions and corresponding adapters -->
|
||||||
|
|
||||||
<zope:utility
|
<zope:utility
|
||||||
factory="cybertools.stateful.publishing.simplePublishing"
|
factory="cybertools.stateful.publishing.simplePublishing"
|
||||||
name="loops.simple_publishing" />
|
name="loops.simple_publishing" />
|
||||||
|
@ -19,4 +21,23 @@
|
||||||
set_schema="cybertools.stateful.interfaces.IStateful" />
|
set_schema="cybertools.stateful.interfaces.IStateful" />
|
||||||
</zope:class>
|
</zope:class>
|
||||||
|
|
||||||
|
<zope:utility
|
||||||
|
factory="loops.organize.stateful.quality.classificationQuality"
|
||||||
|
name="loops.classification_quality" />
|
||||||
|
|
||||||
|
<zope:adapter
|
||||||
|
factory="loops.organize.stateful.quality.ClassificationQualityCheckable"
|
||||||
|
name="loops.classification_quality" trusted="True" />
|
||||||
|
<zope:class class="loops.organize.stateful.quality.ClassificationQualityCheckable">
|
||||||
|
<require permission="zope.View"
|
||||||
|
interface="cybertools.stateful.interfaces.IStateful" />
|
||||||
|
<require permission="zope.ManageContent"
|
||||||
|
set_schema="cybertools.stateful.interfaces.IStateful" />
|
||||||
|
</zope:class>
|
||||||
|
|
||||||
|
<!-- event handlers -->
|
||||||
|
|
||||||
|
<zope:subscriber handler="loops.organize.stateful.quality.assign" />
|
||||||
|
<zope:subscriber handler="loops.organize.stateful.quality.deassign" />
|
||||||
|
|
||||||
</configure>
|
</configure>
|
||||||
|
|
|
@ -22,12 +22,17 @@ Basic implementations for stateful objects and adapters.
|
||||||
$Id$
|
$Id$
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from zope import component
|
||||||
|
from zope.component import adapter
|
||||||
from zope.interface import implementer
|
from zope.interface import implementer
|
||||||
|
from zope.traversing.api import getName
|
||||||
|
|
||||||
from cybertools.stateful.definition import registerStatesDefinition
|
from cybertools.stateful.definition import registerStatesDefinition
|
||||||
from cybertools.stateful.definition import StatesDefinition
|
from cybertools.stateful.definition import StatesDefinition
|
||||||
from cybertools.stateful.definition import State, Transition
|
from cybertools.stateful.definition import State, Transition
|
||||||
from cybertools.stateful.interfaces import IStatesDefinition
|
from cybertools.stateful.interfaces import IStatesDefinition, IStateful
|
||||||
|
from loops.interfaces import IAssignmentEvent, IDeassignmentEvent
|
||||||
|
from loops.interfaces import ILoopsObject, IResource
|
||||||
from loops.organize.stateful.base import StatefulLoopsObject
|
from loops.organize.stateful.base import StatefulLoopsObject
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,11 +40,12 @@ from loops.organize.stateful.base import StatefulLoopsObject
|
||||||
def classificationQuality():
|
def classificationQuality():
|
||||||
return StatesDefinition('classificationQuality',
|
return StatesDefinition('classificationQuality',
|
||||||
State('unclassified', 'unclassified', ('classify',)),
|
State('unclassified', 'unclassified', ('classify',)),
|
||||||
State('classified', 'classified', ('check',)),
|
State('classified', 'classified',
|
||||||
State('checked', 'checked',
|
('verify', 'change_classification', 'remove_classification')),
|
||||||
|
State('verified', 'verified',
|
||||||
('change_classification', 'remove_classification')),
|
('change_classification', 'remove_classification')),
|
||||||
Transition('classify', 'classify', 'classified'),
|
Transition('classify', 'classify', 'classified'),
|
||||||
Transition('check', 'check', 'checked'),
|
Transition('verify', 'verify', 'verified'),
|
||||||
Transition('change_classification', 'change classification', 'classified'),
|
Transition('change_classification', 'change classification', 'classified'),
|
||||||
Transition('remove_classification', 'remove classification', 'unclassified'),
|
Transition('remove_classification', 'remove classification', 'unclassified'),
|
||||||
initialState='unclassified')
|
initialState='unclassified')
|
||||||
|
@ -48,3 +54,36 @@ def classificationQuality():
|
||||||
class ClassificationQualityCheckable(StatefulLoopsObject):
|
class ClassificationQualityCheckable(StatefulLoopsObject):
|
||||||
|
|
||||||
statesDefinition = 'loops.classification_quality'
|
statesDefinition = 'loops.classification_quality'
|
||||||
|
|
||||||
|
|
||||||
|
# event handlers
|
||||||
|
|
||||||
|
@adapter(ILoopsObject, IAssignmentEvent)
|
||||||
|
def assign(obj, event):
|
||||||
|
target = event.relation.second
|
||||||
|
if not IResource.providedBy(target):
|
||||||
|
return
|
||||||
|
pred = event.relation.predicate
|
||||||
|
if getName(pred) == 'hasType':
|
||||||
|
return
|
||||||
|
stf = component.getAdapter(target, IStateful, name='loops.classification_quality')
|
||||||
|
if stf.state == 'unclassified':
|
||||||
|
stf.doTransition('classify')
|
||||||
|
else:
|
||||||
|
stf.doTransition('change_classification')
|
||||||
|
|
||||||
|
@adapter(ILoopsObject, IDeassignmentEvent)
|
||||||
|
def deassign(obj, event):
|
||||||
|
target = event.relation.second
|
||||||
|
if not IResource.providedBy(target):
|
||||||
|
return
|
||||||
|
pred = event.relation.predicate
|
||||||
|
if getName(pred) == 'hasType':
|
||||||
|
return
|
||||||
|
stf = component.getAdapter(target, IStateful, name='loops.classification_quality')
|
||||||
|
if stf.state in ('classified', 'verified'):
|
||||||
|
old = target.getParentRelations()
|
||||||
|
if len(old) > 2: # the hasType relation always remains
|
||||||
|
stf.doTransition('change_classification')
|
||||||
|
else:
|
||||||
|
stf.doTransition('remove_classification')
|
||||||
|
|
Loading…
Add table
Reference in a new issue