vools 0.7.2__tar.gz → 0.7.3__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.7.2/vools.egg-info → vools-0.7.3}/PKG-INFO +11 -5
- {vools-0.7.2 → vools-0.7.3}/pyproject.toml +10 -52
- {vools-0.7.2 → vools-0.7.3}/vools/__init__.py +21 -17
- {vools-0.7.2 → vools-0.7.3}/vools/data/itor_nim.py +15 -1
- {vools-0.7.2 → vools-0.7.3}/vools/data/table.py +12 -2
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/curry_core.py +19 -0
- {vools-0.7.2 → vools-0.7.3}/vools/security/hash.py +23 -10
- {vools-0.7.2 → vools-0.7.3}/vools/security/safe_eval.py +22 -8
- {vools-0.7.2 → vools-0.7.3/vools.egg-info}/PKG-INFO +11 -5
- {vools-0.7.2 → vools-0.7.3}/vools.egg-info/SOURCES.txt +1 -62
- {vools-0.7.2 → vools-0.7.3}/vools.egg-info/requires.txt +12 -4
- vools-0.7.2/vools/dll32/__init__.py +0 -86
- vools-0.7.2/vools/dll32/_core/__init__.py +0 -14
- vools-0.7.2/vools/dll32/_core/_pipe_comm.py +0 -18
- vools-0.7.2/vools/dll32/_core/_spawn32.py +0 -342
- vools-0.7.2/vools/dll32/_dlls/DirectCOM.dll +0 -0
- vools-0.7.2/vools/dll32/_dlls/RC6.dll +0 -0
- vools-0.7.2/vools/dll32/_dlls/RC6Widgets.dll +0 -0
- vools-0.7.2/vools/dll32/_dlls/VB6MQTT.dll +0 -0
- vools-0.7.2/vools/dll32/_dlls/VB6OpenSSL.dll +0 -0
- vools-0.7.2/vools/dll32/_dlls/VB6Plus.dll +0 -0
- vools-0.7.2/vools/dll32/_dlls/WebView2Loader.dll +0 -0
- vools-0.7.2/vools/dll32/_dlls/cairo_sqlite.dll +0 -0
- vools-0.7.2/vools/dll32/_dlls/vbRichClient5.dll +0 -0
- vools-0.7.2/vools/dll32/_lib/__init__.py +0 -9
- vools-0.7.2/vools/dll32/_lib/clr/__init__.py +0 -8
- vools-0.7.2/vools/dll32/_lib/clr/_base.py +0 -89
- vools-0.7.2/vools/dll32/_lib/com/__init__.py +0 -9
- vools-0.7.2/vools/dll32/_lib/com/_base.py +0 -103
- vools-0.7.2/vools/dll32/_lib/com/directcom.py +0 -115
- vools-0.7.2/vools/dll32/_lib/com/rc6.py +0 -228
- vools-0.7.2/vools/dll32/_lib/com/rc6plus.py +0 -344
- vools-0.7.2/vools/dll32/_python32/__init__.py +0 -1
- vools-0.7.2/vools/dll32/_python32/python.exe +0 -0
- vools-0.7.2/vools/dll32/_python32/python3.dll +0 -0
- vools-0.7.2/vools/dll32/_python32/python32_launcher.py +0 -63
- vools-0.7.2/vools/dll32/_python32/python36._pth +0 -5
- vools-0.7.2/vools/dll32/_python32/python36.dll +0 -0
- vools-0.7.2/vools/dll32/_python32/python36.zip +0 -0
- vools-0.7.2/vools/dll32/_python32/pythonw.exe +0 -0
- vools-0.7.2/vools/dll32/_python32/sqlite3.dll +0 -0
- vools-0.7.2/vools/dll32/_python32/vcruntime140.dll +0 -0
- vools-0.7.2/vools/dll32/_signatures/__init__.py +0 -13
- vools-0.7.2/vools/dll32/_signatures/_registry.py +0 -50
- vools-0.7.2/vools/dll32/_signatures/mqtt.py +0 -46
- vools-0.7.2/vools/dll32/_signatures/openssl.py +0 -35
- vools-0.7.2/vools/dll32/_signatures/vb6plus.py +0 -299
- vools-0.7.2/vools/dll32/dll.py +0 -77
- vools-0.7.2/vools/dll32/examples/basic_usage.py +0 -74
- vools-0.7.2/vools/dll32/get-pip.py +0 -27079
- vools-0.7.2/vools/dll32/mqtt.py +0 -83
- vools-0.7.2/vools/dll32/openssl.py +0 -54
- vools-0.7.2/vools/dll32/tests/__init__.py +0 -1
- vools-0.7.2/vools/dll32/tests/test_dll32.py +0 -59
- vools-0.7.2/vools/dll32/vb6plus.py +0 -495
- vools-0.7.2/vools/xl/__init__.py +0 -101
- vools-0.7.2/vools/xl/_core/__init__.py +0 -9
- vools-0.7.2/vools/xl/_core/api.py +0 -836
- vools-0.7.2/vools/xl/_core/loader.py +0 -75
- vools-0.7.2/vools/xl/_dlls/__init__.py +0 -52
- vools-0.7.2/vools/xl/_dlls/libxl.dll +0 -0
- vools-0.7.2/vools/xl/_highlevel/__init__.py +0 -57
- vools-0.7.2/vools/xl/_highlevel/engines.py +0 -284
- vools-0.7.2/vools/xl/_highlevel/pandas_io.py +0 -150
- vools-0.7.2/vools/xl/_highlevel/utils.py +0 -344
- vools-0.7.2/vools/xl/_objects/__init__.py +0 -12
- vools-0.7.2/vools/xl/_objects/book.py +0 -483
- vools-0.7.2/vools/xl/_objects/font.py +0 -99
- vools-0.7.2/vools/xl/_objects/format.py +0 -262
- vools-0.7.2/vools/xl/_objects/sheet.py +0 -840
- vools-0.7.2/vools/xl/_utils/__init__.py +0 -200
- vools-0.7.2/vools/xl/_utils/helpers.py +0 -107
- {vools-0.7.2 → vools-0.7.3}/LICENSE +0 -0
- {vools-0.7.2 → vools-0.7.3}/NOTICE +0 -0
- {vools-0.7.2 → vools-0.7.3}/README.md +0 -0
- {vools-0.7.2 → vools-0.7.3}/setup.cfg +0 -0
- {vools-0.7.2 → vools-0.7.3}/tests/test_functions.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/README.md +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/__main__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/api/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/api/curry_cmd.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/api/memoize_cmd.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/api/ops_cmd.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/api/seq_cmd.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/api/typer_app.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/cache/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/cache/memorize.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/cache/once.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/cache/persist.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/cache/sigcache.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/asyncio_mod.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/bridges.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/contextvars_mod.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/delegates.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/futures.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/multiprocessing_mod.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/queues.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/sched_mod.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/spawns.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/subprocess_mod.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/concurrent/threading_mod.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/core/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/core/asyncio_compat.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/core/base.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/core/config.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/core/contextvars_compat.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/core/dataclass_compat.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/core/datetime_compat.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/core/exceptions.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/core/inspect_compat.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/crypto/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/crypto/core.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/curried/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/curried/collection.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/curried/composition.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/curried/core.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/curried/iteration.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/curried/math.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/curried/predicate.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/curried/string.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/data/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/data/itor.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/data/qax.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/data/seq.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/data/validator.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/data/vlist.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/data/vtext.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/datetime/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/datetime/dates_format.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/datetime/utils.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/datetime/vdate_class.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/bridge_decorator.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/cache.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/control.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/curried.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/curry_decorator.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/curry_delay.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/flex_pos.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/lazy.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/overcurry.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/overload.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/overloads.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/rself.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/selector.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/shotcut.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/decorators/trd.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/encoding/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/encoding/core.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/functional/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/functional/arrow_func.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/functional/box.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/functional/funcs.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/functional/iif.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/functional/pipe_ops.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/functional/placeholder.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/functional/placeholder_impl.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/functional/result.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/oop/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/oop/calltype.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/oop/extend.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/oop/fusion.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/oop/method_extend.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/oop/mixer.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/oop/selector.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/security/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/security/_constants.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/security/expression_handler.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/base.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/json_backend.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/msgpack_backend.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/pickle_backend.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/vb_json_backend.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/callable/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/callable/decorator_handler.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/callable/functional_handler.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/codec.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/config.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/context.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/core.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/decorators.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/sentinel.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/serialize/type_registry.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/core/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/core/builder.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/core/config.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/core/connection.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/core/decorators.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/core/dialect.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/core/result.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/core/types.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/manager.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/postgres/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/postgres/connection.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/postgres/dialect.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/spark/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/spark/connection.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/spark/dialect.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/spark/scala_bridge.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/sqlite/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/sqlite/connection.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sql/sqlite/dialect.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sys/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sys/cmd.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sys/compile_cmd.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sys/dll.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sys/dll_cmd.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sys/env.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sys/env_cmd.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sys/exe.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sys/fire_app.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/sys/run_cmd.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/core/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/core/models.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/core/queue.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/core/storage.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/core/worker.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/decorators/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/decorators/task_decorator.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/rules/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/rules/dag.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/rules/engine.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/rules/rule.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/task/utils/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/utils/__init__.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/utils/hoder.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/utils/stuff.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools/utils/tools.py +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools.egg-info/dependency_links.txt +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools.egg-info/entry_points.txt +0 -0
- {vools-0.7.2 → vools-0.7.3}/vools.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vools
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.3
|
|
4
4
|
Summary: Python 函数式编程工具集
|
|
5
5
|
Author-email: Victor <victortop921129@gmail.com>
|
|
6
6
|
License: Apache License
|
|
@@ -239,12 +239,18 @@ Provides-Extra: serialize
|
|
|
239
239
|
Requires-Dist: msgpack>=1.0; extra == "serialize"
|
|
240
240
|
Requires-Dist: orjson>=3.9; extra == "serialize"
|
|
241
241
|
Provides-Extra: rx
|
|
242
|
-
Requires-Dist: vools-rx==0.7.
|
|
242
|
+
Requires-Dist: vools-rx==0.7.3; extra == "rx"
|
|
243
243
|
Provides-Extra: bridges
|
|
244
|
-
Requires-Dist: vools-bridges==0.7.
|
|
244
|
+
Requires-Dist: vools-bridges==0.7.3; extra == "bridges"
|
|
245
|
+
Provides-Extra: dll32
|
|
246
|
+
Requires-Dist: vools-dll32==0.7.3; extra == "dll32"
|
|
247
|
+
Provides-Extra: xl
|
|
248
|
+
Requires-Dist: vools-xl==0.7.3; extra == "xl"
|
|
245
249
|
Provides-Extra: all
|
|
246
|
-
Requires-Dist: vools-rx==0.7.
|
|
247
|
-
Requires-Dist: vools-bridges==0.7.
|
|
250
|
+
Requires-Dist: vools-rx==0.7.3; extra == "all"
|
|
251
|
+
Requires-Dist: vools-bridges==0.7.3; extra == "all"
|
|
252
|
+
Requires-Dist: vools-dll32==0.7.3; extra == "all"
|
|
253
|
+
Requires-Dist: vools-xl==0.7.3; extra == "all"
|
|
248
254
|
Provides-Extra: cli
|
|
249
255
|
Requires-Dist: typer>=0.12.0; extra == "cli"
|
|
250
256
|
Requires-Dist: typing-extensions>=4.0.0; extra == "cli"
|
|
@@ -46,9 +46,11 @@ serialize = [
|
|
|
46
46
|
"msgpack>=1.0",
|
|
47
47
|
"orjson>=3.9",
|
|
48
48
|
]
|
|
49
|
-
rx = ["vools-rx==0.7.
|
|
50
|
-
bridges = ["vools-bridges==0.7.
|
|
51
|
-
|
|
49
|
+
rx = ["vools-rx==0.7.3"]
|
|
50
|
+
bridges = ["vools-bridges==0.7.3"]
|
|
51
|
+
dll32 = ["vools-dll32==0.7.3"]
|
|
52
|
+
xl = ["vools-xl==0.7.3"]
|
|
53
|
+
all = ["vools-rx==0.7.3", "vools-bridges==0.7.3", "vools-dll32==0.7.3", "vools-xl==0.7.3"]
|
|
52
54
|
cli = [
|
|
53
55
|
"typer>=0.12.0",
|
|
54
56
|
"typing-extensions>=4.0.0",
|
|
@@ -75,10 +77,8 @@ include = ["vools*"]
|
|
|
75
77
|
exclude = [
|
|
76
78
|
"vools.__pycache__",
|
|
77
79
|
"vools.*.__pycache__",
|
|
78
|
-
"vools.dll32
|
|
79
|
-
"vools.
|
|
80
|
-
"vools.dll32._dlls",
|
|
81
|
-
"vools.dll32._dlls.*",
|
|
80
|
+
"vools.dll32*",
|
|
81
|
+
"vools.xl*",
|
|
82
82
|
"vools.bridge*",
|
|
83
83
|
"vools.reactive*",
|
|
84
84
|
]
|
|
@@ -94,50 +94,8 @@ version = { attr = "vools.__version__" }
|
|
|
94
94
|
"lib/*.so",
|
|
95
95
|
"lib/windows/*.dll",
|
|
96
96
|
"lib/linux/*.so",
|
|
97
|
-
"
|
|
98
|
-
|
|
99
|
-
"vools.dll32" = [
|
|
100
|
-
"_dlls/*.dll",
|
|
101
|
-
"_dlls/*.tlb",
|
|
102
|
-
"_dlls/*.ocx",
|
|
103
|
-
"_python32/python.exe",
|
|
104
|
-
"_python32/pythonw.exe",
|
|
105
|
-
"_python32/python3.dll",
|
|
106
|
-
"_python32/python3*.dll",
|
|
107
|
-
"_python32/python3*.pyd",
|
|
108
|
-
"_python32/python3*.zip",
|
|
109
|
-
"_python32/python3*._pth",
|
|
110
|
-
"_python32/vcruntime140.dll",
|
|
111
|
-
"_python32/sqlite3.dll",
|
|
112
|
-
"_python32/pyexpat.pyd",
|
|
113
|
-
"_python32/select.pyd",
|
|
114
|
-
"_python32/unicodedata.pyd",
|
|
115
|
-
"_python32/winsound.pyd",
|
|
116
|
-
"_python32/_asyncio.pyd",
|
|
117
|
-
"_python32/_bz2.pyd",
|
|
118
|
-
"_python32/_ctypes.pyd",
|
|
119
|
-
"_python32/_decimal.pyd",
|
|
120
|
-
"_python32/_distutils_findvs.pyd",
|
|
121
|
-
"_python32/_elementtree.pyd",
|
|
122
|
-
"_python32/_hashlib.pyd",
|
|
123
|
-
"_python32/_lzma.pyd",
|
|
124
|
-
"_python32/_msi.pyd",
|
|
125
|
-
"_python32/_multiprocessing.pyd",
|
|
126
|
-
"_python32/_overlapped.pyd",
|
|
127
|
-
"_python32/_socket.pyd",
|
|
128
|
-
"_python32/_sqlite3.pyd",
|
|
129
|
-
"_python32/_ssl.pyd",
|
|
130
|
-
"_python32/__init__.py",
|
|
131
|
-
"_python32/python32_launcher.py",
|
|
132
|
-
]
|
|
133
|
-
|
|
134
|
-
[tool.setuptools.exclude-package-data]
|
|
135
|
-
"vools.dll32" = [
|
|
136
|
-
"_python32/Lib/**/*",
|
|
137
|
-
"_python32/Lib/*",
|
|
138
|
-
"_python32/**/__pycache__/*",
|
|
139
|
-
"_python32/**/*.pyc",
|
|
140
|
-
"_python32/**/*.pyo",
|
|
97
|
+
"data/*.dll",
|
|
98
|
+
"data/*.so",
|
|
141
99
|
]
|
|
142
100
|
|
|
143
101
|
# ============ pytest ============
|
|
@@ -147,7 +105,7 @@ testpaths = ["tests"]
|
|
|
147
105
|
# 默认不运行(需要外部资源/平台特定):dll32, xl, monitoring, benchmarks, archive, other
|
|
148
106
|
# 如需运行全部测试,使用: pytest --override-ini="addopts=--tb=short -q"
|
|
149
107
|
# 如需运行特定子项目测试,使用: pytest bridges/tests/ 或 pytest rx/tests/
|
|
150
|
-
addopts = "--tb=short -q --ignore=tests/
|
|
108
|
+
addopts = "--tb=short -q --ignore=tests/monitoring --ignore=tests/benchmarks --ignore=tests/archive --ignore=tests/other --ignore=tests/__rust__ --ignore=tests/__persist__ --ignore=tests/__pycache__"
|
|
151
109
|
markers = [
|
|
152
110
|
"integration: 标记集成测试(依赖外部资源,如剪贴板、文件系统、键鼠)",
|
|
153
111
|
"windows_only: 仅在 Windows 上可运行的测试",
|
|
@@ -32,7 +32,7 @@ if not hasattr(subprocess.Popen.__init__, '_vools_patched'):
|
|
|
32
32
|
import importlib
|
|
33
33
|
from typing import Any
|
|
34
34
|
|
|
35
|
-
__version__ = "0.7.
|
|
35
|
+
__version__ = "0.7.3"
|
|
36
36
|
__author__ = "Victor"
|
|
37
37
|
__license__ = "Apache 2.0"
|
|
38
38
|
|
|
@@ -142,7 +142,6 @@ _lazy_modules = {
|
|
|
142
142
|
'trd': '.decorators',
|
|
143
143
|
'proc': '.decorators',
|
|
144
144
|
'extend': '.decorators',
|
|
145
|
-
'smart_partial': '.decorators',
|
|
146
145
|
'delay_curry': '.decorators',
|
|
147
146
|
|
|
148
147
|
'Pipe': '.functional',
|
|
@@ -163,11 +162,9 @@ _lazy_modules = {
|
|
|
163
162
|
'pipe': '.utils',
|
|
164
163
|
|
|
165
164
|
'shotcut': '.decorators',
|
|
166
|
-
'shotcutEx': '.decorators',
|
|
167
165
|
'hoder': '.utils',
|
|
168
166
|
'Hoder': '.utils',
|
|
169
167
|
'timeit': '.decorators',
|
|
170
|
-
'asyncify': '.decorators',
|
|
171
168
|
'safe': '.decorators',
|
|
172
169
|
'throttle': '.decorators',
|
|
173
170
|
'debounce': '.decorators',
|
|
@@ -178,7 +175,6 @@ _lazy_modules = {
|
|
|
178
175
|
'with_timeout': '.decorators',
|
|
179
176
|
'validate': '.decorators',
|
|
180
177
|
'rate_limit': '.decorators',
|
|
181
|
-
'log_calls': '.decorators',
|
|
182
178
|
'cache_with_ttl': '.decorators',
|
|
183
179
|
'hybrid_method': '.decorators',
|
|
184
180
|
'classproperty': '.decorators',
|
|
@@ -190,10 +186,6 @@ _lazy_modules = {
|
|
|
190
186
|
'oop': '.oop',
|
|
191
187
|
'calltype': '.oop',
|
|
192
188
|
|
|
193
|
-
'vicTools': '.vic',
|
|
194
|
-
'vicDate': '.vic',
|
|
195
|
-
'vicText': '.vic',
|
|
196
|
-
'vicList': '.vic',
|
|
197
189
|
|
|
198
190
|
'datetime': '.datetime',
|
|
199
191
|
|
|
@@ -266,6 +258,8 @@ OOP_AVAILABLE = True
|
|
|
266
258
|
DATETIME_AVAILABLE = True
|
|
267
259
|
BRIDGE_AVAILABLE = False
|
|
268
260
|
REACTIVE_AVAILABLE = False
|
|
261
|
+
DLL32_AVAILABLE = False
|
|
262
|
+
XL_AVAILABLE = False
|
|
269
263
|
|
|
270
264
|
VIC_AVAILABLE = True
|
|
271
265
|
|
|
@@ -305,6 +299,24 @@ def __getattr__(name: str) -> Any:
|
|
|
305
299
|
except Exception:
|
|
306
300
|
raise AttributeError("vools.reactive is not installed; use pip install 'vools[rx]' or pip install vools-rx")
|
|
307
301
|
|
|
302
|
+
if name == 'dll32':
|
|
303
|
+
global DLL32_AVAILABLE
|
|
304
|
+
try:
|
|
305
|
+
module = importlib.import_module('.dll32', package='vools')
|
|
306
|
+
DLL32_AVAILABLE = True
|
|
307
|
+
return module
|
|
308
|
+
except Exception:
|
|
309
|
+
raise AttributeError("vools.dll32 is not installed; use pip install 'vools[dll32]' or pip install vools-dll32")
|
|
310
|
+
|
|
311
|
+
if name == 'xl':
|
|
312
|
+
global XL_AVAILABLE
|
|
313
|
+
try:
|
|
314
|
+
module = importlib.import_module('.xl', package='vools')
|
|
315
|
+
XL_AVAILABLE = True
|
|
316
|
+
return module
|
|
317
|
+
except Exception:
|
|
318
|
+
raise AttributeError("vools.xl is not installed; use pip install 'vools[xl]' or pip install vools-xl")
|
|
319
|
+
|
|
308
320
|
if name in _lazy_modules:
|
|
309
321
|
module_path = _lazy_modules[name]
|
|
310
322
|
try:
|
|
@@ -349,7 +361,6 @@ __all__ = [
|
|
|
349
361
|
'trd',
|
|
350
362
|
'proc',
|
|
351
363
|
'extend',
|
|
352
|
-
'smart_partial',
|
|
353
364
|
'delay_curry',
|
|
354
365
|
'overload',
|
|
355
366
|
'OverloadManager', 'OverloadMode', 'reset_registry',
|
|
@@ -390,11 +401,9 @@ __all__ = [
|
|
|
390
401
|
'pipe',
|
|
391
402
|
|
|
392
403
|
'shotcut',
|
|
393
|
-
'shotcutEx',
|
|
394
404
|
'hoder',
|
|
395
405
|
'Hoder',
|
|
396
406
|
'timeit',
|
|
397
|
-
'asyncify',
|
|
398
407
|
'safe',
|
|
399
408
|
'throttle',
|
|
400
409
|
'debounce',
|
|
@@ -405,7 +414,6 @@ __all__ = [
|
|
|
405
414
|
'with_timeout',
|
|
406
415
|
'validate',
|
|
407
416
|
'rate_limit',
|
|
408
|
-
'log_calls',
|
|
409
417
|
'cache_with_ttl',
|
|
410
418
|
'hybrid_method',
|
|
411
419
|
'classproperty',
|
|
@@ -418,10 +426,6 @@ __all__ = [
|
|
|
418
426
|
'calltype',
|
|
419
427
|
'OOP_AVAILABLE',
|
|
420
428
|
|
|
421
|
-
'vicTools',
|
|
422
|
-
'vicDate',
|
|
423
|
-
'vicText',
|
|
424
|
-
'vicList',
|
|
425
429
|
|
|
426
430
|
'vDate',
|
|
427
431
|
'get_week',
|
|
@@ -54,6 +54,7 @@ class NimItor:
|
|
|
54
54
|
self._queue = deque()
|
|
55
55
|
self._jump_queue = deque()
|
|
56
56
|
self._source_exhausted = False
|
|
57
|
+
self._started = False
|
|
57
58
|
|
|
58
59
|
self._handle = self._dll.newItor()
|
|
59
60
|
|
|
@@ -61,7 +62,15 @@ class NimItor:
|
|
|
61
62
|
def state(self) -> ItorState:
|
|
62
63
|
if self._handle is None:
|
|
63
64
|
return ItorState.STOPPED
|
|
64
|
-
|
|
65
|
+
dll_state = self._dll.state(self._handle)
|
|
66
|
+
if dll_state == ItorState.STOPPED.value:
|
|
67
|
+
return ItorState.STOPPED
|
|
68
|
+
if dll_state == ItorState.PAUSED.value:
|
|
69
|
+
return ItorState.PAUSED
|
|
70
|
+
# DLL 无法区分 PENDING / ITERRING,由 Python 端维护起始标志
|
|
71
|
+
if self._source_exhausted and not self._queue and not self._jump_queue:
|
|
72
|
+
return ItorState.STOPPED
|
|
73
|
+
return ItorState.ITERRING if self._started else ItorState.PENDING
|
|
65
74
|
|
|
66
75
|
def send(self, jump: Any, jump_when: Optional[Callable[['NimItor'], bool]] = None) -> 'NimItor':
|
|
67
76
|
if jump_when is not None:
|
|
@@ -109,6 +118,10 @@ class NimItor:
|
|
|
109
118
|
|
|
110
119
|
def __next__(self) -> Any:
|
|
111
120
|
while True:
|
|
121
|
+
# 已停止的迭代器立即终止(无论队列中是否还有缓存值)
|
|
122
|
+
if self._handle is not None and self._dll.state(self._handle) == ItorState.STOPPED.value:
|
|
123
|
+
raise StopIteration
|
|
124
|
+
|
|
112
125
|
if self._jump_queue:
|
|
113
126
|
return self._jump_queue.popleft()
|
|
114
127
|
|
|
@@ -120,6 +133,7 @@ class NimItor:
|
|
|
120
133
|
|
|
121
134
|
if self._iterator is None:
|
|
122
135
|
self._iterator = iter(self._iterable)
|
|
136
|
+
self._started = True
|
|
123
137
|
|
|
124
138
|
try:
|
|
125
139
|
item = next(self._iterator)
|
|
@@ -1900,7 +1900,12 @@ class Table(Seq):
|
|
|
1900
1900
|
|
|
1901
1901
|
table = Table.read_excel('data.xlsx')
|
|
1902
1902
|
"""
|
|
1903
|
-
|
|
1903
|
+
try:
|
|
1904
|
+
from ..xl import Book
|
|
1905
|
+
except ImportError as exc:
|
|
1906
|
+
raise ImportError(
|
|
1907
|
+
"vools.xl is not installed; use pip install 'vools[xl]' or pip install vools-xl"
|
|
1908
|
+
) from exc
|
|
1904
1909
|
|
|
1905
1910
|
if not os.path.exists(filename):
|
|
1906
1911
|
raise FileNotFoundError(f'File not found: {filename}')
|
|
@@ -1974,7 +1979,12 @@ class Table(Seq):
|
|
|
1974
1979
|
|
|
1975
1980
|
table.write_excel('output.xlsx')
|
|
1976
1981
|
"""
|
|
1977
|
-
|
|
1982
|
+
try:
|
|
1983
|
+
from ..xl import Book
|
|
1984
|
+
except ImportError as exc:
|
|
1985
|
+
raise ImportError(
|
|
1986
|
+
"vools.xl is not installed; use pip install 'vools[xl]' or pip install vools-xl"
|
|
1987
|
+
) from exc
|
|
1978
1988
|
|
|
1979
1989
|
with Book() as book:
|
|
1980
1990
|
sheet = book.add_sheet(sheet_name)
|
|
@@ -215,6 +215,25 @@ class CurryDescriptor:
|
|
|
215
215
|
Returns:
|
|
216
216
|
如果 instance 为 None 返回 Curried,否则返回绑定后的 Curried
|
|
217
217
|
"""
|
|
218
|
+
# classmethod 委托场景:Python 的 classmethod.__get__ 会把类本身作为
|
|
219
|
+
# instance 传给 descriptor(instance is owner),此时需将第一个参数 (cls)
|
|
220
|
+
# 绑定为 owner 并从 required_args 中剔除。
|
|
221
|
+
is_classmethod_delegation = (
|
|
222
|
+
owner is not None
|
|
223
|
+
and isinstance(instance, type)
|
|
224
|
+
and instance is owner
|
|
225
|
+
and isinstance(getattr(owner, '__dict__', {}).get(self._name), classmethod)
|
|
226
|
+
)
|
|
227
|
+
if is_classmethod_delegation:
|
|
228
|
+
bound_func = self.func.__get__(owner, owner)
|
|
229
|
+
pre_attrs = self.pre_attrs.copy()
|
|
230
|
+
required_args = pre_attrs.get('required_args', [])
|
|
231
|
+
params = pre_attrs.get('params', {})
|
|
232
|
+
if required_args:
|
|
233
|
+
first = required_args[0]
|
|
234
|
+
pre_attrs['required_args'] = required_args[1:]
|
|
235
|
+
pre_attrs['params'] = {k: v for k, v in params.items() if k != first}
|
|
236
|
+
return Curried(bound_func, is_strict=self.is_strict, delaied=self.delaied, **pre_attrs)
|
|
218
237
|
if instance is None:
|
|
219
238
|
return Curried(self.func, is_strict=self.is_strict, delaied=self.delaied, **self.pre_attrs)
|
|
220
239
|
bound_func = self.func.__get__(instance, owner)
|
|
@@ -28,16 +28,29 @@ __all__ = [
|
|
|
28
28
|
|
|
29
29
|
# 优先使用 Nim 桥接库(来自 vools.bridge.nim.crypto)
|
|
30
30
|
# crypto.py 已经正确实现了 _nim_sha256/_py_sha256 的自动切换
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
# 注意:必须延迟导入,避免 import vools 时预加载 vools.bridge 子包,
|
|
32
|
+
# 否则 vools.BRIDGE_AVAILABLE 标志的翻转逻辑永远不执行。
|
|
33
|
+
_nim_available = False
|
|
34
|
+
_nim_sha256_impl = None
|
|
35
|
+
_nim_md5_impl = None
|
|
36
|
+
_nim_sha1_impl = None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _load_nim_impls() -> None:
|
|
40
|
+
"""延迟加载 Nim 桥接实现(仅在需要时导入 vools.bridge)。"""
|
|
41
|
+
global _nim_available, _nim_sha256_impl, _nim_md5_impl, _nim_sha1_impl
|
|
42
|
+
if _nim_available:
|
|
43
|
+
return
|
|
44
|
+
try:
|
|
45
|
+
from ..bridge.nim import sha256 as _sha256_impl
|
|
46
|
+
from ..bridge.nim import md5 as _md5_impl
|
|
47
|
+
from ..bridge.nim import sha1 as _sha1_impl
|
|
48
|
+
_nim_sha256_impl = _sha256_impl
|
|
49
|
+
_nim_md5_impl = _md5_impl
|
|
50
|
+
_nim_sha1_impl = _sha1_impl
|
|
51
|
+
_nim_available = True
|
|
52
|
+
except ImportError:
|
|
53
|
+
_nim_available = False
|
|
41
54
|
|
|
42
55
|
|
|
43
56
|
def _py_sha256_hex(data: bytes) -> str:
|
|
@@ -209,10 +209,22 @@ def safe_eval(expr: str, vars: Optional[Dict[str, Any]] = None) -> Any:
|
|
|
209
209
|
|
|
210
210
|
# 导入 shim(shim 不引用 vools 子包,避免循环导入)。
|
|
211
211
|
# 当 vools-bridges 未安装时回退到 None,保证核心 safe_eval 仍然可用。
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
212
|
+
# 注意:必须延迟导入,避免 import vools 时预加载 vools.bridge 子包,
|
|
213
|
+
# 否则 vools.BRIDGE_AVAILABLE 标志的翻转逻辑永远不执行。
|
|
214
|
+
_safe_eval_shim = None
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def _load_safe_eval_shim():
|
|
218
|
+
"""延迟加载 Rust safe_eval shim(首次需要时导入 vools.bridge)。"""
|
|
219
|
+
global _safe_eval_shim
|
|
220
|
+
if _safe_eval_shim is not None:
|
|
221
|
+
return _safe_eval_shim
|
|
222
|
+
try:
|
|
223
|
+
from ..bridge.rust import safe_eval_shim as _shim
|
|
224
|
+
_safe_eval_shim = _shim
|
|
225
|
+
except Exception:
|
|
226
|
+
_safe_eval_shim = None
|
|
227
|
+
return _safe_eval_shim
|
|
216
228
|
|
|
217
229
|
|
|
218
230
|
def _safe_eval_rust_impl(expr: str, vars: Optional[Dict[str, Any]] = None, timeout_ms: int = 1000) -> Any:
|
|
@@ -236,16 +248,17 @@ def _safe_eval_rust_impl(expr: str, vars: Optional[Dict[str, Any]] = None, timeo
|
|
|
236
248
|
SafeEvalError: 当表达式包含不安全内容时
|
|
237
249
|
"""
|
|
238
250
|
# 检查 Rust 是否可用
|
|
239
|
-
|
|
251
|
+
_shim = _load_safe_eval_shim()
|
|
252
|
+
if _shim is None or not _shim.is_rust_available():
|
|
240
253
|
raise SafeEvalError("Rust 桥接库不可用")
|
|
241
254
|
|
|
242
255
|
# 编译表达式为 VM 指令
|
|
243
|
-
instructions, compile_err =
|
|
256
|
+
instructions, compile_err = _shim.compile_to_instructions(expr)
|
|
244
257
|
if compile_err:
|
|
245
258
|
raise SafeEvalError(compile_err)
|
|
246
259
|
|
|
247
260
|
# 执行指令
|
|
248
|
-
result =
|
|
261
|
+
result = _shim.eval_instructions(instructions, timeout_ms)
|
|
249
262
|
|
|
250
263
|
if not result.get("ok", False):
|
|
251
264
|
error = result.get("error", {})
|
|
@@ -300,7 +313,8 @@ def safe_eval_rust(expr: str, vars: Optional[Dict[str, Any]] = None, timeout_ms:
|
|
|
300
313
|
|
|
301
314
|
def is_rust_safe_eval_available() -> bool:
|
|
302
315
|
"""检查 Rust 安全沙箱是否可用"""
|
|
303
|
-
|
|
316
|
+
_shim = _load_safe_eval_shim()
|
|
317
|
+
return _shim is not None and _shim.is_rust_available()
|
|
304
318
|
|
|
305
319
|
|
|
306
320
|
DANGEROUS_PATTERNS = [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vools
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.3
|
|
4
4
|
Summary: Python 函数式编程工具集
|
|
5
5
|
Author-email: Victor <victortop921129@gmail.com>
|
|
6
6
|
License: Apache License
|
|
@@ -239,12 +239,18 @@ Provides-Extra: serialize
|
|
|
239
239
|
Requires-Dist: msgpack>=1.0; extra == "serialize"
|
|
240
240
|
Requires-Dist: orjson>=3.9; extra == "serialize"
|
|
241
241
|
Provides-Extra: rx
|
|
242
|
-
Requires-Dist: vools-rx==0.7.
|
|
242
|
+
Requires-Dist: vools-rx==0.7.3; extra == "rx"
|
|
243
243
|
Provides-Extra: bridges
|
|
244
|
-
Requires-Dist: vools-bridges==0.7.
|
|
244
|
+
Requires-Dist: vools-bridges==0.7.3; extra == "bridges"
|
|
245
|
+
Provides-Extra: dll32
|
|
246
|
+
Requires-Dist: vools-dll32==0.7.3; extra == "dll32"
|
|
247
|
+
Provides-Extra: xl
|
|
248
|
+
Requires-Dist: vools-xl==0.7.3; extra == "xl"
|
|
245
249
|
Provides-Extra: all
|
|
246
|
-
Requires-Dist: vools-rx==0.7.
|
|
247
|
-
Requires-Dist: vools-bridges==0.7.
|
|
250
|
+
Requires-Dist: vools-rx==0.7.3; extra == "all"
|
|
251
|
+
Requires-Dist: vools-bridges==0.7.3; extra == "all"
|
|
252
|
+
Requires-Dist: vools-dll32==0.7.3; extra == "all"
|
|
253
|
+
Requires-Dist: vools-xl==0.7.3; extra == "all"
|
|
248
254
|
Provides-Extra: cli
|
|
249
255
|
Requires-Dist: typer>=0.12.0; extra == "cli"
|
|
250
256
|
Requires-Dist: typing-extensions>=4.0.0; extra == "cli"
|
|
@@ -84,50 +84,6 @@ vools/decorators/rself.py
|
|
|
84
84
|
vools/decorators/selector.py
|
|
85
85
|
vools/decorators/shotcut.py
|
|
86
86
|
vools/decorators/trd.py
|
|
87
|
-
vools/dll32/__init__.py
|
|
88
|
-
vools/dll32/dll.py
|
|
89
|
-
vools/dll32/get-pip.py
|
|
90
|
-
vools/dll32/mqtt.py
|
|
91
|
-
vools/dll32/openssl.py
|
|
92
|
-
vools/dll32/vb6plus.py
|
|
93
|
-
vools/dll32/_core/__init__.py
|
|
94
|
-
vools/dll32/_core/_pipe_comm.py
|
|
95
|
-
vools/dll32/_core/_spawn32.py
|
|
96
|
-
vools/dll32/_dlls/DirectCOM.dll
|
|
97
|
-
vools/dll32/_dlls/RC6.dll
|
|
98
|
-
vools/dll32/_dlls/RC6Widgets.dll
|
|
99
|
-
vools/dll32/_dlls/VB6MQTT.dll
|
|
100
|
-
vools/dll32/_dlls/VB6OpenSSL.dll
|
|
101
|
-
vools/dll32/_dlls/VB6Plus.dll
|
|
102
|
-
vools/dll32/_dlls/WebView2Loader.dll
|
|
103
|
-
vools/dll32/_dlls/cairo_sqlite.dll
|
|
104
|
-
vools/dll32/_dlls/vbRichClient5.dll
|
|
105
|
-
vools/dll32/_lib/__init__.py
|
|
106
|
-
vools/dll32/_lib/clr/__init__.py
|
|
107
|
-
vools/dll32/_lib/clr/_base.py
|
|
108
|
-
vools/dll32/_lib/com/__init__.py
|
|
109
|
-
vools/dll32/_lib/com/_base.py
|
|
110
|
-
vools/dll32/_lib/com/directcom.py
|
|
111
|
-
vools/dll32/_lib/com/rc6.py
|
|
112
|
-
vools/dll32/_lib/com/rc6plus.py
|
|
113
|
-
vools/dll32/_python32/__init__.py
|
|
114
|
-
vools/dll32/_python32/python.exe
|
|
115
|
-
vools/dll32/_python32/python3.dll
|
|
116
|
-
vools/dll32/_python32/python32_launcher.py
|
|
117
|
-
vools/dll32/_python32/python36._pth
|
|
118
|
-
vools/dll32/_python32/python36.dll
|
|
119
|
-
vools/dll32/_python32/python36.zip
|
|
120
|
-
vools/dll32/_python32/pythonw.exe
|
|
121
|
-
vools/dll32/_python32/sqlite3.dll
|
|
122
|
-
vools/dll32/_python32/vcruntime140.dll
|
|
123
|
-
vools/dll32/_signatures/__init__.py
|
|
124
|
-
vools/dll32/_signatures/_registry.py
|
|
125
|
-
vools/dll32/_signatures/mqtt.py
|
|
126
|
-
vools/dll32/_signatures/openssl.py
|
|
127
|
-
vools/dll32/_signatures/vb6plus.py
|
|
128
|
-
vools/dll32/examples/basic_usage.py
|
|
129
|
-
vools/dll32/tests/__init__.py
|
|
130
|
-
vools/dll32/tests/test_dll32.py
|
|
131
87
|
vools/encoding/__init__.py
|
|
132
88
|
vools/encoding/core.py
|
|
133
89
|
vools/functional/__init__.py
|
|
@@ -214,21 +170,4 @@ vools/task/utils/__init__.py
|
|
|
214
170
|
vools/utils/__init__.py
|
|
215
171
|
vools/utils/hoder.py
|
|
216
172
|
vools/utils/stuff.py
|
|
217
|
-
vools/utils/tools.py
|
|
218
|
-
vools/xl/__init__.py
|
|
219
|
-
vools/xl/_core/__init__.py
|
|
220
|
-
vools/xl/_core/api.py
|
|
221
|
-
vools/xl/_core/loader.py
|
|
222
|
-
vools/xl/_dlls/__init__.py
|
|
223
|
-
vools/xl/_dlls/libxl.dll
|
|
224
|
-
vools/xl/_highlevel/__init__.py
|
|
225
|
-
vools/xl/_highlevel/engines.py
|
|
226
|
-
vools/xl/_highlevel/pandas_io.py
|
|
227
|
-
vools/xl/_highlevel/utils.py
|
|
228
|
-
vools/xl/_objects/__init__.py
|
|
229
|
-
vools/xl/_objects/book.py
|
|
230
|
-
vools/xl/_objects/font.py
|
|
231
|
-
vools/xl/_objects/format.py
|
|
232
|
-
vools/xl/_objects/sheet.py
|
|
233
|
-
vools/xl/_utils/__init__.py
|
|
234
|
-
vools/xl/_utils/helpers.py
|
|
173
|
+
vools/utils/tools.py
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
|
|
2
2
|
[all]
|
|
3
|
-
vools-rx==0.7.
|
|
4
|
-
vools-bridges==0.7.
|
|
3
|
+
vools-rx==0.7.3
|
|
4
|
+
vools-bridges==0.7.3
|
|
5
|
+
vools-dll32==0.7.3
|
|
6
|
+
vools-xl==0.7.3
|
|
5
7
|
|
|
6
8
|
[bridges]
|
|
7
|
-
vools-bridges==0.7.
|
|
9
|
+
vools-bridges==0.7.3
|
|
8
10
|
|
|
9
11
|
[cli]
|
|
10
12
|
typer>=0.12.0
|
|
@@ -20,6 +22,9 @@ flake8>=6.0
|
|
|
20
22
|
mypy>=1.0
|
|
21
23
|
pre-commit>=3.0
|
|
22
24
|
|
|
25
|
+
[dll32]
|
|
26
|
+
vools-dll32==0.7.3
|
|
27
|
+
|
|
23
28
|
[docs]
|
|
24
29
|
mkdocs>=1.6
|
|
25
30
|
mkdocs-material>=9.0
|
|
@@ -27,8 +32,11 @@ pymdown-extensions>=10.0
|
|
|
27
32
|
mkdocs-minify-plugin>=0.8
|
|
28
33
|
|
|
29
34
|
[rx]
|
|
30
|
-
vools-rx==0.7.
|
|
35
|
+
vools-rx==0.7.3
|
|
31
36
|
|
|
32
37
|
[serialize]
|
|
33
38
|
msgpack>=1.0
|
|
34
39
|
orjson>=3.9
|
|
40
|
+
|
|
41
|
+
[xl]
|
|
42
|
+
vools-xl==0.7.3
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
vools.dll32 - 32位 DLL 专用桥接包
|
|
3
|
-
|
|
4
|
-
提供通过嵌入式 Python 3.6 32位进程调用 32 位 DLL 的功能。
|
|
5
|
-
|
|
6
|
-
主要功能:
|
|
7
|
-
1. @dll32 装饰器 - 通过 ctypes 调用标准 DLL
|
|
8
|
-
2. COM 支持 - 通过 win32com 调用 COM 组件 (包括 RC6)
|
|
9
|
-
3. .NET 支持 - 通过 pythonnet 调用 .NET 程序集
|
|
10
|
-
4. 函数签名注册表 - 统一管理 DLL 函数签名
|
|
11
|
-
|
|
12
|
-
用法:
|
|
13
|
-
# 1. 使用 dll32 装饰器调用标准 DLL (VB6Plus.dll, VB6OpenSSL.dll, VB6MQTT.dll)
|
|
14
|
-
from vools.dll32 import dll32
|
|
15
|
-
|
|
16
|
-
@dll32('VB6Plus.dll::Base64Encode_UTF8')
|
|
17
|
-
def base64_encode(input_str: str) -> str:
|
|
18
|
-
pass
|
|
19
|
-
|
|
20
|
-
result = base64_encode('Hello')
|
|
21
|
-
|
|
22
|
-
# 2. 使用 VB6Plus 包装类
|
|
23
|
-
from vools.dll32 import vb6plus
|
|
24
|
-
|
|
25
|
-
result = vb6plus.base64_encode_utf8('Hello')
|
|
26
|
-
result = vb6plus.md5_32_utf8('test')
|
|
27
|
-
|
|
28
|
-
# 3. 使用 RC6Plus (VBRichClient5) - 通过 COM
|
|
29
|
-
from vools.dll32 import get_rc6
|
|
30
|
-
|
|
31
|
-
rc6 = get_rc6()
|
|
32
|
-
result = rc6.crypt.base64_encode('Hello')
|
|
33
|
-
result = rc6.md5('test')
|
|
34
|
-
result = rc6.fso.read_text('test.txt')
|
|
35
|
-
|
|
36
|
-
# 4. 使用 .NET 程序集
|
|
37
|
-
from vools.dll32._lib.clr import CLRAssembly
|
|
38
|
-
|
|
39
|
-
CLRAssembly.load_assembly('System.Data')
|
|
40
|
-
|
|
41
|
-
支持的标准 DLL:
|
|
42
|
-
- VB6Plus.dll: Base64, MD5, URL, HTML, AES, INI, SQLite 等
|
|
43
|
-
- VB6OpenSSL.dll: HTTPS GET/POST 请求
|
|
44
|
-
- VB6MQTT.dll: MQTT 客户端
|
|
45
|
-
|
|
46
|
-
支持的 COM 组件:
|
|
47
|
-
- RC6 (VBRichClient5): 加密、文件、集合、网络、数据库等
|
|
48
|
-
"""
|
|
49
|
-
|
|
50
|
-
from .dll import dll32
|
|
51
|
-
|
|
52
|
-
# 导出包装模块
|
|
53
|
-
from .vb6plus import VB6Plus, vb6plus
|
|
54
|
-
from .openssl import OpenSSL, openssl
|
|
55
|
-
from .mqtt import MQTT, mqtt
|
|
56
|
-
|
|
57
|
-
# 导出 COM/CLR 相关
|
|
58
|
-
from ._lib import COMObject, create_com_object
|
|
59
|
-
from ._lib.com import RC6Plus, get_rc6, DirectCOM
|
|
60
|
-
|
|
61
|
-
# 导出签名注册表
|
|
62
|
-
from ._signatures import SIGNATURES, get_signature, list_dlls, list_functions
|
|
63
|
-
|
|
64
|
-
__all__ = [
|
|
65
|
-
# 核心装饰器
|
|
66
|
-
'dll32',
|
|
67
|
-
# 包装类 (标准 DLL)
|
|
68
|
-
'VB6Plus',
|
|
69
|
-
'OpenSSL',
|
|
70
|
-
'MQTT',
|
|
71
|
-
# 全局实例 (标准 DLL)
|
|
72
|
-
'vb6plus',
|
|
73
|
-
'openssl',
|
|
74
|
-
'mqtt',
|
|
75
|
-
# COM/CLR
|
|
76
|
-
'COMObject',
|
|
77
|
-
'create_com_object',
|
|
78
|
-
'RC6Plus',
|
|
79
|
-
'get_rc6',
|
|
80
|
-
'DirectCOM',
|
|
81
|
-
# 签名注册表
|
|
82
|
-
'SIGNATURES',
|
|
83
|
-
'get_signature',
|
|
84
|
-
'list_dlls',
|
|
85
|
-
'list_functions',
|
|
86
|
-
]
|