State machine model¶
- class besser.BUML.metamodel.state_machine.state_machine.ConfigProperty(section: str, name: str, value: Any)[source]¶
Bases:
objectA configuration property of a state machine.
- Parameters:¶
section (str) – The section the configuration property belongs to
name (str) – The name of the configuration property
value (Any) – Te value of the configuration property
- Attributes:¶
section (str) – The section the configuration property belongs to
name (str) – The name of the configuration property
value (Any) – Te value of the configuration property
- class besser.BUML.metamodel.state_machine.state_machine.Action[source]¶
Bases:
ABCBase class for actions composing a Body.
Actions represent discrete operations that can be performed in a state body, enabling programmatic manipulation and model transformation.
-
_abc_impl =
<_abc._abc_data object>¶
-
_abc_impl =
-
class besser.BUML.metamodel.state_machine.state_machine.CustomCodeAction(source: str =
None, callable: Callable =None)[source]¶ Bases:
ActionArbitrary code action from a callable or raw source string.
- Parameters:¶
source (str, optional) – Raw Python source code
callable (Callable, optional) – A callable whose source will be extracted
- Attributes:¶
source (str) – The Python source code
-
_abc_impl =
<_abc._abc_data object>¶
-
class besser.BUML.metamodel.state_machine.state_machine.Body(name: str, callable: Callable =
None, actions: list[Action] | None =None)[source]¶ Bases:
MethodThe body of the state of a state machine.
Each state has a Body, which defines the sequence of actions to be executed when an event causes the transition to a state (and a secondary body, i.e., a fallback body, that defines the actions to be executed in case of error in the machine).
- Parameters:¶
name (str) – The name of the body.
callable (Callable) – The function containing the body’s code.
actions (Optional[List[Action]]) – List of actions composing the body
- Attributes:¶
name (str) – Inherited from Method, represents the name of the body.
visibility (str) – Inherited from Method, represents the visibility of the body.
type (Type) – Inherited from Method, represents the type of the body.
is_abstract (bool) – Inherited from Method, indicates if the body is abstract.
parameters (set[structural.Parameter]) – Inherited from Method, the set of parameters for the body.
owner (Type) – Inherited from Method, the type that owns the property.
code (str) – Inherited from Method, code of the body (contains source of CustomCodeAction if present, otherwise “”).
actions (List[Action]) – List of actions composing the body
- _extract_code() str[source]¶
Extract code from CustomCodeAction if present, otherwise return empty string.
-
_abc_impl =
<_abc._abc_data object>¶
- class besser.BUML.metamodel.state_machine.state_machine.Event(name: str)[source]¶
Bases:
NamedElementThe representation of an event (i.e., external or internal stimuli or input) that may cause the transition of state in a state machine.
- Parameters:¶
name (str) – The name of the event.
- Attributes:¶
name (str) – Inherited from NamedElement, represents the name of the event.
-
_abc_impl =
<_abc._abc_data object>¶
-
class besser.BUML.metamodel.state_machine.state_machine.Condition(name: str, callable: Callable =
None, source: str =None)[source]¶ Bases:
MethodThe representation of a condition (i.e., a boolean function) that may cause the transition of state in a state machine.
A Condition can be created from either a callable (whose source will be extracted via
inspect.getsource) or a raw source-code string. Providing asourcestring is useful when the condition originates from serialised data (e.g. JSON round-trip through the web editor) where no live callable is available.- Parameters:¶
name (str) – The name of the condition.
callable (Callable, optional) – The function containing the condition’s code.
source (str, optional) – Raw Python source code for the condition. If both callable and source are given, callable takes precedence.
- Attributes:¶
name (str) – Inherited from Method, represents the name of the condition.
visibility (str) – Inherited from Method, represents the visibility of the condition.
type (Type) – Inherited from Method, represents the type of the condition.
is_abstract (bool) – Inherited from Method, indicates if the condition is abstract.
parameters (set[structural.Parameter]) – Inherited from Method, the set of parameters for the condition.
owner (Type) – Inherited from Method, the type that owns the property.
code (str) – Inherited from Method, code of the condition.
-
_abc_impl =
<_abc._abc_data object>¶
-
class besser.BUML.metamodel.state_machine.state_machine.TransitionBuilder(source: State, event: Event =
None, conditions: list[Condition] =None)[source]¶ Bases:
objectA transition builder.
This class is used to build transitions, allowing for a “fluent api” syntax where consecutive calls can be made on the same object.
- Parameters:¶
source (State) – the source state of the transition
event (Event) – the event linked to the transition (can be None)
conditions (list[Condition]) – the conditions associated to the transition (can be None)
- Attributes:¶
source (State) – The source state of the transition
event (Event) – The event linked to the transition (can be None)
condition (list[Condition]) – The conditions associated to the transition (can be None)
- with_condition(condition: Condition) TransitionBuilder[source]¶
- class besser.BUML.metamodel.state_machine.state_machine.Transition(name: str, source: State, dest: State, event: Event, conditions: list[Condition])[source]¶
Bases:
NamedElementA state machine transition from one state (source) to another (destination).
A transition is triggered when an event and/or condition/s occurs.
- Parameters:¶
name (str) – Inherited from NamedElement, the transition name
source (State) – the source state of the transition (from where it is triggered)
dest (State) – the destination state of the transition (where the machine moves to)
event (Callable[[Session, dict], bool]) – the event that triggers the transition
conditions (list[Condition]) – the conditions that trigger the transition
- Attributes:¶
name (str) – Inherited from NamedElement, the transition name
visibility (str) – Inherited from NamedElement, determines the kind of visibility of the named element (public as default).
source (State) – The source state of the transition (from where it is triggered)
dest (State) – The destination state of the transition (where the machine moves to)
event (Event) – The event that triggers the transition
conditions (list[Condition]) – The conditions that trigger the transition
-
_abc_impl =
<_abc._abc_data object>¶
-
class besser.BUML.metamodel.state_machine.state_machine.State(sm: StateMachine, name: str, initial: bool =
False, final: bool =False)[source]¶ Bases:
NamedElementA state of a state machine.
- Parameters:¶
sm (StateMachine) – the state machine the state belongs to
name (str) – the state name
initial (bool) – whether the state is initial or not
final (bool) – whether the state is final or not
- Attributes:¶
name (str) – Inherited from NamedElement, the state name
visibility (str) – Inherited from NamedElement, determines the kind of visibility of the state (public as default).
sm (StateMachine) – the state machine the state belongs to
initial (bool) – whether the state is initial or not
final (bool) – whether the state is final or not
transitions (list[Transition]) – The state’s transitions to other states
body (Body) – the body of the state
fallback_body (Body) – the fallback body of the state
_transition_counter (int) – Count the number of transitions of this state. Used to name the transitions.
- _t_name() str[source]¶
Name generator for transitions. Transition names are generic and enumerated. On each call, a new name is generated and the transition counter is incremented for the next name.
- set_fallback_body(body: Body) None[source]¶
Set the state fallback body.
- Parameters:¶
body (Body) – the body
- when_event(event: Event) TransitionBuilder[source]¶
- when_condition(condition: Condition) TransitionBuilder[source]¶
-
_abc_impl =
<_abc._abc_data object>¶
- class besser.BUML.metamodel.state_machine.state_machine.StateMachine(name: str)[source]¶
Bases:
ModelA state machine model.
- Parameters:¶
name (str) – the state machine name
- Attributes:¶
name (str) – Inherited from Model, represents the name of the state machine.
visibility (str) – Inherited from Model, determines the kind of visibility of the state machine (public as default).
states (list[State]) – the states of the state machine
properties (list[ConfigProperty]) – the configuration properties of the state machine.
- add_property(property: ConfigProperty) ConfigProperty[source]¶
Add a configuration property to the state machine.
- new_property(section: str, name: str, value: Any) ConfigProperty[source]¶
Create a new configuration property on the state machine.
-
new_state(name: str, initial: bool =
False, final: bool =False) State[source]¶ Create a new state in the state machine.
- Parameters:¶
name (str) – the state name. It must be unique in the state machine.
initial (bool) – whether the state is initial or not. A state machine must have 1 initial state.
final (bool) – whether the state is final or not. A state machine can have multiple final states.
- Returns:¶
the state
- Return type:¶
- initial_state() State[source]¶
Get the state machine’s initial state. It can be None if it has not been set.
- set_global_fallback_body(body: Body) None[source]¶
Set the global fallback body for all states in the state machine.
- Parameters:¶
body (Body) – The fallback body to be set for all states.
-
validate(raise_exception: bool =
True) dict[source]¶ Validate the state machine according to structural constraints.
- _validate_unreachable_states(warnings: list[str])[source]¶
Validate that all non-initial states have at least one incoming transition.
- _validate_final_states_with_transitions(errors: list[str])[source]¶
Validate that final states have no outgoing transitions.
-
_abc_impl =
<_abc._abc_data object>¶
- class besser.BUML.metamodel.state_machine.state_machine.Session[source]¶
Bases:
objectA user session in a state machine execution.
When a user starts interacting with a state machine, a session is assigned to him/her to store user related information, such as the current state or any custom variable. A session can be accessed from the body of the states to read/write user information. If a state machine does not have the concept of ‘users’ (i.e., there are no concurrent executions of the state machine, but a single one) then it could simply have 1 unique session.
- Attributes:¶
id (str) – The session id, which must unique among all state machine sessions
current_state (str) – The current state in the state machine for this session
- set(key: str, value: Any) None[source]¶
Set an entry to the session private data storage.
- Parameters:¶
key (str) – the entry key
value (Any) – the entry value
- delete(key: str) None[source]¶
Delete an entry of the session private data storage.
- Parameters:¶
key (str) – the entry key
- move(transition: Transition) None[source]¶
Move to another state of the state machine.
- Parameters:¶
transition (Transition) – the transition that points to the state to move