Comments (3)
Hi @wawa19933 , thanks for reporting this and the extra care on the context and details. I've added pytest-mock
as a dependency to the project to be able to reproduce.
from python-statemachine.
Here is a dirty workaround:
--- a/signature.py 2023-06-12 04:14:29.750363476 +0200
+++ b/signature.py 2023-06-12 04:14:43.009982670 +0200
@@ -15,6 +15,14 @@
"""Build a wrapper that adapts the received arguments to the inner ``method`` signature"""
sig = cls.from_callable(method)
+ if not isinstance(sig, SignatureAdapter):
+ n = SignatureAdapter()
+ n._parameters = sig._parameters
+ n.__slots__ = sig.__slots__
+ n._parameter_cls = sig._parameter_cls
+ n._bound_arguments_cls = sig._bound_arguments_cls
+ n.empty = sig.empty
+ sig = n
sig.method = method
sig.__name__ = (
method.func.__name__ if isinstance(method, partial) else method.__name__
from python-statemachine.
This doesn't affect underlying unittest.mock patch
functions, though.
So, this example works:
class Observer:
def on_enter_state(self, event, model, source, target, state):
...
obs = Observer()
# on_enter_state = mocker.spy(obs, "on_enter_state")
on_enter_state = mocker.patch.object(obs, "on_enter_state")
class Machine(StateMachine):
a = State("Init", initial=True)
b = State("Fin")
cycle = a.to(b) | b.to(a)
def on_exit_state(self, source, target):
assert source != target
state = Machine().add_observer(obs)
assert state.a.is_active
state.cycle()
assert state.b.is_active
on_enter_state.assert_called_once()
from python-statemachine.
Related Issues (20)
- Consider returning all values from actions for a triggered transition HOT 18
- Is there a way to make a transition from two or more states to one state instead of writing one by one? HOT 2
- Initialising multiple states by assigning them HOT 1
- Problem with pip when installing under Python 3.10.11 HOT 2
- Multiple Observers not working on singular State machine HOT 4
- Event keyword arguments are silently overwritten when particular keyword argument names are used HOT 4
- Finalize action after transition success or failure. HOT 1
- feature request: async callbacks HOT 3
- Add automation (GH action) to publish a new version on pypi HOT 1
- Simple question HOT 10
- Generate the code from PlantUML diagrams HOT 2
- Type annotations missing for `initial_state` and `final_states`; leading to linting errors with Pylint/Pyright HOT 3
- Expensive instantiation of StateMachine HOT 3
- AttributeError: object has no attribute 'model' HOT 3
- Enable Multithreading HOT 2
- [Feature request] State machine based workflow for database storage on entity state tracking HOT 1
- Action callback gets called twice when mixing definition methods HOT 1
- Check that all state transitions can reach a final state. HOT 6
- Execute a state machine from another state machine HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from python-statemachine.