ok-script 2.0.0b5__tar.gz → 2.0.0b7__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.0b5/ok_script.egg-info → ok_script-2.0.0b7}/PKG-INFO +2 -2
  2. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/MainWindow.py +9 -5
  3. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/about/AboutTab.py +4 -2
  4. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/about/UpdateCard.py +4 -3
  5. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/web/app.py +4 -2
  6. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/update/inline_ok_requirements.py +23 -32
  7. {ok_script-2.0.0b5 → ok_script-2.0.0b7/ok_script.egg-info}/PKG-INFO +2 -2
  8. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok_script.egg-info/requires.txt +1 -1
  9. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/pyproject.toml +1 -1
  10. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_inline_ok_requirements.py +35 -12
  11. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_pyappify_startup_update.py +34 -1
  12. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_web_ui_pages.py +3 -2
  13. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/LICENSE.txt +0 -0
  14. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/MANIFEST.in +0 -0
  15. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/README.md +0 -0
  16. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/diagnostics/qq_trace.py +0 -0
  17. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/__init__.py +0 -0
  18. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/__main__.py +0 -0
  19. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/alas/__init__.py +0 -0
  20. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/alas/emulator_base.py +0 -0
  21. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/alas/emulator_windows.py +0 -0
  22. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/alas/platform_windows.py +0 -0
  23. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/alas/utils.py +0 -0
  24. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/__init__.py +0 -0
  25. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/adb/__init__.py +0 -0
  26. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/adb/deep.py +0 -0
  27. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/adb/minitouch.py +0 -0
  28. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/adb/nemu_ipc.py +0 -0
  29. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/adb/nemu_utils.py +0 -0
  30. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/adb/pool.py +0 -0
  31. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/adb/timer.py +0 -0
  32. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/adb/util.py +0 -0
  33. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/windows/__init__.py +0 -0
  34. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/windows/d3d11.py +0 -0
  35. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/capture/windows/dump.py +0 -0
  36. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/cli.py +0 -0
  37. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/__init__.py +0 -0
  38. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/config_schema.py +0 -0
  39. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/downloads.py +0 -0
  40. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/events.py +0 -0
  41. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/icons.py +0 -0
  42. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/notifications.py +0 -0
  43. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/screenshot.py +0 -0
  44. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/script_editing.py +0 -0
  45. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/script_packager.py +0 -0
  46. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/script_templates.py +0 -0
  47. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/start_controller.py +0 -0
  48. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/task_manager.py +0 -0
  49. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/template_store.py +0 -0
  50. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/translation.py +0 -0
  51. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/core/ui_config.py +0 -0
  52. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/DeviceManager.py +0 -0
  53. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/__init__.py +0 -0
  54. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture.py +0 -0
  55. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/__init__.py +0 -0
  56. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/adb.py +0 -0
  57. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/base.py +0 -0
  58. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/bitblt.py +0 -0
  59. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/bitblt_utils.py +0 -0
  60. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/browser.py +0 -0
  61. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/desktop_duplication.py +0 -0
  62. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/hwnd_window.py +0 -0
  63. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/image.py +0 -0
  64. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/nemu_ipc.py +0 -0
  65. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/types.py +0 -0
  66. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/update.py +0 -0
  67. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/capture_methods/windows_graphics.py +0 -0
  68. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction.py +0 -0
  69. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/__init__.py +0 -0
  70. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/adb.py +0 -0
  71. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/base.py +0 -0
  72. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/browser.py +0 -0
  73. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/do_nothing.py +0 -0
  74. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/foreground_post_message.py +0 -0
  75. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/genshin.py +0 -0
  76. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/keys.py +0 -0
  77. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/post_message.py +0 -0
  78. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/pydirect.py +0 -0
  79. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/pynput.py +0 -0
  80. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/interaction_methods/swipe.py +0 -0
  81. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/device/intercation.py +0 -0
  82. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/feature/Box.py +0 -0
  83. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/feature/Feature.py +0 -0
  84. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/feature/FeatureSet.py +0 -0
  85. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/feature/__init__.py +0 -0
  86. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/gui/__init__.py +0 -0
  87. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/gui/util/pyappify_startup.py +0 -0
  88. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/notification/__init__.py +0 -0
  89. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/notification/manager.py +0 -0
  90. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/notification/messenger_images.py +0 -0
  91. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/notification/pipeline.py +0 -0
  92. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/notification/ppocr.py +0 -0
  93. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/notification/providers.py +0 -0
  94. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/notification/system.py +0 -0
  95. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/notification/windows_messenger.py +0 -0
  96. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ocr/__init__.py +0 -0
  97. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ocr/download_paddle_model.py +0 -0
  98. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Foundation/Collections.py +0 -0
  99. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Foundation/__init__.py +0 -0
  100. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Globalization/__init__.py +0 -0
  101. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Graphics/Capture/__init__.py +0 -0
  102. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Graphics/DirectX/Direct3D11/__init__.py +0 -0
  103. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Graphics/DirectX/__init__.py +0 -0
  104. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Graphics/Imaging/__init__.py +0 -0
  105. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Graphics/__init__.py +0 -0
  106. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Media/Ocr/__init__.py +0 -0
  107. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Media/__init__.py +0 -0
  108. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Security/Cryptography/__init__.py +0 -0
  109. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Security/__init__.py +0 -0
  110. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Storage/Streams/__init__.py +0 -0
  111. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/Storage/__init__.py +0 -0
  112. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/UI/ViewManagement/__init__.py +0 -0
  113. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/UI/__init__.py +0 -0
  114. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/Windows/__init__.py +0 -0
  115. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/__init__.py +0 -0
  116. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/delegate.py +0 -0
  117. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/export.py +0 -0
  118. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/idldsl.py +0 -0
  119. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/inspectable.py +0 -0
  120. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/roapi.py +0 -0
  121. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/types.py +0 -0
  122. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/rotypes/winstring.py +0 -0
  123. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/task/DiagnosisTask.py +0 -0
  124. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/task/TaskExecutor.py +0 -0
  125. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/task/__init__.py +0 -0
  126. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/task/exceptions.py +0 -0
  127. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/task/task.py +0 -0
  128. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/task/web.py +0 -0
  129. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/test/OKTestRunner.py +0 -0
  130. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/test/RunTests.py +0 -0
  131. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/test/TaskTestCase.py +0 -0
  132. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/test/__init__.py +0 -0
  133. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/third_party/__init__.py +0 -0
  134. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/third_party/paperclip.py +0 -0
  135. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/__init__.py +0 -0
  136. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/overlay/__init__.py +0 -0
  137. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/overlay/win32_gdi.py +0 -0
  138. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/Communicate.py +0 -0
  139. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/MessageWindow.py +0 -0
  140. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/StartController.py +0 -0
  141. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/TabTitles.py +0 -0
  142. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/__init__.py +0 -0
  143. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/about/HttpTextEdit.py +0 -0
  144. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/about/LinksBar.py +0 -0
  145. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/about/ProjectCard.py +0 -0
  146. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/about/VersionCard.py +0 -0
  147. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/about/__init__.py +0 -0
  148. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/common/OKIcon.py +0 -0
  149. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/common/__init__.py +0 -0
  150. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/common/accent_color.py +0 -0
  151. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/common/config.py +0 -0
  152. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/common/design_system.py +0 -0
  153. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/common/icons.py +0 -0
  154. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/common/style_sheet.py +0 -0
  155. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/debug/DebugTab.py +0 -0
  156. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/debug/OverlayWidget.py +0 -0
  157. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/debug/RunCodeTab.py +0 -0
  158. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/debug/Screenshot.py +0 -0
  159. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/debug/__init__.py +0 -0
  160. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/events.py +0 -0
  161. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/GettextTranslator.py +0 -0
  162. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/__init__.py +0 -0
  163. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/en_US.qm +0 -0
  164. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/en_US.ts +0 -0
  165. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/es_ES.qm +0 -0
  166. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/es_ES.ts +0 -0
  167. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/ja_JP.qm +0 -0
  168. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/ja_JP.ts +0 -0
  169. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/ko_KR.qm +0 -0
  170. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/ko_KR.ts +0 -0
  171. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/path.py +0 -0
  172. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/update.py +0 -0
  173. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/zh_CN.qm +0 -0
  174. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/zh_CN.ts +0 -0
  175. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/zh_TW.qm +0 -0
  176. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/i18n/zh_TW.ts +0 -0
  177. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/overlay/OverlayWindow.py +0 -0
  178. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/overlay/__init__.py +0 -0
  179. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/__init__.py +0 -0
  180. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/dark/card.qss +0 -0
  181. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/dark/discord.svg +0 -0
  182. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/dark/heart.svg +0 -0
  183. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/dark/message_window.qss +0 -0
  184. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/dark/setting_interface.qss +0 -0
  185. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/dark/status_bar.qss +0 -0
  186. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/dark/stop.svg +0 -0
  187. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/dark/tab.qss +0 -0
  188. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/light/card.qss +0 -0
  189. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/light/discord.svg +0 -0
  190. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/light/heart.svg +0 -0
  191. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/light/message_window.qss +0 -0
  192. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/light/setting_interface.qss +0 -0
  193. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/light/status_bar.qss +0 -0
  194. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/light/stop.svg +0 -0
  195. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qss/light/tab.qss +0 -0
  196. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/qt.qrc +0 -0
  197. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/resources.py +0 -0
  198. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/settings/GlobalConfigCard.py +0 -0
  199. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/settings/GlobalConfigTab.py +0 -0
  200. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/settings/SettingTab.py +0 -0
  201. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/settings/__init__.py +0 -0
  202. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/start/LogWindow.py +0 -0
  203. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/start/SelectCaptureListView.py +0 -0
  204. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/start/SelectInteractionListView.py +0 -0
  205. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/start/StartCard.py +0 -0
  206. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/start/StartTab.py +0 -0
  207. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/start/__init__.py +0 -0
  208. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/ConfigCard.py +0 -0
  209. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/ConfigItemFactory.py +0 -0
  210. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/ConfigLabelAndWidget.py +0 -0
  211. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/EditTaskTab.py +0 -0
  212. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndButtons.py +0 -0
  213. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndDoubleSpinBox.py +0 -0
  214. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndDropDown.py +0 -0
  215. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndFileSelector.py +0 -0
  216. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndGlobal.py +0 -0
  217. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndLineEdit.py +0 -0
  218. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndList.py +0 -0
  219. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndMultiSelection.py +0 -0
  220. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndSpinBox.py +0 -0
  221. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndSwitchButton.py +0 -0
  222. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndTextEdit.py +0 -0
  223. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/LabelAndWidget.py +0 -0
  224. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/MarkUpWindow.py +0 -0
  225. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/ModifyListDialog.py +0 -0
  226. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/ModifyListItem.py +0 -0
  227. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/OneTimeTaskTab.py +0 -0
  228. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/PythonHighlighter.py +0 -0
  229. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/RecordScript.py +0 -0
  230. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/ScheduleTaskTab.py +0 -0
  231. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/ScriptPackager.py +0 -0
  232. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/StartButton.py +0 -0
  233. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/TaskCard.py +0 -0
  234. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/TaskManger.py +0 -0
  235. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/TaskOpButton.py +0 -0
  236. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/TaskTab.py +0 -0
  237. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/TemplateFactory.py +0 -0
  238. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/TemplateTab.py +0 -0
  239. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/TooltipTableWidget.py +0 -0
  240. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/TriggerTaskTab.py +0 -0
  241. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/tasks/__init__.py +0 -0
  242. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/util/Alert.py +0 -0
  243. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/util/InitWorker.py +0 -0
  244. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/util/__init__.py +0 -0
  245. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/util/app.py +0 -0
  246. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/util/download.py +0 -0
  247. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/util/pip_util.py +0 -0
  248. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/util/pyappify_startup.py +0 -0
  249. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/util/touch_scroll.py +0 -0
  250. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/util/windows_thumbnail.py +0 -0
  251. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/BaseLoading.py +0 -0
  252. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/BaseWindow.py +0 -0
  253. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/Card.py +0 -0
  254. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/CustomTab.py +0 -0
  255. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/EmptyCard.py +0 -0
  256. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/ExpandCardLayout.py +0 -0
  257. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/FlowLayout.py +0 -0
  258. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/FramelessDialog.py +0 -0
  259. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/ImageWidget.py +0 -0
  260. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/ListTableWidgetItem.py +0 -0
  261. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/NumericTableWidgetItem.py +0 -0
  262. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/OkCompactSpinBox.py +0 -0
  263. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/SortingTableWidgetItem.py +0 -0
  264. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/StartLoadingDialog.py +0 -0
  265. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/StatusBar.py +0 -0
  266. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/Tab.py +0 -0
  267. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/TabWidget.py +0 -0
  268. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/UpdateConfigWidgetItem.py +0 -0
  269. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/WidgetWithVLabel.py +0 -0
  270. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/YesNonWidgetItem.py +0 -0
  271. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/qt/widget/__init__.py +0 -0
  272. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/web/__init__.py +0 -0
  273. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/web/requirements.py +0 -0
  274. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/web/server.py +0 -0
  275. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/web/static/app.js +0 -0
  276. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/web/static/chunk-fluent.js +0 -0
  277. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/web/static/chunk-react.js +0 -0
  278. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/web/static/index.css +0 -0
  279. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/ui/web/static/index.html +0 -0
  280. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/update/__init__.py +0 -0
  281. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/update/copy_ok_folder.py +0 -0
  282. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/Analytics.py +0 -0
  283. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/GlobalConfig.py +0 -0
  284. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/__init__.py +0 -0
  285. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/blur.py +0 -0
  286. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/clazz.py +0 -0
  287. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/collection.py +0 -0
  288. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/color.py +0 -0
  289. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/config.py +0 -0
  290. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/explorer.py +0 -0
  291. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/file.py +0 -0
  292. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/gpu_driver_settings.py +0 -0
  293. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/handler.py +0 -0
  294. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/i18n.py +0 -0
  295. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/logger.py +0 -0
  296. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/partial_sync_repo.py +0 -0
  297. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/print_hwnd.py +0 -0
  298. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/process.py +0 -0
  299. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/window.py +0 -0
  300. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok/util/windows_schedule.py +0 -0
  301. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok_script.egg-info/SOURCES.txt +0 -0
  302. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok_script.egg-info/dependency_links.txt +0 -0
  303. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok_script.egg-info/entry_points.txt +0 -0
  304. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok_script.egg-info/not-zip-safe +0 -0
  305. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/ok_script.egg-info/top_level.txt +0 -0
  306. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/scripts/generate_web_i18n.py +0 -0
  307. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/setup.cfg +0 -0
  308. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/setup.py +0 -0
  309. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_accent_color.py +0 -0
  310. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_app.py +0 -0
  311. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_base_interaction.py +0 -0
  312. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_blur.py +0 -0
  313. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_box.py +0 -0
  314. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_capture_update.py +0 -0
  315. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_cli.py +0 -0
  316. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_config_card.py +0 -0
  317. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_core_events.py +0 -0
  318. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_core_ui_services.py +0 -0
  319. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_device_manager.py +0 -0
  320. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_expand_card_layout.py +0 -0
  321. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_explorer.py +0 -0
  322. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_global_config.py +0 -0
  323. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_gpu_driver_settings.py +0 -0
  324. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_headless_imports.py +0 -0
  325. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_logger.py +0 -0
  326. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_main_window_notifications.py +0 -0
  327. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_main_window_startup_tab.py +0 -0
  328. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_main_window_system_theme.py +0 -0
  329. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_missing_frame.py +0 -0
  330. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_navigation_state.py +0 -0
  331. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_nemu_ipc_capture.py +0 -0
  332. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_notifications.py +0 -0
  333. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_ok_mutex.py +0 -0
  334. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_overlay_custom_draw.py +0 -0
  335. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_package_metadata.py +0 -0
  336. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_process.py +0 -0
  337. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_qt_events.py +0 -0
  338. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_qt_legacy_imports.py +0 -0
  339. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_qt_page_layout.py +0 -0
  340. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_runtime_startup.py +0 -0
  341. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_start_controller.py +0 -0
  342. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_task_executor_queue.py +0 -0
  343. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_task_ui.py +0 -0
  344. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_template_tab.py +0 -0
  345. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_touch_scroll.py +0 -0
  346. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_translation_fallback.py +0 -0
  347. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_ui_config.py +0 -0
  348. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_web_app.py +0 -0
  349. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_web_i18n.py +0 -0
  350. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_web_server.py +0 -0
  351. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_web_task_tabs.py +0 -0
  352. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/tests/test_web_ui_tasks.py +0 -0
  353. {ok_script-2.0.0b5 → ok_script-2.0.0b7}/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.0b5
