schemas/workflow.py
author Alexandre Fayolle <alexandre.fayolle@logilab.fr>
Tue, 21 Dec 2010 21:20:19 +0100
branchstable
changeset 6757 bc878ec35794
parent 6109 47d9c0e0f7b7
child 7780 a1d5365fefc1
permissions -rw-r--r--
#1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
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,
6757
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
    25
                            RichString, String, Int)
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
    }
6757
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   162
    # The unique_together constraint ensures that 2 repositories
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   163
    # sharing the db won't be able to fire a transition simultaneously
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   164
    # on the same entity tr_count is filled in the FireTransitionHook
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   165
    # to the number of TrInfo attached to the entity on which we
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   166
    # attempt to fire a transition. In other word, it contains the
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   167
    # rank of the TrInfo for that entity, and the constraint says we
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   168
    # cannot have 2 TrInfo with the same rank.
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   169
    __unique_together__ = [('tr_count', 'wf_info_for')]
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   170
    from_state = SubjectRelation('State', cardinality='1*', inlined=True)
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   171
    to_state = SubjectRelation('State', cardinality='1*', inlined=True)
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   172
    # 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
   173
    # 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
   174
    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
   175
    comment = RichString(fulltextindexed=True)
6757
bc878ec35794 #1382705 forbid with sql level locking the simultaneous fireing of a transition on a given entity
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6109
diff changeset
   176
    tr_count = Int(description='autocomputed attribute used to ensure transition coherency')
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   177
    # 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
   178
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   179
class from_state(RelationType):
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   180
    __permissions__ = HOOKS_RTYPE_PERMS.copy()
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   181
    inlined = True
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   182
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   183
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
   184
    __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
   185
    inlined = True
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   186
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   187
class by_transition(RelationType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   188
    # 'add' security actually done by hooks
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   189
    __permissions__ = {
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   190
        'read':   ('managers', 'users', 'guests',),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   191
        'add':    ('managers', 'users', 'guests',),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   192
        'delete': (),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   193
    }
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   194
    inlined = True
2501
fa86d99c2c3a test and fix wf history security
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2459
diff changeset
   195
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   196
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   197
class workflow_of(RelationType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   198
    """link a workflow to one or more entity type"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   199
    __permissions__ = META_RTYPE_PERMS
1572
469787f6ea2b delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   200
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   201
class state_of(RelationType):
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   202
    """link a state to one or more workflow"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   203
    __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
   204
    inlined = True
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   205
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   206
class transition_of(RelationType):
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   207
    """link a transition to one or more workflow"""
4004
c52619c738a5 api renaming update
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 3998
diff changeset
   208
    __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
   209
    inlined = True
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   210
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   211
class destination_state(RelationType):
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   212
    """destination state of a transition"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   213
    __permissions__ = META_RTYPE_PERMS
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   214
    inlined = True
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   215
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   216
class allowed_transition(RelationType):
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   217
    """allowed transitions from this state"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   218
    __permissions__ = META_RTYPE_PERMS
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   219
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   220
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
   221
    """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
   222
    states is created
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   223
    """
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   224
    __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
   225
    inlined = True
1572
469787f6ea2b delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   226
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   227
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   228
class subworkflow(RelationType):
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   229
    __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
   230
    inlined = True
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   231
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   232
class exit_point(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
class subworkflow_state(RelationType):
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   236
    __permissions__ = META_RTYPE_PERMS
4589
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   237
    inlined = True
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   238
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   239
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   240
class condition(RelationType):
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   241
    __permissions__ = META_RTYPE_PERMS
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   242
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   243
# already defined in base.py
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   244
# class require_group(RelationType):
cc3ec1423ead fix permission of the condition permission
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4537
diff changeset
   245
#     __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
   246
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   247
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   248
# "abstract" relations, set by WorkflowableEntityType ##########################
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   249
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   250
class custom_workflow(RelationType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   251
    """allow to set a specific workflow for an entity"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   252
    __permissions__ = META_RTYPE_PERMS
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   253
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   254
    cardinality = '?*'
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   255
    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
   256
                                 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
   257
    object = 'Workflow'
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   258
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
class wf_info_for(RelationType):
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   261
    """link a transition information to its object"""
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   262
    # 'add' security actually done by hooks
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   263
    __permissions__ = {
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   264
        'read':   ('managers', 'users', 'guests',),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   265
        'add':    ('managers', 'users', 'guests',),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   266
        'delete': (),
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   267
    }
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   268
    inlined = True
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   269
3444
0ad4ef5d3737 cleanup
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3303
diff changeset
   270
    cardinality = '1*'
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   271
    composite = 'object'
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   272
    fulltext_container = composite
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   273
    subject = 'TrInfo'
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   274
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   275
2140
1cba3393ba01 update schema definition to avoid deprecation warning with new yams api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   276
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
   277
    """indicate the current state of an entity"""
3877
7ca53fc72a0a reldefsecurity branch :
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3628
diff changeset
   278
    __permissions__ = HOOKS_RTYPE_PERMS
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   279
628
3a6f28a1ea21 extract workflow related schema definitions in its own file
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   280
    # 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
   281
    # 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
   282
    inlined = False
1572
469787f6ea2b delete-trailing-whitespaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   283
2920
64322aa83a1d start a new workflow engine
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2602
diff changeset
   284
    cardinality = '1*'
3983
e2dc12753436 nicer error message on rql constraints
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3966
diff changeset
   285
    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
   286
                                 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
   287
    object = 'State'