schemas/workflow.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 08 Sep 2010 10:03:30 +0200
branchstable
changeset 6191 ece6996e6ac8
parent 6109 47d9c0e0f7b7
child 6757 bc878ec35794
permissions -rw-r--r--
[schema deserial] fix loading of schema when mapping an entity type to an existing one To ensure rdef of the old entity type don't overwrite those already existing on the mapped entity type. Also rename some variables/arguments on the way to make things clearer.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
     1
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4805
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    18
"""workflow related schemas
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
"""
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    21
__docformat__ = "restructuredtext en"
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    22
_ = unicode
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    24
from yams.buildobjs import (EntityType, RelationType, SubjectRelation,
4719
aaed3f813ef8 kill dead/useless code as suggested by pylint
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4644
diff changeset
    25
                            RichString, String)
2939
a613cc003ab7 make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
    26
from cubicweb.schema import RQLConstraint, RQLUniqueConstraint
a613cc003ab7 make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
    27
from cubicweb.schemas import (META_ETYPE_PERMS, META_RTYPE_PERMS,
a613cc003ab7 make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
    28
                              HOOKS_RTYPE_PERMS)
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    29
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    30
class Workflow(EntityType):
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
    31
    __permissions__ = META_ETYPE_PERMS
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    32
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    33
    name = String(required=True, indexed=True, internationalizable=True,
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    34
                  maxsize=256)
4805
2d0aa2b7da02 [schema] do not fulltext index workflow entities'description
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4719
diff changeset
    35
    description = RichString(default_format='text/rest',
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    36
                             description=_('semantic description of this workflow'))
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    37
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    38
    workflow_of = SubjectRelation('CWEType', cardinality='+*',
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    39
                                  description=_('entity types which may use this workflow'),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    40
                                  constraints=[RQLConstraint('O final FALSE')])
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    41
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    42
    initial_state = SubjectRelation('State', cardinality='?*',
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
    43
                                   constraints=[RQLConstraint('O state_of S',
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
    44
                                                              msg=_('state doesn\'t belong to this workflow'))],
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    45
                                   description=_('initial state for this workflow'))
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    46
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    47
2943
77622caef9bd [schema] default_workflow_of more naturally expressed as default_workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2939
diff changeset
    48
