pytron-kit 0.3.12__py3-none-macosx_11_0_universal2.whl

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 (419) hide show
  1. pytron/__init__.py +112 -0
  2. pytron/application.py +562 -0
  3. pytron/apputils/__init__.py +0 -0
  4. pytron/apputils/chrome_ipc.py +203 -0
  5. pytron/apputils/codegen.py +261 -0
  6. pytron/apputils/config.py +303 -0
  7. pytron/apputils/deadmansswitch.py +47 -0
  8. pytron/apputils/extras.py +76 -0
  9. pytron/apputils/native.py +148 -0
  10. pytron/apputils/shell.py +73 -0
  11. pytron/apputils/windows.py +286 -0
  12. pytron/cli.py +384 -0
  13. pytron/commands/__init__.py +0 -0
  14. pytron/commands/android.py +28 -0
  15. pytron/commands/build.py +26 -0
  16. pytron/commands/doctor.py +221 -0
  17. pytron/commands/engine.py +23 -0
  18. pytron/commands/frontend.py +60 -0
  19. pytron/commands/harvest.py +112 -0
  20. pytron/commands/helpers.py +239 -0
  21. pytron/commands/info.py +50 -0
  22. pytron/commands/init.py +521 -0
  23. pytron/commands/install.py +294 -0
  24. pytron/commands/login.py +130 -0
  25. pytron/commands/package.py +228 -0
  26. pytron/commands/plugin.py +442 -0
  27. pytron/commands/run.py +312 -0
  28. pytron/commands/scan.py +210 -0
  29. pytron/commands/show.py +23 -0
  30. pytron/commands/uninstall.py +150 -0
  31. pytron/commands/utils.py +42 -0
  32. pytron/commands/workflow.py +95 -0
  33. pytron/console.py +133 -0
  34. pytron/core.py +18 -0
  35. pytron/dependencies/WebView2Loader.dll +0 -0
  36. pytron/dependencies/__init__.py +1 -0
  37. pytron/dependencies/pytron_native.so +0 -0
  38. pytron/engines/chrome/adapter.py +445 -0
  39. pytron/engines/chrome/engine.py +576 -0
  40. pytron/engines/chrome/forge.py +147 -0
  41. pytron/engines/chrome/shell/package.json +8 -0
  42. pytron/engines/chrome/shell/preload.js +12 -0
  43. pytron/engines/chrome/shell/shell.js +534 -0
  44. pytron/exceptions.py +36 -0
  45. pytron/inspector.py +201 -0
  46. pytron/inspector_ui.py +512 -0
  47. pytron/installer/Installation.nsi +236 -0
  48. pytron/installer/header.bmp +0 -0
  49. pytron/installer/pytron.ico +0 -0
  50. pytron/installer/sidebar.bmp +0 -0
  51. pytron/llms.md +98 -0
  52. pytron/manifests/README.md +29 -0
  53. pytron/manifests/windows-utf8.manifest +44 -0
  54. pytron/menu.py +128 -0
  55. pytron/nsis-setup.exe +0 -0
  56. pytron/pack/__init__.py +0 -0
  57. pytron/pack/assets.py +131 -0
  58. pytron/pack/compilers.py +289 -0
  59. pytron/pack/crystal.py +297 -0
  60. pytron/pack/graph.py +377 -0
  61. pytron/pack/inference.py +157 -0
  62. pytron/pack/installers.py +402 -0
  63. pytron/pack/introspect.py +357 -0
  64. pytron/pack/metadata.py +213 -0
  65. pytron/pack/modules.py +618 -0
  66. pytron/pack/nuitka.py +108 -0
  67. pytron/pack/pipeline.py +107 -0
  68. pytron/pack/pyinstaller.py +176 -0
  69. pytron/pack/rust_engine.py +273 -0
  70. pytron/pack/secure.py +309 -0
  71. pytron/pack/secure_loader/bin/pytron_rust_bootloader +0 -0
  72. pytron/pack/secure_loader/icon.ico +0 -0
  73. pytron/pack/utils.py +110 -0
  74. pytron/pack/virtual_root.py +124 -0
  75. pytron/platforms/__init__.py +0 -0
  76. pytron/platforms/android/__init__.py +3 -0
  77. pytron/platforms/android/android.py +103 -0
  78. pytron/platforms/android/builder.py +736 -0
  79. pytron/platforms/android/ops/build.py +79 -0
  80. pytron/platforms/android/ops/init.py +63 -0
  81. pytron/platforms/android/ops/run.py +79 -0
  82. pytron/platforms/android/ops/sync.py +770 -0
  83. pytron/platforms/android/ops/utils.py +8 -0
  84. pytron/platforms/android/shell/README.md +30 -0
  85. pytron/platforms/android/shell/app/build.gradle +64 -0
  86. pytron/platforms/android/shell/app/src/main/AndroidManifest.xml +29 -0
  87. pytron/platforms/android/shell/app/src/main/assets/python/main.py +86 -0
  88. pytron/platforms/android/shell/app/src/main/assets/python/python314.zip +0 -0
  89. pytron/platforms/android/shell/app/src/main/cpp/CMakeLists.txt +25 -0
  90. pytron/platforms/android/shell/app/src/main/cpp/include/Python.h +155 -0
  91. pytron/platforms/android/shell/app/src/main/cpp/include/abstract.h +915 -0
  92. pytron/platforms/android/shell/app/src/main/cpp/include/audit.h +30 -0
  93. pytron/platforms/android/shell/app/src/main/cpp/include/bltinmodule.h +14 -0
  94. pytron/platforms/android/shell/app/src/main/cpp/include/boolobject.h +54 -0
  95. pytron/platforms/android/shell/app/src/main/cpp/include/bytearrayobject.h +44 -0
  96. pytron/platforms/android/shell/app/src/main/cpp/include/bytesobject.h +66 -0
  97. pytron/platforms/android/shell/app/src/main/cpp/include/ceval.h +145 -0
  98. pytron/platforms/android/shell/app/src/main/cpp/include/codecs.h +176 -0
  99. pytron/platforms/android/shell/app/src/main/cpp/include/compile.h +22 -0
  100. pytron/platforms/android/shell/app/src/main/cpp/include/complexobject.h +30 -0
  101. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/abstract.h +104 -0
  102. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/audit.h +8 -0
  103. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/bytearrayobject.h +38 -0
  104. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/bytesobject.h +42 -0
  105. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/cellobject.h +50 -0
  106. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/ceval.h +43 -0
  107. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/classobject.h +71 -0
  108. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/code.h +340 -0
  109. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/compile.h +50 -0
  110. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/complexobject.h +33 -0
  111. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/context.h +107 -0
  112. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/critical_section.h +154 -0
  113. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/descrobject.h +62 -0
  114. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/dictobject.h +105 -0
  115. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/fileobject.h +16 -0
  116. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/fileutils.h +16 -0
  117. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/floatobject.h +27 -0
  118. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/frameobject.h +35 -0
  119. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/funcobject.h +185 -0
  120. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/genobject.h +56 -0
  121. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/import.h +30 -0
  122. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/initconfig.h +334 -0
  123. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/listobject.h +53 -0
  124. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/lock.h +74 -0
  125. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/longintrepr.h +184 -0
  126. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/longobject.h +89 -0
  127. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/memoryobject.h +50 -0
  128. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/methodobject.h +66 -0
  129. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/modsupport.h +26 -0
  130. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/monitoring.h +269 -0
  131. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/object.h +493 -0
  132. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/objimpl.h +104 -0
  133. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/odictobject.h +43 -0
  134. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/picklebufobject.h +31 -0
  135. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pthread_stubs.h +105 -0
  136. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic.h +614 -0
  137. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_gcc.h +615 -0
  138. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_msc.h +1197 -0
  139. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyatomic_std.h +1112 -0
  140. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyctype.h +39 -0
  141. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pydebug.h +38 -0
  142. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyerrors.h +132 -0
  143. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyfpe.h +15 -0
  144. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyframe.h +45 -0
  145. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pyhash.h +54 -0
  146. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pylifecycle.h +89 -0
  147. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pymem.h +84 -0
  148. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pystate.h +275 -0
  149. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pystats.h +194 -0
  150. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pythonrun.h +96 -0
  151. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pythread.h +43 -0
  152. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/pytime.h +27 -0
  153. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/setobject.h +71 -0
  154. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/traceback.h +13 -0
  155. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/tracemalloc.h +32 -0
  156. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/tupleobject.h +40 -0
  157. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/unicodeobject.h +773 -0
  158. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/warnings.h +20 -0
  159. pytron/platforms/android/shell/app/src/main/cpp/include/cpython/weakrefobject.h +66 -0
  160. pytron/platforms/android/shell/app/src/main/cpp/include/critical_section.h +16 -0
  161. pytron/platforms/android/shell/app/src/main/cpp/include/datetime.h +267 -0
  162. pytron/platforms/android/shell/app/src/main/cpp/include/descrobject.h +100 -0
  163. pytron/platforms/android/shell/app/src/main/cpp/include/dictobject.h +108 -0
  164. pytron/platforms/android/shell/app/src/main/cpp/include/dynamic_annotations.h +499 -0
  165. pytron/platforms/android/shell/app/src/main/cpp/include/enumobject.h +17 -0
  166. pytron/platforms/android/shell/app/src/main/cpp/include/errcode.h +45 -0
  167. pytron/platforms/android/shell/app/src/main/cpp/include/exports.h +105 -0
  168. pytron/platforms/android/shell/app/src/main/cpp/include/fileobject.h +41 -0
  169. pytron/platforms/android/shell/app/src/main/cpp/include/fileutils.h +62 -0
  170. pytron/platforms/android/shell/app/src/main/cpp/include/floatobject.h +54 -0
  171. pytron/platforms/android/shell/app/src/main/cpp/include/frameobject.h +20 -0
  172. pytron/platforms/android/shell/app/src/main/cpp/include/genericaliasobject.h +14 -0
  173. pytron/platforms/android/shell/app/src/main/cpp/include/import.h +103 -0
  174. pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/atomic.h +392 -0
  175. pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/internal.h +969 -0
  176. pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/prim.h +329 -0
  177. pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/track.h +147 -0
  178. pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc/types.h +721 -0
  179. pytron/platforms/android/shell/app/src/main/cpp/include/internal/mimalloc/mimalloc.h +565 -0
  180. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_abstract.h +61 -0
  181. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_asdl.h +112 -0
  182. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ast.h +945 -0
  183. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ast_state.h +271 -0
  184. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_atexit.h +31 -0
  185. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_audit.h +35 -0
  186. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_backoff.h +133 -0
  187. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bitutils.h +186 -0
  188. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_blocks_output_buffer.h +321 -0
  189. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_brc.h +73 -0
  190. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bytes_methods.h +82 -0
  191. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_bytesobject.h +149 -0
  192. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_c_array.h +39 -0
  193. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_call.h +206 -0
  194. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_capsule.h +17 -0
  195. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_cell.h +75 -0
  196. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ceval.h +390 -0
  197. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ceval_state.h +48 -0
  198. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_code.h +671 -0
  199. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_codecs.h +76 -0
  200. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_compile.h +230 -0
  201. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_complexobject.h +34 -0
  202. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_condvar.h +93 -0
  203. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_context.h +59 -0
  204. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_critical_section.h +237 -0
  205. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_crossinterp.h +406 -0
  206. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_crossinterp_data_registry.h +41 -0
  207. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_debug_offsets.h +379 -0
  208. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_descrobject.h +28 -0
  209. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dict.h +410 -0
  210. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dict_state.h +28 -0
  211. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_dtoa.h +40 -0
  212. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_emscripten_signal.h +30 -0
  213. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_emscripten_trampoline.h +70 -0
  214. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_exceptions.h +40 -0
  215. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_faulthandler.h +100 -0
  216. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_fileutils.h +320 -0
  217. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_fileutils_windows.h +98 -0
  218. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_floatobject.h +49 -0
  219. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_flowgraph.h +47 -0
  220. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_format.h +27 -0
  221. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_frame.h +61 -0
  222. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_freelist.h +111 -0
  223. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_freelist_state.h +70 -0
  224. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_function.h +53 -0
  225. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_gc.h +378 -0
  226. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_genobject.h +43 -0
  227. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_getopt.h +22 -0
  228. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_gil.h +66 -0
  229. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_objects.h +34 -0
  230. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_objects_fini_generated.h +1592 -0
  231. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_global_strings.h +854 -0
  232. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_hamt.h +113 -0
  233. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_hashtable.h +150 -0
  234. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_import.h +141 -0
  235. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_importdl.h +139 -0
  236. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_index_pool.h +36 -0
  237. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_initconfig.h +197 -0
  238. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_instruction_sequence.h +83 -0
  239. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_instruments.h +127 -0
  240. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interp.h +109 -0
  241. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interp_structs.h +977 -0
  242. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpframe.h +401 -0
  243. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpframe_structs.h +95 -0
  244. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_interpolation.h +26 -0
  245. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_intrinsics.h +51 -0
  246. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_jit.h +29 -0
  247. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_list.h +81 -0
  248. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_llist.h +106 -0
  249. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_lock.h +236 -0
  250. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_long.h +319 -0
  251. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_magic_number.h +305 -0
  252. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_memoryobject.h +20 -0
  253. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_mimalloc.h +69 -0
  254. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_modsupport.h +99 -0
  255. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_moduleobject.h +62 -0
  256. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_namespace.h +21 -0
  257. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object.h +1029 -0
  258. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_alloc.h +71 -0
  259. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_deferred.h +32 -0
  260. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_stack.h +95 -0
  261. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_object_state.h +49 -0
  262. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_obmalloc.h +702 -0
  263. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_obmalloc_init.h +66 -0
  264. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_opcode_metadata.h +2117 -0
  265. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_opcode_utils.h +90 -0
  266. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_optimizer.h +318 -0
  267. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_parking_lot.h +97 -0
  268. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_parser.h +78 -0
  269. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pathconfig.h +26 -0
  270. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyarena.h +68 -0
  271. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyatomic_ft_wrappers.h +174 -0
  272. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pybuffer.h +21 -0
  273. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyerrors.h +213 -0
  274. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pyhash.h +91 -0
  275. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pylifecycle.h +136 -0
  276. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymath.h +205 -0
  277. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymem.h +145 -0
  278. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pymem_init.h +103 -0
  279. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pystate.h +339 -0
  280. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pystats.h +21 -0
  281. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pythonrun.h +68 -0
  282. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_pythread.h +172 -0
  283. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_qsbr.h +172 -0
  284. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_range.h +21 -0
  285. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime.h +63 -0
  286. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_init.h +239 -0
  287. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_init_generated.h +1589 -0
  288. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_runtime_structs.h +310 -0
  289. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_semaphore.h +67 -0
  290. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_setobject.h +41 -0
  291. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_signal.h +108 -0
  292. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_sliceobject.h +20 -0
  293. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_stackref.h +791 -0
  294. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_stats.h +97 -0
  295. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_strhex.h +39 -0
  296. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_structs.h +88 -0
  297. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_structseq.h +40 -0
  298. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_symtable.h +201 -0
  299. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_sysmodule.h +32 -0
  300. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_template.h +26 -0
  301. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_time.h +334 -0
  302. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_token.h +110 -0
  303. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_traceback.h +111 -0
  304. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tracemalloc.h +164 -0
  305. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tstate.h +88 -0
  306. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_tuple.h +75 -0
  307. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typedefs.h +18 -0
  308. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typeobject.h +155 -0
  309. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_typevarobject.h +28 -0
  310. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_ucnhash.h +36 -0
  311. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unicodeobject.h +308 -0
  312. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unicodeobject_generated.h +3132 -0
  313. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_unionobject.h +26 -0
  314. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uniqueid.h +57 -0
  315. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uop_ids.h +335 -0
  316. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_uop_metadata.h +1204 -0
  317. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_warnings.h +21 -0
  318. pytron/platforms/android/shell/app/src/main/cpp/include/internal/pycore_weakref.h +133 -0
  319. pytron/platforms/android/shell/app/src/main/cpp/include/intrcheck.h +23 -0
  320. pytron/platforms/android/shell/app/src/main/cpp/include/iterobject.h +24 -0
  321. pytron/platforms/android/shell/app/src/main/cpp/include/listobject.h +55 -0
  322. pytron/platforms/android/shell/app/src/main/cpp/include/lock.h +16 -0
  323. pytron/platforms/android/shell/app/src/main/cpp/include/longobject.h +178 -0
  324. pytron/platforms/android/shell/app/src/main/cpp/include/marshal.h +31 -0
  325. pytron/platforms/android/shell/app/src/main/cpp/include/memoryobject.h +34 -0
  326. pytron/platforms/android/shell/app/src/main/cpp/include/methodobject.h +146 -0
  327. pytron/platforms/android/shell/app/src/main/cpp/include/modsupport.h +146 -0
  328. pytron/platforms/android/shell/app/src/main/cpp/include/moduleobject.h +122 -0
  329. pytron/platforms/android/shell/app/src/main/cpp/include/monitoring.h +18 -0
  330. pytron/platforms/android/shell/app/src/main/cpp/include/object.h +828 -0
  331. pytron/platforms/android/shell/app/src/main/cpp/include/objimpl.h +211 -0
  332. pytron/platforms/android/shell/app/src/main/cpp/include/opcode.h +43 -0
  333. pytron/platforms/android/shell/app/src/main/cpp/include/opcode_ids.h +259 -0
  334. pytron/platforms/android/shell/app/src/main/cpp/include/osdefs.h +57 -0
  335. pytron/platforms/android/shell/app/src/main/cpp/include/osmodule.h +17 -0
  336. pytron/platforms/android/shell/app/src/main/cpp/include/patchlevel.h +49 -0
  337. pytron/platforms/android/shell/app/src/main/cpp/include/py_curses.h +117 -0
  338. pytron/platforms/android/shell/app/src/main/cpp/include/pyatomic.h +16 -0
  339. pytron/platforms/android/shell/app/src/main/cpp/include/pybuffer.h +145 -0
  340. pytron/platforms/android/shell/app/src/main/cpp/include/pycapsule.h +58 -0
  341. pytron/platforms/android/shell/app/src/main/cpp/include/pyconfig.h +2088 -0
  342. pytron/platforms/android/shell/app/src/main/cpp/include/pydtrace.h +59 -0
  343. pytron/platforms/android/shell/app/src/main/cpp/include/pyerrors.h +335 -0
  344. pytron/platforms/android/shell/app/src/main/cpp/include/pyexpat.h +62 -0
  345. pytron/platforms/android/shell/app/src/main/cpp/include/pyframe.h +26 -0
  346. pytron/platforms/android/shell/app/src/main/cpp/include/pyhash.h +59 -0
  347. pytron/platforms/android/shell/app/src/main/cpp/include/pylifecycle.h +80 -0
  348. pytron/platforms/android/shell/app/src/main/cpp/include/pymacconfig.h +91 -0
  349. pytron/platforms/android/shell/app/src/main/cpp/include/pymacro.h +243 -0
  350. pytron/platforms/android/shell/app/src/main/cpp/include/pymath.h +65 -0
  351. pytron/platforms/android/shell/app/src/main/cpp/include/pymem.h +110 -0
  352. pytron/platforms/android/shell/app/src/main/cpp/include/pyport.h +710 -0
  353. pytron/platforms/android/shell/app/src/main/cpp/include/pystate.h +132 -0
  354. pytron/platforms/android/shell/app/src/main/cpp/include/pystats.h +28 -0
  355. pytron/platforms/android/shell/app/src/main/cpp/include/pystrcmp.h +23 -0
  356. pytron/platforms/android/shell/app/src/main/cpp/include/pystrtod.h +37 -0
  357. pytron/platforms/android/shell/app/src/main/cpp/include/pythonrun.h +42 -0
  358. pytron/platforms/android/shell/app/src/main/cpp/include/pythread.h +131 -0
  359. pytron/platforms/android/shell/app/src/main/cpp/include/pytypedefs.h +30 -0
  360. pytron/platforms/android/shell/app/src/main/cpp/include/rangeobject.h +27 -0
  361. pytron/platforms/android/shell/app/src/main/cpp/include/refcount.h +555 -0
  362. pytron/platforms/android/shell/app/src/main/cpp/include/setobject.h +49 -0
  363. pytron/platforms/android/shell/app/src/main/cpp/include/sliceobject.h +69 -0
  364. pytron/platforms/android/shell/app/src/main/cpp/include/structmember.h +56 -0
  365. pytron/platforms/android/shell/app/src/main/cpp/include/structseq.h +46 -0
  366. pytron/platforms/android/shell/app/src/main/cpp/include/sysmodule.h +27 -0
  367. pytron/platforms/android/shell/app/src/main/cpp/include/traceback.h +26 -0
  368. pytron/platforms/android/shell/app/src/main/cpp/include/tupleobject.h +46 -0
  369. pytron/platforms/android/shell/app/src/main/cpp/include/typeslots.h +96 -0
  370. pytron/platforms/android/shell/app/src/main/cpp/include/unicodeobject.h +1029 -0
  371. pytron/platforms/android/shell/app/src/main/cpp/include/warnings.h +45 -0
  372. pytron/platforms/android/shell/app/src/main/cpp/include/weakrefobject.h +46 -0
  373. pytron/platforms/android/shell/app/src/main/cpp/pytron_bridge.cpp +224 -0
  374. pytron/platforms/android/shell/app/src/main/java/com/pytron/shell/MainActivity.kt +208 -0
  375. pytron/platforms/android/shell/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  376. pytron/platforms/android/shell/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  377. pytron/platforms/android/shell/build.gradle +11 -0
  378. pytron/platforms/android/shell/gradle/wrapper/gradle-wrapper.jar +0 -0
  379. pytron/platforms/android/shell/gradle/wrapper/gradle-wrapper.properties +5 -0
  380. pytron/platforms/android/shell/gradle.properties +2 -0
  381. pytron/platforms/android/shell/gradlew.bat +85 -0
  382. pytron/platforms/android/shell/settings.gradle +16 -0
  383. pytron/platforms/darwin.py +82 -0
  384. pytron/platforms/darwin_ops/libs.py +31 -0
  385. pytron/platforms/darwin_ops/system.py +182 -0
  386. pytron/platforms/darwin_ops/utils.py +85 -0
  387. pytron/platforms/darwin_ops/webview.py +5 -0
  388. pytron/platforms/darwin_ops/window.py +102 -0
  389. pytron/platforms/interface.py +152 -0
  390. pytron/platforms/linux.py +82 -0
  391. pytron/platforms/linux_ops/libs.py +49 -0
  392. pytron/platforms/linux_ops/system.py +316 -0
  393. pytron/platforms/linux_ops/utils.py +19 -0
  394. pytron/platforms/linux_ops/webview.py +5 -0
  395. pytron/platforms/linux_ops/window.py +115 -0
  396. pytron/platforms/windows.py +136 -0
  397. pytron/platforms/windows_ops/__init__.py +0 -0
  398. pytron/platforms/windows_ops/constants.py +126 -0
  399. pytron/platforms/windows_ops/system.py +518 -0
  400. pytron/platforms/windows_ops/utils.py +3 -0
  401. pytron/platforms/windows_ops/webview.py +5 -0
  402. pytron/platforms/windows_ops/window.py +361 -0
  403. pytron/plugin.py +467 -0
  404. pytron/rcedit-x64.exe +0 -0
  405. pytron/router.py +146 -0
  406. pytron/serializer.py +240 -0
  407. pytron/shortcuts.py +279 -0
  408. pytron/state.py +76 -0
  409. pytron/tray.py +399 -0
  410. pytron/updater.py +181 -0
  411. pytron/utf8_hook.py +112 -0
  412. pytron/utils.py +44 -0
  413. pytron/webview.py +722 -0
  414. pytron_kit-0.3.12.dist-info/METADATA +131 -0
  415. pytron_kit-0.3.12.dist-info/RECORD +419 -0
  416. pytron_kit-0.3.12.dist-info/WHEEL +5 -0
  417. pytron_kit-0.3.12.dist-info/entry_points.txt +2 -0
  418. pytron_kit-0.3.12.dist-info/licenses/LICENSE +201 -0
  419. pytron_kit-0.3.12.dist-info/top_level.txt +1 -0
