Expect the unexpected, but get what you want.
@anticipate(int) def get_int(): return '1' assert get_int() == 1 @anticipate(str) def get_str(): return 22 assert get_str() == '22' @anticipate([str]) def get_strs(*args): return args assert list(get_strs(1, 2, 3)) == ['1', '2', '3']
Works much better with your own objects or with SpringField
- Dropped support for Python 2.6, added support for Python 3.7.
- Cleaned up code formatting
- Fixed issue that prevented use of an adaptable object (has an
adapt
method) as an anticipated list of type.
- Change so that anticipating an iterable using
[type]
will always return a list instead of generator - Added
anticipate_input_factory
to make it easier to implement input handlers that need to inject values or handle input errors differently - Made it so you can use any object that implements
adapt
as an anticipate type so you can use SpringField fields as input types - Improved error messages
- Split anticipate input and output handling into separate functions to make it easier to intercept input or output handling
- Check that the params being anticipated exist in the function signature