class default_workflow(RelationType):
3263
5129918c671b i18n update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2977
diff changeset
    49
    """default workflow for an entity type"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
    50
    __permissions__ = META_RTYPE_PERMS
2943
77622caef9bd [schema] default_workflow_of more naturally expressed as default_workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2939
diff changeset
    51
77622caef9bd [schema] default_workflow_of more naturally expressed as default_workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2939
diff changeset
    52
    subject = 'CWEType'
77622caef9bd [schema] default_workflow_of more naturally expressed as default_workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2939
diff changeset
    53
    object = 'Workflow'
77622caef9bd [schema] default_workflow_of more naturally expressed as default_workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2939
diff changeset
    54
    cardinality = '?*'
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
    55
    constraints = [RQLConstraint('S final FALSE, O workflow_of S',
4535
71c86a315a9a update translatable docstring
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    56
                                 msg=_('workflow isn\'t a workflow for this type'))]
2943
77622caef9bd [schema] default_workflow_of more naturally expressed as default_workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2939
diff changeset
    57
77622caef9bd [schema] default_workflow_of more naturally expressed as default_workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2939
diff changeset
    58
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    59
class State(EntityType):
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    60
    """used to associate simple states to an entity type and/or to define
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    61
    workflows
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
    """
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
    63
    __permissions__ = META_ETYPE_PERMS
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    64
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
    name = String(required=True, indexed=True, internationalizable=True,
3966
f742c525b7b4 fix workflow consistency: check state/transition name uniqness in the wf when state/transition name is modified ; use the new msg argument of rql constraints to have a nicer error message on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3961
diff changeset
    66
                  maxsize=256,
f742c525b7b4 fix workflow consistency: check state/transition name uniqness in the wf when state/transition name is modified ; use the new msg argument of rql constraints to have a nicer error message on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3961
diff changeset
    67
                  constraints=[RQLUniqueConstraint('S name N, S state_of WF, Y state_of WF, Y name N', 'Y',
f742c525b7b4 fix workflow consistency: check state/transition name uniqness in the wf when state/transition name is modified ; use the new msg argument of rql constraints to have a nicer error message on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3961
diff changeset
    68
                                                   _('workflow already have a state of that name'))])
4805
2d0aa2b7da02 [schema] do not fulltext index workflow entities'description
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4719
diff changeset
    69
    description = RichString(default_format='text/rest',
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
                             description=_('semantic description of this state'))
1572
469787f6ea2b delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    71
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    72
    # XXX should be on BaseTransition w/ AND/OR selectors when we will
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    73
    # implements #345274
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    74
    allowed_transition = SubjectRelation('BaseTransition', cardinality='**',
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
    75
                                         constraints=[RQLConstraint('S state_of WF, O transition_of WF',
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
    76
                                                                    msg=_('state and transition don\'t belong the the same workflow'))],
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    77
                                         description=_('allowed transitions from this state'))
3499
9161c215b954 [schema] set composite on state_of / transition_of
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3444
diff changeset
    78
    state_of = SubjectRelation('Workflow', cardinality='1*', composite='object',
2939
a613cc003ab7 make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
    79
                               description=_('workflow to which this state belongs'),
3966
f742c525b7b4 fix workflow consistency: check state/transition name uniqness in the wf when state/transition name is modified ; use the new msg argument of rql constraints to have a nicer error message on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3961
diff changeset
    80
                               constraints=[RQLUniqueConstraint('S name N, Y state_of O, Y name N', 'Y',
f742c525b7b4 fix workflow consistency: check state/transition name uniqness in the wf when state/transition name is modified ; use the new msg argument of rql constraints to have a nicer error message on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3961
diff changeset
    81
                                                                _('workflow already have a state of that name'))])
1572
469787f6ea2b delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    82
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    83
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    84
class BaseTransition(EntityType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
    85
    """abstract base class for transitions"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
    86
    __permissions__ = META_ETYPE_PERMS
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    87
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    88
    name = String(required=True, indexed=True, internationalizable=True,
3966
f742c525b7b4 fix workflow consistency: check state/transition name uniqness in the wf when state/transition name is modified ; use the new msg argument of rql constraints to have a nicer error message on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3961
diff changeset
    89
                  maxsize=256,
f742c525b7b4 fix workflow consistency: check state/transition name uniqness in the wf when state/transition name is modified ; use the new msg argument of rql constraints to have a nicer error message on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3961
diff changeset
    90
                  constraints=[RQLUniqueConstraint('S name N, S transition_of WF, Y transition_of WF, Y name N', 'Y',
f742c525b7b4 fix workflow consistency: check state/transition name uniqness in the wf when state/transition name is modified ; use the new msg argument of rql constraints to have a nicer error message on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3961
diff changeset
    91
                                                   _('workflow already have a transition of that name'))])
3528
77a69de16709 support for automatic transition
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3499
diff changeset
    92
    type = String(vocabulary=(_('normal'), _('auto')), default='normal')
4805
2d0aa2b7da02 [schema] do not fulltext index workflow entities'description
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4719
diff changeset
    93
    description = RichString(description=_('semantic description of this transition'))
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    94
    condition = SubjectRelation('RQLExpression', cardinality='*?', composite='subject',
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    95
                                description=_('a RQL expression which should return some results, '
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    96
                                              'else the transition won\'t be available. '
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    97
                                              'This query may use X and U variables '
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
                                              'that will respectivly represents '
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
                                              'the current entity and the current user'))
1572
469787f6ea2b delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   100
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 798
diff changeset
   101
    require_group = SubjectRelation('CWGroup', cardinality='**',
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
                                    description=_('group in which a user should be to be '
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   103
                                                  'allowed to pass this transition'))
3499
9161c215b954 [schema] set composite on state_of / transition_of
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3444
diff changeset
   104
    transition_of = SubjectRelation('Workflow', cardinality='1*', composite='object',
2939
a613cc003ab7 make state/transition name unique within a workflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2920
diff changeset
   105
                                    description=_('workflow to which this transition belongs'),
3966
f742c525b7b4 fix workflow consistency: check state/transition name uniqness in the wf when state/transition name is modified ; use the new msg argument of rql constraints to have a nicer error message on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3961
diff changeset
   106
                                    constraints=[RQLUniqueConstraint('S name N, Y transition_of O, Y name N', 'Y',
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   107
                                                                     _('workflow already have a transition of that name'))])
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   108
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   109
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   110
class Transition(BaseTransition):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   111
    """use to define a transition from one or multiple states to a destination
4644
021035b9a7ab introduce 'go back' transition: transition without destination state will go to the state we were coming from
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4589
diff changeset
   112
    states in workflow's definitions. Transition without destination state will
021035b9a7ab introduce 'go back' transition: transition without destination state will go to the state we were coming from
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4589
diff changeset
   113
    go back to the state from which we arrived to the current state.
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   114
    """
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   115
    __specializes_schema__ = True
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   116
3628
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   117
    destination_state = SubjectRelation(
4644
021035b9a7ab introduce 'go back' transition: transition without destination state will go to the state we were coming from
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4589
diff changeset
   118
        'State', cardinality='?*',
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   119
        constraints=[RQLConstraint('S transition_of WF, O state_of WF',
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   120
                                   msg=_('state and transition don\'t belong the the same workflow'))],
3628
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   121
        description=_('destination state for this transition'))
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   122
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   123
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   124
class WorkflowTransition(BaseTransition):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   125
    """special transition allowing to go through a sub-workflow"""
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   126
    __specializes_schema__ = True
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   127
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   128
    subworkflow = SubjectRelation('Workflow', cardinality='1*',
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   129
                                  constraints=[RQLConstraint('S transition_of WF, WF workflow_of ET, O workflow_of ET',
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   130
                                                             msg=_('subworkflow isn\'t a workflow for the same types as the transition\'s workflow'))]
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   131
                                  )
3628
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   132
    # XXX use exit_of and inline it
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   133
    subworkflow_exit = SubjectRelation('SubWorkflowExitPoint', cardinality='*1',
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   134
                                       composite='subject')
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   135
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   136
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   137
class SubWorkflowExitPoint(EntityType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   138
    """define how we get out from a sub-workflow"""
3628
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   139
    subworkflow_state = SubjectRelation(
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   140
        'State', cardinality='1*',
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   141
        constraints=[RQLConstraint('T subworkflow_exit S, T subworkflow WF, O state_of WF',
6109
47d9c0e0f7b7 integrate Celso's work on translation file: proper/complete spanish translation, fixed some typos in french translation, occured -> occurred fix in various places
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   142
                                   msg=_('exit state must be a subworkflow state'))],
3628
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   143
        description=_('subworkflow state'))
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   144
    destination_state = SubjectRelation(
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   145
        'State', cardinality='?*',
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   146
        constraints=[RQLConstraint('T subworkflow_exit S, T transition_of WF, O state_of WF',
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   147
                                   msg=_('destination state must be in the same workflow as our parent transition'))],
3628
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   148
        description=_('destination state. No destination state means that transition '
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   149
                      'should go back to the state from which we\'ve entered the '
440931181322 [wf engine] support for subwf exit point with no destination state: go back to state from which we entered into the subworkflow
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3529
diff changeset
   150
                      'subworkflow.'))
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   151
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   152
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   153
class TrInfo(EntityType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   154
    """workflow history item"""
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   155
    # 'add' security actually done by hooks
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   156
    __permissions__ = {
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   157
        'read':   ('managers', 'users', 'guests',), # XXX U has_read_permission O ?
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   158
        'add':    ('managers', 'users', 'guests',),
3529
87b5086fd6a7 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3528
diff changeset
   159
        'delete': (), # XXX should we allow managers to delete TrInfo?
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   160
        'update': ('managers', 'owners',),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   161
    }
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   162
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   163
    from_state = SubjectRelation('State', cardinality='1*')
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   164
    to_state = SubjectRelation('State', cardinality='1*')
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   165
    # make by_transition optional because we want to allow managers to set
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   166
    # entity into an arbitrary state without having to respect wf transition
2950
643570a7770f [schema] oops, should use BaseTransition here
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2943
diff changeset
   167
    by_transition = SubjectRelation('BaseTransition', cardinality='?*')
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   168
    comment = RichString(fulltextindexed=True)
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   169
    # get actor and date time using owned_by and creation_date
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   170
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   171
class from_state(RelationType):
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   172
    __permissions__ = HOOKS_RTYPE_PERMS.copy()
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   173
    inlined = True
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   174
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   175
class to_state(RelationType):
4187
c29a49d646af necessary to fix some security test, unclear why did I set perms below at some point...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4004
diff changeset
   176
    __permissions__ = HOOKS_RTYPE_PERMS.copy()
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   177
    inlined = True
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   178
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   179
class by_transition(RelationType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   180
    # 'add' security actually done by hooks
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   181
    __permissions__ = {
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   182
        'read':   ('managers', 'users', 'guests',),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   183
        'add':    ('managers', 'users', 'guests',),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   184
        'delete': (),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   185
    }
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   186
    inlined = True
2501
fa86d99c2c3a test and fix wf history security
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2459
diff changeset
   187
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   188
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   189
class workflow_of(RelationType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   190
    """link a workflow to one or more entity type"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   191
    __permissions__ = META_RTYPE_PERMS
1572
469787f6ea2b delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   192
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   193
class state_of(RelationType):
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   194
    """link a state to one or more workflow"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   195
    __permissions__ = META_RTYPE_PERMS
3433
401ea5e03e9d state_of/transition_of could now be inlined
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3303
diff changeset
   196
    inlined = True
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   197
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   198
class transition_of(RelationType):
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   199
    """link a transition to one or more workflow"""
4004
c52619c738a5 api renaming update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 3998
diff changeset
   200
    __permissions__ = META_RTYPE_PERMS
3433
401ea5e03e9d state_of/transition_of could now be inlined
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3303
diff changeset
   201
    inlined = True
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   202
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   203
class destination_state(RelationType):
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   204
    """destination state of a transition"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   205
    __permissions__ = META_RTYPE_PERMS
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   206
    inlined = True
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   207
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   208
class allowed_transition(RelationType):
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   209
    """allowed transitions from this state"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   210
    __permissions__ = META_RTYPE_PERMS
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   211
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   212
class initial_state(RelationType):
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   213
    """indicate which state should be used by default when an entity using
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   214
    states is created
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   215
    """
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   216
    __permissions__ = META_RTYPE_PERMS
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   217
    inlined = True
1572
469787f6ea2b delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   218
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   219
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   220
class subworkflow(RelationType):
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   221
    __permissions__ = META_RTYPE_PERMS
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   222
    inlined = True
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   223
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   224
class exit_point(RelationType):
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   225
    __permissions__ = META_RTYPE_PERMS
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   226
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   227
class subworkflow_state(RelationType):
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   228
    __permissions__ = META_RTYPE_PERMS
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   229
    inlined = True
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   230
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   231
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   232
class condition(RelationType):
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   233
    __permissions__ = META_RTYPE_PERMS
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   234
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   235
# already defined in base.py
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   236
# class require_group(RelationType):
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   237
#     __permissions__ = META_RTYPE_PERMS
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   238
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   239
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   240
# "abstract" relations, set by WorkflowableEntityType ##########################
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   241
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   242
class custom_workflow(RelationType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   243
    """allow to set a specific workflow for an entity"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   244
    __permissions__ = META_RTYPE_PERMS
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   245
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   246
    cardinality = '?*'
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   247
    constraints = [RQLConstraint('S is ET, O workflow_of ET',
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   248
                                 msg=_('workflow isn\'t a workflow for this type'))]
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   249
    object = 'Workflow'
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   250
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   251
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   252
class wf_info_for(RelationType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   253
    """link a transition information to its object"""
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   254
    # 'add' security actually done by hooks
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   255
    __permissions__ = {
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   256
        'read':   ('managers', 'users', 'guests',),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   257
        'add':    ('managers', 'users', 'guests',),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   258
        'delete': (),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   259
    }
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   260
    inlined = True
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   261
3444
0ad4ef5d3737 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3303
diff changeset
   262
    cardinality = '1*'
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   263
    composite = 'object'
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   264
    fulltext_container = composite
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   265
    subject = 'TrInfo'
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   266
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   267
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   268
class in_state(RelationType):
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   269
    """indicate the current state of an entity"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   270
    __permissions__ = HOOKS_RTYPE_PERMS
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   271
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   272
    # not inlined intentionnaly since when using ldap sources, user'state
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 798
diff changeset
   273
    # has to be stored outside the CWUser table
2602
7bfa83772d90 [F schema] set inlined=False to ensure it'is not inlined by accident
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2501
diff changeset
   274
    inlined = False
1572
469787f6ea2b delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   275
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   276
    cardinality = '1*'
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   277
    constraints = [RQLConstraint('S is ET, O state_of WF, WF workflow_of ET',
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   278
                                 msg=_('state doesn\'t apply to this entity\'s type'))]
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   279
    object = 'State'