ok-script 2.0.0b2__tar.gz → 2.0.0b4__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 (353) hide show
  1. {ok_script-2.0.0b2/ok_script.egg-info → ok_script-2.0.0b4}/PKG-INFO +36 -5
  2. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/README.md +13 -3
  3. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/__init__.py +9 -1
  4. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/web/app.py +3 -3
  5. ok_script-2.0.0b4/ok/ui/web/requirements.py +13 -0
  6. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/web/server.py +2 -6
  7. {ok_script-2.0.0b2 → ok_script-2.0.0b4/ok_script.egg-info}/PKG-INFO +36 -5
  8. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok_script.egg-info/SOURCES.txt +1 -0
  9. ok_script-2.0.0b4/ok_script.egg-info/requires.txt +42 -0
  10. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/pyproject.toml +38 -10
  11. ok_script-2.0.0b4/tests/test_package_metadata.py +35 -0
  12. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_runtime_startup.py +36 -3
  13. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_web_app.py +11 -2
  14. ok_script-2.0.0b2/ok_script.egg-info/requires.txt +0 -17
  15. ok_script-2.0.0b2/tests/test_package_metadata.py +0 -27
  16. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/LICENSE.txt +0 -0
  17. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/MANIFEST.in +0 -0
  18. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/diagnostics/qq_trace.py +0 -0
  19. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/__main__.py +0 -0
  20. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/alas/__init__.py +0 -0
  21. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/alas/emulator_base.py +0 -0
  22. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/alas/emulator_windows.py +0 -0
  23. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/alas/platform_windows.py +0 -0
  24. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/alas/utils.py +0 -0
  25. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/__init__.py +0 -0
  26. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/adb/__init__.py +0 -0
  27. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/adb/deep.py +0 -0
  28. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/adb/minitouch.py +0 -0
  29. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/adb/nemu_ipc.py +0 -0
  30. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/adb/nemu_utils.py +0 -0
  31. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/adb/pool.py +0 -0
  32. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/adb/timer.py +0 -0
  33. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/adb/util.py +0 -0
  34. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/windows/__init__.py +0 -0
  35. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/windows/d3d11.py +0 -0
  36. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/capture/windows/dump.py +0 -0
  37. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/cli.py +0 -0
  38. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/__init__.py +0 -0
  39. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/config_schema.py +0 -0
  40. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/downloads.py +0 -0
  41. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/events.py +0 -0
  42. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/icons.py +0 -0
  43. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/notifications.py +0 -0
  44. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/screenshot.py +0 -0
  45. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/script_editing.py +0 -0
  46. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/script_packager.py +0 -0
  47. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/script_templates.py +0 -0
  48. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/start_controller.py +0 -0
  49. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/task_manager.py +0 -0
  50. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/template_store.py +0 -0
  51. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/translation.py +0 -0
  52. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/core/ui_config.py +0 -0
  53. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/DeviceManager.py +0 -0
  54. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/__init__.py +0 -0
  55. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture.py +0 -0
  56. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/__init__.py +0 -0
  57. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/adb.py +0 -0
  58. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/base.py +0 -0
  59. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/bitblt.py +0 -0
  60. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/bitblt_utils.py +0 -0
  61. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/browser.py +0 -0
  62. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/desktop_duplication.py +0 -0
  63. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/hwnd_window.py +0 -0
  64. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/image.py +0 -0
  65. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/nemu_ipc.py +0 -0
  66. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/types.py +0 -0
  67. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/update.py +0 -0
  68. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/capture_methods/windows_graphics.py +0 -0
  69. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction.py +0 -0
  70. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/__init__.py +0 -0
  71. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/adb.py +0 -0
  72. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/base.py +0 -0
  73. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/browser.py +0 -0
  74. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/do_nothing.py +0 -0
  75. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/foreground_post_message.py +0 -0
  76. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/genshin.py +0 -0
  77. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/keys.py +0 -0
  78. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/post_message.py +0 -0
  79. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/pydirect.py +0 -0
  80. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/pynput.py +0 -0
  81. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/interaction_methods/swipe.py +0 -0
  82. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/device/intercation.py +0 -0
  83. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/feature/Box.py +0 -0
  84. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/feature/Feature.py +0 -0
  85. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/feature/FeatureSet.py +0 -0
  86. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/feature/__init__.py +0 -0
  87. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/gui/__init__.py +0 -0
  88. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/gui/util/pyappify_startup.py +0 -0
  89. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/notification/__init__.py +0 -0
  90. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/notification/manager.py +0 -0
  91. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/notification/messenger_images.py +0 -0
  92. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/notification/pipeline.py +0 -0
  93. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/notification/ppocr.py +0 -0
  94. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/notification/providers.py +0 -0
  95. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/notification/system.py +0 -0
  96. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/notification/windows_messenger.py +0 -0
  97. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ocr/__init__.py +0 -0
  98. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ocr/download_paddle_model.py +0 -0
  99. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Foundation/Collections.py +0 -0
  100. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Foundation/__init__.py +0 -0
  101. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Globalization/__init__.py +0 -0
  102. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Graphics/Capture/__init__.py +0 -0
  103. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Graphics/DirectX/Direct3D11/__init__.py +0 -0
  104. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Graphics/DirectX/__init__.py +0 -0
  105. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Graphics/Imaging/__init__.py +0 -0
  106. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Graphics/__init__.py +0 -0
  107. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Media/Ocr/__init__.py +0 -0
  108. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Media/__init__.py +0 -0
  109. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Security/Cryptography/__init__.py +0 -0
  110. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Security/__init__.py +0 -0
  111. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Storage/Streams/__init__.py +0 -0
  112. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/Storage/__init__.py +0 -0
  113. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/UI/ViewManagement/__init__.py +0 -0
  114. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/UI/__init__.py +0 -0
  115. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/Windows/__init__.py +0 -0
  116. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/__init__.py +0 -0
  117. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/delegate.py +0 -0
  118. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/export.py +0 -0
  119. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/idldsl.py +0 -0
  120. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/inspectable.py +0 -0
  121. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/roapi.py +0 -0
  122. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/types.py +0 -0
  123. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/rotypes/winstring.py +0 -0
  124. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/task/DiagnosisTask.py +0 -0
  125. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/task/TaskExecutor.py +0 -0
  126. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/task/__init__.py +0 -0
  127. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/task/exceptions.py +0 -0
  128. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/task/task.py +0 -0
  129. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/task/web.py +0 -0
  130. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/test/OKTestRunner.py +0 -0
  131. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/test/RunTests.py +0 -0
  132. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/test/TaskTestCase.py +0 -0
  133. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/test/__init__.py +0 -0
  134. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/third_party/__init__.py +0 -0
  135. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/third_party/paperclip.py +0 -0
  136. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/__init__.py +0 -0
  137. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/overlay/__init__.py +0 -0
  138. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/overlay/win32_gdi.py +0 -0
  139. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/Communicate.py +0 -0
  140. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/MainWindow.py +0 -0
  141. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/MessageWindow.py +0 -0
  142. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/StartController.py +0 -0
  143. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/TabTitles.py +0 -0
  144. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/__init__.py +0 -0
  145. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/about/AboutTab.py +0 -0
  146. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/about/HttpTextEdit.py +0 -0
  147. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/about/LinksBar.py +0 -0
  148. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/about/ProjectCard.py +0 -0
  149. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/about/VersionCard.py +0 -0
  150. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/about/__init__.py +0 -0
  151. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/common/OKIcon.py +0 -0
  152. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/common/__init__.py +0 -0
  153. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/common/accent_color.py +0 -0
  154. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/common/config.py +0 -0
  155. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/common/design_system.py +0 -0
  156. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/common/icons.py +0 -0
  157. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/common/style_sheet.py +0 -0
  158. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/debug/DebugTab.py +0 -0
  159. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/debug/OverlayWidget.py +0 -0
  160. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/debug/RunCodeTab.py +0 -0
  161. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/debug/Screenshot.py +0 -0
  162. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/debug/__init__.py +0 -0
  163. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/events.py +0 -0
  164. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/GettextTranslator.py +0 -0
  165. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/__init__.py +0 -0
  166. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/en_US.qm +0 -0
  167. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/en_US.ts +0 -0
  168. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/es_ES.qm +0 -0
  169. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/es_ES.ts +0 -0
  170. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/ja_JP.qm +0 -0
  171. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/ja_JP.ts +0 -0
  172. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/ko_KR.qm +0 -0
  173. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/ko_KR.ts +0 -0
  174. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/path.py +0 -0
  175. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/update.py +0 -0
  176. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/zh_CN.qm +0 -0
  177. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/zh_CN.ts +0 -0
  178. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/zh_TW.qm +0 -0
  179. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/i18n/zh_TW.ts +0 -0
  180. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/overlay/OverlayWindow.py +0 -0
  181. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/overlay/__init__.py +0 -0
  182. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/__init__.py +0 -0
  183. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/dark/card.qss +0 -0
  184. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/dark/discord.svg +0 -0
  185. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/dark/heart.svg +0 -0
  186. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/dark/message_window.qss +0 -0
  187. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/dark/setting_interface.qss +0 -0
  188. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/dark/status_bar.qss +0 -0
  189. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/dark/stop.svg +0 -0
  190. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/dark/tab.qss +0 -0
  191. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/light/card.qss +0 -0
  192. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/light/discord.svg +0 -0
  193. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/light/heart.svg +0 -0
  194. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/light/message_window.qss +0 -0
  195. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/light/setting_interface.qss +0 -0
  196. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/light/status_bar.qss +0 -0
  197. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/light/stop.svg +0 -0
  198. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qss/light/tab.qss +0 -0
  199. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/qt.qrc +0 -0
  200. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/resources.py +0 -0
  201. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/settings/GlobalConfigCard.py +0 -0
  202. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/settings/GlobalConfigTab.py +0 -0
  203. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/settings/SettingTab.py +0 -0
  204. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/settings/__init__.py +0 -0
  205. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/start/LogWindow.py +0 -0
  206. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/start/SelectCaptureListView.py +0 -0
  207. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/start/SelectInteractionListView.py +0 -0
  208. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/start/StartCard.py +0 -0
  209. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/start/StartTab.py +0 -0
  210. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/start/__init__.py +0 -0
  211. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/ConfigCard.py +0 -0
  212. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/ConfigItemFactory.py +0 -0
  213. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/ConfigLabelAndWidget.py +0 -0
  214. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/EditTaskTab.py +0 -0
  215. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndButtons.py +0 -0
  216. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndDoubleSpinBox.py +0 -0
  217. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndDropDown.py +0 -0
  218. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndFileSelector.py +0 -0
  219. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndGlobal.py +0 -0
  220. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndLineEdit.py +0 -0
  221. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndList.py +0 -0
  222. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndMultiSelection.py +0 -0
  223. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndSpinBox.py +0 -0
  224. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndSwitchButton.py +0 -0
  225. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndTextEdit.py +0 -0
  226. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/LabelAndWidget.py +0 -0
  227. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/MarkUpWindow.py +0 -0
  228. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/ModifyListDialog.py +0 -0
  229. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/ModifyListItem.py +0 -0
  230. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/OneTimeTaskTab.py +0 -0
  231. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/PythonHighlighter.py +0 -0
  232. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/RecordScript.py +0 -0
  233. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/ScheduleTaskTab.py +0 -0
  234. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/ScriptPackager.py +0 -0
  235. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/StartButton.py +0 -0
  236. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/TaskCard.py +0 -0
  237. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/TaskManger.py +0 -0
  238. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/TaskOpButton.py +0 -0
  239. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/TaskTab.py +0 -0
  240. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/TemplateFactory.py +0 -0
  241. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/TemplateTab.py +0 -0
  242. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/TooltipTableWidget.py +0 -0
  243. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/TriggerTaskTab.py +0 -0
  244. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/tasks/__init__.py +0 -0
  245. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/util/Alert.py +0 -0
  246. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/util/InitWorker.py +0 -0
  247. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/util/__init__.py +0 -0
  248. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/util/app.py +0 -0
  249. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/util/download.py +0 -0
  250. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/util/pip_util.py +0 -0
  251. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/util/pyappify_startup.py +0 -0
  252. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/util/touch_scroll.py +0 -0
  253. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/util/windows_thumbnail.py +0 -0
  254. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/BaseLoading.py +0 -0
  255. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/BaseWindow.py +0 -0
  256. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/Card.py +0 -0
  257. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/CustomTab.py +0 -0
  258. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/EmptyCard.py +0 -0
  259. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/ExpandCardLayout.py +0 -0
  260. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/FlowLayout.py +0 -0
  261. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/FramelessDialog.py +0 -0
  262. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/ImageWidget.py +0 -0
  263. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/ListTableWidgetItem.py +0 -0
  264. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/NumericTableWidgetItem.py +0 -0
  265. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/OkCompactSpinBox.py +0 -0
  266. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/SortingTableWidgetItem.py +0 -0
  267. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/StartLoadingDialog.py +0 -0
  268. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/StatusBar.py +0 -0
  269. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/Tab.py +0 -0
  270. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/TabWidget.py +0 -0
  271. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/UpdateConfigWidgetItem.py +0 -0
  272. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/WidgetWithVLabel.py +0 -0
  273. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/YesNonWidgetItem.py +0 -0
  274. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/qt/widget/__init__.py +0 -0
  275. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/web/__init__.py +0 -0
  276. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/web/static/app.js +0 -0
  277. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/web/static/chunk-fluent.js +0 -0
  278. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/web/static/chunk-react.js +0 -0
  279. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/web/static/index.css +0 -0
  280. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/ui/web/static/index.html +0 -0
  281. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/update/__init__.py +0 -0
  282. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/update/copy_ok_folder.py +0 -0
  283. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/update/inline_ok_requirements.py +0 -0
  284. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/Analytics.py +0 -0
  285. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/GlobalConfig.py +0 -0
  286. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/__init__.py +0 -0
  287. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/blur.py +0 -0
  288. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/clazz.py +0 -0
  289. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/collection.py +0 -0
  290. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/color.py +0 -0
  291. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/config.py +0 -0
  292. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/explorer.py +0 -0
  293. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/file.py +0 -0
  294. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/gpu_driver_settings.py +0 -0
  295. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/handler.py +0 -0
  296. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/i18n.py +0 -0
  297. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/logger.py +0 -0
  298. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/partial_sync_repo.py +0 -0
  299. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/print_hwnd.py +0 -0
  300. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/process.py +0 -0
  301. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/window.py +0 -0
  302. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok/util/windows_schedule.py +0 -0
  303. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok_script.egg-info/dependency_links.txt +0 -0
  304. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok_script.egg-info/entry_points.txt +0 -0
  305. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok_script.egg-info/not-zip-safe +0 -0
  306. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/ok_script.egg-info/top_level.txt +0 -0
  307. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/scripts/generate_web_i18n.py +0 -0
  308. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/setup.cfg +0 -0
  309. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/setup.py +0 -0
  310. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_accent_color.py +0 -0
  311. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_app.py +0 -0
  312. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_base_interaction.py +0 -0
  313. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_blur.py +0 -0
  314. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_box.py +0 -0
  315. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_capture_update.py +0 -0
  316. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_cli.py +0 -0
  317. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_config_card.py +0 -0
  318. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_core_events.py +0 -0
  319. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_core_ui_services.py +0 -0
  320. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_device_manager.py +0 -0
  321. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_expand_card_layout.py +0 -0
  322. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_explorer.py +0 -0
  323. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_global_config.py +0 -0
  324. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_gpu_driver_settings.py +0 -0
  325. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_headless_imports.py +0 -0
  326. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_inline_ok_requirements.py +0 -0
  327. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_logger.py +0 -0
  328. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_main_window_notifications.py +0 -0
  329. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_main_window_startup_tab.py +0 -0
  330. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_main_window_system_theme.py +0 -0
  331. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_missing_frame.py +0 -0
  332. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_navigation_state.py +0 -0
  333. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_nemu_ipc_capture.py +0 -0
  334. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_notifications.py +0 -0
  335. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_ok_mutex.py +0 -0
  336. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_overlay_custom_draw.py +0 -0
  337. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_process.py +0 -0
  338. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_pyappify_startup_update.py +0 -0
  339. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_qt_events.py +0 -0
  340. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_qt_legacy_imports.py +0 -0
  341. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_start_controller.py +0 -0
  342. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_task_executor_queue.py +0 -0
  343. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_task_ui.py +0 -0
  344. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_template_tab.py +0 -0
  345. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_touch_scroll.py +0 -0
  346. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_translation_fallback.py +0 -0
  347. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_ui_config.py +0 -0
  348. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_web_i18n.py +0 -0
  349. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_web_server.py +0 -0
  350. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_web_task_tabs.py +0 -0
  351. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_web_ui_pages.py +0 -0
  352. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_web_ui_tasks.py +0 -0
  353. {ok_script-2.0.0b2 → ok_script-2.0.0b4}/tests/test_windows_graphics_capture.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ok-script
3
- Version: 2.0.0b2
3
+ Version: 2.0.0b4
4
4
  Summary: Automation with Computer Vision for Python
5
5
  Author-email: ok-oldking <firedcto@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/ok-oldking/ok-script
@@ -23,13 +23,34 @@ Requires-Dist: psutil>=6.0.0
23
23
  Requires-Dist: pydirectinput==1.0.4
24
24
  Requires-Dist: pycaw==20240210
25
25
  Requires-Dist: mouse==0.7.1
26
+ Requires-Dist: pynput>=1.8.1
27
+ Provides-Extra: default
28
+ Requires-Dist: numpy>=1.26.4; extra == "default"
29
+ Requires-Dist: Pillow>=10.0; extra == "default"
30
+ Requires-Dist: ok-d3dshot>=0.1.5; extra == "default"
31
+ Requires-Dist: OpenCC==1.2.0; extra == "default"
26
32
  Provides-Extra: web
27
33
  Requires-Dist: fastapi>=0.115.0; extra == "web"
28
34
  Requires-Dist: uvicorn[standard]>=0.30.0; extra == "web"
29
35
  Requires-Dist: pywebview>=5.4; extra == "web"
30
36
  Provides-Extra: qt
37
+ Requires-Dist: PySide6-Essentials>=6.7.0; extra == "qt"
38
+ Requires-Dist: PySideSix-Frameless-Window>=0.3.12; extra == "qt"
39
+ Requires-Dist: darkdetect>=0.8.0; extra == "qt"
31
40
  Requires-Dist: PySide6-Fluent-Widgets>=1.8.3; extra == "qt"
32
- Requires-Dist: pynput>=1.8.1; extra == "qt"
41
+ Provides-Extra: adb
42
+ Requires-Dist: adbutils>=2.2.1; extra == "adb"
43
+ Provides-Extra: ocr
44
+ Requires-Dist: onnxocr-ppocrv5; extra == "ocr"
45
+ Provides-Extra: dev
46
+ Requires-Dist: pytest>=8.0; extra == "dev"
47
+ Requires-Dist: mypy>=1.10; extra == "dev"
48
+ Requires-Dist: build>=1.2; extra == "dev"
49
+ Requires-Dist: twine>=5.0; extra == "dev"
50
+ Requires-Dist: setuptools>=77; extra == "dev"
51
+ Requires-Dist: wheel; extra == "dev"
52
+ Requires-Dist: get-pypi-latest-version; extra == "dev"
53
+ Requires-Dist: mkdocs-material==9.7.7; extra == "dev"
33
54
  Dynamic: license-file
34
55
 
35
56
  # ok-script
@@ -67,17 +88,27 @@ ok-script 支持 Python 3.11 及以上版本,推荐使用 Python 3.12。
67
88
  python -m pip install ok-script
68
89
  ```
69
90
 
70
- 按使用场景安装界面依赖:
91
+ 只安装应用所需的依赖配置。`default` 为无界面模式,Web、Qt、ADB 和 OCR
92
+ 能力分别按需安装:
71
93
 
72
94
  ```powershell
95
+ python -m pip install "ok-script[default]"
73
96
  python -m pip install "ok-script[qt]"
74
97
  python -m pip install "ok-script[web]"
98
+ python -m pip install "ok-script[adb]"
99
+ python -m pip install "ok-script[ocr]"
75
100
  ```
76
101
 
77
- 开发本仓库时,使用 `pyproject.toml` 中的 `default` 依赖组安装完整开发环境:
102
+ ok-script 不会自动选择 OpenCV。用户必须根据自己的应用选择版本,并且只安装
103
+ 一个变体:`opencv-python`、`opencv-contrib-python`、`opencv-python-headless`
104
+ 或 `opencv-contrib-python-headless`。
105
+
106
+ 以无界面模式开发本仓库时,同时安装 `pyproject.toml` 中的 `default` 和 `dev`
107
+ 依赖组;再根据需要添加 `--group web`、`--group qt`、`--group adb` 或
108
+ `--group ocr`:
78
109
 
79
110
  ```powershell
80
- python -m pip install --editable . --group default
111
+ python -m pip install --editable . --group default --group dev
81
112
  ```
82
113
 
83
114
  如果要创建完整的自动化项目,建议从 [`ok-script-app`](https://github.com/ok-oldking/ok-script-app) 模板开始,而不是直接在本仓库中编写业务脚本。
@@ -33,17 +33,27 @@ ok-script 支持 Python 3.11 及以上版本,推荐使用 Python 3.12。
33
33
  python -m pip install ok-script
34
34
  ```
35
35
 
36
- 按使用场景安装界面依赖:
36
+ 只安装应用所需的依赖配置。`default` 为无界面模式,Web、Qt、ADB 和 OCR
37
+ 能力分别按需安装:
37
38
 
38
39
  ```powershell
40
+ python -m pip install "ok-script[default]"
39
41
  python -m pip install "ok-script[qt]"
40
42
  python -m pip install "ok-script[web]"
43
+ python -m pip install "ok-script[adb]"
44
+ python -m pip install "ok-script[ocr]"
41
45
  ```
42
46
 
43
- 开发本仓库时,使用 `pyproject.toml` 中的 `default` 依赖组安装完整开发环境:
47
+ ok-script 不会自动选择 OpenCV。用户必须根据自己的应用选择版本,并且只安装
48
+ 一个变体:`opencv-python`、`opencv-contrib-python`、`opencv-python-headless`
49
+ 或 `opencv-contrib-python-headless`。
50
+
51
+ 以无界面模式开发本仓库时,同时安装 `pyproject.toml` 中的 `default` 和 `dev`
52
+ 依赖组;再根据需要添加 `--group web`、`--group qt`、`--group adb` 或
53
+ `--group ocr`:
44
54
 
45
55
  ```powershell
46
- python -m pip install --editable . --group default
56
+ python -m pip install --editable . --group default --group dev
47
57
  ```
48
58
 
49
59
  如果要创建完整的自动化项目,建议从 [`ok-script-app`](https://github.com/ok-oldking/ok-script-app) 模板开始,而不是直接在本仓库中编写业务脚本。
@@ -599,6 +599,12 @@ class OK:
599
599
  import pyappify
600
600
  from ok.util.config import Config
601
601
 
602
+ self.config = config
603
+ ui_config = resolve_ui_config(config)
604
+ if ui_config is not None and ui_config["type"] == "web":
605
+ from ok.ui.web.requirements import check_web_requirements
606
+ check_web_requirements()
607
+
602
608
  check_mutex_fn = _resolve('check_mutex')
603
609
  config_logger_fn = _resolve('config_logger')
604
610
  global_config_class = _resolve('GlobalConfig')
@@ -617,7 +623,6 @@ class OK:
617
623
  if pyappify.app_profile:
618
624
  config['profile'] = pyappify.app_profile
619
625
  og.config = config
620
- self.config = config
621
626
  config["config_folder"] = config.get("config_folder") or 'configs'
622
627
  Config.config_folder = config["config_folder"]
623
628
  config['debug'] = config.get("debug", False)
@@ -723,6 +728,9 @@ class OK:
723
728
  logger.info("Keyboard interrupt received, exiting script.")
724
729
  finally:
725
730
  logger.info("Script has terminated.")
731
+ except SystemExit:
732
+ self.quit()
733
+ raise
726
734
  except Exception as e:
727
735
  logger.error("start error", e)
728
736
  self.exit_event.set()
@@ -17,6 +17,7 @@ from typing import Any
17
17
  from ok.core.events import EventMessage, communicate
18
18
  from ok.core.template_store import CocoTemplateStore
19
19
  from ok.task.web import WebTabConfig, call_task_tab_operation, task_tab_operations
20
+ from ok.ui.web.requirements import WEB_REQUIREMENTS_MESSAGE, check_web_requirements
20
21
 
21
22
 
22
23
  LOG_LINE_PATTERN = re.compile(
@@ -1025,14 +1026,13 @@ class WebRuntime:
1025
1026
 
1026
1027
 
1027
1028
  def create_web_app(config, ok_instance=None):
1029
+ check_web_requirements()
1028
1030
  try:
1029
1031
  from fastapi import FastAPI, HTTPException, Request, WebSocket, WebSocketDisconnect
1030
1032
  from fastapi.responses import FileResponse
1031
1033
  from fastapi.staticfiles import StaticFiles
1032
1034
  except ImportError as exc:
1033
- raise RuntimeError(
1034
- "The web UI requires FastAPI and Uvicorn. Install ok-script[web]."
1035
- ) from exc
1035
+ raise SystemExit(WEB_REQUIREMENTS_MESSAGE) from exc
1036
1036
 
1037
1037
  # FastAPI resolves postponed endpoint annotations from module globals.
1038
1038
  globals()["WebSocket"] = WebSocket
@@ -0,0 +1,13 @@
1
+ WEB_REQUIREMENTS_MESSAGE = (
2
+ "The web UI requires FastAPI and Uvicorn. Install ok-script[web]."
3
+ )
4
+
5
+
6
+ def check_web_requirements():
7
+ """Import required web packages before runtime workers are initialized."""
8
+ try:
9
+ import fastapi # noqa: F401
10
+ import uvicorn
11
+ except ImportError as exc:
12
+ raise SystemExit(WEB_REQUIREMENTS_MESSAGE) from exc
13
+ return uvicorn
@@ -7,6 +7,7 @@ import webbrowser
7
7
 
8
8
  from ok.util.logger import Logger
9
9
  from ok.core.ui_config import resolve_window_size
10
+ from ok.ui.web.requirements import check_web_requirements
10
11
 
11
12
  logger = Logger.get_logger("web_server")
12
13
 
@@ -612,12 +613,7 @@ def _run_webview(web_config, url, server, server_socket, ui_state=None,
612
613
  def run_web(config, host="127.0.0.1", port=0, open_browser=True, debug=None,
613
614
  launch_mode=None, ok_instance=None):
614
615
  """Run the browser UI, using an OS-assigned port by default."""
615
- try:
616
- import uvicorn
617
- except ImportError as exc:
618
- raise RuntimeError(
619
- "The web UI requires FastAPI and Uvicorn. Install ok-script[web]."
620
- ) from exc
616
+ uvicorn = check_web_requirements()
621
617
 
622
618
  from ok.ui.web.app import create_web_app
623
619
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ok-script
3
- Version: 2.0.0b2
3
+ Version: 2.0.0b4
4
4
  Summary: Automation with Computer Vision for Python
5
5
  Author-email: ok-oldking <firedcto@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/ok-oldking/ok-script
@@ -23,13 +23,34 @@ Requires-Dist: psutil>=6.0.0
23
23
  Requires-Dist: pydirectinput==1.0.4
24
24
  Requires-Dist: pycaw==20240210
25
25
  Requires-Dist: mouse==0.7.1
26
+ Requires-Dist: pynput>=1.8.1
27
+ Provides-Extra: default
28
+ Requires-Dist: numpy>=1.26.4; extra == "default"
29
+ Requires-Dist: Pillow>=10.0; extra == "default"
30
+ Requires-Dist: ok-d3dshot>=0.1.5; extra == "default"
31
+ Requires-Dist: OpenCC==1.2.0; extra == "default"
26
32
  Provides-Extra: web
27
33
  Requires-Dist: fastapi>=0.115.0; extra == "web"
28
34
  Requires-Dist: uvicorn[standard]>=0.30.0; extra == "web"
29
35
  Requires-Dist: pywebview>=5.4; extra == "web"
30
36
  Provides-Extra: qt
37
+ Requires-Dist: PySide6-Essentials>=6.7.0; extra == "qt"
38
+ Requires-Dist: PySideSix-Frameless-Window>=0.3.12; extra == "qt"
39
+ Requires-Dist: darkdetect>=0.8.0; extra == "qt"
31
40
  Requires-Dist: PySide6-Fluent-Widgets>=1.8.3; extra == "qt"
32
- Requires-Dist: pynput>=1.8.1; extra == "qt"
41
+ Provides-Extra: adb
42
+ Requires-Dist: adbutils>=2.2.1; extra == "adb"
43
+ Provides-Extra: ocr
44
+ Requires-Dist: onnxocr-ppocrv5; extra == "ocr"
45
+ Provides-Extra: dev
46
+ Requires-Dist: pytest>=8.0; extra == "dev"
47
+ Requires-Dist: mypy>=1.10; extra == "dev"
48
+ Requires-Dist: build>=1.2; extra == "dev"
49
+ Requires-Dist: twine>=5.0; extra == "dev"
50
+ Requires-Dist: setuptools>=77; extra == "dev"
51
+ Requires-Dist: wheel; extra == "dev"
52
+ Requires-Dist: get-pypi-latest-version; extra == "dev"
53
+ Requires-Dist: mkdocs-material==9.7.7; extra == "dev"
33
54
  Dynamic: license-file
34
55
 
35
56
  # ok-script
@@ -67,17 +88,27 @@ ok-script 支持 Python 3.11 及以上版本,推荐使用 Python 3.12。
67
88
  python -m pip install ok-script
68
89
  ```
69
90
 
70
- 按使用场景安装界面依赖:
91
+ 只安装应用所需的依赖配置。`default` 为无界面模式,Web、Qt、ADB 和 OCR
92
+ 能力分别按需安装:
71
93
 
72
94
  ```powershell
95
+ python -m pip install "ok-script[default]"
73
96
  python -m pip install "ok-script[qt]"
74
97
  python -m pip install "ok-script[web]"
98
+ python -m pip install "ok-script[adb]"
99
+ python -m pip install "ok-script[ocr]"
75
100
  ```
76
101
 
77
- 开发本仓库时,使用 `pyproject.toml` 中的 `default` 依赖组安装完整开发环境:
102
+ ok-script 不会自动选择 OpenCV。用户必须根据自己的应用选择版本,并且只安装
103
+ 一个变体:`opencv-python`、`opencv-contrib-python`、`opencv-python-headless`
104
+ 或 `opencv-contrib-python-headless`。
105
+
106
+ 以无界面模式开发本仓库时,同时安装 `pyproject.toml` 中的 `default` 和 `dev`
107
+ 依赖组;再根据需要添加 `--group web`、`--group qt`、`--group adb` 或
108
+ `--group ocr`:
78
109
 
79
110
  ```powershell
80
- python -m pip install --editable . --group default
111
+ python -m pip install --editable . --group default --group dev
81
112
  ```
82
113
 
83
114
  如果要创建完整的自动化项目,建议从 [`ok-script-app`](https://github.com/ok-oldking/ok-script-app) 模板开始,而不是直接在本仓库中编写业务脚本。
@@ -263,6 +263,7 @@ ok/ui/qt/widget/YesNonWidgetItem.py
263
263
  ok/ui/qt/widget/__init__.py
264
264
  ok/ui/web/__init__.py
265
265
  ok/ui/web/app.py
266
+ ok/ui/web/requirements.py
266
267
  ok/ui/web/server.py
267
268
  ok/ui/web/static/app.js
268
269
  ok/ui/web/static/chunk-fluent.js
@@ -0,0 +1,42 @@
1
+ pywin32>=306
2
+ pyappify>=1.0.6
3
+ typing-extensions>=4.11.0
4
+ requests>=2.32.3
5
+ psutil>=6.0.0
6
+ pydirectinput==1.0.4
7
+ pycaw==20240210
8
+ mouse==0.7.1
9
+ pynput>=1.8.1
10
+
11
+ [adb]
12
+ adbutils>=2.2.1
13
+
14
+ [default]
15
+ numpy>=1.26.4
16
+ Pillow>=10.0
17
+ ok-d3dshot>=0.1.5
18
+ OpenCC==1.2.0
19
+
20
+ [dev]
21
+ pytest>=8.0
22
+ mypy>=1.10
23
+ build>=1.2
24
+ twine>=5.0
25
+ setuptools>=77
26
+ wheel
27
+ get-pypi-latest-version
28
+ mkdocs-material==9.7.7
29
+
30
+ [ocr]
31
+ onnxocr-ppocrv5
32
+
33
+ [qt]
34
+ PySide6-Essentials>=6.7.0
35
+ PySideSix-Frameless-Window>=0.3.12
36
+ darkdetect>=0.8.0
37
+ PySide6-Fluent-Widgets>=1.8.3
38
+
39
+ [web]
40
+ fastapi>=0.115.0
41
+ uvicorn[standard]>=0.30.0
42
+ pywebview>=5.4
@@ -34,17 +34,42 @@ dependencies = [
34
34
  "pydirectinput==1.0.4",
35
35
  "pycaw==20240210",
36
36
  "mouse==0.7.1",
37
+ "pynput>=1.8.1",
37
38
  ]
38
39
 
39
40
  [project.optional-dependencies]
41
+ default = [
42
+ "numpy>=1.26.4",
43
+ "Pillow>=10.0",
44
+ "ok-d3dshot>=0.1.5",
45
+ "OpenCC==1.2.0",
46
+ ]
40
47
  web = [
41
48
  "fastapi>=0.115.0",
42
49
  "uvicorn[standard]>=0.30.0",
43
50
  "pywebview>=5.4",
44
51
  ]
45
52
  qt = [
53
+ "PySide6-Essentials>=6.7.0",
54
+ "PySideSix-Frameless-Window>=0.3.12",
55
+ "darkdetect>=0.8.0",
46
56
  "PySide6-Fluent-Widgets>=1.8.3",
47
- "pynput>=1.8.1",
57
+ ]
58
+ adb = [
59
+ "adbutils>=2.2.1",
60
+ ]
61
+ ocr = [
62
+ "onnxocr-ppocrv5",
63
+ ]
64
+ dev = [
65
+ "pytest>=8.0",
66
+ "mypy>=1.10",
67
+ "build>=1.2",
68
+ "twine>=5.0",
69
+ "setuptools>=77",
70
+ "wheel",
71
+ "get-pypi-latest-version",
72
+ "mkdocs-material==9.7.7",
48
73
  ]
49
74
 
50
75
  [project.urls]
@@ -55,6 +80,12 @@ Repository = "https://github.com/ok-oldking/ok-script"
55
80
  ok = "ok.cli:main"
56
81
 
57
82
  [dependency-groups]
83
+ default = [
84
+ "numpy>=1.26.4",
85
+ "Pillow>=10.0",
86
+ "ok-d3dshot>=0.1.5",
87
+ "OpenCC==1.2.0",
88
+ ]
58
89
  web = [
59
90
  "fastapi>=0.115.0",
60
91
  "uvicorn[standard]>=0.30.0",
@@ -65,17 +96,14 @@ qt = [
65
96
  "PySideSix-Frameless-Window>=0.3.12",
66
97
  "darkdetect>=0.8.0",
67
98
  "PySide6-Fluent-Widgets>=1.8.3",
68
- "pynput>=1.8.1",
69
99
  ]
70
- default = [
71
- { include-group = "web" },
72
- { include-group = "qt" },
73
- "numpy>=1.26.4",
74
- "opencv-python>=4.9.0.80",
75
- "Pillow>=10.0",
100
+ adb = [
76
101
  "adbutils>=2.2.1",
77
- "ok-d3dshot>=0.1.5",
78
- "OpenCC==1.2.0",
102
+ ]
103
+ ocr = [
104
+ "onnxocr-ppocrv5",
105
+ ]
106
+ dev = [
79
107
  "pytest>=8.0",
80
108
  "mypy>=1.10",
81
109
  "build>=1.2",
@@ -0,0 +1,35 @@
1
+ import tomllib
2
+ from pathlib import Path
3
+
4
+
5
+ ROOT = Path(__file__).parents[1]
6
+
7
+
8
+ def test_pyproject_profiles_are_consistent_and_headless_by_default():
9
+ metadata = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
10
+ project = metadata["project"]
11
+ extras = project["optional-dependencies"]
12
+ groups = metadata["dependency-groups"]
13
+
14
+ assert set(extras) == {"default", "web", "qt", "adb", "ocr", "dev"}
15
+ assert extras == groups
16
+ assert extras["adb"] == ["adbutils>=2.2.1"]
17
+ assert extras["ocr"] == ["onnxocr-ppocrv5"]
18
+ assert not any(
19
+ requirement.startswith(("fastapi", "PySide6"))
20
+ for requirement in extras["default"]
21
+ )
22
+ assert any(requirement.startswith("pytest") for requirement in extras["dev"])
23
+ assert not any(requirement.startswith("pytest") for requirement in project["dependencies"])
24
+ assert "pynput>=1.8.1" in project["dependencies"]
25
+
26
+ managed_requirements = [
27
+ *project["dependencies"],
28
+ *(requirement for profile in extras.values() for requirement in profile),
29
+ ]
30
+ assert not any("opencv" in requirement.lower() for requirement in managed_requirements)
31
+
32
+
33
+ def test_legacy_requirements_files_are_replaced_by_pyproject_groups():
34
+ assert not (ROOT / "requirements.txt").exists()
35
+ assert not (ROOT / "requirements-docs.txt").exists()
@@ -1,5 +1,9 @@
1
+ import sys
1
2
  import threading
2
3
  from types import SimpleNamespace
4
+ from unittest.mock import Mock, patch
5
+
6
+ import pytest
3
7
 
4
8
  from ok import OK
5
9
  from ok.core.events import communicate
@@ -51,6 +55,22 @@ def make_runtime(*, auto_start=False, task=0, exit_after=False):
51
55
  return runtime, controller
52
56
 
53
57
 
58
+ def test_ok_checks_web_requirements_before_runtime_initialization():
59
+ failure = SystemExit(
60
+ "The web UI requires FastAPI and Uvicorn. Install ok-script[web]."
61
+ )
62
+
63
+ with patch(
64
+ "ok.ui.web.requirements.check_web_requirements", side_effect=failure
65
+ ) as check_requirements, patch.object(OK, "do_init") as do_init, \
66
+ pytest.raises(SystemExit) as exit_info:
67
+ OK({"gui": {"type": "web", "launch_mode": "server"}})
68
+
69
+ assert exit_info.value is failure
70
+ check_requirements.assert_called_once_with()
71
+ do_init.assert_not_called()
72
+
73
+
54
74
  def test_start_runtime_refreshes_devices_once_and_emits_start_success():
55
75
  runtime, controller = make_runtime()
56
76
  events = []
@@ -90,7 +110,6 @@ def test_ok_start_routes_nested_browser_gui_to_web_server():
90
110
  runtime = object.__new__(OK)
91
111
  runtime.config = {"gui": {"type": "web", "launch_mode": "browser"}}
92
112
 
93
- from unittest.mock import patch
94
113
  with patch("ok.ui.web.server.run_web", return_value=43210) as run_web:
95
114
  assert runtime.start() == 43210
96
115
 
@@ -103,7 +122,6 @@ def test_ok_start_routes_nested_pywebview_ui_to_pywebview():
103
122
  runtime = object.__new__(OK)
104
123
  runtime.config = {"gui": {"type": "web", "launch_mode": "pywebview"}}
105
124
 
106
- from unittest.mock import patch
107
125
  with patch("ok.ui.web.server.run_web", return_value=43210) as run_web:
108
126
  assert runtime.start() == 43210
109
127
 
@@ -116,7 +134,6 @@ def test_ok_start_routes_nested_server_gui_without_opening_window():
116
134
  runtime = object.__new__(OK)
117
135
  runtime.config = {"gui": {"type": "web", "launch_mode": "server"}}
118
136
 
119
- from unittest.mock import patch
120
137
  with patch("ok.ui.web.server.run_web", return_value=43210) as run_web:
121
138
  assert runtime.start() == 43210
122
139
 
@@ -125,6 +142,22 @@ def test_ok_start_routes_nested_server_gui_without_opening_window():
125
142
  )
126
143
 
127
144
 
145
+ def test_ok_start_exits_when_web_requirements_are_missing():
146
+ runtime = object.__new__(OK)
147
+ runtime.config = {"gui": {"type": "web", "launch_mode": "server"}}
148
+ runtime.exit_event = threading.Event()
149
+ runtime._app = None
150
+ runtime._headless_app = Mock()
151
+
152
+ with patch.dict(sys.modules, {"uvicorn": None}), \
153
+ pytest.raises(SystemExit, match="Install ok-script\\[web\\]") as exit_info:
154
+ runtime.start()
155
+
156
+ assert exit_info.value.code != 0
157
+ assert runtime.exit_event.is_set()
158
+ runtime._headless_app.quit.assert_called_once_with()
159
+
160
+
128
161
  def test_device_refresh_always_publishes_completion_event():
129
162
  start_calls = []
130
163
  manager = SimpleNamespace(
@@ -1,19 +1,28 @@
1
1
  import asyncio
2
+ import sys
2
3
  from pathlib import Path
3
4
  from types import SimpleNamespace
4
- from unittest.mock import AsyncMock, Mock
5
+ from unittest.mock import AsyncMock, Mock, patch
5
6
 
6
7
  import pytest
7
8
 
8
9
  from ok import App, HeadlessApp, _create_ok_config
9
10
  from ok.ui.web.app import (
10
- WebRuntime, _color_hex, _copy_web_icon, _device_payload, _read_log,
11
+ WebRuntime, _color_hex, _copy_web_icon, _device_payload, _read_log, create_web_app,
11
12
  _EventSessionRegistry, _send_websocket_payload,
12
13
  _wait_for_websocket_disconnect,
13
14
  )
14
15
  from ok.util.config import Config
15
16
 
16
17
 
18
+ def test_create_web_app_exits_when_fastapi_is_missing():
19
+ with patch.dict(sys.modules, {"fastapi": None}), \
20
+ pytest.raises(SystemExit, match="Install ok-script\\[web\\]") as exit_info:
21
+ create_web_app({})
22
+
23
+ assert exit_info.value.code != 0
24
+
25
+
17
26
  def test_copy_web_icon_prepares_static_asset(tmp_path: Path):
18
27
  source = tmp_path / "source" / "app.png"
19
28
  source.parent.mkdir()
@@ -1,17 +0,0 @@
1
- pywin32>=306
2
- pyappify>=1.0.6
3
- typing-extensions>=4.11.0
4
- requests>=2.32.3
5
- psutil>=6.0.0
6
- pydirectinput==1.0.4
7
- pycaw==20240210
8
- mouse==0.7.1
9
-
10
- [qt]
11
- PySide6-Fluent-Widgets>=1.8.3
12
- pynput>=1.8.1
13
-
14
- [web]
15
- fastapi>=0.115.0
16
- uvicorn[standard]>=0.30.0
17
- pywebview>=5.4
@@ -1,27 +0,0 @@
1
- import tomllib
2
- from pathlib import Path
3
-
4
-
5
- ROOT = Path(__file__).parents[1]
6
-
7
-
8
- def test_pyproject_keeps_runtime_and_development_dependencies_separate():
9
- metadata = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
10
- project = metadata["project"]
11
- extras = project["optional-dependencies"]
12
- groups = metadata["dependency-groups"]
13
-
14
- assert set(extras) == {"web", "qt"}
15
- assert {item["include-group"] for item in groups["default"] if isinstance(item, dict)} == {
16
- "web", "qt",
17
- }
18
- assert any(
19
- isinstance(requirement, str) and requirement.startswith("pytest")
20
- for requirement in groups["default"]
21
- )
22
- assert not any(requirement.startswith("pytest") for requirement in project["dependencies"])
23
-
24
-
25
- def test_legacy_requirements_files_are_replaced_by_pyproject_groups():
26
- assert not (ROOT / "requirements.txt").exists()
27
- assert not (ROOT / "requirements-docs.txt").exists()
File without changes
File without changes
File without changes
File without changes