@@ -0,0 +1,82 @@
1
+ from .interface import PlatformInterface
2
+ from .linux_ops import window, system, libs
3
+
4
+
5
+ class LinuxImplementation(PlatformInterface):
6
+ def __init__(self):
7
+ # Libraries are loaded by linux_ops.libs on import
8
+ if not libs.gtk:
9
+ print("Pytron Warning: GTK3 not found. Window controls may fail.")
10
+
11
+ def minimize(self, w):
12
+ window.minimize(w)
13
+
14
+ def center(self, w):
15
+ window.center(w)
16
+
17
+ def set_bounds(self, w, x, y, width, height):
18
+ window.set_bounds(w, x, y, width, height)
19
+
20
+ def close(self, w):
21
+ window.close(w)
22
+
23
+ def toggle_maximize(self, w):
24
+ return window.toggle_maximize(w)
25
+
26
+ def make_frameless(self, w):
27
+ window.make_frameless(w)
28
+
29
+ def start_drag(self, w):
30
+ window.start_drag(w)
31
+
32
+ def message_box(self, w, title, message, style=0):
33
+ return system.message_box(w, title, message, style)
34
+
35
+ def hide(self, w):
36
+ window.hide(w)
37
+
38
+ def is_visible(self, w):
39
+ return window.is_visible(w)
40
+
41
+ def is_alive(self, w):
42
+ # A simple check for Linux/GTK is to see if the widget still has a window
43
+ win = window.get_window(w)
44
+ return bool(win and win != 0)
45
+
46
+ def show(self, w):
47
+ window.show(w)
48
+
49
+ def set_fullscreen(self, w, fullscreen):
50
+ window.set_fullscreen(w, fullscreen)
51
+
52
+ def set_always_on_top(self, w, enable):
53
+ window.set_always_on_top(w, enable)
54
+
55
+ def notification(self, w, title, message, icon=None):
56
+ system.notification(w, title, message, icon)
57
+
58
+ def open_file_dialog(self, w, title, default_path=None, file_types=None):
59
+ return system.open_file_dialog(w, title, default_path, file_types)
60
+
61
+ def save_file_dialog(
62
+ self, w, title, default_path=None, default_name=None, file_types=None
63
+ ):
64
+ return system.save_file_dialog(w, title, default_path, default_name, file_types)
65
+
66
+ def open_folder_dialog(self, w, title, default_path=None):
67
+ return system.open_folder_dialog(w, title, default_path)
68
+
69
+ def set_taskbar_progress(self, w, state="normal", value=0, max_value=100):
70
+ system.set_taskbar_progress(w, state, value, max_value)
71
+
72
+ def set_window_icon(self, w, icon_path):
73
+ window.set_window_icon(w, icon_path)
74
+
75
+ def set_app_id(self, app_id):
76
+ system.set_app_id(app_id)
77
+
78
+ def set_launch_on_boot(self, app_name, exe_path, enable=True):
79
+ return system.set_launch_on_boot(app_name, exe_path, enable)
80
+
81
+ def register_protocol(self, scheme):
82
+ return system.register_protocol(scheme)
@@ -0,0 +1,49 @@
1
+ import ctypes
2
+
3
+ gtk = None
4
+ webkit = None
5
+ glib = None
6
+ gio = None
7
+
8
+
9
+ def load_libs():
10
+ global gtk, webkit, glib, gio
11
+
12
+ # Load GTK
13
+ if not gtk:
14
+ try:
15
+ gtk = ctypes.CDLL("libgtk-3.so.0")
16
+ except OSError:
17
+ try:
18
+ gtk = ctypes.CDLL("libgtk-3.so")
19
+ except OSError:
20
+ pass
21
+
22
+ # Load WebKit
23
+ if not webkit:
24
+ try:
25
+ webkit = ctypes.CDLL("libwebkit2gtk-4.1.so.0")
26
+ except OSError:
27
+ try:
28
+ webkit = ctypes.CDLL("libwebkit2gtk-4.0.so.37")
29
+ except OSError:
30
+ pass
31
+
32
+ # Load GLib
33
+ if not glib:
34
+ try:
35
+ glib = ctypes.CDLL("libglib-2.0.so.0")
36
+ except OSError:
37
+ pass
38
+
39
+ # Load Gio
40
+ if not gio:
41
+ try:
42
+ gio = ctypes.CDLL("libgio-2.0.so.0")
43
+ except OSError:
44
+ pass
45
+
46
+
47
+ # Initialize on import? Or let the facade call it?
48
+ # Let's initialize on import for simplicity, or lazily.
49
+ load_libs()
@@ -0,0 +1,316 @@
1
+ import subprocess
2
+ import os
3
+ import shutil
4
+ import ctypes
5
+ from . import libs
6
+
7
+
8
+ def message_box(w, title, message, style=0):
9
+ # Styles: 0=OK, 1=OK/cancel, 4=Yes/No
10
+ # Return: 1=OK, 2=Cancel, 6=Yes, 7=No
11
+
12
+ try:
13
+ # TRY ZENITY (Common on GNOME/Ubuntu)
14
+ args = ["zenity", "--title=" + title, "--text=" + message]
15
+ if style == 4:
16
+ args.append("--question")
17
+ elif style == 1: # OK/Cancel treated as Question for Zenity roughly
18
+ args.append("--question")
19
+ else:
20
+ args.append("--info")
21
+
22
+ subprocess.check_call(args)
23
+ return 6 if style == 4 else 1 # Success (Yes or OK)
24
+ except subprocess.CalledProcessError:
25
+ return 7 if style == 4 else 2 # Failure/Cancel (No or Cancel)
26
+ except FileNotFoundError:
27
+ # TRY KDIALOG (KDE)
28
+ try:
29
+ kdialog = shutil.which("kdialog") or "kdialog"
30
+ args = [kdialog, "--title", title]
31
+ if style == 4:
32
+ args += ["--yesno", message]
33
+ else:
34
+ args += ["--msgbox", message]
35
+
36
+ subprocess.check_call(args)
37
+ return 6 if style == 4 else 1
38
+ except Exception:
39
+ # If neither, just allow it (dev env probably?) or log warning
40
+ print("Pytron Warning: No dialog tool (zenity/kdialog) found.")
41
+ return 0
42
+
43
+
44
+ def notification(w, title, message, icon=None):
45
+ # Try notify-send
46
+ try:
47
+ ns = shutil.which("notify-send") or "notify-send"
48
+ subprocess.Popen([ns, title, message]) # nosec B603
49
+ except Exception:
50
+ print("Pytron Warning: notify-send not found.")
51
+
52
+
53
+ def _run_subprocess_dialog(title, action, default_path, default_name):
54
+ # Action: 0=Open, 1=Save, 2=Folder
55
+
56
+ # Try ZENITY
57
+ try:
58
+ cmd = ["zenity", "--file-selection", "--title=" + title]
59
+
60
+ if action == 1:
61
+ cmd.append("--save")
62
+ cmd.append("--confirm-overwrite")
63
+ elif action == 2:
64
+ cmd.append("--directory")
65
+
66
+ if default_path:
67
+ path = default_path
68
+ if action == 1 and default_name:
69
+ path = os.path.join(path, default_name)
70
+ cmd.append(f"--filename={path}")
71
+
72
+ output = subprocess.check_output(cmd, text=True).strip() # nosec B603
73
+ return output
74
+ except Exception:
75
+ pass
76
+
77
+ # Try KDIALOG
78
+ try:
79
+ cmd = ["kdialog", "--title", title]
80
+ if action == 0:
81
+ cmd += ["--getopenfilename"]
82
+ elif action == 1:
83
+ cmd += ["--getsavefilename"]
84
+ elif action == 2:
85
+ cmd += ["--getexistingdirectory"]
86
+
87
+ start_dir = default_path or "."
88
+ if action == 1 and default_name:
89
+ start_dir = os.path.join(start_dir, default_name)
90
+ cmd.append(start_dir)
91
+
92
+ output = subprocess.check_output(cmd, text=True).strip() # nosec B603
93
+ return output
94
+ except Exception:
95
+ pass
96
+
97
+ print("Pytron Warning: No file dialog provider (zenity/kdialog) found on Linux.")
98
+ return None
99
+
100
+
101
+ def open_file_dialog(w, title, default_path=None, file_types=None):
102
+ return _run_subprocess_dialog(title, 0, default_path, None)
103
+
104
+
105
+ def save_file_dialog(w, title, default_path=None, default_name=None, file_types=None):
106
+ return _run_subprocess_dialog(title, 1, default_path, default_name)
107
+
108
+
109
+ def open_folder_dialog(w, title, default_path=None):
110
+ return _run_subprocess_dialog(title, 2, default_path, None)
111
+
112
+
113
+ def set_app_id(app_id):
114
+ if not libs.glib:
115
+ return
116
+ try:
117
+ libs.glib.g_set_prgname.argtypes = [ctypes.c_char_p]
118
+ libs.glib.g_set_prgname(app_id.encode("utf-8"))
119
+ libs.glib.g_set_application_name.argtypes = [ctypes.c_char_p]
120
+ libs.glib.g_set_application_name(app_id.encode("utf-8"))
121
+ except Exception as e:
122
+ print(f"[Pytron] Debug: Failed to set app name: {e}")
123
+
124
+
125
+ def set_launch_on_boot(app_name, exe_path, enable=True):
126
+ config_home = os.environ.get("XDG_CONFIG_HOME", os.path.expanduser("~/.config"))
127
+ autostart_dir = os.path.join(config_home, "autostart")
128
+ desktop_file = os.path.join(autostart_dir, f"{app_name}.desktop")
129
+
130
+ if enable:
131
+ try:
132
+ os.makedirs(autostart_dir, exist_ok=True)
133
+ content = f"""[Desktop Entry]
134
+ Type=Application
135
+ Name={app_name}
136
+ Exec={exe_path}
137
+ Hidden=false
138
+ NoDisplay=false
139
+ X-GNOME-Autostart-enabled=true
140
+ """
141
+ with open(desktop_file, "w") as f:
142
+ f.write(content)
143
+ return True
144
+ except Exception as e:
145
+ print(f"[Pytron] Failed to enable autostart on Linux: {e}")
146
+ return False
147
+ else:
148
+ try:
149
+ if os.path.exists(desktop_file):
150
+ os.remove(desktop_file)
151
+ return True
152
+ except Exception as e:
153
+ print(f"[Pytron] Failed to disable autostart on Linux: {e}")
154
+ return False
155
+
156
+
157
+ def set_taskbar_progress(w, state="normal", value=0, max_value=100):
158
+ pass
159
+
160
+
161
+ def register_protocol(scheme):
162
+ try:
163
+ import sys
164
+
165
+ # Get absolute path to this executable or script
166
+ exe_path = os.path.abspath(sys.executable)
167
+ if not getattr(sys, "frozen", False):
168
+ # If running as script, we need the script path too
169
+ main_script = sys.modules["__main__"].__file__
170
+ exe_path = f'"{exe_path}" "{os.path.abspath(main_script)}"'
171
+ else:
172
+ exe_path = f'"{exe_path}"'
173
+
174
+ # Local desktop file name based on scheme
175
+ desktop_filename = f"pytron-handler-{scheme}.desktop"
176
+ apps_dir = os.path.expanduser("~/.local/share/applications")
177
+ os.makedirs(apps_dir, exist_ok=True)
178
+ desktop_path = os.path.join(apps_dir, desktop_filename)
179
+
180
+ content = f"""[Desktop Entry]
181
+ Type=Application
182
+ Name=Pytron {scheme.capitalize()} Handler
183
+ Exec={exe_path} %u
184
+ MimeType=x-scheme-handler/{scheme};
185
+ NoDisplay=true
186
+ Terminal=false
187
+ """
188
+ with open(desktop_path, "w") as f:
189
+ f.write(content)
190
+
191
+ # Update mime database and register
192
+ try:
193
+ udd = shutil.which("update-desktop-database") or "update-desktop-database"
194
+ subprocess.run([udd, apps_dir], capture_output=True) # nosec B603
195
+
196
+ xm = shutil.which("xdg-mime") or "xdg-mime"
197
+ subprocess.run(
198
+ [xm, "default", desktop_filename, f"x-scheme-handler/{scheme}"],
199
+ capture_output=True,
200
+ ) # nosec B603
201
+ return True
202
+ except Exception:
203
+ # Fallback if tools are missing
204
+ return os.path.exists(desktop_path)
205
+ except Exception as e:
206
+ print(f"[Pytron] Failed to register protocol on Linux: {e}")
207
+ return False
208
+
209
+
210
+ # -------------------------------------------------------------------------
211
+ # Native Drag & Drop Support (Linux/GTK3)
212
+ # -------------------------------------------------------------------------
213
+ _drag_callbacks = {} # Keep references alive
214
+
215
+
216
+ def enable_drag_drop(w, callback):
217
+ """
218
+ Connects to the 'drag-data-received' signal on the GtkWindow/GtkWidget.
219
+ """
220
+ if not libs.gtk or not libs.glib:
221
+ print("[Pytron] GTK/GLib not found, cannot enable drag & drop.")
222
+ return
223
+
224
+ # We need dragging constants
225
+
226
+ # Define Target Entry
227
+ # drag_dest_set expects an array of GtkTargetEntry
228
+ # But usually webview already accepts drags (for the browser).
229
+ # We might just need to connect the signal!
230
+
231
+ # Let's try just connecting the signal first.
232
+
233
+ # Callback Sig: void user_function (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time, gpointer user_data)
234
+ CALLBACK_TYPE = ctypes.CFUNCTYPE(
235
+ None,
236
+ ctypes.c_void_p, # widget
237
+ ctypes.c_void_p, # context
238
+ ctypes.c_int, # x
239
+ ctypes.c_int, # y
240
+ ctypes.c_void_p, # data (GtkSelectionData*)
241
+ ctypes.c_uint, # info
242
+ ctypes.c_uint, # time
243
+ ctypes.c_void_p, # user_data
244
+ )
245
+
246
+ def on_drag_data_received(widget, context, x, y, data, info, time, user_data):
247
+ try:
248
+ # gtk_selection_data_get_uris (data) -> gchar**
249
+ libs.gtk.gtk_selection_data_get_uris.restype = ctypes.POINTER(
250
+ ctypes.c_char_p
251
+ )
252
+ libs.gtk.gtk_selection_data_get_uris.argtypes = [ctypes.c_void_p]
253
+
254
+ uris_ptr = libs.gtk.gtk_selection_data_get_uris(data)
255
+ files = []
256
+
257
+ if uris_ptr:
258
+ # Iterate null-terminated array
259
+ i = 0
260
+ while uris_ptr[i]:
261
+ uri_str = uris_ptr[i].decode("utf-8")
262
+ # Convert file:// URI to path
263
+ if uri_str.startswith("file://"):
264
+ # Basic unquoting (replace %20 with space, etc)
265
+ import urllib.parse
266
+
267
+ path = urllib.parse.unquote(uri_str.replace("file://", ""))
268
+ # Sanitize line endings
269
+ files.append(path.strip())
270
+ else:
271
+ files.append(uri_str)
272
+ i += 1
273
+
274
+ # Free strings? GTK owns them usually in this context or we need to free the array?
275
+ # g_strfreev(uris_ptr) usually.
276
+ if libs.glib and hasattr(libs.glib, "g_strfreev"):
277
+ libs.glib.g_strfreev(uris_ptr)
278
+
279
+ if files:
280
+ callback(files)
281
+
282
+ # Finish drag
283
+ libs.gtk.gtk_drag_finish(context, True, False, time)
284
+ except Exception as e:
285
+ print(f"[Pytron] Linux DragDrop Error: {e}")
286
+ libs.gtk.gtk_drag_finish(context, False, False, time)
287
+
288
+ c_callback = CALLBACK_TYPE(on_drag_data_received)
289
+
290
+ # Keep alive
291
+ _drag_callbacks[w] = c_callback
292
+
293
+ # Function sig: gulong g_signal_connect_data (gpointer instance, const gchar *detailed_signal, GCallback c_handler, gpointer data, GClosureNotify destroy_data, GConnectFlags connect_flags)
294
+ libs.glib.g_signal_connect_data.restype = ctypes.c_ulong
295
+ libs.glib.g_signal_connect_data.argtypes = [
296
+ ctypes.c_void_p,
297
+ ctypes.c_char_p,
298
+ CALLBACK_TYPE,
299
+ ctypes.c_void_p,
300
+ ctypes.c_void_p,
301
+ ctypes.c_int,
302
+ ]
303
+
304
+ libs.glib.g_signal_connect_data(
305
+ ctypes.c_void_p(w),
306
+ "drag-data-received".encode("utf-8"),
307
+ c_callback,
308
+ None,
309
+ None,
310
+ 0,
311
+ )
312
+
313
+ # Also ensure it is a drop destination
314
+ # gtk_drag_dest_set (widget, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY)
315
+ # Actually, we should probably add URI targets. This is verbose in ctypes.
316
+ # Assuming WebKit view already sets some drop targets.
@@ -0,0 +1,19 @@
1
+ from . import libs
2
+ import ctypes
3
+
4
+ # In Native Engine architecture, 'w' is passed as the HWND/XID integer directly.
5
+
6
+
7
+ def get_window(w):
8
+ return w
9
+
10
+
11
+ get_hwnd = get_window
12
+
13
+
14
+ def get_child_webview(win_ptr):
15
+ if not libs.gtk:
16
+ return None
17
+ libs.gtk.gtk_bin_get_child.argtypes = [ctypes.c_void_p]
18
+ libs.gtk.gtk_bin_get_child.restype = ctypes.c_void_p
19
+ return libs.gtk.gtk_bin_get_child(win_ptr)
@@ -0,0 +1,5 @@
1
+ def register_pytron_scheme(w, callback):
2
+ """
3
+ Deprecated: Using JS-Bridge Interceptor in webview.py for cross-platform stability.
4
+ """
5
+ return None
@@ -0,0 +1,115 @@
1
+ import ctypes
2
+ from . import libs
3
+ from .utils import get_window
4
+
5
+
6
+ def minimize(w):
7
+ if not libs.gtk:
8
+ return
9
+ win = get_window(w)
10
+ libs.gtk.gtk_window_iconify(win)
11
+
12
+
13
+ def set_bounds(w, x, y, width, height):
14
+ if not libs.gtk:
15
+ return
16
+ win = get_window(w)
17
+ libs.gtk.gtk_window_move(win, int(x), int(y))
18
+ libs.gtk.gtk_window_resize(win, int(width), int(height))
19
+
20
+
21
+ def close(w):
22
+ if not libs.gtk:
23
+ return
24
+ win = get_window(w)
25
+ libs.gtk.gtk_window_close(win)
26
+
27
+
28
+ def toggle_maximize(w):
29
+ if not libs.gtk:
30
+ return False
31
+ win = get_window(w)
32
+ is_maximized = libs.gtk.gtk_window_is_maximized(win)
33
+ if is_maximized:
34
+ libs.gtk.gtk_window_unmaximize(win)
35
+ return False
36
+ else:
37
+ libs.gtk.gtk_window_maximize(win)
38
+ return True
39
+
40
+
41
+ def make_frameless(w):
42
+ if not libs.gtk:
43
+ return
44
+ win = get_window(w)
45
+ libs.gtk.gtk_window_set_decorated(win, 0) # FALSE
46
+
47
+
48
+ def start_drag(w):
49
+ if not libs.gtk:
50
+ return
51
+ win = get_window(w)
52
+ # 1 = GDK_BUTTON_PRIMARY_MASK (approx), sometimes 0 works for timestamps
53
+ libs.gtk.gtk_window_begin_move_drag(win, 1, 0, 0)
54
+
55
+
56
+ def hide(w):
57
+ if not libs.gtk:
58
+ return
59
+ win = get_window(w)
60
+ libs.gtk.gtk_widget_hide(win)
61
+
62
+
63
+ def is_visible(w):
64
+ if not libs.gtk:
65
+ return True
66
+ win = get_window(w)
67
+ return bool(libs.gtk.gtk_widget_get_visible(win))
68
+
69
+
70
+ def show(w):
71
+ if not libs.gtk:
72
+ return
73
+ win = get_window(w)
74
+ libs.gtk.gtk_widget_show_all(win)
75
+ libs.gtk.gtk_window_present(win)
76
+
77
+
78
+ def set_window_icon(w, icon_path):
79
+ if not libs.gtk or not icon_path:
80
+ return
81
+ win = get_window(w)
82
+ err = ctypes.c_void_p(0)
83
+ res = libs.gtk.gtk_window_set_icon_from_file(
84
+ win, icon_path.encode("utf-8"), ctypes.byref(err)
85
+ )
86
+ if not res:
87
+ print(f"[Pytron] Failed to set window icon from {icon_path}")
88
+
89
+
90
+ def center(w):
91
+ # GTK handles centering via window position usually, but we can implement if needed.
92
+ # For now, just a placeholder or basic implementation if GTK has a method.
93
+ if not libs.gtk:
94
+ return
95
+ win = get_window(w)
96
+ # GTK_WIN_POS_CENTER = 1
97
+ libs.gtk.gtk_window_set_position(win, 1)
98
+
99
+
100
+ def set_fullscreen(w, enable):
101
+ if not libs.gtk:
102
+ return
103
+ win = get_window(w)
104
+ if enable:
105
+ libs.gtk.gtk_window_fullscreen(win)
106
+ else:
107
+ libs.gtk.gtk_window_unfullscreen(win)
108
+
109
+
110
+ def set_always_on_top(w, enable):
111
+ if not libs.gtk:
112
+ return
113
+ win = get_window(w)
114
+ # gtk_window_set_keep_above(GtkWindow *window, gboolean setting)
115
+ libs.gtk.gtk_window_set_keep_above(win, int(enable))