3
+ Version: 2.0.0b7
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
@@ -16,7 +16,7 @@ Requires-Python: >=3.11
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE.txt
18
18
  Requires-Dist: pywin32>=306
19
- Requires-Dist: pyappify>=1.0.6
19
+ Requires-Dist: pyappify>=1.0.9
20
20
  Requires-Dist: typing-extensions>=4.11.0
21
21
  Requires-Dist: requests>=2.32.3
22
22
  Requires-Dist: psutil>=6.0.0
@@ -212,7 +212,7 @@ class MainWindow(FluentWindow):
212
212
  position=NavigationItemPosition.BOTTOM)
213
213
 
214
214
  from ok.ui.qt.about.AboutTab import AboutTab
215
- self.about_tab = AboutTab(config)
215
+ self.about_tab = AboutTab(config, exit_event=exit_event)
216
216
  self.addSubInterface(self.about_tab, FluentIcon.QUESTION, self.tr('About'),
217
217
  position=NavigationItemPosition.BOTTOM)
218
218
  self.about_update_badge = None
@@ -526,14 +526,18 @@ class MainWindow(FluentWindow):
526
526
  self.shown = True
527
527
  pyappify.hide_pyappify()
528
528
  if update_pyappify := self.config.get("update_pyappify"):
529
- pyappify.upgrade(update_pyappify.get('to_version'), update_pyappify.get('sha256'),
530
- [update_pyappify.get('zip_url')], self.exit_event)
529
+ pyappify.upgrade(
530
+ update_pyappify.get('to_version'),
531
+ update_pyappify.get('sha256'),
532
+ [update_pyappify.get('zip_url')],
533
+ exit_event=self.exit_event,
534
+ )
531
535
  logger.info("Window has fully displayed")
532
536
  from ok import og
533
537
  og.ok.start_runtime()
534
538
  if self.basic_global_config.get(KILL_LAUNCHER_AFTER_START):
535
539
  logger.info(f'MainWindow showEvent Kill Launcher After Start')
536
- pyappify.kill_pyappify()
540
+ pyappify.kill_pyappify(exit_event=self.exit_event)
537
541
  startup_version_change = get_startup_version_change()
538
542
  if self.version != self.main_window_config.get('last_version'):
539
543
  self.main_window_config['last_version'] = self.version
@@ -739,5 +743,5 @@ class MainWindow(FluentWindow):
739
743
  self.executor.destroy()
740
744
  event.accept()
741
745
  if not self.do_not_quit:
742
- pyappify.kill_pyappify()
746
+ pyappify.kill_pyappify(exit_event=self.exit_event)
743
747
  QApplication.instance().exit()
@@ -16,7 +16,7 @@ logger = Logger.get_logger(__name__)
16
16
 
17
17
 
18
18
  class AboutTab(Tab):
19
- def __init__(self, config, pyappify_module=None):
19
+ def __init__(self, config, pyappify_module=None, exit_event=None):
20
20
  super().__init__()
21
21
  if pyappify_module is None:
22
22
  import pyappify as pyappify_module
