pythonnative 0.48.0__tar.gz → 0.50.0__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 (641) hide show
  1. {pythonnative-0.48.0 → pythonnative-0.50.0}/.github/workflows/release.yml +80 -0
  2. {pythonnative-0.48.0/src/pythonnative.egg-info → pythonnative-0.50.0}/PKG-INFO +7 -5
  3. {pythonnative-0.48.0 → pythonnative-0.50.0}/README.md +5 -4
  4. {pythonnative-0.48.0 → pythonnative-0.50.0}/pyproject.toml +7 -2
  5. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/__init__.py +94 -26
  6. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bootstrap.py +22 -9
  7. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/__init__.py +58 -62
  8. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/android.py +2 -14
  9. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/commits.py +16 -5
  10. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/fake.py +9 -9
  11. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/ios.py +7 -40
  12. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/web.py +5 -45
  13. pythonnative-0.50.0/src/pythonnative/cli/keys.py +178 -0
  14. pythonnative-0.50.0/src/pythonnative/cli/launch.py +261 -0
  15. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/cli/pn.py +296 -131
  16. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/component.py +111 -8
  17. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/__init__.py +19 -4
  18. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/_base.py +1 -1
  19. pythonnative-0.50.0/src/pythonnative/devclient.py +1452 -0
  20. pythonnative-0.50.0/src/pythonnative/devserver/compat.py +176 -0
  21. pythonnative-0.50.0/src/pythonnative/devserver/editor.py +95 -0
  22. pythonnative-0.50.0/src/pythonnative/devserver/hub.py +464 -0
  23. pythonnative-0.50.0/src/pythonnative/devserver/packages.py +226 -0
  24. pythonnative-0.50.0/src/pythonnative/devserver/qr.py +526 -0
  25. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/server.py +399 -30
  26. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/bridge.js +3 -28
  27. pythonnative-0.50.0/src/pythonnative/devserver/static/devsupport.js +358 -0
  28. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/connection.js +136 -0
  29. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/devtools.css +753 -0
  30. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/devtools.js +379 -0
  31. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/index.html +49 -0
  32. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/components.js +610 -0
  33. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/connect.js +166 -0
  34. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/console.js +343 -0
  35. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/network.js +306 -0
  36. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/panel.js +50 -0
  37. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/performance.js +435 -0
  38. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/problems.js +175 -0
  39. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/report.js +134 -0
  40. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/tree.js +143 -0
  41. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/util.js +184 -0
  42. pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/values.js +79 -0
  43. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/host.js +109 -37
  44. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/index.html +2 -0
  45. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/preview.css +194 -0
  46. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/renderer.js +6 -30
  47. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/shell.js +7 -2
  48. pythonnative-0.50.0/src/pythonnative/devtools/__init__.py +16 -0
  49. pythonnative-0.50.0/src/pythonnative/devtools/agent.py +524 -0
  50. pythonnative-0.50.0/src/pythonnative/devtools/console.py +134 -0
  51. pythonnative-0.50.0/src/pythonnative/devtools/debugger.py +164 -0
  52. pythonnative-0.50.0/src/pythonnative/devtools/inspector.py +381 -0
  53. pythonnative-0.50.0/src/pythonnative/devtools/perf.py +194 -0
  54. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/diagnostics.py +86 -8
  55. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/element.py +4 -2
  56. pythonnative-0.50.0/src/pythonnative/errors.py +422 -0
  57. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/gestures.py +17 -17
  58. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/hooks.py +60 -15
  59. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/hosts/base.py +8 -5
  60. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/hosts/native.py +19 -7
  61. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/hot_reload.py +18 -9
  62. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/journal.py +118 -19
  63. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/layout.py +4 -2
  64. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/AndroidManifest.xml +3 -3
  65. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +502 -502
  66. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeValues.kt +22 -0
  67. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +4 -2
  68. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +41 -54
  69. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +4 -4
  70. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +97 -45
  71. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +4 -11
  72. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +22 -9
  73. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +6 -12
  74. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +0 -1
  75. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +13 -2
  76. pythonnative-0.50.0/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DevSupportModule.kt +429 -0
  77. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +14 -3
  78. pythonnative-0.50.0/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/ErrorOverlay.kt +220 -0
  79. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +1 -1
  80. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +8 -10
  81. pythonnative-0.50.0/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/DevSupportRobolectricTest.kt +196 -0
  82. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/NativeLifecycleTest.kt +28 -0
  83. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +2 -4
  84. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +48 -61
  85. pythonnative-0.50.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +181 -0
  86. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +1 -0
  87. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +29 -12
  88. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +7 -10
  89. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +11 -3
  90. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +607 -607
  91. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeValues.swift +40 -1
  92. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +4 -2
  93. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +0 -1
  94. pythonnative-0.50.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/DevSupportModule.swift +381 -0
  95. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +1 -1
  96. pythonnative-0.50.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNErrorOverlay.swift +269 -0
  97. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +69 -21
  98. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +28 -2
  99. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +50 -3
  100. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractParityTests.swift +0 -1
  101. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNLifecycleTests.swift +11 -3
  102. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +105 -0
  103. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNParityTests.swift +1 -2
  104. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +1 -1
  105. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/linking.py +20 -0
  106. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/net.py +99 -2
  107. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/preview.py +134 -18
  108. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/profiling.py +3 -1
  109. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/android.py +23 -9
  110. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/artifacts.py +44 -0
  111. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/builder.py +71 -36
  112. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/bundle.py +4 -1
  113. pythonnative-0.50.0/src/pythonnative/project/bytecode.py +81 -0
  114. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/doctor.py +3 -5
  115. pythonnative-0.50.0/src/pythonnative/project/go.py +383 -0
  116. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/ios.py +24 -6
  117. pythonnative-0.50.0/src/pythonnative/project/runtime_assets.py +373 -0
  118. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/core.py +63 -13
  119. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/vnode.py +13 -1
  120. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/refresh.py +42 -9
  121. pythonnative-0.50.0/src/pythonnative/sdk/_builtin_contracts.json +1 -0
  122. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/builtins.py +33 -6
  123. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/codegen.py +5 -5
  124. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/contract_codegen.py +2 -0
  125. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/schema.py +144 -19
  126. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/templates/contracts.kt +3 -1
  127. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/templates/contracts.swift +3 -1
  128. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/templates/values.kt +22 -0
  129. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/templates/values.swift +40 -1
  130. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/build.gradle +0 -4
  131. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +0 -4
  132. pythonnative-0.50.0/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +170 -0
  133. pythonnative-0.50.0/src/pythonnative/templates/ios_template/PNFinalizePython.sh +29 -0
  134. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/AppDelegate.swift +3 -0
  135. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +68 -10
  136. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +3 -1
  137. pythonnative-0.50.0/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +22 -0
  138. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +3 -240
  139. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/pytest_plugin.py +1 -1
  140. {pythonnative-0.48.0 → pythonnative-0.50.0/src/pythonnative.egg-info}/PKG-INFO +7 -5
  141. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative.egg-info/SOURCES.txt +44 -5
  142. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative.egg-info/requires.txt +1 -0
  143. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_async_hooks.py +19 -0
  144. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_bridge.py +14 -11
  145. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_cli.py +44 -38
  146. pythonnative-0.50.0/tests/test_cli_keys.py +153 -0
  147. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_codegen.py +2 -1
  148. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_core_semantics.py +23 -0
  149. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_devclient.py +75 -34
  150. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_devserver.py +20 -4
  151. pythonnative-0.50.0/tests/test_devserver_session.py +496 -0
  152. pythonnative-0.50.0/tests/test_devtools.py +300 -0
  153. pythonnative-0.50.0/tests/test_devtools_page.py +224 -0
  154. pythonnative-0.50.0/tests/test_errors.py +173 -0
  155. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_hosts.py +1 -1
  156. pythonnative-0.50.0/tests/test_performance_budgets.py +164 -0
  157. pythonnative-0.50.0/tests/test_qr.py +279 -0
  158. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_release_packaging.py +6 -0
  159. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_runtime_correctness.py +47 -13
  160. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_runtime_overhaul.py +8 -2
  161. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_web_transport.py +32 -39
  162. pythonnative-0.48.0/src/pythonnative/devclient.py +0 -869
  163. pythonnative-0.48.0/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/ErrorOverlay.kt +0 -42
  164. pythonnative-0.48.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +0 -153
  165. pythonnative-0.48.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNErrorOverlay.swift +0 -47
  166. pythonnative-0.48.0/src/pythonnative/project/runtime_assets.py +0 -200
  167. pythonnative-0.48.0/src/pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +0 -24
  168. pythonnative-0.48.0/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +0 -130
  169. pythonnative-0.48.0/src/pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +0 -17
  170. pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +0 -23
  171. pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +0 -36
  172. pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +0 -41
  173. pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +0 -32
  174. {pythonnative-0.48.0 → pythonnative-0.50.0}/LICENSE +0 -0
  175. {pythonnative-0.48.0 → pythonnative-0.50.0}/MANIFEST.in +0 -0
  176. {pythonnative-0.48.0 → pythonnative-0.50.0}/scripts/check-distributions.py +0 -0
  177. {pythonnative-0.48.0 → pythonnative-0.50.0}/scripts/cibuildwheel.toml +0 -0
  178. {pythonnative-0.48.0 → pythonnative-0.50.0}/scripts/release-assets.py +0 -0
  179. {pythonnative-0.48.0 → pythonnative-0.50.0}/setup.cfg +0 -0
  180. {pythonnative-0.48.0 → pythonnative-0.50.0}/setup.py +0 -0
  181. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/_ios_log.py +0 -0
  182. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/alerts.py +0 -0
  183. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/animated.py +0 -0
  184. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/animation_graph.py +0 -0
  185. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/appearance.py +0 -0
  186. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/assets/__init__.py +0 -0
  187. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/assets/fonts.py +0 -0
  188. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/codec.py +0 -0
  189. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/list_store.py +0 -0
  190. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/cli/__init__.py +0 -0
  191. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/controls.py +0 -0
  192. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/events.py +0 -0
  193. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/graphics.py +0 -0
  194. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/layout.py +0 -0
  195. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/lists.py +0 -0
  196. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/media.py +0 -0
  197. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/overlays.py +0 -0
  198. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/pressable.py +0 -0
  199. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/props.py +0 -0
  200. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/structural.py +0 -0
  201. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/text.py +0 -0
  202. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/__init__.py +0 -0
  203. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/auth.py +0 -0
  204. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/animation_graph.js +0 -0
  205. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/assets.js +0 -0
  206. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/colors.js +0 -0
  207. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/contracts.js +0 -0
  208. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/layout.js +0 -0
  209. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/list-store.js +0 -0
  210. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/LICENSE +0 -0
  211. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +0 -0
  212. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +0 -0
  213. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js +0 -0
  214. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +0 -0
  215. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/index.d.ts +0 -0
  216. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/index.js +0 -0
  217. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/index.js.map +0 -0
  218. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/load.d.ts +0 -0
  219. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/load.js +0 -0
  220. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/load.js.map +0 -0
  221. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +0 -0
  222. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js +0 -0
  223. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +0 -0
  224. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/watcher.py +0 -0
  225. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/ws.py +0 -0
  226. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/equality.py +0 -0
  227. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/events.py +0 -0
  228. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/handles.py +0 -0
  229. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/hosts/__init__.py +0 -0
  230. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/icons/LICENSE-lucide.txt +0 -0
  231. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/icons/__init__.py +0 -0
  232. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/icons/_lucide.json +0 -0
  233. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/icons/_names.py +0 -0
  234. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/lint.py +0 -0
  235. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/list_data.py +0 -0
  236. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/mutations.py +0 -0
  237. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/build.gradle +0 -0
  238. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/gradle.properties +0 -0
  239. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/settings.gradle +0 -0
  240. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/cpp/CMakeLists.txt +0 -0
  241. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/cpp/yoga_jni.cpp +0 -0
  242. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +0 -0
  243. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +0 -0
  244. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +0 -0
  245. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +0 -0
  246. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/assets/PNAssets.kt +0 -0
  247. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +0 -0
  248. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +0 -0
  249. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +0 -0
  250. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +0 -0
  251. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +0 -0
  252. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +0 -0
  253. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +0 -0
  254. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +0 -0
  255. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +0 -0
  256. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +0 -0
  257. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/EffectManagers.kt +0 -0
  258. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +0 -0
  259. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +0 -0
  260. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ListStore.kt +0 -0
  261. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +0 -0
  262. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +0 -0
  263. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNTheme.kt +0 -0
  264. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +0 -0
  265. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +0 -0
  266. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +0 -0
  267. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +0 -0
  268. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenTransitions.kt +0 -0
  269. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +0 -0
  270. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +0 -0
  271. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +0 -0
  272. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SvgManager.kt +0 -0
  273. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +0 -0
  274. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +0 -0
  275. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +0 -0
  276. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +0 -0
  277. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +0 -0
  278. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +0 -0
  279. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +0 -0
  280. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +0 -0
  281. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +0 -0
  282. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/graphics/SvgPath.kt +0 -0
  283. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +0 -0
  284. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/AssetModules.kt +0 -0
  285. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +0 -0
  286. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +0 -0
  287. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +0 -0
  288. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +0 -0
  289. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PlatformModules.kt +0 -0
  290. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +0 -0
  291. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +0 -0
  292. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +0 -0
  293. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNKeyboard.kt +0 -0
  294. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +0 -0
  295. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +0 -0
  296. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +0 -0
  297. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +0 -0
  298. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +0 -0
  299. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNScrollViews.kt +0 -0
  300. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_fade_in.xml +0 -0
  301. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_fade_out.xml +0 -0
  302. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_hold.xml +0 -0
  303. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_bottom.xml +0 -0
  304. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_left.xml +0 -0
  305. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_right.xml +0 -0
  306. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_bottom.xml +0 -0
  307. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_left.xml +0 -0
  308. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_right.xml +0 -0
  309. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/drawable/pn_ic_arrow_back.xml +0 -0
  310. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/values/pn_ids.xml +0 -0
  311. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/xml/pn_file_paths.xml +0 -0
  312. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/generated/PNRecordFixtures.kt +0 -0
  313. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +0 -0
  314. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AssetsAndSvgTest.kt +0 -0
  315. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ContractFixtureTest.kt +0 -0
  316. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +0 -0
  317. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +0 -0
  318. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +0 -0
  319. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundOneRobolectricTest.kt +0 -0
  320. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoLogicTest.kt +0 -0
  321. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoRobolectricTest.kt +0 -0
  322. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ScreenTransitionsTest.kt +0 -0
  323. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/StyleAccessibilityDeviceTest.kt +0 -0
  324. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Package.swift +0 -0
  325. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +0 -0
  326. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +0 -0
  327. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +0 -0
  328. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +0 -0
  329. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +0 -0
  330. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +0 -0
  331. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +0 -0
  332. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +0 -0
  333. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNEffectManagers.swift +0 -0
  334. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +0 -0
  335. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNListStore.swift +0 -0
  336. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +0 -0
  337. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +0 -0
  338. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +0 -0
  339. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +0 -0
  340. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNSvgManager.swift +0 -0
  341. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +0 -0
  342. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +0 -0
  343. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +0 -0
  344. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +0 -0
  345. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +0 -0
  346. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +0 -0
  347. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +0 -0
  348. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +0 -0
  349. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +0 -0
  350. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +0 -0
  351. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/EnvironmentModules.swift +0 -0
  352. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/ImagesModule.swift +0 -0
  353. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +0 -0
  354. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +0 -0
  355. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +0 -0
  356. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +0 -0
  357. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +0 -0
  358. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +0 -0
  359. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Resources/PrivacyInfo.xcprivacy +0 -0
  360. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +0 -0
  361. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNAssets.swift +0 -0
  362. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +0 -0
  363. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +0 -0
  364. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +0 -0
  365. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/project.pbxproj +0 -0
  366. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/xcshareddata/xcschemes/NativeTests.xcscheme +0 -0
  367. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/validation.json +0 -0
  368. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +0 -0
  369. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAssetTests.swift +0 -0
  370. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +0 -0
  371. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractFixtureTests.swift +0 -0
  372. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +0 -0
  373. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +0 -0
  374. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNRecordFixtures.swift +0 -0
  375. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/TestHost/main.swift +0 -0
  376. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/LICENSE +0 -0
  377. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/Package.swift +0 -0
  378. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/VENDORED.md +0 -0
  379. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/PNStyle.h +0 -0
  380. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/module.modulemap +0 -0
  381. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGConfig.h +0 -0
  382. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGEnums.h +0 -0
  383. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGMacros.h +0 -0
  384. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGNode.h +0 -0
  385. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGNodeLayout.h +0 -0
  386. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGNodeStyle.h +0 -0
  387. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGPixelGrid.h +0 -0
  388. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGValue.h +0 -0
  389. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/Yoga.h +0 -0
  390. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/python.cpp +0 -0
  391. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/style.cpp +0 -0
  392. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/CMakeLists.txt +0 -0
  393. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGConfig.cpp +0 -0
  394. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGConfig.h +0 -0
  395. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGEnums.cpp +0 -0
  396. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGEnums.h +0 -0
  397. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGMacros.h +0 -0
  398. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNode.cpp +0 -0
  399. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNode.h +0 -0
  400. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.cpp +0 -0
  401. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.h +0 -0
  402. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.cpp +0 -0
  403. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.h +0 -0
  404. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.cpp +0 -0
  405. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.h +0 -0
  406. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGValue.cpp +0 -0
  407. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGValue.h +0 -0
  408. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/Yoga.h +0 -0
  409. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +0 -0
  410. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +0 -0
  411. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/Align.h +0 -0
  412. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +0 -0
  413. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.h +0 -0
  414. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +0 -0
  415. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.cpp +0 -0
  416. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.h +0 -0
  417. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +0 -0
  418. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +0 -0
  419. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +0 -0
  420. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +0 -0
  421. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.h +0 -0
  422. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +0 -0
  423. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +0 -0
  424. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/SizingMode.h +0 -0
  425. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +0 -0
  426. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/config/Config.cpp +0 -0
  427. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/config/Config.h +0 -0
  428. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +0 -0
  429. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.h +0 -0
  430. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/debug/Log.cpp +0 -0
  431. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/debug/Log.h +0 -0
  432. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Align.h +0 -0
  433. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/BoxSizing.h +0 -0
  434. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Dimension.h +0 -0
  435. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Direction.h +0 -0
  436. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Display.h +0 -0
  437. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Edge.h +0 -0
  438. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Errata.h +0 -0
  439. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +0 -0
  440. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/FlexDirection.h +0 -0
  441. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Gutter.h +0 -0
  442. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Justify.h +0 -0
  443. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/LogLevel.h +0 -0
  444. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/MeasureMode.h +0 -0
  445. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/NodeType.h +0 -0
  446. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Overflow.h +0 -0
  447. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +0 -0
  448. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/PositionType.h +0 -0
  449. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Unit.h +0 -0
  450. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Wrap.h +0 -0
  451. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/YogaEnums.h +0 -0
  452. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/event/event.cpp +0 -0
  453. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/event/event.h +0 -0
  454. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/module.modulemap +0 -0
  455. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/CachedMeasurement.h +0 -0
  456. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.cpp +0 -0
  457. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.h +0 -0
  458. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/LayoutableChildren.h +0 -0
  459. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/Node.cpp +0 -0
  460. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/Node.h +0 -0
  461. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/numeric/Comparison.h +0 -0
  462. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/numeric/FloatOptional.h +0 -0
  463. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +0 -0
  464. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/style/Style.h +0 -0
  465. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/style/StyleLength.h +0 -0
  466. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/style/StyleValueHandle.h +0 -0
  467. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/style/StyleValuePool.h +0 -0
  468. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/__init__.py +0 -0
  469. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/accessibility_info.py +0 -0
  470. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/app_state.py +0 -0
  471. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/battery.py +0 -0
  472. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/biometrics.py +0 -0
  473. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/camera.py +0 -0
  474. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/clipboard.py +0 -0
  475. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/device.py +0 -0
  476. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/dimensions.py +0 -0
  477. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/fallback.py +0 -0
  478. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/file_system.py +0 -0
  479. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/haptics.py +0 -0
  480. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/images.py +0 -0
  481. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/keyboard.py +0 -0
  482. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/localization.py +0 -0
  483. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/location.py +0 -0
  484. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/net_info.py +0 -0
  485. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/notifications.py +0 -0
  486. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/permissions.py +0 -0
  487. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/registry.py +0 -0
  488. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/secure_store.py +0 -0
  489. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/share.py +0 -0
  490. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_views/__init__.py +0 -0
  491. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_views/bridge_backend.py +0 -0
  492. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/__init__.py +0 -0
  493. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/container.py +0 -0
  494. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/handle.py +0 -0
  495. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/hooks.py +0 -0
  496. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/host.py +0 -0
  497. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/linking.py +0 -0
  498. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/navigators.py +0 -0
  499. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/ref.py +0 -0
  500. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/screen.py +0 -0
  501. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/state.py +0 -0
  502. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/platform.py +0 -0
  503. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/platform_metrics.py +0 -0
  504. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/__init__.py +0 -0
  505. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/config.py +0 -0
  506. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/deps.py +0 -0
  507. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/devices.py +0 -0
  508. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/fingerprint.py +0 -0
  509. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/icons.py +0 -0
  510. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/lockfile.py +0 -0
  511. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/permissions.py +0 -0
  512. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/plugins.py +0 -0
  513. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/prop_checks.py +0 -0
  514. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/py.typed +0 -0
  515. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/query.py +0 -0
  516. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/__init__.py +0 -0
  517. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/boundaries.py +0 -0
  518. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/children.py +0 -0
  519. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/layout_pass.py +0 -0
  520. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/runtime.py +0 -0
  521. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/scheduler.py +0 -0
  522. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/__init__.py +0 -0
  523. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/_components.py +0 -0
  524. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/commands.py +0 -0
  525. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/module_codegen.py +0 -0
  526. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/native_types.py +0 -0
  527. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/services.py +0 -0
  528. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/types.py +0 -0
  529. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/storage.py +0 -0
  530. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/store.py +0 -0
  531. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/style.py +0 -0
  532. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/suspense.py +0 -0
  533. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/svg.py +0 -0
  534. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/proguard-rules.pro +0 -0
  535. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +0 -0
  536. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +0 -0
  537. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  538. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -0
  539. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +0 -0
  540. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  541. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  542. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  543. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  544. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  545. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  546. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  547. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  548. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  549. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  550. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  551. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  552. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +0 -0
  553. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/values/colors.xml +0 -0
  554. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/values/strings.xml +0 -0
  555. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/values/themes.xml +0 -0
  556. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +0 -0
  557. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +0 -0
  558. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  559. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/build.gradle +0 -0
  560. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
  561. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +0 -0
  562. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/gradle.properties +0 -0
  563. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/gradlew +0 -0
  564. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/gradlew.bat +0 -0
  565. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/settings.gradle +0 -0
  566. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  567. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  568. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +0 -0
  569. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +0 -0
  570. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/BridgingHeader.h +0 -0
  571. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/Info.plist +0 -0
  572. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/PrivacyInfo.xcprivacy +0 -0
  573. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  574. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/__init__.py +0 -0
  575. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/backend.py +0 -0
  576. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/clock.py +0 -0
  577. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/harness.py +0 -0
  578. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/queries.py +0 -0
  579. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/theme.py +0 -0
  580. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/utils.py +0 -0
  581. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative.egg-info/dependency_links.txt +0 -0
  582. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative.egg-info/entry_points.txt +0 -0
  583. {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative.egg-info/top_level.txt +0 -0
  584. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_alert.py +0 -0
  585. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_animated.py +0 -0
  586. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_animated_easing.py +0 -0
  587. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_animated_graph.py +0 -0
  588. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_appearance.py +0 -0
  589. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_assets.py +0 -0
  590. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_authoring.py +0 -0
  591. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_components.py +0 -0
  592. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_contract_fixtures.py +0 -0
  593. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_device_modules.py +0 -0
  594. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_devserver_ws.py +0 -0
  595. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_e2e_suite_renders.py +0 -0
  596. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_element.py +0 -0
  597. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_events.py +0 -0
  598. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_extended_components.py +0 -0
  599. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_gesture_activation.py +0 -0
  600. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_gesture_composition.py +0 -0
  601. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_gestures.py +0 -0
  602. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_handles.py +0 -0
  603. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_hooks.py +0 -0
  604. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_hot_reload.py +0 -0
  605. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_identity_bailout.py +0 -0
  606. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_inbox.py +0 -0
  607. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_incremental_pipeline.py +0 -0
  608. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_incremental_render.py +0 -0
  609. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_interaction_props.py +0 -0
  610. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_ios_log.py +0 -0
  611. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_layout.py +0 -0
  612. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_lint.py +0 -0
  613. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_list_features.py +0 -0
  614. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_metric_hooks.py +0 -0
  615. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_mutations.py +0 -0
  616. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_native_lists.py +0 -0
  617. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_native_modules.py +0 -0
  618. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_native_values.py +0 -0
  619. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_native_views.py +0 -0
  620. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_navigation.py +0 -0
  621. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_net.py +0 -0
  622. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_new_components.py +0 -0
  623. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_platform.py +0 -0
  624. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_platform_metrics.py +0 -0
  625. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_reconciler.py +0 -0
  626. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_ref.py +0 -0
  627. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_release_workflow.py +0 -0
  628. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_runtime.py +0 -0
  629. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_runtime_contracts.py +0 -0
  630. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_sdk.py +0 -0
  631. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_smoke.py +0 -0
  632. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_storage.py +0 -0
  633. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_store.py +0 -0
  634. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_style.py +0 -0
  635. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_suspense.py +0 -0
  636. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_testing_library.py +0 -0
  637. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_theme.py +0 -0
  638. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_transitions.py +0 -0
  639. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_typed_events.py +0 -0
  640. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_typing_conformance.py +0 -0
  641. {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_utils.py +0 -0
@@ -113,3 +113,83 @@ jobs:
113
113
  uses: pypa/gh-action-pypi-publish@release/v1
114
114
  with:
115
115
  skip-existing: true
116
+
117
+ # PythonNative Go, the prebuilt dev client, ships as release assets that
118
+ # `pn go` downloads for the matching version (RFC 0006). Its builds run
119
+ # after PyPI publishing so a toolchain hiccup never blocks the package.
120
+ go:
121
+ name: Build PythonNative Go (${{ matrix.name }})
122
+ needs: [release, publish]
123
+ if: needs.release.outputs.tag != '' && needs.release.outputs.commit != ''
124
+ strategy:
125
+ fail-fast: false
126
+ matrix:
127
+ # The simulator app's Python runtime is staged for one architecture,
128
+ # so each Mac architecture gets its own asset, built on a runner of
129
+ # that architecture (`pn go` downloads the one matching the Mac).
130
+ include:
131
+ - name: ios-arm64
132
+ platform: ios
133
+ runner: macos-15
134
+ - name: ios-x86_64
135
+ platform: ios
136
+ runner: macos-15-intel
137
+ - name: android
138
+ platform: android
139
+ runner: ubuntu-24.04
140
+ runs-on: ${{ matrix.runner }}
141
+ env:
142
+ DEVELOPER_DIR: /Applications/Xcode_26.3.app/Contents/Developer
143
+ timeout-minutes: 45
144
+ steps:
145
+ - uses: actions/checkout@v4
146
+ with:
147
+ ref: ${{ needs.release.outputs.commit }}
148
+ - uses: astral-sh/setup-uv@v10.0.1
149
+ with:
150
+ enable-cache: true
151
+ python-version: '3.13'
152
+ - name: Set up Java 17
153
+ if: matrix.platform == 'android'
154
+ uses: actions/setup-java@v4
155
+ with:
156
+ distribution: 'temurin'
157
+ java-version: '17'
158
+ - name: Set up Gradle
159
+ if: matrix.platform == 'android'
160
+ uses: gradle/actions/setup-gradle@v4
161
+ - name: Install PythonNative
162
+ run: uv sync --locked
163
+ - name: Build and package
164
+ run: uv run python scripts/build-go.py --platform ${{ matrix.platform }} --out go-dist
165
+ - uses: actions/upload-artifact@v4
166
+ with:
167
+ name: go-${{ matrix.name }}
168
+ path: go-dist/
169
+ if-no-files-found: error
170
+
171
+ go-assets:
172
+ name: Attach PythonNative Go to the release
173
+ needs: [release, go]
174
+ runs-on: ubuntu-24.04
175
+ permissions:
176
+ contents: write
177
+ steps:
178
+ - uses: actions/checkout@v4
179
+ with:
180
+ ref: ${{ needs.release.outputs.commit }}
181
+ - uses: actions/download-artifact@v4
182
+ with:
183
+ pattern: go-*
184
+ path: go-dist
185
+ merge-multiple: true
186
+ - uses: astral-sh/setup-uv@v10.0.1
187
+ with:
188
+ python-version: '3.13'
189
+ - name: Write checksums
190
+ run: uv run python scripts/build-go.py --checksums go-dist
191
+ - name: Upload
192
+ env:
193
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
194
+ RELEASE_TAG: ${{ needs.release.outputs.tag }}
195
+ run: gh release upload "$RELEASE_TAG" go-dist/* --clobber
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.48.0
3
+ Version: 0.50.0
4
4
  Summary: Cross-platform native UI toolkit for Android and iOS
5
5
  Author: Owen Carey
6
6
  License: MIT License
@@ -40,6 +40,7 @@ Classifier: Topic :: Software Development :: User Interfaces
40
40
  Requires-Python: >=3.13
41
41
  Description-Content-Type: text/markdown
42
42
  License-File: LICENSE
43
+ Requires-Dist: debugpy>=1.8
43
44
  Provides-Extra: build
44
45
  Requires-Dist: Pillow>=10.0; extra == "build"
45
46
  Dynamic: license-file
@@ -88,7 +89,9 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
88
89
  - **Device APIs:** Python facades expose camera, location, notifications, storage, permissions, keyboard, dimensions and pixel ratio, device info, localization, accessibility settings, and other native services, with a Python fallback for headless tests. Test permissions and platform behavior on your deployment targets.
89
90
  - **Native extension SDK:** Python dataclasses and protocols define contracts; `define_component` returns a typed element factory and `pn codegen` generates props and module adapters for Swift and Kotlin. Plugins package native sources and resources, and builds verify matching contracts at startup.
90
91
  - **Testing library:** `pythonnative.testing` renders components headlessly with Testing Library-style queries (`get_by_role`, `get_by_placeholder_text`, `within`, `find_by_*`), a virtual clock for timers, and a pytest plugin that resets the runtime between tests.
91
- - **Development tools:** `pn start` serves the browser preview and connected mobile dev clients. Fast Refresh preserves compatible component state, while diagnostics report errors and invalid hook usage. Changes to native inputs trigger a rebuild.
92
+ - **PythonNative Go:** a prebuilt dev client, published with each release, runs any project without native code, so the project itself is never compiled. `i` / `a` in `pn start` open it on the iOS Simulator (which still needs Xcode installed) or an Android emulator, and a phone with Go installed opens the project by scanning the QR code `pn start` prints. Go isn't in the app stores: Android phones install the APK, and iPhones need Go built and signed with your Apple team. Projects that add native code run in their own debug build, which `pn run` rebuilds only when something native changes.
93
+ - **DevTools and debugging:** `pn start` serves DevTools, with a component tree showing props and hooks (and editable state), a console with a REPL inside the running app, problems with component stacks and source excerpts, network requests, and live performance with trace capture. VS Code attaches `debugpy` breakpoints to Python on the preview, a simulator, or a phone. On device, a dev menu (shake or Cmd+D) offers reload, an element inspector, and a performance monitor, and errors show a screen with the component stack and your source.
94
+ - **Development tools:** Fast Refresh preserves compatible component state, `pn lint` checks the rules of hooks, and `pn init` scaffolds tests, type checking, debugger settings, and CI.
92
95
  - **Browser preview:** `pn preview` runs your Python application against a browser renderer with DOM widgets, Yoga WebAssembly layout, and JavaScript animation graphs. It supports iteration on application logic and UI; fonts, platform controls, and device APIs require mobile testing.
93
96
  - **App packaging and dependency locks:** `pn run` and `pn build` stage bundled app templates, native libraries, and Python sources. Target-specific wheel locks record dependency versions and hashes for mobile builds. Binary dependencies need compatible mobile wheels; `pn deps` reports target resolution.
94
97
 
@@ -125,9 +128,8 @@ def App() -> pn.Node:
125
128
 
126
129
  ```bash
127
130
  pn init my-app && cd my-app
128
- pn preview # dev server + browser preview with Fast Refresh
129
- pn run ios # in another terminal: debug build that connects to the same server
130
- pn run android
131
+ pn start # dev server: scan the QR code, or press i (iOS), a (Android), w (browser), j (DevTools)
132
+ pn run ios # the project's own debug build, for projects that add native code
131
133
  pn build ios # standalone release artifacts
132
134
  ```
133
135
 
@@ -42,7 +42,9 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
42
42
  - **Device APIs:** Python facades expose camera, location, notifications, storage, permissions, keyboard, dimensions and pixel ratio, device info, localization, accessibility settings, and other native services, with a Python fallback for headless tests. Test permissions and platform behavior on your deployment targets.
43
43
  - **Native extension SDK:** Python dataclasses and protocols define contracts; `define_component` returns a typed element factory and `pn codegen` generates props and module adapters for Swift and Kotlin. Plugins package native sources and resources, and builds verify matching contracts at startup.
44
44
  - **Testing library:** `pythonnative.testing` renders components headlessly with Testing Library-style queries (`get_by_role`, `get_by_placeholder_text`, `within`, `find_by_*`), a virtual clock for timers, and a pytest plugin that resets the runtime between tests.
45
- - **Development tools:** `pn start` serves the browser preview and connected mobile dev clients. Fast Refresh preserves compatible component state, while diagnostics report errors and invalid hook usage. Changes to native inputs trigger a rebuild.
45
+ - **PythonNative Go:** a prebuilt dev client, published with each release, runs any project without native code, so the project itself is never compiled. `i` / `a` in `pn start` open it on the iOS Simulator (which still needs Xcode installed) or an Android emulator, and a phone with Go installed opens the project by scanning the QR code `pn start` prints. Go isn't in the app stores: Android phones install the APK, and iPhones need Go built and signed with your Apple team. Projects that add native code run in their own debug build, which `pn run` rebuilds only when something native changes.
46
+ - **DevTools and debugging:** `pn start` serves DevTools, with a component tree showing props and hooks (and editable state), a console with a REPL inside the running app, problems with component stacks and source excerpts, network requests, and live performance with trace capture. VS Code attaches `debugpy` breakpoints to Python on the preview, a simulator, or a phone. On device, a dev menu (shake or Cmd+D) offers reload, an element inspector, and a performance monitor, and errors show a screen with the component stack and your source.
47
+ - **Development tools:** Fast Refresh preserves compatible component state, `pn lint` checks the rules of hooks, and `pn init` scaffolds tests, type checking, debugger settings, and CI.
46
48
  - **Browser preview:** `pn preview` runs your Python application against a browser renderer with DOM widgets, Yoga WebAssembly layout, and JavaScript animation graphs. It supports iteration on application logic and UI; fonts, platform controls, and device APIs require mobile testing.
47
49
  - **App packaging and dependency locks:** `pn run` and `pn build` stage bundled app templates, native libraries, and Python sources. Target-specific wheel locks record dependency versions and hashes for mobile builds. Binary dependencies need compatible mobile wheels; `pn deps` reports target resolution.
48
50
 
@@ -79,9 +81,8 @@ def App() -> pn.Node:
79
81
 
80
82
  ```bash
81
83
  pn init my-app && cd my-app
82
- pn preview # dev server + browser preview with Fast Refresh
83
- pn run ios # in another terminal: debug build that connects to the same server
84
- pn run android
84
+ pn start # dev server: scan the QR code, or press i (iOS), a (Android), w (browser), j (DevTools)
85
+ pn run ios # the project's own debug build, for projects that add native code
85
86
  pn build ios # standalone release artifacts
86
87
  ```
87
88
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pythonnative"
7
- version = "0.48.0"
7
+ version = "0.50.0"
8
8
  description = "Cross-platform native UI toolkit for Android and iOS"
9
9
  authors = [
10
10
  { name = "Owen Carey" }
@@ -26,7 +26,11 @@ classifiers = [
26
26
  "Programming Language :: Python :: 3.14",
27
27
  "Topic :: Software Development :: User Interfaces",
28
28
  ]
29
- dependencies = []
29
+ # debugpy is development tooling: `pn start` syncs its sources to dev
30
+ # clients for breakpoint debugging (RFC 0006). App bundles never include it.
31
+ dependencies = [
32
+ "debugpy>=1.8",
33
+ ]
30
34
 
31
35
  [project.optional-dependencies]
32
36
  build = [
@@ -99,6 +103,7 @@ pythonnative = [
99
103
  "templates/**", "native/**", "sdk/templates/**",
100
104
  "devserver/static/**",
101
105
  "icons/_lucide.json", "icons/LICENSE-lucide.txt",
106
+ "sdk/_builtin_contracts.json",
102
107
  ]
103
108
 
104
109
  [tool.setuptools.exclude-package-data]
@@ -66,11 +66,13 @@ Example:
66
66
  ```
67
67
  """
68
68
 
69
- __version__ = "0.48.0"
69
+ __version__ = "0.50.0"
70
70
 
71
- from . import appearance, diagnostics, gestures, icons, runtime, sdk, svg
71
+ import importlib
72
+ from typing import TYPE_CHECKING, Any
73
+
74
+ from . import appearance, diagnostics, runtime, sdk, svg
72
75
  from .alerts import Alert
73
- from .animated import ANIMATABLE_PROPS, Animated, AnimatedValue, AnimationResult, Easing, EasingSpec, use_animated_value
74
76
  from .assets import Asset, asset
75
77
  from .component import Component, component, memo
76
78
  from .components import (
@@ -124,7 +126,6 @@ from .components import (
124
126
  from .components.props import AccessibilityProps, ViewProps
125
127
  from .diagnostics import HookOrderError
126
128
  from .element import Element, Node
127
- from .gestures import GestureSpec, SwipeDirection
128
129
  from .handles import ScrollOffset, ScrollViewHandle, TextInputHandle, ViewHandle, WebViewHandle
129
130
  from .hooks import (
130
131
  ColorScheme,
@@ -157,7 +158,6 @@ from .hooks import (
157
158
  use_window_dimensions,
158
159
  )
159
160
  from .hosts import create_screen
160
- from .icons import Icon, IconName
161
161
  from .mutations import UNSET, UnsetType
162
162
  from .native_modules import (
163
163
  AccessibilityEvent,
@@ -194,27 +194,6 @@ from .native_modules import (
194
194
  use_reduce_motion,
195
195
  use_screen_reader_enabled,
196
196
  )
197
- from .navigation import (
198
- DrawerNavigator,
199
- Group,
200
- Navigation,
201
- NavigationContainer,
202
- NavigationRef,
203
- NavigationState,
204
- Navigator,
205
- Route,
206
- Screen,
207
- ScreenOptions,
208
- StackNavigator,
209
- TabBarStyle,
210
- TabNavigator,
211
- use_focus_effect,
212
- use_is_focused,
213
- use_navigation,
214
- use_route,
215
- use_screen_options,
216
- )
217
- from .net import HTTPError, Response, fetch
218
197
  from .platform import Platform, get_platform
219
198
  from .platform_metrics import WindowDimensions
220
199
  from .runtime import run_async, run_blocking
@@ -527,3 +506,92 @@ __all__ = [
527
506
  ]
528
507
 
529
508
  from .list_data import ListData, Section, ViewableItem
509
+
510
+ # Subsystems an app may never touch load on first use (PEP 562), so
511
+ # ``import pythonnative`` stays fast on a phone. Names, ``__all__``, and
512
+ # documentation are unchanged, and type checkers see ordinary imports.
513
+ _LAZY_GROUPS: dict[str, tuple[str, ...]] = {
514
+ "animated": (
515
+ "ANIMATABLE_PROPS",
516
+ "Animated",
517
+ "AnimatedValue",
518
+ "AnimationResult",
519
+ "Easing",
520
+ "EasingSpec",
521
+ "use_animated_value",
522
+ ),
523
+ "gestures": ("GestureSpec", "SwipeDirection"),
524
+ "icons": ("Icon", "IconName"),
525
+ "navigation": (
526
+ "DrawerNavigator",
527
+ "Group",
528
+ "Navigation",
529
+ "NavigationContainer",
530
+ "NavigationRef",
531
+ "NavigationState",
532
+ "Navigator",
533
+ "Route",
534
+ "Screen",
535
+ "ScreenOptions",
536
+ "StackNavigator",
537
+ "TabBarStyle",
538
+ "TabNavigator",
539
+ "use_focus_effect",
540
+ "use_is_focused",
541
+ "use_navigation",
542
+ "use_route",
543
+ "use_screen_options",
544
+ ),
545
+ "net": ("HTTPError", "Response", "fetch"),
546
+ }
547
+ _LAZY = {name: module for module, names in _LAZY_GROUPS.items() for name in names}
548
+ _LAZY_MODULES = frozenset({"gestures", "icons"})
549
+
550
+ if TYPE_CHECKING:
551
+ from . import gestures, icons
552
+ from .animated import (
553
+ ANIMATABLE_PROPS,
554
+ Animated,
555
+ AnimatedValue,
556
+ AnimationResult,
557
+ Easing,
558
+ EasingSpec,
559
+ use_animated_value,
560
+ )
561
+ from .gestures import GestureSpec, SwipeDirection
562
+ from .icons import Icon, IconName
563
+ from .navigation import (
564
+ DrawerNavigator,
565
+ Group,
566
+ Navigation,
567
+ NavigationContainer,
568
+ NavigationRef,
569
+ NavigationState,
570
+ Navigator,
571
+ Route,
572
+ Screen,
573
+ ScreenOptions,
574
+ StackNavigator,
575
+ TabBarStyle,
576
+ TabNavigator,
577
+ use_focus_effect,
578
+ use_is_focused,
579
+ use_navigation,
580
+ use_route,
581
+ use_screen_options,
582
+ )
583
+ from .net import HTTPError, Response, fetch
584
+
585
+
586
+ def __getattr__(name: str) -> Any:
587
+ module = _LAZY.get(name)
588
+ if module is None and name not in _LAZY_MODULES:
589
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
590
+ imported = importlib.import_module(f".{module or name}", __name__)
591
+ value = imported if module is None else getattr(imported, name)
592
+ globals()[name] = value
593
+ return value
594
+
595
+
596
+ def __dir__() -> list[str]:
597
+ return sorted(set(globals()) | _LAZY.keys() | _LAZY_MODULES)
@@ -1,16 +1,17 @@
1
1
  """Entry point the native app templates run right after Python starts.
2
2
 
3
- Both templates execute one line of Python once the interpreter is up:
3
+ Both templates call [`start`][pythonnative.bootstrap.start] once the
4
+ interpreter is up, on a background thread at launch:
4
5
 
5
6
  ```python
6
- import pythonnative.bootstrap; pythonnative.bootstrap.start()
7
+ pythonnative.bootstrap.start(dev, True, "app.main")
7
8
  ```
8
9
 
9
- [`start`][pythonnative.bootstrap.start] connects the two halves of the
10
- bridge (installing the native -> Python callback on iOS), verifies the
11
- protocol version, routes ``print()`` to the console on iOS, warms the
12
- asyncio runtime, and, in debug builds, starts the dev client that syncs
13
- sources from ``pn start``. From then on the native runtime drives
10
+ It connects the two halves of the bridge (installing the native -> Python
11
+ callback on iOS), verifies the protocol version, routes ``print()`` to the
12
+ console on iOS, warms the asyncio runtime, in debug builds starts the dev
13
+ client that syncs sources from ``pn start``, and imports the entry module,
14
+ so the first screen only has to render. From then on the native runtime drives
14
15
  everything through ``callback("host", ...)``; see ``docs/concepts/bridge.md``.
15
16
  """
16
17
 
@@ -19,14 +20,14 @@ from __future__ import annotations
19
20
  import os
20
21
  import sys
21
22
  import traceback
22
- from typing import Any, Dict
23
+ from typing import Any, Dict, Optional
23
24
 
24
25
  __all__ = ["start", "status"]
25
26
 
26
27
  _started: Dict[str, Any] = {}
27
28
 
28
29
 
29
- def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
30
+ def start(dev: bool = False, strict: bool = False, entry: Optional[str] = None) -> Dict[str, Any]:
30
31
  """Connect the bridge and prepare the runtime.
31
32
 
32
33
  Args:
@@ -35,6 +36,9 @@ def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
35
36
  strict: Re-raise the failure after recording it. The templates
36
37
  pass ``True`` so a broken bridge surfaces as a bootstrap
37
38
  error screen with the full traceback.
39
+ entry: The app's entry module, imported last so a broken app
40
+ fails here with its traceback, and so the first screen
41
+ doesn't pay for the import.
38
42
 
39
43
  Returns:
40
44
  A status dict (``{"protocol": 2, "platform": "ios"}``) that the
@@ -84,11 +88,20 @@ def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
84
88
 
85
89
  client = devclient.start_if_configured()
86
90
  status_["dev_server"] = client.server_label if client is not None else None
91
+ if client is None:
92
+ # No server yet: the dev menu, inspector, and performance
93
+ # monitor still work locally; a connection replaces this
94
+ # agent with one that reports to DevTools.
95
+ devclient.install_local_agent()
87
96
  # An overlay from the last session may already hold assets the
88
97
  # bundle doesn't; point the native resolver at it right away.
89
98
  from .assets import configure_native
90
99
 
91
100
  configure_native()
101
+ if entry:
102
+ import importlib
103
+
104
+ importlib.import_module(entry)
92
105
  except Exception as exc:
93
106
  status_["error"] = f"{type(exc).__name__}: {exc}"
94
107
  print(f"[pn.bootstrap] start failed: {exc!r}", file=sys.stderr)
@@ -1,9 +1,9 @@
1
1
  """The native bridge: one channel between Python and Swift / Kotlin.
2
2
 
3
3
  Everything that crosses into native code goes through a
4
- [`Transport`][pythonnative.bridge.Transport] (``apply`` a transaction,
5
- ``measure`` a view, run a ``command``, drive an ``animate`` request, or
6
- ``call`` a native module), and everything native sends back arrives at
4
+ [`Transport`][pythonnative.bridge.Transport] (``apply`` a transaction, run a
5
+ ``command``, drive an ``animate`` request, or ``call`` a native module), and
6
+ everything native sends back arrives at
7
7
  [`native_callback`][pythonnative.bridge.native_callback]. The protocol
8
8
  is documented in ``docs/concepts/bridge.md``.
9
9
 
@@ -19,7 +19,7 @@ tests that want to exercise the bridge itself install a
19
19
  from __future__ import annotations
20
20
 
21
21
  import threading
22
- from typing import Callable, Optional, Protocol, Tuple
22
+ from typing import Callable, Optional, Protocol
23
23
 
24
24
  from . import codec
25
25
 
@@ -39,7 +39,13 @@ from .commits import PROTOCOL_VERSION
39
39
 
40
40
 
41
41
  class Transport(Protocol):
42
- """The Python -> native half of the bridge."""
42
+ """The Python -> native half of the bridge.
43
+
44
+ Native and browser transports run Yoga beside their widgets. Only the
45
+ headless [`FakeTransport`][pythonnative.bridge.fake.FakeTransport] lays
46
+ out in Python, so it alone also answers ``measure`` and accepts frame
47
+ (``f``) operations.
48
+ """
43
49
 
44
50
  name: str
45
51
 
@@ -49,9 +55,6 @@ class Transport(Protocol):
49
55
  def apply(self, transaction_json: str) -> str:
50
56
  """Apply one serialized transaction (a JSON array of ops)."""
51
57
 
52
- def measure(self, tag: int, max_width: float, max_height: float) -> Tuple[float, float]:
53
- """Return the intrinsic ``(width, height)`` of the view ``tag`` under the constraints."""
54
-
55
58
  def command(self, tag: int, name: str, args_json: str) -> Optional[str]:
56
59
  """Run an imperative command on one view; returns its JSON result or ``None``."""
57
60
 
@@ -61,7 +64,7 @@ class Transport(Protocol):
61
64
  def call(self, module: str, method: str, args_json: str) -> Optional[str]:
62
65
  """Call a native module method with a ``{"call_id", "args"}`` envelope."""
63
66
 
64
- def set_callback(self, callback: Callable[[str, int, str, str], Optional[str]]) -> None:
67
+ def set_callback(self, callback: Callable[[str, int, str, str], None]) -> None:
65
68
  """Install ``callback`` as the native -> Python entry point."""
66
69
 
67
70
 
@@ -154,11 +157,11 @@ def handshake() -> int:
154
157
  "installed pythonnative package."
155
158
  )
156
159
  if getattr(get_transport(), "name", "") in {"ios", "android"}:
157
- from ..sdk.schema import fingerprint
160
+ from ..sdk.schema import YOGA_VERSION, fingerprint
158
161
 
159
162
  reply = codec.loads(get_transport().call("Runtime", "capabilities", codec.dumps({"id": 0, "args": {}})))
160
163
  capabilities = reply.get("value", {}) if isinstance(reply, dict) else {}
161
- if capabilities.get("schema") != fingerprint() or capabilities.get("yoga") != "3.2.1":
164
+ if capabilities.get("schema") != fingerprint() or capabilities.get("yoga") != YOGA_VERSION:
162
165
  raise RuntimeError("Native component contracts changed. Rebuild the app with 'pn run'.")
163
166
  return version
164
167
 
@@ -168,74 +171,78 @@ def handshake() -> int:
168
171
  # ======================================================================
169
172
 
170
173
 
171
- # Callback threads coalesce continuous input before the application loop drains.
174
+ # Callback threads coalesce continuous input before the application loop
175
+ # drains. Native callback threads and the loop both change the table.
172
176
  _continuous: dict[tuple[int, str], list[str]] = {}
177
+ _continuous_lock = threading.Lock()
178
+ _CONTINUOUS_EVENTS = frozenset({"on_scroll", "on_window", "on_selection_change", "on_gesture_update"})
173
179
 
174
180
 
175
181
  def _deliver_continuous(tag: int, name: str, slot: list[str]) -> None:
176
- if _continuous.get((tag, name)) is slot:
177
- _continuous.pop((tag, name), None)
178
- native_callback("event", tag, name, slot[0])
182
+ with _continuous_lock:
183
+ if _continuous.get((tag, name)) is slot:
184
+ del _continuous[(tag, name)]
185
+ payload = slot[0]
186
+ native_callback("event", tag, name, payload)
179
187
 
180
188
 
181
- def native_callback(kind: str, tag: int, name: str, payload: str) -> Optional[str]:
189
+ def native_callback(kind: str, tag: int, name: str, payload: str) -> None:
182
190
  """Single entry point for every native -> Python message.
183
191
 
192
+ Native delivers every message asynchronously, from its events thread,
193
+ and never waits for a result. This function never raises: failures
194
+ are reported through ``diagnostics`` so nothing propagates into UIKit
195
+ or the Android looper.
196
+
184
197
  Args:
185
- kind: ``"event"``, ``"module"``, ``"host"``, ``"animation"``,
186
- or ``"pump"``.
198
+ kind: ``"event"``, ``"module"``, ``"host"``, ``"animation"``, or
199
+ ``"layout"``.
187
200
  tag: View tag (events), screen id (host), otherwise ``0``.
188
201
  name: Event name, module name, or host event.
189
202
  payload: JSON text whose shape depends on ``kind``.
190
-
191
- Returns:
192
- A JSON string for request-style messages (a handler's return
193
- value, ``"true"`` / ``"false"`` for ``back_pressed``), else
194
- ``None``. Never raises: failures are reported through
195
- ``diagnostics`` so nothing propagates into UIKit or the
196
- Android looper.
197
203
  """
198
204
  from ..runtime import _on_loop_thread, get_loop
199
205
 
200
206
  loop = get_loop()
201
207
  if loop.is_running() and not _on_loop_thread(loop):
202
- if kind == "event" and name in {"on_scroll", "on_window", "on_selection_change", "on_gesture_update"}:
208
+ if kind == "event" and name in _CONTINUOUS_EVENTS:
203
209
  key = (tag, name)
204
- slot = _continuous.get(key)
205
- if slot is None:
206
- slot = [payload]
207
- _continuous[key] = slot
208
- loop.call_soon_threadsafe(_deliver_continuous, tag, name, slot)
209
- else:
210
- slot[0] = payload
210
+ with _continuous_lock:
211
+ slot = _continuous.get(key)
212
+ if slot is not None:
213
+ slot[0] = payload
214
+ return None
215
+ slot = _continuous[key] = [payload]
216
+ loop.call_soon_threadsafe(_deliver_continuous, tag, name, slot)
211
217
  else:
212
- _continuous.clear()
218
+ # Later continuous input starts a new slot, delivered after
219
+ # this discrete message.
220
+ with _continuous_lock:
221
+ _continuous.clear()
213
222
  loop.call_soon_threadsafe(native_callback, kind, tag, name, payload)
214
- return None
223
+ return
215
224
  try:
216
225
  if kind == "layout":
217
226
  from ..native_views import get_backend
218
227
 
219
228
  get_backend().accept_layout(codec.loads(payload))
220
- return None
221
- if kind == "event":
222
- return _on_event(int(tag), name, payload)
223
- if kind == "module":
229
+ elif kind == "event":
230
+ _on_event(int(tag), name, payload)
231
+ elif kind == "module":
224
232
  from ..native_modules.registry import dispatch_module_message
225
233
 
226
234
  dispatch_module_message(name, codec.loads(payload) or {})
227
- return None
228
- if kind == "host":
235
+ elif kind == "host":
229
236
  from ..hosts.native import dispatch_host_event
230
237
 
231
- return dispatch_host_event(int(tag), name, codec.loads(payload))
232
- if kind == "animation":
238
+ dispatch_host_event(int(tag), name, codec.loads(payload))
239
+ elif kind == "animation":
233
240
  from ..animated import native_animation_completed
234
241
 
235
242
  data = codec.loads(payload) or {}
236
243
  native_animation_completed(int(data.get("id", 0)), bool(data.get("finished", True)))
237
- return None
238
- print(f"[pn.bridge] unknown callback kind {kind!r}")
244
+ else:
245
+ print(f"[pn.bridge] unknown callback kind {kind!r}")
239
246
  except Exception as exc:
240
247
  from .. import diagnostics
241
248
 
@@ -243,10 +250,9 @@ def native_callback(kind: str, tag: int, name: str, payload: str) -> Optional[st
243
250
  import traceback
244
251
 
245
252
  traceback.print_exc()
246
- return None
247
253
 
248
254
 
249
- def _on_event(tag: int, name: str, payload: str) -> Optional[str]:
255
+ def _on_event(tag: int, name: str, payload: str) -> None:
250
256
  from ..events import get_event_registry
251
257
 
252
258
  args = codec.loads(payload)
@@ -255,21 +261,20 @@ def _on_event(tag: int, name: str, payload: str) -> Optional[str]:
255
261
  backend = get_backend()
256
262
  defer = getattr(backend, "defer_event", None)
257
263
  if defer is not None and defer(tag, name, args):
258
- return None
264
+ return
259
265
  accept = getattr(backend, "accept_event", None)
260
266
  if accept is not None:
261
267
  if not accept(tag, name, args):
262
- return None
268
+ return
263
269
  args = args["args"]
264
270
  if args is None:
265
271
  args = []
266
272
  elif not isinstance(args, list):
267
273
  args = [args]
268
- callback = get_event_registry().get(tag, name)
269
- if callback is None:
270
- return None
274
+ if get_event_registry().get(tag, name) is None:
275
+ return
271
276
  try:
272
- result = get_event_registry().invoke(tag, name, *args)
277
+ get_event_registry().invoke(tag, name, *args)
273
278
  except Exception as exc:
274
279
  from .. import diagnostics
275
280
 
@@ -277,15 +282,6 @@ def _on_event(tag: int, name: str, payload: str) -> Optional[str]:
277
282
  import traceback
278
283
 
279
284
  traceback.print_exc()
280
- return None
281
- import inspect
282
-
283
- if result is None or inspect.isawaitable(result):
284
- return None
285
- try:
286
- return codec.dumps(codec.to_jsonable(result))
287
- except (TypeError, ValueError):
288
- return None
289
285
 
290
286
 
291
287
  def _reset_for_tests() -> None: