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.
Files changed (236) hide show
  1. {vools-0.7.2/vools.egg-info → vools-0.7.3}/PKG-INFO +11 -5
  2. {vools-0.7.2 → vools-0.7.3}/pyproject.toml +10 -52
  3. {vools-0.7.2 → vools-0.7.3}/vools/__init__.py +21 -17
  4. {vools-0.7.2 → vools-0.7.3}/vools/data/itor_nim.py +15 -1
  5. {vools-0.7.2 → vools-0.7.3}/vools/data/table.py +12 -2
  6. {vools-0.7.2 → vools-0.7.3}/vools/decorators/curry_core.py +19 -0
  7. {vools-0.7.2 → vools-0.7.3}/vools/security/hash.py +23 -10
  8. {vools-0.7.2 → vools-0.7.3}/vools/security/safe_eval.py +22 -8
  9. {vools-0.7.2 → vools-0.7.3/vools.egg-info}/PKG-INFO +11 -5
  10. {vools-0.7.2 → vools-0.7.3}/vools.egg-info/SOURCES.txt +1 -62
  11. {vools-0.7.2 → vools-0.7.3}/vools.egg-info/requires.txt +12 -4
  12. vools-0.7.2/vools/dll32/__init__.py +0 -86
  13. vools-0.7.2/vools/dll32/_core/__init__.py +0 -14
  14. vools-0.7.2/vools/dll32/_core/_pipe_comm.py +0 -18
  15. vools-0.7.2/vools/dll32/_core/_spawn32.py +0 -342
  16. vools-0.7.2/vools/dll32/_dlls/DirectCOM.dll +0 -0
  17. vools-0.7.2/vools/dll32/_dlls/RC6.dll +0 -0
  18. vools-0.7.2/vools/dll32/_dlls/RC6Widgets.dll +0 -0
  19. vools-0.7.2/vools/dll32/_dlls/VB6MQTT.dll +0 -0
  20. vools-0.7.2/vools/dll32/_dlls/VB6OpenSSL.dll +0 -0
  21. vools-0.7.2/vools/dll32/_dlls/VB6Plus.dll +0 -0
  22. vools-0.7.2/vools/dll32/_dlls/WebView2Loader.dll +0 -0
  23. vools-0.7.2/vools/dll32/_dlls/cairo_sqlite.dll +0 -0
  24. vools-0.7.2/vools/dll32/_dlls/vbRichClient5.dll +0 -0
  25. vools-0.7.2/vools/dll32/_lib/__init__.py +0 -9
  26. vools-0.7.2/vools/dll32/_lib/clr/__init__.py +0 -8
  27. vools-0.7.2/vools/dll32/_lib/clr/_base.py +0 -89
  28. vools-0.7.2/vools/dll32/_lib/com/__init__.py +0 -9
  29. vools-0.7.2/vools/dll32/_lib/com/_base.py +0 -103
  30. vools-0.7.2/vools/dll32/_lib/com/directcom.py +0 -115
  31. vools-0.7.2/vools/dll32/_lib/com/rc6.py +0 -228
  32. vools-0.7.2/vools/dll32/_lib/com/rc6plus.py +0 -344
  33. vools-0.7.2/vools/dll32/_python32/__init__.py +0 -1
  34. vools-0.7.2/vools/dll32/_python32/python.exe +0 -0
  35. vools-0.7.2/vools/dll32/_python32/python3.dll +0 -0
  36. vools-0.7.2/vools/dll32/_python32/python32_launcher.py +0 -63
  37. vools-0.7.2/vools/dll32/_python32/python36._pth +0 -5
  38. vools-0.7.2/vools/dll32/_python32/python36.dll +0 -0
  39. vools-0.7.2/vools/dll32/_python32/python36.zip +0 -0
  40. vools-0.7.2/vools/dll32/_python32/pythonw.exe +0 -0
  41. vools-0.7.2/vools/dll32/_python32/sqlite3.dll +0 -0
  42. vools-0.7.2/vools/dll32/_python32/vcruntime140.dll +0 -0
  43. vools-0.7.2/vools/dll32/_signatures/__init__.py +0 -13
  44. vools-0.7.2/vools/dll32/_signatures/_registry.py +0 -50
  45. vools-0.7.2/vools/dll32/_signatures/mqtt.py +0 -46
  46. vools-0.7.2/vools/dll32/_signatures/openssl.py +0 -35
  47. vools-0.7.2/vools/dll32/_signatures/vb6plus.py +0 -299
  48. vools-0.7.2/vools/dll32/dll.py +0 -77
  49. vools-0.7.2/vools/dll32/examples/basic_usage.py +0 -74
  50. vools-0.7.2/vools/dll32/get-pip.py +0 -27079
  51. vools-0.7.2/vools/dll32/mqtt.py +0 -83
  52. vools-0.7.2/vools/dll32/openssl.py +0 -54
  53. vools-0.7.2/vools/dll32/tests/__init__.py +0 -1
  54. vools-0.7.2/vools/dll32/tests/test_dll32.py +0 -59
  55. vools-0.7.2/vools/dll32/vb6plus.py +0 -495
  56. vools-0.7.2/vools/xl/__init__.py +0 -101
  57. vools-0.7.2/vools/xl/_core/__init__.py +0 -9
  58. vools-0.7.2/vools/xl/_core/api.py +0 -836
  59. vools-0.7.2/vools/xl/_core/loader.py +0 -75
  60. vools-0.7.2/vools/xl/_dlls/__init__.py +0 -52
  61. vools-0.7.2/vools/xl/_dlls/libxl.dll +0 -0
  62. vools-0.7.2/vools/xl/_highlevel/__init__.py +0 -57
  63. vools-0.7.2/vools/xl/_highlevel/engines.py +0 -284
  64. vools-0.7.2/vools/xl/_highlevel/pandas_io.py +0 -150
  65. vools-0.7.2/vools/xl/_highlevel/utils.py +0 -344
  66. vools-0.7.2/vools/xl/_objects/__init__.py +0 -12
  67. vools-0.7.2/vools/xl/_objects/book.py +0 -483
  68. vools-0.7.2/vools/xl/_objects/font.py +0 -99
  69. vools-0.7.2/vools/xl/_objects/format.py +0 -262
  70. vools-0.7.2/vools/xl/_objects/sheet.py +0 -840
  71. vools-0.7.2/vools/xl/_utils/__init__.py +0 -200
  72. vools-0.7.2/vools/xl/_utils/helpers.py +0 -107
  73. {vools-0.7.2 → vools-0.7.3}/LICENSE +0 -0
  74. {vools-0.7.2 → vools-0.7.3}/NOTICE +0 -0
  75. {vools-0.7.2 → vools-0.7.3}/README.md +0 -0
  76. {vools-0.7.2 → vools-0.7.3}/setup.cfg +0 -0
  77. {vools-0.7.2 → vools-0.7.3}/tests/test_functions.py +0 -0
  78. {vools-0.7.2 → vools-0.7.3}/vools/README.md +0 -0
  79. {vools-0.7.2 → vools-0.7.3}/vools/__main__.py +0 -0
  80. {vools-0.7.2 → vools-0.7.3}/vools/api/__init__.py +0 -0
  81. {vools-0.7.2 → vools-0.7.3}/vools/api/curry_cmd.py +0 -0
  82. {vools-0.7.2 → vools-0.7.3}/vools/api/memoize_cmd.py +0 -0
  83. {vools-0.7.2 → vools-0.7.3}/vools/api/ops_cmd.py +0 -0
  84. {vools-0.7.2 → vools-0.7.3}/vools/api/seq_cmd.py +0 -0
  85. {vools-0.7.2 → vools-0.7.3}/vools/api/typer_app.py +0 -0
  86. {vools-0.7.2 → vools-0.7.3}/vools/cache/__init__.py +0 -0
  87. {vools-0.7.2 → vools-0.7.3}/vools/cache/memorize.py +0 -0
  88. {vools-0.7.2 → vools-0.7.3}/vools/cache/once.py +0 -0
  89. {vools-0.7.2 → vools-0.7.3}/vools/cache/persist.py +0 -0
  90. {vools-0.7.2 → vools-0.7.3}/vools/cache/sigcache.py +0 -0
  91. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/__init__.py +0 -0
  92. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/asyncio_mod.py +0 -0
  93. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/bridges.py +0 -0
  94. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/contextvars_mod.py +0 -0
  95. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/delegates.py +0 -0
  96. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/futures.py +0 -0
  97. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/multiprocessing_mod.py +0 -0
  98. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/queues.py +0 -0
  99. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/sched_mod.py +0 -0
  100. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/spawns.py +0 -0
  101. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/subprocess_mod.py +0 -0
  102. {vools-0.7.2 → vools-0.7.3}/vools/concurrent/threading_mod.py +0 -0
  103. {vools-0.7.2 → vools-0.7.3}/vools/core/__init__.py +0 -0
  104. {vools-0.7.2 → vools-0.7.3}/vools/core/asyncio_compat.py +0 -0
  105. {vools-0.7.2 → vools-0.7.3}/vools/core/base.py +0 -0
  106. {vools-0.7.2 → vools-0.7.3}/vools/core/config.py +0 -0
  107. {vools-0.7.2 → vools-0.7.3}/vools/core/contextvars_compat.py +0 -0
  108. {vools-0.7.2 → vools-0.7.3}/vools/core/dataclass_compat.py +0 -0
  109. {vools-0.7.2 → vools-0.7.3}/vools/core/datetime_compat.py +0 -0
  110. {vools-0.7.2 → vools-0.7.3}/vools/core/exceptions.py +0 -0
  111. {vools-0.7.2 → vools-0.7.3}/vools/core/inspect_compat.py +0 -0
  112. {vools-0.7.2 → vools-0.7.3}/vools/crypto/__init__.py +0 -0
  113. {vools-0.7.2 → vools-0.7.3}/vools/crypto/core.py +0 -0
  114. {vools-0.7.2 → vools-0.7.3}/vools/curried/__init__.py +0 -0
  115. {vools-0.7.2 → vools-0.7.3}/vools/curried/collection.py +0 -0
  116. {vools-0.7.2 → vools-0.7.3}/vools/curried/composition.py +0 -0
  117. {vools-0.7.2 → vools-0.7.3}/vools/curried/core.py +0 -0
  118. {vools-0.7.2 → vools-0.7.3}/vools/curried/iteration.py +0 -0
  119. {vools-0.7.2 → vools-0.7.3}/vools/curried/math.py +0 -0
  120. {vools-0.7.2 → vools-0.7.3}/vools/curried/predicate.py +0 -0
  121. {vools-0.7.2 → vools-0.7.3}/vools/curried/string.py +0 -0
  122. {vools-0.7.2 → vools-0.7.3}/vools/data/__init__.py +0 -0
  123. {vools-0.7.2 → vools-0.7.3}/vools/data/itor.py +0 -0
  124. {vools-0.7.2 → vools-0.7.3}/vools/data/qax.py +0 -0
  125. {vools-0.7.2 → vools-0.7.3}/vools/data/seq.py +0 -0
  126. {vools-0.7.2 → vools-0.7.3}/vools/data/validator.py +0 -0
  127. {vools-0.7.2 → vools-0.7.3}/vools/data/vlist.py +0 -0
  128. {vools-0.7.2 → vools-0.7.3}/vools/data/vtext.py +0 -0
  129. {vools-0.7.2 → vools-0.7.3}/vools/datetime/__init__.py +0 -0
  130. {vools-0.7.2 → vools-0.7.3}/vools/datetime/dates_format.py +0 -0
  131. {vools-0.7.2 → vools-0.7.3}/vools/datetime/utils.py +0 -0
  132. {vools-0.7.2 → vools-0.7.3}/vools/datetime/vdate_class.py +0 -0
  133. {vools-0.7.2 → vools-0.7.3}/vools/decorators/__init__.py +0 -0
  134. {vools-0.7.2 → vools-0.7.3}/vools/decorators/bridge_decorator.py +0 -0
  135. {vools-0.7.2 → vools-0.7.3}/vools/decorators/cache.py +0 -0
  136. {vools-0.7.2 → vools-0.7.3}/vools/decorators/control.py +0 -0
  137. {vools-0.7.2 → vools-0.7.3}/vools/decorators/curried.py +0 -0
  138. {vools-0.7.2 → vools-0.7.3}/vools/decorators/curry_decorator.py +0 -0
  139. {vools-0.7.2 → vools-0.7.3}/vools/decorators/curry_delay.py +0 -0
  140. {vools-0.7.2 → vools-0.7.3}/vools/decorators/flex_pos.py +0 -0
  141. {vools-0.7.2 → vools-0.7.3}/vools/decorators/lazy.py +0 -0
  142. {vools-0.7.2 → vools-0.7.3}/vools/decorators/overcurry.py +0 -0
  143. {vools-0.7.2 → vools-0.7.3}/vools/decorators/overload.py +0 -0
  144. {vools-0.7.2 → vools-0.7.3}/vools/decorators/overloads.py +0 -0
  145. {vools-0.7.2 → vools-0.7.3}/vools/decorators/rself.py +0 -0
  146. {vools-0.7.2 → vools-0.7.3}/vools/decorators/selector.py +0 -0
  147. {vools-0.7.2 → vools-0.7.3}/vools/decorators/shotcut.py +0 -0
  148. {vools-0.7.2 → vools-0.7.3}/vools/decorators/trd.py +0 -0
  149. {vools-0.7.2 → vools-0.7.3}/vools/encoding/__init__.py +0 -0
  150. {vools-0.7.2 → vools-0.7.3}/vools/encoding/core.py +0 -0
  151. {vools-0.7.2 → vools-0.7.3}/vools/functional/__init__.py +0 -0
  152. {vools-0.7.2 → vools-0.7.3}/vools/functional/arrow_func.py +0 -0
  153. {vools-0.7.2 → vools-0.7.3}/vools/functional/box.py +0 -0
  154. {vools-0.7.2 → vools-0.7.3}/vools/functional/funcs.py +0 -0
  155. {vools-0.7.2 → vools-0.7.3}/vools/functional/iif.py +0 -0
  156. {vools-0.7.2 → vools-0.7.3}/vools/functional/pipe_ops.py +0 -0
  157. {vools-0.7.2 → vools-0.7.3}/vools/functional/placeholder.py +0 -0
  158. {vools-0.7.2 → vools-0.7.3}/vools/functional/placeholder_impl.py +0 -0
  159. {vools-0.7.2 → vools-0.7.3}/vools/functional/result.py +0 -0
  160. {vools-0.7.2 → vools-0.7.3}/vools/oop/__init__.py +0 -0
  161. {vools-0.7.2 → vools-0.7.3}/vools/oop/calltype.py +0 -0
  162. {vools-0.7.2 → vools-0.7.3}/vools/oop/extend.py +0 -0
  163. {vools-0.7.2 → vools-0.7.3}/vools/oop/fusion.py +0 -0
  164. {vools-0.7.2 → vools-0.7.3}/vools/oop/method_extend.py +0 -0
  165. {vools-0.7.2 → vools-0.7.3}/vools/oop/mixer.py +0 -0
  166. {vools-0.7.2 → vools-0.7.3}/vools/oop/selector.py +0 -0
  167. {vools-0.7.2 → vools-0.7.3}/vools/security/__init__.py +0 -0
  168. {vools-0.7.2 → vools-0.7.3}/vools/security/_constants.py +0 -0
  169. {vools-0.7.2 → vools-0.7.3}/vools/security/expression_handler.py +0 -0
  170. {vools-0.7.2 → vools-0.7.3}/vools/serialize/__init__.py +0 -0
  171. {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/__init__.py +0 -0
  172. {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/base.py +0 -0
  173. {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/json_backend.py +0 -0
  174. {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/msgpack_backend.py +0 -0
  175. {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/pickle_backend.py +0 -0
  176. {vools-0.7.2 → vools-0.7.3}/vools/serialize/backends/vb_json_backend.py +0 -0
  177. {vools-0.7.2 → vools-0.7.3}/vools/serialize/callable/__init__.py +0 -0
  178. {vools-0.7.2 → vools-0.7.3}/vools/serialize/callable/decorator_handler.py +0 -0
  179. {vools-0.7.2 → vools-0.7.3}/vools/serialize/callable/functional_handler.py +0 -0
  180. {vools-0.7.2 → vools-0.7.3}/vools/serialize/codec.py +0 -0
  181. {vools-0.7.2 → vools-0.7.3}/vools/serialize/config.py +0 -0
  182. {vools-0.7.2 → vools-0.7.3}/vools/serialize/context.py +0 -0
  183. {vools-0.7.2 → vools-0.7.3}/vools/serialize/core.py +0 -0
  184. {vools-0.7.2 → vools-0.7.3}/vools/serialize/decorators.py +0 -0
  185. {vools-0.7.2 → vools-0.7.3}/vools/serialize/sentinel.py +0 -0
  186. {vools-0.7.2 → vools-0.7.3}/vools/serialize/type_registry.py +0 -0
  187. {vools-0.7.2 → vools-0.7.3}/vools/sql/__init__.py +0 -0
  188. {vools-0.7.2 → vools-0.7.3}/vools/sql/core/__init__.py +0 -0
  189. {vools-0.7.2 → vools-0.7.3}/vools/sql/core/builder.py +0 -0
  190. {vools-0.7.2 → vools-0.7.3}/vools/sql/core/config.py +0 -0
  191. {vools-0.7.2 → vools-0.7.3}/vools/sql/core/connection.py +0 -0
  192. {vools-0.7.2 → vools-0.7.3}/vools/sql/core/decorators.py +0 -0
  193. {vools-0.7.2 → vools-0.7.3}/vools/sql/core/dialect.py +0 -0
  194. {vools-0.7.2 → vools-0.7.3}/vools/sql/core/result.py +0 -0
  195. {vools-0.7.2 → vools-0.7.3}/vools/sql/core/types.py +0 -0
  196. {vools-0.7.2 → vools-0.7.3}/vools/sql/manager.py +0 -0
  197. {vools-0.7.2 → vools-0.7.3}/vools/sql/postgres/__init__.py +0 -0
  198. {vools-0.7.2 → vools-0.7.3}/vools/sql/postgres/connection.py +0 -0
  199. {vools-0.7.2 → vools-0.7.3}/vools/sql/postgres/dialect.py +0 -0
  200. {vools-0.7.2 → vools-0.7.3}/vools/sql/spark/__init__.py +0 -0
  201. {vools-0.7.2 → vools-0.7.3}/vools/sql/spark/connection.py +0 -0
  202. {vools-0.7.2 → vools-0.7.3}/vools/sql/spark/dialect.py +0 -0
  203. {vools-0.7.2 → vools-0.7.3}/vools/sql/spark/scala_bridge.py +0 -0
  204. {vools-0.7.2 → vools-0.7.3}/vools/sql/sqlite/__init__.py +0 -0
  205. {vools-0.7.2 → vools-0.7.3}/vools/sql/sqlite/connection.py +0 -0
  206. {vools-0.7.2 → vools-0.7.3}/vools/sql/sqlite/dialect.py +0 -0
  207. {vools-0.7.2 → vools-0.7.3}/vools/sys/__init__.py +0 -0
  208. {vools-0.7.2 → vools-0.7.3}/vools/sys/cmd.py +0 -0
  209. {vools-0.7.2 → vools-0.7.3}/vools/sys/compile_cmd.py +0 -0
  210. {vools-0.7.2 → vools-0.7.3}/vools/sys/dll.py +0 -0
  211. {vools-0.7.2 → vools-0.7.3}/vools/sys/dll_cmd.py +0 -0
  212. {vools-0.7.2 → vools-0.7.3}/vools/sys/env.py +0 -0
  213. {vools-0.7.2 → vools-0.7.3}/vools/sys/env_cmd.py +0 -0
  214. {vools-0.7.2 → vools-0.7.3}/vools/sys/exe.py +0 -0
  215. {vools-0.7.2 → vools-0.7.3}/vools/sys/fire_app.py +0 -0
  216. {vools-0.7.2 → vools-0.7.3}/vools/sys/run_cmd.py +0 -0
  217. {vools-0.7.2 → vools-0.7.3}/vools/task/__init__.py +0 -0
  218. {vools-0.7.2 → vools-0.7.3}/vools/task/core/__init__.py +0 -0
  219. {vools-0.7.2 → vools-0.7.3}/vools/task/core/models.py +0 -0
  220. {vools-0.7.2 → vools-0.7.3}/vools/task/core/queue.py +0 -0
  221. {vools-0.7.2 → vools-0.7.3}/vools/task/core/storage.py +0 -0
  222. {vools-0.7.2 → vools-0.7.3}/vools/task/core/worker.py +0 -0
  223. {vools-0.7.2 → vools-0.7.3}/vools/task/decorators/__init__.py +0 -0
  224. {vools-0.7.2 → vools-0.7.3}/vools/task/decorators/task_decorator.py +0 -0
  225. {vools-0.7.2 → vools-0.7.3}/vools/task/rules/__init__.py +0 -0
  226. {vools-0.7.2 → vools-0.7.3}/vools/task/rules/dag.py +0 -0
  227. {vools-0.7.2 → vools-0.7.3}/vools/task/rules/engine.py +0 -0
  228. {vools-0.7.2 → vools-0.7.3}/vools/task/rules/rule.py +0 -0
  229. {vools-0.7.2 → vools-0.7.3}/vools/task/utils/__init__.py +0 -0
  230. {vools-0.7.2 → vools-0.7.3}/vools/utils/__init__.py +0 -0
  231. {vools-0.7.2 → vools-0.7.3}/vools/utils/hoder.py +0 -0
  232. {vools-0.7.2 → vools-0.7.3}/vools/utils/stuff.py +0 -0
  233. {vools-0.7.2 → vools-0.7.3}/vools/utils/tools.py +0 -0
  234. {vools-0.7.2 → vools-0.7.3}/vools.egg-info/dependency_links.txt +0 -0
  235. {vools-0.7.2 → vools-0.7.3}/vools.egg-info/entry_points.txt +0 -0
  236. {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.2
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.2; extra == "rx"
242
+ Requires-Dist: vools-rx==0.7.3; extra == "rx"
243
243
  Provides-Extra: bridges
244
- Requires-Dist: vools-bridges==0.7.2; extra == "bridges"
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.2; extra == "all"
247
- Requires-Dist: vools-bridges==0.7.2; extra == "all"
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.2"]
50
- bridges = ["vools-bridges==0.7.2"]
51
- all = ["vools-rx==0.7.2", "vools-bridges==0.7.2"]
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._python32",
79
- "vools.dll32._python32.*",
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
- "xl/_dlls/*.dll",
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/dll32 --ignore=tests/xl --ignore=tests/monitoring --ignore=tests/benchmarks --ignore=tests/archive --ignore=tests/other --ignore=tests/__rust__ --ignore=tests/__persist__ --ignore=tests/__pycache__"
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.2"
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
- return ItorState(self._dll.state(self._handle))
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
- from ..xl import Book
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
- from ..xl import Book
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
- try:
32
- from ..bridge.nim import sha256 as _nim_sha256_impl
33
- from ..bridge.nim import md5 as _nim_md5_impl
34
- from ..bridge.nim import sha1 as _nim_sha1_impl
35
- _nim_available = True
36
- except ImportError:
37
- _nim_sha256_impl = None
38
- _nim_md5_impl = None
39
- _nim_sha1_impl = None
40
- _nim_available = False
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
- try:
213
- from ..bridge.rust import safe_eval_shim as _safe_eval_shim
214
- except Exception:
215
- _safe_eval_shim = None
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
- if _safe_eval_shim is None or not _safe_eval_shim.is_rust_available():
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 = _safe_eval_shim.compile_to_instructions(expr)
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 = _safe_eval_shim.eval_instructions(instructions, timeout_ms)
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
- return _safe_eval_shim is not None and _safe_eval_shim.is_rust_available()
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.2
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.2; extra == "rx"
242
+ Requires-Dist: vools-rx==0.7.3; extra == "rx"
243
243
  Provides-Extra: bridges
244
- Requires-Dist: vools-bridges==0.7.2; extra == "bridges"
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.2; extra == "all"
247
- Requires-Dist: vools-bridges==0.7.2; extra == "all"
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.2
4
- vools-bridges==0.7.2
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.2
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.2
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
- ]
@@ -1,14 +0,0 @@
1
- """
2
- dll32 核心模块
3
-
4
- 提供 32 位 Python 进程管理和跨进程通信功能。
5
- """
6
- from ._spawn32 import Python32Process, get_process
7
- from ._pipe_comm import call_dll, ping
8
-
9
- __all__ = [
10
- 'Python32Process',
11
- 'get_process',
12
- 'call_dll',
13
- 'ping',
14
- ]