vools 0.2.3__tar.gz → 0.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vools-0.2.3 → vools-0.2.4}/PKG-INFO +1 -1
- {vools-0.2.3 → vools-0.2.4}/vools/__init__.py +1 -1
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/probe.py +1 -1
- vools-0.2.4/vools/core/contextvars_compat.py +87 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/monitoring/clipboard.py +1 -1
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/monitoring/file_watcher.py +1 -1
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/monitoring/folder_watcher.py +1 -1
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/monitoring/keyboard.py +3 -3
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/monitoring/mouse.py +3 -3
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/operators/extended_operators.py +13 -13
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/operators/operators.py +1 -1
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/context.py +5 -5
- {vools-0.2.3 → vools-0.2.4}/vools/sql/core/decorators.py +16 -2
- {vools-0.2.3 → vools-0.2.4}/vools/sql/manager.py +1 -1
- {vools-0.2.3 → vools-0.2.4}/vools.egg-info/PKG-INFO +1 -1
- {vools-0.2.3 → vools-0.2.4}/vools.egg-info/SOURCES.txt +1 -0
- {vools-0.2.3 → vools-0.2.4}/LICENSE +0 -0
- {vools-0.2.3 → vools-0.2.4}/NOTICE +0 -0
- {vools-0.2.3 → vools-0.2.4}/README.md +0 -0
- {vools-0.2.3 → vools-0.2.4}/autopypi/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/autopypi/config.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/autopypi/environment.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/autopypi/fabfile.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/autopypi/logger.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/autopypi/packaging.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/autopypi/publishing.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/autopypi/release.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/autopypi/versioning.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/pyproject.toml +0 -0
- {vools-0.2.3 → vools-0.2.4}/setup.cfg +0 -0
- {vools-0.2.3 → vools-0.2.4}/tests/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/tests/_serialize_helpers.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/tests/conftest.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/tests/test_functions.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/README.md +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/__main__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/_logging.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/_nim_crypto.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/_nim_curried.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/_nim_datetime.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/_nim_encoding.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/_nim_loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/_nim_seq.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/api/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/api/curry_cmd.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/api/memoize_cmd.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/api/ops_cmd.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/api/seq_cmd.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/api/typer_app.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/_base.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/_examples.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/c/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/cangjie/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/cangjie/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/cangjie/loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/cangjie/templates.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/cangjie/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/core/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/core/decorators.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/core/loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/core/serialization.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/core/sigcache.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/core/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/cpp/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/csharp/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/csharp/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/csharp/loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/csharp/templates.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/csharp/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/dart/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/dart/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/dart/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/freebasic/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/freebasic/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/freebasic/loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/freebasic/transport.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/freebasic/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/go/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/go/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/java/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/java/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/java/decorator.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/java/loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/java/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/julia/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/julia/_loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/julia/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/julia/decorator.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/julia/templates.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/julia/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/kotlin/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/kotlin/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/kotlin/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/lua/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/lua/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/lua/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/manager.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/mojo/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/mojo/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/mojo/loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/mojo/templates.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/mojo/transport.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/mojo/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/moonbit/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/moonbit/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/moonbit/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/nim/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/nim/_loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/nim/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/nim/crypto.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/nim/curried.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/nim/datetime.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/nim/encoding.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/nim/seq.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/perl/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/perl/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/perl/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/php/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/php/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/php/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/powershell/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/powershell/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/powershell/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/r/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/r/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/r/loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/r/templates.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/r/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/ruby/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/ruby/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/rust/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/rust/_loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/rust/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/rust/decorator.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/rust/templates.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/rust/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/scala/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/scala/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/scala/decorator.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/scala/loader.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/scala/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/scala/utils.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/shell/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/shell/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/shell/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/swift/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/swift/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/swift/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/typescript/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/typescript/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/vbnet/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/vbnet/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/vbnet/templates.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/vbnet/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/vbscript/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/vbscript/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/vbscript/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/zig/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/zig/compiler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/bridge/zig/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/cache/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/cache/memorize.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/cache/once.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/cache/persist.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/cache/sigcache.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/config.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/config.template.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/core/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/core/asyncio_compat.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/core/base.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/core/config.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/core/dataclass_compat.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/core/datetime_compat.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/core/exceptions.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/core/inspect_compat.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/crypto/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/crypto/core.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/curried/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/curried/collection.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/curried/composition.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/curried/core.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/curried/iteration.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/curried/math.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/curried/predicate.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/curried/string.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/data/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/data/itor.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/data/seq.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/data/vlist.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/data/vtext.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/datetime/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/datetime/dates_format.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/datetime/utils.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/datetime/vdate_class.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/cache.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/control.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/curried.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/curry_core.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/curry_decorator.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/curry_delay.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/lazy.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/overcurry.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/overload.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/overloads.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/rself.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/selector.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/shotcut.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/decorators/trd.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/encoding/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/encoding/core.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/functional/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/functional/arrow_func.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/functional/box.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/functional/funcs.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/functional/iif.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/functional/pipe_ops.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/functional/placeholder.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/functional/placeholder_impl.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/functional/result.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/libgcc_s_seh-1.dll +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/libstdc++-6.dll +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/libwinpthread-1.dll +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/linux/libvools_crypto.so +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/linux/libvools_curried.so +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/linux/libvools_datetime.so +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/linux/libvools_encoding.so +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/linux/libvools_seq.so +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/vools_crypto.dll +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/vools_curried.dll +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/vools_datetime.dll +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/vools_encoding.dll +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/lib/vools_seq.dll +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/oop/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/oop/calltype.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/oop/extend.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/oop/fusion.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/oop/method_extend.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/oop/mixer.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/oop/selector.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/core/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/core/connectable.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/core/object_pool.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/core/observable.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/core/schedulers.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/core/subject.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/monitoring/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/monitoring/_monitoring.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/monitoring/monitor_observer.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/monitoring/monitor_subject.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/operators/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/operators/monitor_operators.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/reactive/operators/stats_operators.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/security/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/security/_constants.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/security/expression_handler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/security/safe_eval.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/backends/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/backends/base.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/backends/json_backend.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/backends/msgpack_backend.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/backends/pickle_backend.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/callable/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/callable/decorator_handler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/callable/functional_handler.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/codec.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/config.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/core.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/decorators.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/sentinel.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/serialize/type_registry.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/core/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/core/builder.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/core/config.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/core/connection.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/core/dialect.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/core/result.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/core/types.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/postgres/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/postgres/connection.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/postgres/dialect.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/spark/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/spark/connection.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/spark/dialect.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/spark/scala_bridge.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/sqlite/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/sqlite/connection.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sql/sqlite/dialect.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sys/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sys/compile_cmd.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sys/dll.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sys/dll_cmd.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sys/env_cmd.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sys/exe.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sys/fire_app.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/sys/run_cmd.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/core/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/core/models.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/core/queue.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/core/storage.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/core/worker.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/decorators/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/decorators/task_decorator.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/rules/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/rules/dag.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/rules/engine.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/rules/rule.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/task/utils/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/utils/__init__.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/utils/hoder.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/utils/stuff.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools/utils/tools.py +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools.egg-info/dependency_links.txt +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools.egg-info/entry_points.txt +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools.egg-info/requires.txt +0 -0
- {vools-0.2.3 → vools-0.2.4}/vools.egg-info/top_level.txt +0 -0
|
@@ -24,7 +24,7 @@ import subprocess
|
|
|
24
24
|
import shutil
|
|
25
25
|
import json
|
|
26
26
|
from typing import Dict, List, Optional, Tuple, Any
|
|
27
|
-
from
|
|
27
|
+
from ..core.dataclass_compat import dataclass, field, asdict
|
|
28
28
|
|
|
29
29
|
_IS_WINDOWS = platform.system() == 'Windows'
|
|
30
30
|
_IS_LINUX = platform.system() == 'Linux'
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""
|
|
2
|
+
vools.core.contextvars_compat - contextvars 兼容性模块
|
|
3
|
+
|
|
4
|
+
Python 3.7 引入了 contextvars,但 Python 3.6 没有此模块。
|
|
5
|
+
本模块提供兼容实现,在 3.6 中使用 threading.local 模拟基础功能。
|
|
6
|
+
|
|
7
|
+
注意:由于 3.6 没有真正的 contextvars,模拟版本不是 async-safe 的,
|
|
8
|
+
仅保证线程内有效。在 3.6 环境下,如果异步代码和同步代码混用,
|
|
9
|
+
可能需要额外注意上下文隔离。
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import sys
|
|
13
|
+
import threading
|
|
14
|
+
from typing import TypeVar, Generic, Optional, Any
|
|
15
|
+
|
|
16
|
+
_T = TypeVar('_T')
|
|
17
|
+
|
|
18
|
+
# Python 版本检测
|
|
19
|
+
_PY37_PLUS = sys.version_info >= (3, 7)
|
|
20
|
+
|
|
21
|
+
if _PY37_PLUS:
|
|
22
|
+
import contextvars as _ctx
|
|
23
|
+
ContextVar = _ctx.ContextVar
|
|
24
|
+
Context = _ctx.Context
|
|
25
|
+
copy_context = _ctx.copy_context
|
|
26
|
+
Token = _ctx.Token
|
|
27
|
+
else:
|
|
28
|
+
# Python 3.6 兼容实现
|
|
29
|
+
# 使用简单的类来模拟 ContextVar 的基本行为
|
|
30
|
+
|
|
31
|
+
class Token:
|
|
32
|
+
"""Token 用于重置 ContextVar(模拟)"""
|
|
33
|
+
__slots__ = ('_value',)
|
|
34
|
+
|
|
35
|
+
def __init__(self, value):
|
|
36
|
+
self._value = value
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class ContextVar:
|
|
40
|
+
"""
|
|
41
|
+
ContextVar 兼容实现(Python 3.6)
|
|
42
|
+
|
|
43
|
+
使用 threading.local 存储每个线程的上下文,
|
|
44
|
+
不保证 async-safe,仅作为基础替代。
|
|
45
|
+
"""
|
|
46
|
+
__slots__ = ('_name', '_default', '_local')
|
|
47
|
+
|
|
48
|
+
def __init__(self, name: str, default: _T = None):
|
|
49
|
+
self._name = name
|
|
50
|
+
self._default = default
|
|
51
|
+
self._local = threading.local()
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def name(self) -> str:
|
|
55
|
+
return self._name
|
|
56
|
+
|
|
57
|
+
def get(self, default: _T = None) -> _T:
|
|
58
|
+
"""
|
|
59
|
+
获取当前线程的 ContextVar 值。
|
|
60
|
+
|
|
61
|
+
如果当前线程未设置值,返回默认值。
|
|
62
|
+
"""
|
|
63
|
+
value = getattr(self._local, 'value', self)
|
|
64
|
+
if value is self:
|
|
65
|
+
return self._default if self._default is not None else default
|
|
66
|
+
return value
|
|
67
|
+
|
|
68
|
+
def set(self, value: _T):
|
|
69
|
+
"""
|
|
70
|
+
设置当前线程的 ContextVar 值。
|
|
71
|
+
|
|
72
|
+
返回 Token 用于后续 reset。
|
|
73
|
+
"""
|
|
74
|
+
old_value = getattr(self._local, 'value', self)
|
|
75
|
+
self._local.value = value
|
|
76
|
+
return Token(old_value)
|
|
77
|
+
|
|
78
|
+
def reset(self, token: Token):
|
|
79
|
+
"""
|
|
80
|
+
重置 ContextVar 到设置前的值。
|
|
81
|
+
|
|
82
|
+
注意:这不是真正的 reset,仅用于兼容 API。
|
|
83
|
+
"""
|
|
84
|
+
self._local.value = token._value
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
__all__ = ['ContextVar', 'Context', 'copy_context', 'Token']
|
|
@@ -32,7 +32,7 @@ import time
|
|
|
32
32
|
import tkinter as tk
|
|
33
33
|
from collections import deque
|
|
34
34
|
from ctypes import wintypes as wt
|
|
35
|
-
from
|
|
35
|
+
from ...core.dataclass_compat import dataclass
|
|
36
36
|
from datetime import datetime
|
|
37
37
|
from enum import IntEnum
|
|
38
38
|
from typing import (
|
|
@@ -30,7 +30,7 @@ import threading
|
|
|
30
30
|
import time
|
|
31
31
|
from collections import deque
|
|
32
32
|
from ctypes import wintypes as wt
|
|
33
|
-
from
|
|
33
|
+
from ...core.dataclass_compat import dataclass
|
|
34
34
|
from datetime import datetime
|
|
35
35
|
from enum import IntEnum
|
|
36
36
|
from typing import (
|
|
@@ -30,7 +30,7 @@ import threading
|
|
|
30
30
|
import time
|
|
31
31
|
from collections import deque
|
|
32
32
|
from ctypes import wintypes as wt
|
|
33
|
-
from
|
|
33
|
+
from ...core.dataclass_compat import dataclass
|
|
34
34
|
from datetime import datetime
|
|
35
35
|
from enum import IntEnum
|
|
36
36
|
from typing import (
|
|
@@ -12,7 +12,7 @@ import logging
|
|
|
12
12
|
import pickle
|
|
13
13
|
import sys
|
|
14
14
|
import time
|
|
15
|
-
from
|
|
15
|
+
from ...core.dataclass_compat import dataclass, field, asdict
|
|
16
16
|
from enum import IntEnum, IntFlag
|
|
17
17
|
from typing import (
|
|
18
18
|
Any, Callable, Dict, List, Optional, Tuple,
|
|
@@ -878,7 +878,7 @@ class KeyboardDispatcher:
|
|
|
878
878
|
tags: Tuple[str, ...] = (),
|
|
879
879
|
metadata: Optional[Dict[str, Any]] = None,
|
|
880
880
|
) -> None:
|
|
881
|
-
from
|
|
881
|
+
from ..core.subject import Subject
|
|
882
882
|
self._backend_name: str = ""
|
|
883
883
|
self._backend: Optional[_BaseBackend] = None
|
|
884
884
|
self._filter_self = bool(filter_self)
|
|
@@ -1268,7 +1268,7 @@ class _WriteKeyboardOperator:
|
|
|
1268
1268
|
else:
|
|
1269
1269
|
self._dispatcher.release(key)
|
|
1270
1270
|
|
|
1271
|
-
from
|
|
1271
|
+
from ...reactive import operators as _ops
|
|
1272
1272
|
return source.pipe(
|
|
1273
1273
|
_ops.map(lambda x: (on_next(x) or x))
|
|
1274
1274
|
)
|
|
@@ -11,7 +11,7 @@ import logging
|
|
|
11
11
|
import pickle
|
|
12
12
|
import sys
|
|
13
13
|
import time
|
|
14
|
-
from
|
|
14
|
+
from ...core.dataclass_compat import dataclass, field, asdict
|
|
15
15
|
from enum import IntEnum
|
|
16
16
|
from typing import (
|
|
17
17
|
Any, Callable, Dict, List, Optional, Tuple,
|
|
@@ -804,7 +804,7 @@ class MouseDispatcher:
|
|
|
804
804
|
tags: Tuple[str, ...] = (),
|
|
805
805
|
metadata: Optional[Dict[str, Any]] = None,
|
|
806
806
|
) -> None:
|
|
807
|
-
from
|
|
807
|
+
from ..core.subject import Subject
|
|
808
808
|
self._backend_name: str = ""
|
|
809
809
|
self._backend: Optional[_BaseBackend] = None
|
|
810
810
|
self._filter_self = bool(filter_self)
|
|
@@ -1260,7 +1260,7 @@ class _WriteMouseOperator:
|
|
|
1260
1260
|
elif et in ("scroll", "SCROLL"):
|
|
1261
1261
|
self._dispatcher.scroll(item.get("delta", 1))
|
|
1262
1262
|
|
|
1263
|
-
from
|
|
1263
|
+
from ...reactive import operators as _ops
|
|
1264
1264
|
return source.pipe(
|
|
1265
1265
|
_ops.map(lambda x: (on_next(x) or x))
|
|
1266
1266
|
)
|
|
@@ -52,7 +52,7 @@ def from_range(start: int, stop: int = None, step: int = 1) -> Callable:
|
|
|
52
52
|
except Exception as e:
|
|
53
53
|
observer.on_error(e)
|
|
54
54
|
|
|
55
|
-
from .observable import Subscription
|
|
55
|
+
from ..core.observable import Subscription
|
|
56
56
|
return Subscription(lambda: None)
|
|
57
57
|
|
|
58
58
|
return Observable(subscribe)
|
|
@@ -176,7 +176,7 @@ def sample(period: float) -> Callable:
|
|
|
176
176
|
task[0].cancel()
|
|
177
177
|
source_sub.unsubscribe()
|
|
178
178
|
|
|
179
|
-
from .observable import Subscription
|
|
179
|
+
from ..core.observable import Subscription
|
|
180
180
|
return Subscription(unsubscribe)
|
|
181
181
|
|
|
182
182
|
return Observable(subscribe)
|
|
@@ -306,7 +306,7 @@ def throttle_latest(period: float) -> Callable:
|
|
|
306
306
|
task[0].cancel()
|
|
307
307
|
source_sub.unsubscribe()
|
|
308
308
|
|
|
309
|
-
from .observable import Subscription
|
|
309
|
+
from ..core.observable import Subscription
|
|
310
310
|
return Subscription(unsubscribe)
|
|
311
311
|
|
|
312
312
|
return Observable(subscribe)
|
|
@@ -457,7 +457,7 @@ def subscribe_on(scheduler) -> Callable:
|
|
|
457
457
|
|
|
458
458
|
scheduler.schedule(subscribe_inner)
|
|
459
459
|
|
|
460
|
-
from .observable import Subscription
|
|
460
|
+
from ..core.observable import Subscription
|
|
461
461
|
return Subscription(lambda: None)
|
|
462
462
|
|
|
463
463
|
return Observable(subscribe)
|
|
@@ -636,7 +636,7 @@ def flat_map_latest(fn: Callable[[T], Observable]) -> Callable:
|
|
|
636
636
|
inner_sub[0].unsubscribe()
|
|
637
637
|
source_sub.unsubscribe()
|
|
638
638
|
|
|
639
|
-
from .observable import Subscription
|
|
639
|
+
from ..core.observable import Subscription
|
|
640
640
|
return Subscription(unsubscribe)
|
|
641
641
|
|
|
642
642
|
return Observable(subscribe)
|
|
@@ -735,7 +735,7 @@ def amb() -> Callable:
|
|
|
735
735
|
if winner_sub[0]:
|
|
736
736
|
winner_sub[0].unsubscribe()
|
|
737
737
|
|
|
738
|
-
from .observable import Subscription
|
|
738
|
+
from ..core.observable import Subscription
|
|
739
739
|
return Subscription(unsubscribe)
|
|
740
740
|
|
|
741
741
|
return Observable(subscribe)
|
|
@@ -784,7 +784,7 @@ def switch() -> Callable:
|
|
|
784
784
|
inner_sub[0].unsubscribe()
|
|
785
785
|
source_sub.unsubscribe()
|
|
786
786
|
|
|
787
|
-
from .observable import Subscription
|
|
787
|
+
from ..core.observable import Subscription
|
|
788
788
|
return Subscription(unsubscribe)
|
|
789
789
|
|
|
790
790
|
return Observable(subscribe)
|
|
@@ -800,7 +800,7 @@ class ConnectableObservable(Generic[T]):
|
|
|
800
800
|
__slots__ = ('_source', '_subject', '_connection', '_ref_count')
|
|
801
801
|
|
|
802
802
|
def __init__(self, source, subject=None):
|
|
803
|
-
from .subject import Subject
|
|
803
|
+
from ..core.subject import Subject
|
|
804
804
|
self._source = source
|
|
805
805
|
self._subject = subject or Subject()
|
|
806
806
|
self._connection = None
|
|
@@ -818,7 +818,7 @@ class ConnectableObservable(Generic[T]):
|
|
|
818
818
|
connection = [None]
|
|
819
819
|
subject = None
|
|
820
820
|
|
|
821
|
-
from .subject import Subject
|
|
821
|
+
from ..core.subject import Subject
|
|
822
822
|
|
|
823
823
|
def get_subject():
|
|
824
824
|
nonlocal subject
|
|
@@ -843,7 +843,7 @@ class ConnectableObservable(Generic[T]):
|
|
|
843
843
|
connection[0] = None
|
|
844
844
|
subject = None
|
|
845
845
|
|
|
846
|
-
from .observable import Subscription
|
|
846
|
+
from ..core.observable import Subscription
|
|
847
847
|
return Subscription(unsubscribe)
|
|
848
848
|
|
|
849
849
|
from ..core.observable import Observable
|
|
@@ -856,7 +856,7 @@ class ConnectableObservable(Generic[T]):
|
|
|
856
856
|
def operator(source):
|
|
857
857
|
subject = None
|
|
858
858
|
|
|
859
|
-
from .subject import Subject
|
|
859
|
+
from ..core.subject import Subject
|
|
860
860
|
|
|
861
861
|
def subscribe(observer):
|
|
862
862
|
nonlocal subject
|
|
@@ -1248,7 +1248,7 @@ def cache(duration: float = None, max_size: int = None) -> Callable:
|
|
|
1248
1248
|
if sub in subscriptions:
|
|
1249
1249
|
subscriptions.remove(sub)
|
|
1250
1250
|
|
|
1251
|
-
from .observable import Subscription
|
|
1251
|
+
from ..core.observable import Subscription
|
|
1252
1252
|
return Subscription(unsubscribe)
|
|
1253
1253
|
|
|
1254
1254
|
return Observable(subscribe)
|
|
@@ -1325,7 +1325,7 @@ def parallel(max_concurrent: int = 4) -> Callable:
|
|
|
1325
1325
|
executor.shutdown(wait=False)
|
|
1326
1326
|
source_sub.unsubscribe()
|
|
1327
1327
|
|
|
1328
|
-
from .observable import Subscription
|
|
1328
|
+
from ..core.observable import Subscription
|
|
1329
1329
|
return Subscription(unsubscribe)
|
|
1330
1330
|
|
|
1331
1331
|
return Observable(subscribe)
|
|
@@ -2073,7 +2073,7 @@ def lazy_flat_map(lazy_fn: Callable[[T], Any] = None, **kwargs) -> Callable[[Obs
|
|
|
2073
2073
|
def seq_bridge(seq_op: Callable) -> Callable[[Observable[T]], Observable[Any]]:
|
|
2074
2074
|
"""Seq 操作桥接器"""
|
|
2075
2075
|
def operator(source: Observable[T]) -> Observable[Any]:
|
|
2076
|
-
from
|
|
2076
|
+
from ...data import Seq
|
|
2077
2077
|
|
|
2078
2078
|
def subscribe(observer: Observer[Any]) -> Subscription:
|
|
2079
2079
|
buf = []
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
提供 contextvars.ContextVar 机制,让 __getstate__ 方法感知当前序列化协议。
|
|
5
5
|
Serializer.dumps/loads 在调用后端前设置上下文,调用后重置。
|
|
6
|
+
|
|
7
|
+
注意:Python 3.6 使用兼容实现,不是 async-safe 的。
|
|
6
8
|
"""
|
|
7
9
|
|
|
8
|
-
import
|
|
10
|
+
from vools.core.contextvars_compat import ContextVar
|
|
9
11
|
from ..core import dataclass
|
|
10
12
|
from typing import Optional, Any
|
|
11
13
|
__all__ = ['SerializeContext', 'get_context', 'get_protocol', 'set_context', 'reset_context', 'get_current_serializer']
|
|
@@ -18,10 +20,8 @@ class SerializeContext:
|
|
|
18
20
|
serializer: Optional[Any] = None # Serializer 实例引用(用于 handler 回退)
|
|
19
21
|
|
|
20
22
|
|
|
21
|
-
# 使用
|
|
22
|
-
_ctx
|
|
23
|
-
'vools_serialize_ctx', default=None
|
|
24
|
-
)
|
|
23
|
+
# 使用 ContextVar 保证线程内上下文隔离
|
|
24
|
+
_ctx = ContextVar('vools_serialize_ctx', default=None)
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
def get_context() -> Optional[SerializeContext]:
|
|
@@ -8,6 +8,7 @@ vools.sql.core.decorators - SQL 装饰器
|
|
|
8
8
|
import functools
|
|
9
9
|
import inspect
|
|
10
10
|
import typing
|
|
11
|
+
import sys
|
|
11
12
|
|
|
12
13
|
from .types import SqlTypeMapper
|
|
13
14
|
from .result import ResultSet, Row
|
|
@@ -16,6 +17,19 @@ from .result import ResultSet, Row
|
|
|
16
17
|
_FUNC_NAME_ATTR = '_sql_func_name'
|
|
17
18
|
_SQL_INFO_ATTR = '_sql_info'
|
|
18
19
|
|
|
20
|
+
# Python 3.6 兼容:typing.get_origin/get_args 是 3.8+ 才有的
|
|
21
|
+
if sys.version_info >= (3, 8):
|
|
22
|
+
_get_origin = typing.get_origin
|
|
23
|
+
_get_args = typing.get_args
|
|
24
|
+
else:
|
|
25
|
+
def _get_origin(tp):
|
|
26
|
+
"""获取类型的 origin(兼容 Python 3.6)"""
|
|
27
|
+
return getattr(tp, '__origin__', None)
|
|
28
|
+
|
|
29
|
+
def _get_args(tp):
|
|
30
|
+
"""获取类型的 args(兼容 Python 3.6)"""
|
|
31
|
+
return getattr(tp, '__args__', None)
|
|
32
|
+
|
|
19
33
|
|
|
20
34
|
def _get_signature_info(func):
|
|
21
35
|
"""
|
|
@@ -125,8 +139,8 @@ def _convert_result(result, return_type):
|
|
|
125
139
|
if not isinstance(result, ResultSet):
|
|
126
140
|
return SqlTypeMapper.convert_result(result, return_type)
|
|
127
141
|
|
|
128
|
-
origin =
|
|
129
|
-
args =
|
|
142
|
+
origin = _get_origin(return_type)
|
|
143
|
+
args = _get_args(return_type)
|
|
130
144
|
|
|
131
145
|
if return_type is list or origin is list:
|
|
132
146
|
return result.to_list()
|
|
@@ -36,7 +36,7 @@ import json
|
|
|
36
36
|
import importlib
|
|
37
37
|
from typing import Dict, List, Optional, Type, Any
|
|
38
38
|
|
|
39
|
-
from
|
|
39
|
+
from ..core.dataclass_compat import asdict
|
|
40
40
|
|
|
41
41
|
from .core.config import DialectConfig
|
|
42
42
|
from .core.dialect import Dialect
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|