pythonnative 0.48.0__tar.gz → 0.49.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 (598) hide show
  1. {pythonnative-0.48.0/src/pythonnative.egg-info → pythonnative-0.49.0}/PKG-INFO +1 -1
  2. {pythonnative-0.48.0 → pythonnative-0.49.0}/pyproject.toml +2 -1
  3. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/__init__.py +94 -26
  4. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bootstrap.py +17 -9
  5. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/__init__.py +58 -62
  6. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/android.py +2 -14
  7. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/commits.py +16 -5
  8. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/fake.py +9 -9
  9. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/ios.py +7 -40
  10. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/web.py +4 -45
  11. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/cli/pn.py +4 -1
  12. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/component.py +111 -8
  13. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/__init__.py +19 -4
  14. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/_base.py +1 -1
  15. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/bridge.js +3 -28
  16. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/host.js +10 -23
  17. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/renderer.js +6 -30
  18. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/shell.js +0 -2
  19. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/diagnostics.py +19 -8
  20. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/hooks.py +53 -12
  21. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/hosts/native.py +5 -7
  22. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/journal.py +118 -19
  23. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/layout.py +4 -2
  24. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/AndroidManifest.xml +3 -3
  25. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +3 -1
  26. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +41 -54
  27. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +4 -4
  28. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +97 -45
  29. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +4 -11
  30. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +4 -8
  31. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +6 -12
  32. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +0 -1
  33. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +8 -10
  34. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/NativeLifecycleTest.kt +28 -0
  35. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +2 -4
  36. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +48 -61
  37. pythonnative-0.49.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +181 -0
  38. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +3 -11
  39. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +7 -10
  40. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +11 -3
  41. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +105 -105
  42. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +3 -1
  43. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +0 -1
  44. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +69 -21
  45. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +20 -3
  46. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractParityTests.swift +0 -1
  47. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNLifecycleTests.swift +11 -3
  48. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNParityTests.swift +1 -2
  49. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +1 -1
  50. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/profiling.py +3 -1
  51. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/android.py +12 -5
  52. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/artifacts.py +44 -0
  53. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/builder.py +44 -30
  54. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/bundle.py +1 -0
  55. pythonnative-0.49.0/src/pythonnative/project/bytecode.py +81 -0
  56. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/doctor.py +3 -5
  57. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/ios.py +15 -4
  58. pythonnative-0.49.0/src/pythonnative/project/runtime_assets.py +373 -0
  59. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/core.py +19 -10
  60. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/vnode.py +13 -1
  61. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/refresh.py +42 -9
  62. pythonnative-0.49.0/src/pythonnative/sdk/_builtin_contracts.json +1 -0
  63. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/builtins.py +33 -6
  64. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/codegen.py +3 -3
  65. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/contract_codegen.py +2 -0
  66. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/schema.py +144 -19
  67. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/templates/contracts.kt +2 -0
  68. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/templates/contracts.swift +2 -0
  69. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/build.gradle +0 -4
  70. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +0 -4
  71. pythonnative-0.49.0/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +167 -0
  72. pythonnative-0.49.0/src/pythonnative/templates/ios_template/PNFinalizePython.sh +29 -0
  73. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/AppDelegate.swift +3 -0
  74. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +68 -10
  75. pythonnative-0.49.0/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +22 -0
  76. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +3 -240
  77. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/pytest_plugin.py +1 -1
  78. {pythonnative-0.48.0 → pythonnative-0.49.0/src/pythonnative.egg-info}/PKG-INFO +1 -1
  79. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative.egg-info/SOURCES.txt +4 -5
  80. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_async_hooks.py +19 -0
  81. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_bridge.py +14 -11
  82. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_codegen.py +2 -1
  83. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_core_semantics.py +23 -0
  84. pythonnative-0.49.0/tests/test_performance_budgets.py +164 -0
  85. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_release_packaging.py +3 -0
  86. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_runtime_correctness.py +46 -12
  87. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_runtime_overhaul.py +8 -2
  88. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_web_transport.py +32 -39
  89. pythonnative-0.48.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +0 -153
  90. pythonnative-0.48.0/src/pythonnative/project/runtime_assets.py +0 -200
  91. pythonnative-0.48.0/src/pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +0 -24
  92. pythonnative-0.48.0/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +0 -130
  93. pythonnative-0.48.0/src/pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +0 -17
  94. pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +0 -23
  95. pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +0 -36
  96. pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +0 -41
  97. pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +0 -32
  98. {pythonnative-0.48.0 → pythonnative-0.49.0}/.github/workflows/release.yml +0 -0
  99. {pythonnative-0.48.0 → pythonnative-0.49.0}/LICENSE +0 -0
  100. {pythonnative-0.48.0 → pythonnative-0.49.0}/MANIFEST.in +0 -0
  101. {pythonnative-0.48.0 → pythonnative-0.49.0}/README.md +0 -0
  102. {pythonnative-0.48.0 → pythonnative-0.49.0}/scripts/check-distributions.py +0 -0
  103. {pythonnative-0.48.0 → pythonnative-0.49.0}/scripts/cibuildwheel.toml +0 -0
  104. {pythonnative-0.48.0 → pythonnative-0.49.0}/scripts/release-assets.py +0 -0
  105. {pythonnative-0.48.0 → pythonnative-0.49.0}/setup.cfg +0 -0
  106. {pythonnative-0.48.0 → pythonnative-0.49.0}/setup.py +0 -0
  107. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/_ios_log.py +0 -0
  108. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/alerts.py +0 -0
  109. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/animated.py +0 -0
  110. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/animation_graph.py +0 -0
  111. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/appearance.py +0 -0
  112. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/assets/__init__.py +0 -0
  113. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/assets/fonts.py +0 -0
  114. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/codec.py +0 -0
  115. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/list_store.py +0 -0
  116. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/cli/__init__.py +0 -0
  117. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/controls.py +0 -0
  118. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/events.py +0 -0
  119. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/graphics.py +0 -0
  120. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/layout.py +0 -0
  121. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/lists.py +0 -0
  122. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/media.py +0 -0
  123. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/overlays.py +0 -0
  124. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/pressable.py +0 -0
  125. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/props.py +0 -0
  126. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/structural.py +0 -0
  127. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/text.py +0 -0
  128. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devclient.py +0 -0
  129. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/__init__.py +0 -0
  130. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/auth.py +0 -0
  131. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/server.py +0 -0
  132. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/animation_graph.js +0 -0
  133. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/assets.js +0 -0
  134. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/colors.js +0 -0
  135. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/contracts.js +0 -0
  136. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/index.html +0 -0
  137. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/layout.js +0 -0
  138. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/list-store.js +0 -0
  139. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/preview.css +0 -0
  140. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/LICENSE +0 -0
  141. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +0 -0
  142. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +0 -0
  143. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js +0 -0
  144. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +0 -0
  145. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/index.d.ts +0 -0
  146. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/index.js +0 -0
  147. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/index.js.map +0 -0
  148. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/load.d.ts +0 -0
  149. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/load.js +0 -0
  150. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/load.js.map +0 -0
  151. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +0 -0
  152. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js +0 -0
  153. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +0 -0
  154. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/watcher.py +0 -0
  155. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/ws.py +0 -0
  156. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/element.py +0 -0
  157. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/equality.py +0 -0
  158. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/events.py +0 -0
  159. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/gestures.py +0 -0
  160. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/handles.py +0 -0
  161. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/hosts/__init__.py +0 -0
  162. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/hosts/base.py +0 -0
  163. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/hot_reload.py +0 -0
  164. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/icons/LICENSE-lucide.txt +0 -0
  165. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/icons/__init__.py +0 -0
  166. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/icons/_lucide.json +0 -0
  167. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/icons/_names.py +0 -0
  168. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/lint.py +0 -0
  169. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/list_data.py +0 -0
  170. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/mutations.py +0 -0
  171. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/build.gradle +0 -0
  172. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/gradle.properties +0 -0
  173. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/settings.gradle +0 -0
  174. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/cpp/CMakeLists.txt +0 -0
  175. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/cpp/yoga_jni.cpp +0 -0
  176. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +0 -0
  177. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +0 -0
  178. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeValues.kt +0 -0
  179. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +0 -0
  180. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +0 -0
  181. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +0 -0
  182. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/assets/PNAssets.kt +0 -0
  183. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +0 -0
  184. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +0 -0
  185. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +0 -0
  186. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +0 -0
  187. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +0 -0
  188. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +0 -0
  189. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +0 -0
  190. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +0 -0
  191. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +0 -0
  192. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +0 -0
  193. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/EffectManagers.kt +0 -0
  194. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +0 -0
  195. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +0 -0
  196. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ListStore.kt +0 -0
  197. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +0 -0
  198. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +0 -0
  199. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNTheme.kt +0 -0
  200. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +0 -0
  201. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +0 -0
  202. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +0 -0
  203. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +0 -0
  204. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenTransitions.kt +0 -0
  205. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +0 -0
  206. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +0 -0
  207. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +0 -0
  208. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SvgManager.kt +0 -0
  209. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +0 -0
  210. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +0 -0
  211. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +0 -0
  212. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +0 -0
  213. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +0 -0
  214. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +0 -0
  215. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +0 -0
  216. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +0 -0
  217. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +0 -0
  218. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/graphics/SvgPath.kt +0 -0
  219. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +0 -0
  220. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/AssetModules.kt +0 -0
  221. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +0 -0
  222. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +0 -0
  223. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/ErrorOverlay.kt +0 -0
  224. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +0 -0
  225. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +0 -0
  226. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +0 -0
  227. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +0 -0
  228. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +0 -0
  229. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PlatformModules.kt +0 -0
  230. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +0 -0
  231. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +0 -0
  232. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +0 -0
  233. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNKeyboard.kt +0 -0
  234. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +0 -0
  235. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +0 -0
  236. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +0 -0
  237. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +0 -0
  238. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +0 -0
  239. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNScrollViews.kt +0 -0
  240. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_fade_in.xml +0 -0
  241. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_fade_out.xml +0 -0
  242. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_hold.xml +0 -0
  243. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_bottom.xml +0 -0
  244. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_left.xml +0 -0
  245. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_right.xml +0 -0
  246. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_bottom.xml +0 -0
  247. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_left.xml +0 -0
  248. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_right.xml +0 -0
  249. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/drawable/pn_ic_arrow_back.xml +0 -0
  250. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/values/pn_ids.xml +0 -0
  251. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/xml/pn_file_paths.xml +0 -0
  252. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/generated/PNRecordFixtures.kt +0 -0
  253. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +0 -0
  254. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AssetsAndSvgTest.kt +0 -0
  255. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ContractFixtureTest.kt +0 -0
  256. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +0 -0
  257. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +0 -0
  258. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +0 -0
  259. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundOneRobolectricTest.kt +0 -0
  260. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoLogicTest.kt +0 -0
  261. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoRobolectricTest.kt +0 -0
  262. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ScreenTransitionsTest.kt +0 -0
  263. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/StyleAccessibilityDeviceTest.kt +0 -0
  264. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Package.swift +0 -0
  265. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +0 -0
  266. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +0 -0
  267. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +0 -0
  268. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +0 -0
  269. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +0 -0
  270. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +0 -0
  271. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +0 -0
  272. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +0 -0
  273. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +0 -0
  274. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNEffectManagers.swift +0 -0
  275. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +0 -0
  276. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNListStore.swift +0 -0
  277. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +0 -0
  278. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +0 -0
  279. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +0 -0
  280. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +0 -0
  281. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNSvgManager.swift +0 -0
  282. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +0 -0
  283. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +0 -0
  284. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +0 -0
  285. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +0 -0
  286. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +0 -0
  287. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +0 -0
  288. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +0 -0
  289. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +0 -0
  290. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeValues.swift +0 -0
  291. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +0 -0
  292. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +0 -0
  293. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/EnvironmentModules.swift +0 -0
  294. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +0 -0
  295. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/ImagesModule.swift +0 -0
  296. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +0 -0
  297. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +0 -0
  298. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNErrorOverlay.swift +0 -0
  299. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +0 -0
  300. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +0 -0
  301. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +0 -0
  302. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +0 -0
  303. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Resources/PrivacyInfo.xcprivacy +0 -0
  304. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +0 -0
  305. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNAssets.swift +0 -0
  306. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +0 -0
  307. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +0 -0
  308. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +0 -0
  309. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +0 -0
  310. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/project.pbxproj +0 -0
  311. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/xcshareddata/xcschemes/NativeTests.xcscheme +0 -0
  312. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/validation.json +0 -0
  313. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +0 -0
  314. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAssetTests.swift +0 -0
  315. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +0 -0
  316. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractFixtureTests.swift +0 -0
  317. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +0 -0
  318. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +0 -0
  319. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +0 -0
  320. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNRecordFixtures.swift +0 -0
  321. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/TestHost/main.swift +0 -0
  322. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/LICENSE +0 -0
  323. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/Package.swift +0 -0
  324. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/VENDORED.md +0 -0
  325. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/PNStyle.h +0 -0
  326. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/module.modulemap +0 -0
  327. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGConfig.h +0 -0
  328. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGEnums.h +0 -0
  329. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGMacros.h +0 -0
  330. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGNode.h +0 -0
  331. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGNodeLayout.h +0 -0
  332. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGNodeStyle.h +0 -0
  333. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGPixelGrid.h +0 -0
  334. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGValue.h +0 -0
  335. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/Yoga.h +0 -0
  336. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/python.cpp +0 -0
  337. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/style.cpp +0 -0
  338. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/CMakeLists.txt +0 -0
  339. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGConfig.cpp +0 -0
  340. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGConfig.h +0 -0
  341. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGEnums.cpp +0 -0
  342. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGEnums.h +0 -0
  343. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGMacros.h +0 -0
  344. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNode.cpp +0 -0
  345. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNode.h +0 -0
  346. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.cpp +0 -0
  347. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.h +0 -0
  348. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.cpp +0 -0
  349. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.h +0 -0
  350. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.cpp +0 -0
  351. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.h +0 -0
  352. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGValue.cpp +0 -0
  353. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGValue.h +0 -0
  354. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/Yoga.h +0 -0
  355. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +0 -0
  356. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +0 -0
  357. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/Align.h +0 -0
  358. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +0 -0
  359. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.h +0 -0
  360. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +0 -0
  361. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.cpp +0 -0
  362. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.h +0 -0
  363. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +0 -0
  364. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +0 -0
  365. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +0 -0
  366. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +0 -0
  367. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.h +0 -0
  368. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +0 -0
  369. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +0 -0
  370. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/SizingMode.h +0 -0
  371. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +0 -0
  372. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/config/Config.cpp +0 -0
  373. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/config/Config.h +0 -0
  374. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +0 -0
  375. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.h +0 -0
  376. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/debug/Log.cpp +0 -0
  377. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/debug/Log.h +0 -0
  378. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Align.h +0 -0
  379. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/BoxSizing.h +0 -0
  380. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Dimension.h +0 -0
  381. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Direction.h +0 -0
  382. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Display.h +0 -0
  383. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Edge.h +0 -0
  384. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Errata.h +0 -0
  385. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +0 -0
  386. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/FlexDirection.h +0 -0
  387. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Gutter.h +0 -0
  388. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Justify.h +0 -0
  389. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/LogLevel.h +0 -0
  390. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/MeasureMode.h +0 -0
  391. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/NodeType.h +0 -0
  392. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Overflow.h +0 -0
  393. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +0 -0
  394. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/PositionType.h +0 -0
  395. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Unit.h +0 -0
  396. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Wrap.h +0 -0
  397. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/YogaEnums.h +0 -0
  398. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/event/event.cpp +0 -0
  399. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/event/event.h +0 -0
  400. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/module.modulemap +0 -0
  401. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/CachedMeasurement.h +0 -0
  402. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.cpp +0 -0
  403. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.h +0 -0
  404. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/LayoutableChildren.h +0 -0
  405. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/Node.cpp +0 -0
  406. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/Node.h +0 -0
  407. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/numeric/Comparison.h +0 -0
  408. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/numeric/FloatOptional.h +0 -0
  409. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +0 -0
  410. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/style/Style.h +0 -0
  411. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/style/StyleLength.h +0 -0
  412. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/style/StyleValueHandle.h +0 -0
  413. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/style/StyleValuePool.h +0 -0
  414. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/__init__.py +0 -0
  415. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/accessibility_info.py +0 -0
  416. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/app_state.py +0 -0
  417. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/battery.py +0 -0
  418. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/biometrics.py +0 -0
  419. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/camera.py +0 -0
  420. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/clipboard.py +0 -0
  421. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/device.py +0 -0
  422. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/dimensions.py +0 -0
  423. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/fallback.py +0 -0
  424. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/file_system.py +0 -0
  425. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/haptics.py +0 -0
  426. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/images.py +0 -0
  427. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/keyboard.py +0 -0
  428. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/linking.py +0 -0
  429. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/localization.py +0 -0
  430. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/location.py +0 -0
  431. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/net_info.py +0 -0
  432. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/notifications.py +0 -0
  433. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/permissions.py +0 -0
  434. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/registry.py +0 -0
  435. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/secure_store.py +0 -0
  436. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/share.py +0 -0
  437. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_views/__init__.py +0 -0
  438. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_views/bridge_backend.py +0 -0
  439. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/__init__.py +0 -0
  440. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/container.py +0 -0
  441. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/handle.py +0 -0
  442. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/hooks.py +0 -0
  443. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/host.py +0 -0
  444. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/linking.py +0 -0
  445. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/navigators.py +0 -0
  446. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/ref.py +0 -0
  447. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/screen.py +0 -0
  448. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/state.py +0 -0
  449. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/net.py +0 -0
  450. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/platform.py +0 -0
  451. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/platform_metrics.py +0 -0
  452. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/preview.py +0 -0
  453. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/__init__.py +0 -0
  454. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/config.py +0 -0
  455. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/deps.py +0 -0
  456. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/devices.py +0 -0
  457. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/fingerprint.py +0 -0
  458. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/icons.py +0 -0
  459. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/lockfile.py +0 -0
  460. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/permissions.py +0 -0
  461. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/plugins.py +0 -0
  462. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/prop_checks.py +0 -0
  463. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/py.typed +0 -0
  464. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/query.py +0 -0
  465. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/__init__.py +0 -0
  466. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/boundaries.py +0 -0
  467. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/children.py +0 -0
  468. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/layout_pass.py +0 -0
  469. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/runtime.py +0 -0
  470. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/scheduler.py +0 -0
  471. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/__init__.py +0 -0
  472. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/_components.py +0 -0
  473. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/commands.py +0 -0
  474. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/module_codegen.py +0 -0
  475. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/native_types.py +0 -0
  476. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/services.py +0 -0
  477. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/templates/values.kt +0 -0
  478. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/templates/values.swift +0 -0
  479. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/types.py +0 -0
  480. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/storage.py +0 -0
  481. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/store.py +0 -0
  482. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/style.py +0 -0
  483. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/suspense.py +0 -0
  484. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/svg.py +0 -0
  485. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/proguard-rules.pro +0 -0
  486. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +0 -0
  487. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +0 -0
  488. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  489. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -0
  490. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +0 -0
  491. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  492. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  493. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  494. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  495. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  496. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  497. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  498. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  499. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  500. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  501. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  502. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  503. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +0 -0
  504. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/values/colors.xml +0 -0
  505. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/values/strings.xml +0 -0
  506. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/values/themes.xml +0 -0
  507. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +0 -0
  508. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +0 -0
  509. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  510. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/build.gradle +0 -0
  511. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
  512. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +0 -0
  513. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/gradle.properties +0 -0
  514. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/gradlew +0 -0
  515. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/gradlew.bat +0 -0
  516. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/settings.gradle +0 -0
  517. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  518. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  519. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +0 -0
  520. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +0 -0
  521. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/BridgingHeader.h +0 -0
  522. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/Info.plist +0 -0
  523. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/PrivacyInfo.xcprivacy +0 -0
  524. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +0 -0
  525. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  526. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/__init__.py +0 -0
  527. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/backend.py +0 -0
  528. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/clock.py +0 -0
  529. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/harness.py +0 -0
  530. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/queries.py +0 -0
  531. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/theme.py +0 -0
  532. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/utils.py +0 -0
  533. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative.egg-info/dependency_links.txt +0 -0
  534. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative.egg-info/entry_points.txt +0 -0
  535. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative.egg-info/requires.txt +0 -0
  536. {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative.egg-info/top_level.txt +0 -0
  537. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_alert.py +0 -0
  538. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_animated.py +0 -0
  539. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_animated_easing.py +0 -0
  540. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_animated_graph.py +0 -0
  541. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_appearance.py +0 -0
  542. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_assets.py +0 -0
  543. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_authoring.py +0 -0
  544. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_cli.py +0 -0
  545. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_components.py +0 -0
  546. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_contract_fixtures.py +0 -0
  547. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_devclient.py +0 -0
  548. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_device_modules.py +0 -0
  549. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_devserver.py +0 -0
  550. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_devserver_ws.py +0 -0
  551. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_e2e_suite_renders.py +0 -0
  552. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_element.py +0 -0
  553. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_events.py +0 -0
  554. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_extended_components.py +0 -0
  555. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_gesture_activation.py +0 -0
  556. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_gesture_composition.py +0 -0
  557. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_gestures.py +0 -0
  558. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_handles.py +0 -0
  559. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_hooks.py +0 -0
  560. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_hosts.py +0 -0
  561. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_hot_reload.py +0 -0
  562. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_identity_bailout.py +0 -0
  563. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_inbox.py +0 -0
  564. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_incremental_pipeline.py +0 -0
  565. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_incremental_render.py +0 -0
  566. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_interaction_props.py +0 -0
  567. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_ios_log.py +0 -0
  568. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_layout.py +0 -0
  569. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_lint.py +0 -0
  570. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_list_features.py +0 -0
  571. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_metric_hooks.py +0 -0
  572. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_mutations.py +0 -0
  573. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_native_lists.py +0 -0
  574. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_native_modules.py +0 -0
  575. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_native_values.py +0 -0
  576. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_native_views.py +0 -0
  577. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_navigation.py +0 -0
  578. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_net.py +0 -0
  579. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_new_components.py +0 -0
  580. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_platform.py +0 -0
  581. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_platform_metrics.py +0 -0
  582. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_reconciler.py +0 -0
  583. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_ref.py +0 -0
  584. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_release_workflow.py +0 -0
  585. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_runtime.py +0 -0
  586. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_runtime_contracts.py +0 -0
  587. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_sdk.py +0 -0
  588. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_smoke.py +0 -0
  589. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_storage.py +0 -0
  590. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_store.py +0 -0
  591. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_style.py +0 -0
  592. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_suspense.py +0 -0
  593. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_testing_library.py +0 -0
  594. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_theme.py +0 -0
  595. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_transitions.py +0 -0
  596. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_typed_events.py +0 -0
  597. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_typing_conformance.py +0 -0
  598. {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.48.0
3
+ Version: 0.49.0
4
4
  Summary: Cross-platform native UI toolkit for Android and iOS
5
5
  Author: Owen Carey
6
6
  License: MIT License
@@ -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.49.0"
8
8
  description = "Cross-platform native UI toolkit for Android and iOS"
9
9
  authors = [
10
10
  { name = "Owen Carey" }
@@ -99,6 +99,7 @@ pythonnative = [
99
99
  "templates/**", "native/**", "sdk/templates/**",
100
100
  "devserver/static/**",
101
101
  "icons/_lucide.json", "icons/LICENSE-lucide.txt",
102
+ "sdk/_builtin_contracts.json",
102
103
  ]
103
104
 
104
105
  [tool.setuptools.exclude-package-data]
@@ -66,11 +66,13 @@ Example:
66
66
  ```
67
67
  """
68
68
 
69
- __version__ = "0.48.0"
69
+ __version__ = "0.49.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
@@ -89,6 +93,10 @@ def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
89
93
  from .assets import configure_native
90
94
 
91
95
  configure_native()
96
+ if entry:
97
+ import importlib
98
+
99
+ importlib.import_module(entry)
92
100
  except Exception as exc:
93
101
  status_["error"] = f"{type(exc).__name__}: {exc}"
94
102
  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:
@@ -10,7 +10,7 @@ through Chaquopy; this transport therefore has nothing to register.
10
10
 
11
11
  from __future__ import annotations
12
12
 
13
- from typing import Any, Callable, Optional, Tuple
13
+ from typing import Any, Callable, Optional
14
14
 
15
15
  __all__ = ["AndroidTransport"]
16
16
 
@@ -44,18 +44,6 @@ class AndroidTransport:
44
44
  """Apply one serialized transaction (a JSON array of ops)."""
45
45
  return str(self._bridge.apply(transaction_json))
46
46
 
47
- def measure(self, tag: int, max_width: float, max_height: float) -> Tuple[float, float]:
48
- """Return the intrinsic ``(width, height)`` of the view ``tag`` under the constraints."""
49
- packed = self._bridge.measure(int(tag), float(max_width), float(max_height))
50
- if not packed:
51
- return (0.0, 0.0)
52
- text = str(packed)
53
- w, _, h = text.partition(",")
54
- try:
55
- return (float(w), float(h))
56
- except ValueError:
57
- return (0.0, 0.0)
58
-
59
47
  def command(self, tag: int, name: str, args_json: str) -> Optional[str]:
60
48
  """Run an imperative command on one view; returns its JSON result or ``None``."""
61
49
  return _opt_str(self._bridge.command(int(tag), name, args_json))
@@ -68,7 +56,7 @@ class AndroidTransport:
68
56
  """Call a native module method with a ``{"call_id", "args"}`` envelope."""
69
57
  return _opt_str(self._bridge.call(module, method, args_json))
70
58
 
71
- def set_callback(self, callback: Callable[[str, int, str, str], Optional[str]]) -> None:
59
+ def set_callback(self, callback: Callable[[str, int, str, str], None]) -> None:
72
60
  """No-op: the Android template installs the host through ``PNBridge.setHost``."""
73
61
  del callback
74
62
 
@@ -1,8 +1,14 @@
1
1
  """Versioned commit validation and surface ownership.
2
2
 
3
- A commit is validated in full before it changes a native tree. Revisions are
4
- strictly consecutive within an application and surface. A failed native mount
5
- poisons that surface until the host explicitly resets and remounts it.
3
+ A commit's structure is validated in full before it changes a native tree.
4
+ Revisions are strictly consecutive within an application and surface. A
5
+ failed native mount poisons that surface until the host explicitly resets and
6
+ remounts it.
7
+
8
+ Props are checked against component schemas only in development, where
9
+ Python can name the component and prop that's wrong. The native runtimes
10
+ validate every commit with generated validators in every build, so release
11
+ builds don't pay for the same check twice.
6
12
  """
7
13
 
8
14
  from __future__ import annotations
@@ -15,7 +21,8 @@ from typing import Any, Callable
15
21
  from ..profiling import count, profiled
16
22
  from .list_store import ListStore
17
23
 
18
- PROTOCOL_VERSION = 4
24
+ PROTOCOL_VERSION = 5
25
+ """The bridge protocol every runtime speaks; generated native contracts carry it."""
19
26
 
20
27
 
21
28
  class CommitError(RuntimeError):
@@ -103,7 +110,7 @@ class CommitState:
103
110
  def prepare(self, envelope: Any) -> CommitState:
104
111
  """Validate without mutating this state and return the candidate state."""
105
112
  if not isinstance(envelope, dict) or envelope.get("version") != PROTOCOL_VERSION:
106
- raise CommitError("Expected a protocol v4 commit envelope; rebuild the native client")
113
+ raise CommitError(f"Expected a protocol v{PROTOCOL_VERSION} commit envelope; rebuild the native client")
107
114
  application, surface, revision = (envelope.get(k) for k in ("application", "surface", "revision"))
108
115
  if not isinstance(application, str) or not application or type(surface) is not int or surface <= 0:
109
116
  raise CommitError("Invalid application or surface identity")
@@ -209,6 +216,10 @@ class CommitState:
209
216
 
210
217
  @staticmethod
211
218
  def _validate_props(name: str, props: dict[str, Any], partial: bool) -> None:
219
+ from .. import diagnostics
220
+
221
+ if not diagnostics.is_dev():
222
+ return
212
223
  from ..sdk.schema import COMPONENTS
213
224
 
214
225
  schema = COMPONENTS.get(name)
@@ -83,7 +83,7 @@ class FakeTransport:
83
83
  """Return the protocol version compiled into the native library."""
84
84
  return self._version
85
85
 
86
- def set_callback(self, callback: Callable[[str, int, str, str], Optional[str]]) -> None:
86
+ def set_callback(self, callback: Callable[[str, int, str, str], None]) -> None:
87
87
  """Install ``callback`` as the native -> Python entry point."""
88
88
  self.callback = callback
89
89
 
@@ -184,13 +184,13 @@ class FakeTransport:
184
184
 
185
185
  # -- Playing the native side ------------------------------------------
186
186
 
187
- def fire(self, tag: int, name: str, *args: Any) -> Any:
188
- """Emit a view event as native would; returns the decoded handler result."""
187
+ def fire(self, tag: int, name: str, *args: Any) -> None:
188
+ """Emit a view event as native would."""
189
189
  self._event_sequence = getattr(self, "_event_sequence", 0) + 1
190
190
  envelope = self.commit_state.acknowledgement()
191
191
  envelope.pop("ok")
192
192
  envelope.update(sequence=self._event_sequence, args=[codec.to_jsonable(a) for a in args])
193
- return self._callback("event", tag, name, codec.dumps(envelope))
193
+ self._callback("event", tag, name, codec.dumps(envelope))
194
194
 
195
195
  def emit_module_event(self, module: str, event: str, payload: Any = None) -> None:
196
196
  """Push an unsolicited module event (``AppState`` ``change``, ...) into Python."""
@@ -209,18 +209,18 @@ class FakeTransport:
209
209
  body["error"] = error
210
210
  self._callback("module", 0, module, codec.dumps(body))
211
211
 
212
- def host_event(self, screen: int, event: str, payload: Any = None) -> Any:
213
- """Deliver a screen lifecycle event as the native host would; returns the decoded result."""
214
- return self._callback("host", screen, event, codec.dumps(codec.to_jsonable(payload)))
212
+ def host_event(self, screen: int, event: str, payload: Any = None) -> None:
213
+ """Deliver a screen lifecycle event as the native host would."""
214
+ self._callback("host", screen, event, codec.dumps(codec.to_jsonable(payload)))
215
215
 
216
216
  def complete_animation(self, anim_id: int, finished: bool = True) -> None:
217
217
  """Report a native animation as finished (or interrupted) to Python."""
218
218
  self._callback("animation", 0, "", codec.dumps({"id": anim_id, "finished": finished}))
219
219
 
220
- def _callback(self, kind: str, tag: int, name: str, payload: str) -> Any:
220
+ def _callback(self, kind: str, tag: int, name: str, payload: str) -> None:
221
221
  if self.callback is None:
222
222
  raise AssertionError("FakeTransport has no callback; install it with pythonnative.bridge.set_transport")
223
- return codec.loads(self.callback(kind, tag, name, payload))
223
+ self.callback(kind, tag, name, payload)
224
224
 
225
225
  # -- Introspection -----------------------------------------------------
226
226