@@ -28,7 +28,9 @@ class AboutTab(Tab):
28
28
 
29
29
  self.update_card = None
30
30
  if callable(getattr(pyappify_module, 'get_version_list', None)):
31
- self.update_card = UpdateCard(config.get('version'), pyappify_module, self)
31
+ self.update_card = UpdateCard(
32
+ config.get('version'), pyappify_module, self, exit_event=exit_event
33
+ )
32
34
  self.add_card(self.tr("App update"), self.update_card)
33
35
  else:
34
36
  logger.warning(
@@ -51,13 +51,14 @@ class UpdateCard(QWidget):
51
51
  VERSION_COMBO_MIN_WIDTH = 100
52
52
  VERSION_COMBO_MAX_WIDTH = 240
53
53
 
54
- def __init__(self, current_version, pyappify_module, parent=None):
54
+ def __init__(self, current_version, pyappify_module, parent=None, exit_event=None):
55
55
  super().__init__(parent)
56
56
  self.current_version = current_version or getattr(pyappify_module, "app_version", None) or ""
57
57
  if "PYAPPIFY_PYTHON_TEST" in os.environ and not _is_numeric_version(self.current_version):
58
58
  logger.info(f"using v0.0.0 for nonnumeric test version {self.current_version!r}")
59
59
  self.current_version = "v0.0.0"
60
60
  self.pyappify_module = pyappify_module
61
+ self.exit_event = exit_event
61
62
  self.versions = []
62
63
  self._busy = False
63
64
  logger.info(
@@ -125,7 +126,7 @@ class UpdateCard(QWidget):
125
126
  self._set_status(self.tr("Checking for updates…"))
126
127
  release_only = not self.test_version_checkbox.isChecked()
127
128
  self._run_in_background(
128
- lambda: get_versions(release_only=release_only),
129
+ lambda: get_versions(release_only=release_only, exit_event=self.exit_event),
129
130
  self._versions_loaded,
130
131
  f"pyappify.get_version_list(release_only={release_only})",
131
132
  )
@@ -141,7 +142,7 @@ class UpdateCard(QWidget):
141
142
  self._set_busy(True)
142
143
  self._set_status(self.tr("Starting change to {version}…").format(version=version))
143
144
  self._run_in_background(
144
- lambda: update_to_version(version),
145
+ lambda: update_to_version(version, exit_event=self.exit_event),
145
146
  self._update_finished,
146
147
  f"pyappify.update_to_version({version!r})",
147
148
  )
@@ -705,7 +705,9 @@ class WebRuntime:
705
705
  try:
706
706
  module = self.pyappify_module
707
707
  logger.info("calling pyappify.get_version_list(release_only=%s)", release_only)
708
- versions = module.get_version_list(release_only=release_only)
708
+ versions = module.get_version_list(
709
+ release_only=release_only, exit_event=self.ok.exit_event
710
+ )
709
711
  logger.info("pyappify.get_version_list result=%r", versions)
710
712
  if not isinstance(versions, list):
711
713
  raise RuntimeError("PyAppify returned an invalid version list")
@@ -748,7 +750,7 @@ class WebRuntime:
748
750
  if not callable(operation):
749
751
  raise RuntimeError("Updating is not supported by this PyAppify version")
750
752
  logger.info("calling pyappify.update_to_version(%r)", version)
751
- result = operation(version)
753
+ result = operation(version, exit_event=self.ok.exit_event)
752
754
  logger.info("pyappify.update_to_version(%r) result=%r", version, result)
753
755
  return {"accepted": True, "version": version, "result": _json_value(result)}
754
756
  finally:
@@ -1,4 +1,5 @@
1
1
  import argparse
2
+ import glob
2
3
  import os
3
4
  import re
4
5
 
@@ -31,19 +32,6 @@ def _deploy_includes_folder(deploy_entries, folder):
31
32
  return any(entry == folder or entry.startswith(f'{folder}/') for entry in deploy_entries)
32
33
 
33
34
 
34
- def _get_inlined_requirement_folders(repo_dir, inlined_requirements=None):
35
- if inlined_requirements is None:
36
- inlined_requirements = INLINED_REQUIREMENTS
37
- deploy_entries = _read_deploy_entries(repo_dir)
38
- if not deploy_entries:
39
- return []
40
- return [
41
- package_folder
42
- for package_folder in inlined_requirements.values()
43
- if _deploy_includes_folder(deploy_entries, package_folder)
44
- ]
45
-
46
-
47
35
  def _add_folders_to_deploy(repo_dir, folders):
48
36
  deploy_file = os.path.join(repo_dir, 'deploy.txt')
49
37
  deploy_entries = _read_deploy_entries(repo_dir)
@@ -92,13 +80,29 @@ def inline_site_packages(repo_dir, package_folders=None):
92
80
  raise RuntimeError(f'Failed to inline {package_folder} from site-packages')
93
81
 
94
82
 
83
+ def _remove_inlined_requirements(repo_dir, package_names):
84
+ package_names = tuple(package_names)
85
+ if not package_names:
86
+ return
87
+ requirement_pattern = re.compile(
88
+ r'^\s*({})\b'.format('|'.join(re.escape(name) for name in package_names)),
89
+ re.IGNORECASE,
90
+ )
91
+ for file_path in glob.glob(os.path.join(repo_dir, 'requirements*.txt')):
92
+ with open(file_path, 'r', encoding='utf-8') as file:
93
+ lines = file.readlines()
94
+ filtered_lines = [line for line in lines if not requirement_pattern.match(line)]
95
+ with open(file_path, 'w', encoding='utf-8') as file:
96
+ file.writelines(filtered_lines)
97
+
98
+
95
99
  def remove_ok_requirements(repo_dir, tag, additional_inlined_requirements=None):
96
100
  inlined_requirements = dict(INLINED_REQUIREMENTS)
97
101
  if additional_inlined_requirements:
98
102
  inlined_requirements.update(additional_inlined_requirements)
99
- _add_folders_to_deploy(repo_dir, additional_inlined_requirements.values())
100
103
 
101
- package_folders = _get_inlined_requirement_folders(repo_dir, inlined_requirements)
104
+ package_folders = inlined_requirements.values()
105
+ _add_folders_to_deploy(repo_dir, package_folders)
102
106
  inline_site_packages(repo_dir, package_folders)
103
107
 
104
108
  config_file = get_file_in_path_or_cwd(repo_dir, 'config.py')
@@ -108,25 +112,12 @@ def remove_ok_requirements(repo_dir, tag, additional_inlined_requirements=None):
108
112
  with open(config_file, 'w', encoding='utf-8') as file:
109
113
  file.write(new_content)
110
114
 
111
- file_path = os.path.join(repo_dir, 'requirements.txt')
112
- with open(file_path, 'r', encoding='utf-8') as file:
113
- lines = file.readlines()
114
- inlined_packages = [
115
- package_name
116
- for package_name, package_folder in inlined_requirements.items()
117
- if package_folder in package_folders
118
- ]
119
- if inlined_packages:
120
- requirement_pattern = r'^\s*({})\b'.format('|'.join(re.escape(name) for name in inlined_packages))
121
- filtered_lines = [line for line in lines if not re.match(requirement_pattern, line, re.IGNORECASE)]
122
- else:
123
- filtered_lines = lines
124
- with open(file_path, 'w', encoding='utf-8') as file:
125
- file.writelines(filtered_lines)
115
+ _remove_inlined_requirements(repo_dir, inlined_requirements.keys())
116
+
126
117
 
127
118
  def main(argv=None):
128
119
  parser = argparse.ArgumentParser(description='Inline deployment requirements.')
129
- parser.add_argument('--tag', help='Set the application version and remove inlined packages from requirements.txt.')
120
+ parser.add_argument('--tag', help='Set the application version and remove inlined packages from requirements files.')
130
121
  parser.add_argument(
131
122
  '--add-inlined-requirement',
132
123
  action='append',
@@ -145,7 +136,7 @@ def main(argv=None):
145
136
  else:
146
137
  inlined_requirements = dict(INLINED_REQUIREMENTS)
147
138
  inlined_requirements.update(additional_inlined_requirements)
148
- _add_folders_to_deploy(repo_dir, additional_inlined_requirements.values())
139
+ _add_folders_to_deploy(repo_dir, inlined_requirements.values())
149
140
  inline_site_packages(repo_dir, inlined_requirements.values())
150
141
 
151
142
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ok-script
3
- Version: 2.0.0b5
3
+ Version: 2.0.0b7
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
@@ -16,7 +16,7 @@ Requires-Python: >=3.11
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE.txt
18
18
  Requires-Dist: pywin32>=306
19
- Requires-Dist: pyappify>=1.0.6
19
+ Requires-Dist: pyappify>=1.0.9
20
20
  Requires-Dist: typing-extensions>=4.11.0
21
21
  Requires-Dist: requests>=2.32.3
22
22
  Requires-Dist: psutil>=6.0.0
@@ -1,5 +1,5 @@
1
1
  pywin32>=306
2
- pyappify>=1.0.6
2
+ pyappify>=1.0.9
3
3
  typing-extensions>=4.11.0
4
4
  requests>=2.32.3
5
5
  psutil>=6.0.0
@@ -27,7 +27,7 @@ classifiers = [
27
27
  ]
28
28
  dependencies = [
29
29
  "pywin32>=306",
30
- "pyappify>=1.0.6",
30
+ "pyappify>=1.0.9",
31
31
  "typing-extensions>=4.11.0",
32
32
  "requests>=2.32.3",
33
33
  "psutil>=6.0.0",
@@ -11,9 +11,17 @@ def _write_repo_files(repo_dir, deploy_text=None):
11
11
  (repo_dir / "deploy.txt").write_text(deploy_text, encoding="utf-8")
12
12
 
13
13
 
14
- def test_remove_ok_requirements_skips_inline_and_removal_without_deploy_txt(tmp_path, monkeypatch):
14
+ def test_remove_ok_requirements_always_includes_defaults_without_deploy_txt(tmp_path, monkeypatch):
15
15
  copied_folders = []
16
16
  _write_repo_files(tmp_path)
17
+ (tmp_path / "requirements-web.txt").write_text(
18
+ "ok-script==1.0.147\npyappify==1.0.3\nhttpx==0.28.1\n",
19
+ encoding="utf-8",
20
+ )
21
+ (tmp_path / "requirements-dev.txt").write_text(
22
+ "PYAPPIFY==1.0.3\npytest==8.4.1\n",
23
+ encoding="utf-8",
24
+ )
17
25
  monkeypatch.setattr(
18
26
  inline_ok_requirements,
19
27
  "find_and_copy_site_package",
@@ -22,14 +30,21 @@ def test_remove_ok_requirements_skips_inline_and_removal_without_deploy_txt(tmp_
22
30
 
23
31
  inline_ok_requirements.remove_ok_requirements(str(tmp_path), "v1.2.3")
24
32
 
25
- assert copied_folders == []
33
+ assert copied_folders == ["ok", "pyappify"]
26
34
  assert (tmp_path / "requirements.txt").read_text(encoding="utf-8") == (
27
- "ok-script==1.0.147\npyappify==1.0.3\nrequests==2.32.3\n"
35
+ "requests==2.32.3\n"
36
+ )
37
+ assert (tmp_path / "requirements-web.txt").read_text(encoding="utf-8") == (
38
+ "httpx==0.28.1\n"
28
39
  )
40
+ assert (tmp_path / "requirements-dev.txt").read_text(encoding="utf-8") == (
41
+ "pytest==8.4.1\n"
42
+ )
43
+ assert (tmp_path / "deploy.txt").read_text(encoding="utf-8") == "ok\npyappify\n"
29
44
  assert (tmp_path / "config.py").read_text(encoding="utf-8") == 'version = "v1.2.3"\n'
30
45
 
31
46
 
32
- def test_remove_ok_requirements_only_inlines_folders_listed_in_deploy_txt(tmp_path, monkeypatch):
47
+ def test_remove_ok_requirements_adds_missing_defaults_to_deploy_txt(tmp_path, monkeypatch):
33
48
  copied_folders = []
34
49
  _write_repo_files(tmp_path, "src\nok\nrequirements.txt\n")
35
50
  monkeypatch.setattr(
@@ -40,9 +55,12 @@ def test_remove_ok_requirements_only_inlines_folders_listed_in_deploy_txt(tmp_pa
40
55
 
41
56
  inline_ok_requirements.remove_ok_requirements(str(tmp_path), "v1.2.3")
42
57
 
43
- assert copied_folders == ["ok"]
58
+ assert copied_folders == ["ok", "pyappify"]
44
59
  assert (tmp_path / "requirements.txt").read_text(encoding="utf-8") == (
45
- "pyappify==1.0.3\nrequests==2.32.3\n"
60
+ "requests==2.32.3\n"
61
+ )
62
+ assert (tmp_path / "deploy.txt").read_text(encoding="utf-8") == (
63
+ "src\nok\nrequirements.txt\npyappify\n"
46
64
  )
47
65
 
48
66
 
@@ -57,10 +75,11 @@ def test_remove_ok_requirements_matches_deploy_subpaths(tmp_path, monkeypatch):
57
75
 
58
76
  inline_ok_requirements.remove_ok_requirements(str(tmp_path), "v1.2.3")
59
77
 
60
- assert copied_folders == ["pyappify"]
78
+ assert copied_folders == ["ok", "pyappify"]
61
79
  assert (tmp_path / "requirements.txt").read_text(encoding="utf-8") == (
62
- "ok-script==1.0.147\nrequests==2.32.3\n"
80
+ "requests==2.32.3\n"
63
81
  )
82
+ assert (tmp_path / "deploy.txt").read_text(encoding="utf-8") == "pyappify/main.py\nok\n"
64
83
 
65
84
 
66
85
  def test_additional_inlined_requirement_is_added_to_deploy_and_removed(tmp_path, monkeypatch):
@@ -82,8 +101,10 @@ def test_additional_inlined_requirement_is_added_to_deploy_and_removed(tmp_path,
82
101
  "custom-package=custom_package",
83
102
  ])
84
103
 
85
- assert copied_folders == ["custom_package"]
86
- assert (tmp_path / "deploy.txt").read_text(encoding="utf-8") == "src\ncustom_package\n"
104
+ assert copied_folders == ["ok", "pyappify", "custom_package"]
105
+ assert (tmp_path / "deploy.txt").read_text(encoding="utf-8") == (
106
+ "src\nok\npyappify\ncustom_package\n"
107
+ )
87
108
  assert "custom-package" not in (tmp_path / "requirements.txt").read_text(encoding="utf-8")
88
109
 
89
110
 
@@ -104,5 +125,7 @@ def test_additional_inlined_requirement_does_not_duplicate_deploy_subpath(tmp_pa
104
125
  {"custom-package": "custom_package"},
105
126
  )
106
127
 
107
- assert copied_folders == ["custom_package"]
108
- assert (tmp_path / "deploy.txt").read_text(encoding="utf-8") == "custom_package/main.py\n"
128
+ assert copied_folders == ["ok", "pyappify", "custom_package"]
129
+ assert (tmp_path / "deploy.txt").read_text(encoding="utf-8") == (
130
+ "custom_package/main.py\nok\npyappify\n"
131
+ )
@@ -299,6 +299,7 @@ class TestPyappifyStartupUpdate(unittest.TestCase):
299
299
 
300
300
  def test_check_test_version_controls_release_filter(self):
301
301
  os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
302
+ import threading
302
303
  import time
303
304
  from PySide6.QtWidgets import QApplication
304
305
  from ok.ui.qt.about.UpdateCard import UpdateCard
@@ -308,7 +309,8 @@ class TestPyappifyStartupUpdate(unittest.TestCase):
308
309
  get_version_list=Mock(return_value=[]),
309
310
  is_greater_version=lambda left, right: self._version_tuple(left) > self._version_tuple(right),
310
311
  )
311
- card = UpdateCard("v1.0.0", module)
312
+ exit_event = threading.Event()
313
+ card = UpdateCard("v1.0.0", module, exit_event=exit_event)
312
314
 
313
315
  for checked, expected_release_only in ((False, True), (True, False)):
314
316
  card.test_version_checkbox.setChecked(checked)
@@ -320,6 +322,7 @@ class TestPyappifyStartupUpdate(unittest.TestCase):
320
322
  time.sleep(0.01)
321
323
  self.assertFalse(card._busy)
322
324
  self.assertEqual(expected_release_only, module.get_version_list.call_args.kwargs["release_only"])
325
+ self.assertIs(exit_event, module.get_version_list.call_args.kwargs["exit_event"])
323
326
 
324
327
  card.deleteLater()
325
328
  app.processEvents()
@@ -369,6 +372,36 @@ class TestPyappifyStartupUpdate(unittest.TestCase):
369
372
  card.deleteLater()
370
373
  app.processEvents()
371
374
 
375
+ def test_update_to_version_receives_exit_event(self):
376
+ os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
377
+ import threading
378
+ import time
379
+ from PySide6.QtWidgets import QApplication
380
+ from ok.ui.qt.about.UpdateCard import UpdateCard
381
+
382
+ app = QApplication.instance() or QApplication([])
383
+ exit_event = threading.Event()
384
+ update_to_version = Mock(return_value={"updated": True, "version": "v1.1.0"})
385
+ module = SimpleNamespace(
386
+ update_to_version=update_to_version,
387
+ is_greater_version=lambda left, right: self._version_tuple(left) > self._version_tuple(right),
388
+ calculate_update_notes=self._calculate_update_notes,
389
+ )
390
+ card = UpdateCard("v1.0.0", module, exit_event=exit_event)
391
+ card._apply_versions((True, [{"version": "v1.1.0", "update_note": ["one"]}]))
392
+
393
+ card.update_to_selected_version()
394
+ for _ in range(100):
395
+ app.processEvents()
396
+ if not card._busy:
397
+ break
398
+ time.sleep(0.01)
399
+
400
+ self.assertFalse(card._busy)
401
+ update_to_version.assert_called_once_with("v1.1.0", exit_event=exit_event)
402
+ card.deleteLater()
403
+ app.processEvents()
404
+
372
405
  def test_failed_request_shows_visible_error(self):
373
406
  os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
374
407
  import time
@@ -31,6 +31,7 @@ def make_runtime(tmp_path):
31
31
  config={"gui_title": "Test App", "version": "1.2.3", "debug": False, "links": {"github": "https://example.test"}},
32
32
  task_manager=manager,
33
33
  task_executor=SimpleNamespace(get_all_tasks=lambda: [], onetime_tasks=[], trigger_tasks=[]),
34
+ exit_event=Mock(),
34
35
  )
35
36
  runtime.icon_url = "/static/app-icon.png"
36
37
  runtime._schedule_manager = None
@@ -107,7 +108,7 @@ def test_web_update_check_returns_calculated_notes_in_one_result(tmp_path):
107
108
 
108
109
  result = runtime.check_for_updates(release_only=False)
109
110
 
110
- get_versions.assert_called_once_with(release_only=False)
111
+ get_versions.assert_called_once_with(release_only=False, exit_event=runtime.ok.exit_event)
111
112
  assert result["current_version"] == "1.2.3"
112
113
  assert result["update_available"] is True
113
114
  assert result["versions"][0] == {"version": "v1.2.5", "notes": ["five", "four", "three"]}
@@ -120,7 +121,7 @@ def test_web_update_request_calls_pyappify(tmp_path):
120
121
 
121
122
  result = runtime.update_to_version("v1.2.4")
122
123
 
123
- update.assert_called_once_with("v1.2.4")
124
+ update.assert_called_once_with("v1.2.4", exit_event=runtime.ok.exit_event)
124
125
  assert result["accepted"] is True
125
126
  assert result["version"] == "v1.2.4"
126
127
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes