pythonnative 0.52.0__tar.gz → 0.52.2__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 (617) hide show
  1. {pythonnative-0.52.0/src/pythonnative.egg-info → pythonnative-0.52.2}/PKG-INFO +1 -1
  2. {pythonnative-0.52.0 → pythonnative-0.52.2}/pyproject.toml +1 -1
  3. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/__init__.py +1 -1
  4. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/navigation/linking.py +47 -2
  5. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/lockfile.py +6 -1
  6. {pythonnative-0.52.0 → pythonnative-0.52.2/src/pythonnative.egg-info}/PKG-INFO +1 -1
  7. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative.egg-info/SOURCES.txt +1 -0
  8. pythonnative-0.52.2/tests/test_equality.py +67 -0
  9. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_navigation.py +202 -0
  10. {pythonnative-0.52.0 → pythonnative-0.52.2}/.github/workflows/release.yml +0 -0
  11. {pythonnative-0.52.0 → pythonnative-0.52.2}/LICENSE +0 -0
  12. {pythonnative-0.52.0 → pythonnative-0.52.2}/MANIFEST.in +0 -0
  13. {pythonnative-0.52.0 → pythonnative-0.52.2}/README.md +0 -0
  14. {pythonnative-0.52.0 → pythonnative-0.52.2}/scripts/check-distributions.py +0 -0
  15. {pythonnative-0.52.0 → pythonnative-0.52.2}/scripts/cibuildwheel.toml +0 -0
  16. {pythonnative-0.52.0 → pythonnative-0.52.2}/scripts/release-assets.py +0 -0
  17. {pythonnative-0.52.0 → pythonnative-0.52.2}/setup.cfg +0 -0
  18. {pythonnative-0.52.0 → pythonnative-0.52.2}/setup.py +0 -0
  19. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/_ios_log.py +0 -0
  20. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/alerts.py +0 -0
  21. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/animated.py +0 -0
  22. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/animation_graph.py +0 -0
  23. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/appearance.py +0 -0
  24. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/assets/__init__.py +0 -0
  25. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/assets/fonts.py +0 -0
  26. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/bootstrap.py +0 -0
  27. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/bridge/__init__.py +0 -0
  28. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/bridge/android.py +0 -0
  29. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/bridge/codec.py +0 -0
  30. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/bridge/core.py +0 -0
  31. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/bridge/fake.py +0 -0
  32. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/bridge/ios.py +0 -0
  33. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/bridge/web.py +0 -0
  34. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/cli/__init__.py +0 -0
  35. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/cli/keys.py +0 -0
  36. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/cli/launch.py +0 -0
  37. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/cli/pn.py +0 -0
  38. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/component.py +0 -0
  39. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/__init__.py +0 -0
  40. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/_base.py +0 -0
  41. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/controls.py +0 -0
  42. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/events.py +0 -0
  43. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/graphics.py +0 -0
  44. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/layout.py +0 -0
  45. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/lists.py +0 -0
  46. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/media.py +0 -0
  47. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/overlays.py +0 -0
  48. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/pressable.py +0 -0
  49. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/props.py +0 -0
  50. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/structural.py +0 -0
  51. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/components/text.py +0 -0
  52. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devclient.py +0 -0
  53. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/__init__.py +0 -0
  54. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/auth.py +0 -0
  55. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/compat.py +0 -0
  56. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/editor.py +0 -0
  57. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/hub.py +0 -0
  58. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/packages.py +0 -0
  59. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/qr.py +0 -0
  60. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/server.py +0 -0
  61. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/assets.js +0 -0
  62. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/bridge.js +0 -0
  63. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/colors.js +0 -0
  64. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/core/mount.js +0 -0
  65. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/core/pn_core.js +0 -0
  66. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/core/pn_core.wasm +0 -0
  67. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devsupport.js +0 -0
  68. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/connection.js +0 -0
  69. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/devtools.css +0 -0
  70. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/devtools.js +0 -0
  71. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/index.html +0 -0
  72. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/panels/components.js +0 -0
  73. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/panels/connect.js +0 -0
  74. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/panels/console.js +0 -0
  75. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/panels/network.js +0 -0
  76. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/panels/panel.js +0 -0
  77. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/panels/performance.js +0 -0
  78. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/panels/problems.js +0 -0
  79. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/report.js +0 -0
  80. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/tree.js +0 -0
  81. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/util.js +0 -0
  82. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/devtools/values.js +0 -0
  83. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/host.js +0 -0
  84. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/index.html +0 -0
  85. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/preview.css +0 -0
  86. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/renderer.js +0 -0
  87. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/static/shell.js +0 -0
  88. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/watcher.py +0 -0
  89. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devserver/ws.py +0 -0
  90. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devtools/__init__.py +0 -0
  91. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devtools/agent.py +0 -0
  92. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devtools/console.py +0 -0
  93. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devtools/debugger.py +0 -0
  94. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devtools/inspector.py +0 -0
  95. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/devtools/perf.py +0 -0
  96. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/diagnostics.py +0 -0
  97. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/element.py +0 -0
  98. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/equality.py +0 -0
  99. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/errors.py +0 -0
  100. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/events.py +0 -0
  101. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/gestures.py +0 -0
  102. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/handles.py +0 -0
  103. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/hooks.py +0 -0
  104. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/hosts/__init__.py +0 -0
  105. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/hosts/base.py +0 -0
  106. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/hosts/native.py +0 -0
  107. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/hot_reload.py +0 -0
  108. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/icons/LICENSE-lucide.txt +0 -0
  109. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/icons/__init__.py +0 -0
  110. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/icons/_lucide.json +0 -0
  111. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/icons/_names.py +0 -0
  112. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/journal.py +0 -0
  113. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/lint.py +0 -0
  114. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/list_data.py +0 -0
  115. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/mutations.py +0 -0
  116. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/build.gradle +0 -0
  117. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/gradle.properties +0 -0
  118. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/settings.gradle +0 -0
  119. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/AndroidManifest.xml +0 -0
  120. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/cpp/CMakeLists.txt +0 -0
  121. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/cpp/pncore_jni.cpp +0 -0
  122. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +0 -0
  123. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +0 -0
  124. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeValues.kt +0 -0
  125. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +0 -0
  126. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +0 -0
  127. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +0 -0
  128. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/FrameClock.kt +0 -0
  129. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +0 -0
  130. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/assets/PNAssets.kt +0 -0
  131. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +0 -0
  132. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +0 -0
  133. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +0 -0
  134. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +0 -0
  135. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +0 -0
  136. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +0 -0
  137. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +0 -0
  138. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +0 -0
  139. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +0 -0
  140. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +0 -0
  141. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +0 -0
  142. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/EffectManagers.kt +0 -0
  143. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +0 -0
  144. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +0 -0
  145. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +0 -0
  146. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +0 -0
  147. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNTheme.kt +0 -0
  148. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +0 -0
  149. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +0 -0
  150. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +0 -0
  151. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +0 -0
  152. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenTransitions.kt +0 -0
  153. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +0 -0
  154. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +0 -0
  155. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +0 -0
  156. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SvgManager.kt +0 -0
  157. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +0 -0
  158. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +0 -0
  159. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +0 -0
  160. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +0 -0
  161. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +0 -0
  162. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +0 -0
  163. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/core/PNCore.kt +0 -0
  164. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/TouchForwarder.kt +0 -0
  165. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/graphics/SvgPath.kt +0 -0
  166. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/Measurement.kt +0 -0
  167. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/AssetModules.kt +0 -0
  168. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +0 -0
  169. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DevSupportModule.kt +0 -0
  170. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +0 -0
  171. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/ErrorOverlay.kt +0 -0
  172. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +0 -0
  173. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +0 -0
  174. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +0 -0
  175. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +0 -0
  176. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +0 -0
  177. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PlatformModules.kt +0 -0
  178. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +0 -0
  179. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +0 -0
  180. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/mount/MountDecoder.kt +0 -0
  181. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/mount/Mounter.kt +0 -0
  182. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +0 -0
  183. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNKeyboard.kt +0 -0
  184. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +0 -0
  185. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +0 -0
  186. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/text/PNTextLayout.kt +0 -0
  187. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +0 -0
  188. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +0 -0
  189. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +0 -0
  190. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +0 -0
  191. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNScrollViews.kt +0 -0
  192. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/anim/pn_fade_in.xml +0 -0
  193. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/anim/pn_fade_out.xml +0 -0
  194. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/anim/pn_hold.xml +0 -0
  195. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_bottom.xml +0 -0
  196. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_left.xml +0 -0
  197. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_right.xml +0 -0
  198. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_bottom.xml +0 -0
  199. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_left.xml +0 -0
  200. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_right.xml +0 -0
  201. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/drawable/pn_ic_arrow_back.xml +0 -0
  202. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/values/pn_ids.xml +0 -0
  203. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/main/res/xml/pn_file_paths.xml +0 -0
  204. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/generated/PNRecordFixtures.kt +0 -0
  205. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AssetsAndSvgTest.kt +0 -0
  206. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/DevSupportRobolectricTest.kt +0 -0
  207. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/MountDecoderTest.kt +0 -0
  208. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/NativeLifecycleTest.kt +0 -0
  209. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +0 -0
  210. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +0 -0
  211. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundOneRobolectricTest.kt +0 -0
  212. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoLogicTest.kt +0 -0
  213. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoRobolectricTest.kt +0 -0
  214. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ScreenTransitionsTest.kt +0 -0
  215. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/StyleAccessibilityDeviceTest.kt +0 -0
  216. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/CMakeLists.txt +0 -0
  217. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/Package.swift +0 -0
  218. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/include/module.modulemap +0 -0
  219. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/include/pn_core.h +0 -0
  220. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/python.cpp +0 -0
  221. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/animation.cpp +0 -0
  222. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/animation.h +0 -0
  223. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/contracts.cpp +0 -0
  224. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/contracts.h +0 -0
  225. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/core.cpp +0 -0
  226. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/core.h +0 -0
  227. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/gestures.cpp +0 -0
  228. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/gestures.h +0 -0
  229. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/lists.cpp +0 -0
  230. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/lists.h +0 -0
  231. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/mount.cpp +0 -0
  232. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/mount.h +0 -0
  233. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/shadow.cpp +0 -0
  234. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/shadow.h +0 -0
  235. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/style.cpp +0 -0
  236. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/style.h +0 -0
  237. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/value.cpp +0 -0
  238. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/src/value.h +0 -0
  239. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/CMakeLists.txt +0 -0
  240. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/LICENSE +0 -0
  241. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/VENDORED.md +0 -0
  242. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGConfig.cpp +0 -0
  243. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGConfig.h +0 -0
  244. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGEnums.cpp +0 -0
  245. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGEnums.h +0 -0
  246. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGMacros.h +0 -0
  247. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGNode.cpp +0 -0
  248. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGNode.h +0 -0
  249. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGNodeLayout.cpp +0 -0
  250. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGNodeLayout.h +0 -0
  251. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGNodeStyle.cpp +0 -0
  252. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGNodeStyle.h +0 -0
  253. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGPixelGrid.cpp +0 -0
  254. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGPixelGrid.h +0 -0
  255. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGValue.cpp +0 -0
  256. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/YGValue.h +0 -0
  257. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/Yoga.h +0 -0
  258. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/AbsoluteLayout.cpp +0 -0
  259. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/AbsoluteLayout.h +0 -0
  260. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/Align.h +0 -0
  261. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/Baseline.cpp +0 -0
  262. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/Baseline.h +0 -0
  263. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/BoundAxis.h +0 -0
  264. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/Cache.cpp +0 -0
  265. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/Cache.h +0 -0
  266. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/CalculateLayout.cpp +0 -0
  267. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/CalculateLayout.h +0 -0
  268. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/FlexDirection.h +0 -0
  269. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/FlexLine.cpp +0 -0
  270. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/FlexLine.h +0 -0
  271. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/PixelGrid.cpp +0 -0
  272. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/PixelGrid.h +0 -0
  273. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/SizingMode.h +0 -0
  274. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/algorithm/TrailingPosition.h +0 -0
  275. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/config/Config.cpp +0 -0
  276. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/config/Config.h +0 -0
  277. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/debug/AssertFatal.cpp +0 -0
  278. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/debug/AssertFatal.h +0 -0
  279. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/debug/Log.cpp +0 -0
  280. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/debug/Log.h +0 -0
  281. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Align.h +0 -0
  282. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/BoxSizing.h +0 -0
  283. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Dimension.h +0 -0
  284. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Direction.h +0 -0
  285. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Display.h +0 -0
  286. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Edge.h +0 -0
  287. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Errata.h +0 -0
  288. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/ExperimentalFeature.h +0 -0
  289. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/FlexDirection.h +0 -0
  290. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Gutter.h +0 -0
  291. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Justify.h +0 -0
  292. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/LogLevel.h +0 -0
  293. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/MeasureMode.h +0 -0
  294. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/NodeType.h +0 -0
  295. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Overflow.h +0 -0
  296. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/PhysicalEdge.h +0 -0
  297. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/PositionType.h +0 -0
  298. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Unit.h +0 -0
  299. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/Wrap.h +0 -0
  300. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/enums/YogaEnums.h +0 -0
  301. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/event/event.cpp +0 -0
  302. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/event/event.h +0 -0
  303. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/module.modulemap +0 -0
  304. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/node/CachedMeasurement.h +0 -0
  305. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/node/LayoutResults.cpp +0 -0
  306. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/node/LayoutResults.h +0 -0
  307. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/node/LayoutableChildren.h +0 -0
  308. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/node/Node.cpp +0 -0
  309. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/node/Node.h +0 -0
  310. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/numeric/Comparison.h +0 -0
  311. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/numeric/FloatOptional.h +0 -0
  312. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/style/SmallValueBuffer.h +0 -0
  313. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/style/Style.h +0 -0
  314. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/style/StyleLength.h +0 -0
  315. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/style/StyleValueHandle.h +0 -0
  316. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/core/yoga/style/StyleValuePool.h +0 -0
  317. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Package.swift +0 -0
  318. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +0 -0
  319. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +0 -0
  320. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCoreBridge.swift +0 -0
  321. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +0 -0
  322. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +0 -0
  323. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +0 -0
  324. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +0 -0
  325. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +0 -0
  326. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +0 -0
  327. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +0 -0
  328. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNEffectManagers.swift +0 -0
  329. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +0 -0
  330. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +0 -0
  331. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +0 -0
  332. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +0 -0
  333. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +0 -0
  334. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNSvgManager.swift +0 -0
  335. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +0 -0
  336. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +0 -0
  337. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +0 -0
  338. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +0 -0
  339. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +0 -0
  340. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +0 -0
  341. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +0 -0
  342. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +0 -0
  343. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +0 -0
  344. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +0 -0
  345. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +0 -0
  346. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeValues.swift +0 -0
  347. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +0 -0
  348. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +0 -0
  349. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +0 -0
  350. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/DevSupportModule.swift +0 -0
  351. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/EnvironmentModules.swift +0 -0
  352. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +0 -0
  353. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/ImagesModule.swift +0 -0
  354. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +0 -0
  355. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +0 -0
  356. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNErrorOverlay.swift +0 -0
  357. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +0 -0
  358. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +0 -0
  359. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +0 -0
  360. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Mount/PNMountDecoder.swift +0 -0
  361. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Mount/PNMounter.swift +0 -0
  362. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +0 -0
  363. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Resources/PrivacyInfo.xcprivacy +0 -0
  364. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +0 -0
  365. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +0 -0
  366. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNAssets.swift +0 -0
  367. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +0 -0
  368. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +0 -0
  369. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +0 -0
  370. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +0 -0
  371. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Sources/PythonNativeKit/Text/PNTextLayout.swift +0 -0
  372. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/project.pbxproj +0 -0
  373. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/xcshareddata/xcschemes/NativeTests.xcscheme +0 -0
  374. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/contracts.json +0 -0
  375. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/mount.json +0 -0
  376. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/validation.json +0 -0
  377. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAssetTests.swift +0 -0
  378. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +0 -0
  379. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractFixtureTests.swift +0 -0
  380. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNCoreHarness.swift +0 -0
  381. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +0 -0
  382. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNLifecycleTests.swift +0 -0
  383. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +0 -0
  384. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +0 -0
  385. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNMountTests.swift +0 -0
  386. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNParityTests.swift +0 -0
  387. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNRecordFixtures.swift +0 -0
  388. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNTextLayoutTests.swift +0 -0
  389. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native/ios/Tests/TestHost/main.swift +0 -0
  390. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/__init__.py +0 -0
  391. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/accessibility_info.py +0 -0
  392. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/app_state.py +0 -0
  393. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/battery.py +0 -0
  394. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/biometrics.py +0 -0
  395. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/camera.py +0 -0
  396. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/clipboard.py +0 -0
  397. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/device.py +0 -0
  398. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/dimensions.py +0 -0
  399. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/fallback.py +0 -0
  400. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/file_system.py +0 -0
  401. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/haptics.py +0 -0
  402. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/images.py +0 -0
  403. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/keyboard.py +0 -0
  404. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/linking.py +0 -0
  405. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/localization.py +0 -0
  406. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/location.py +0 -0
  407. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/net_info.py +0 -0
  408. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/notifications.py +0 -0
  409. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/permissions.py +0 -0
  410. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/registry.py +0 -0
  411. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/secure_store.py +0 -0
  412. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_modules/share.py +0 -0
  413. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_views/__init__.py +0 -0
  414. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/native_views/bridge_backend.py +0 -0
  415. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/navigation/__init__.py +0 -0
  416. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/navigation/container.py +0 -0
  417. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/navigation/handle.py +0 -0
  418. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/navigation/hooks.py +0 -0
  419. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/navigation/host.py +0 -0
  420. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/navigation/navigators.py +0 -0
  421. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/navigation/ref.py +0 -0
  422. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/navigation/screen.py +0 -0
  423. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/navigation/state.py +0 -0
  424. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/net.py +0 -0
  425. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/platform.py +0 -0
  426. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/platform_metrics.py +0 -0
  427. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/preview.py +0 -0
  428. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/profiling.py +0 -0
  429. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/__init__.py +0 -0
  430. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/android.py +0 -0
  431. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/artifacts.py +0 -0
  432. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/builder.py +0 -0
  433. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/bundle.py +0 -0
  434. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/bytecode.py +0 -0
  435. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/config.py +0 -0
  436. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/deps.py +0 -0
  437. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/devices.py +0 -0
  438. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/doctor.py +0 -0
  439. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/fingerprint.py +0 -0
  440. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/go.py +0 -0
  441. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/icons.py +0 -0
  442. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/ios.py +0 -0
  443. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/permissions.py +0 -0
  444. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/plugins.py +0 -0
  445. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/project/runtime_assets.py +0 -0
  446. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/prop_checks.py +0 -0
  447. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/py.typed +0 -0
  448. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/query.py +0 -0
  449. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/reconciler/__init__.py +0 -0
  450. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/reconciler/boundaries.py +0 -0
  451. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/reconciler/children.py +0 -0
  452. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/reconciler/core.py +0 -0
  453. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/reconciler/layout_pass.py +0 -0
  454. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/reconciler/vnode.py +0 -0
  455. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/refresh.py +0 -0
  456. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/runtime.py +0 -0
  457. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/scheduler.py +0 -0
  458. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/__init__.py +0 -0
  459. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/_builtin_contracts.json +0 -0
  460. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/_components.py +0 -0
  461. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/builtins.py +0 -0
  462. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/codegen.py +0 -0
  463. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/commands.py +0 -0
  464. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/module_codegen.py +0 -0
  465. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/native_types.py +0 -0
  466. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/schema.py +0 -0
  467. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/services.py +0 -0
  468. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/templates/contracts.kt +0 -0
  469. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/templates/contracts.swift +0 -0
  470. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/templates/values.kt +0 -0
  471. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/templates/values.swift +0 -0
  472. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/sdk/types.py +0 -0
  473. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/storage.py +0 -0
  474. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/store.py +0 -0
  475. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/style.py +0 -0
  476. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/suspense.py +0 -0
  477. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/svg.py +0 -0
  478. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/build.gradle +0 -0
  479. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/proguard-rules.pro +0 -0
  480. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +0 -0
  481. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +0 -0
  482. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +0 -0
  483. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +0 -0
  484. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  485. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -0
  486. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +0 -0
  487. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  488. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  489. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  490. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  491. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  492. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  493. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  494. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  495. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  496. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  497. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  498. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  499. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +0 -0
  500. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/values/colors.xml +0 -0
  501. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/values/strings.xml +0 -0
  502. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/values/themes.xml +0 -0
  503. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +0 -0
  504. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +0 -0
  505. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  506. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/build.gradle +0 -0
  507. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
  508. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +0 -0
  509. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/gradle.properties +0 -0
  510. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/gradlew +0 -0
  511. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/gradlew.bat +0 -0
  512. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/android_template/settings.gradle +0 -0
  513. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/PNFinalizePython.sh +0 -0
  514. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/AppDelegate.swift +0 -0
  515. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  516. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  517. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +0 -0
  518. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +0 -0
  519. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/BridgingHeader.h +0 -0
  520. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/Info.plist +0 -0
  521. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/PrivacyInfo.xcprivacy +0 -0
  522. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +0 -0
  523. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +0 -0
  524. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +0 -0
  525. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +0 -0
  526. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  527. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/testing/__init__.py +0 -0
  528. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/testing/backend.py +0 -0
  529. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/testing/clock.py +0 -0
  530. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/testing/harness.py +0 -0
  531. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/testing/pytest_plugin.py +0 -0
  532. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/testing/queries.py +0 -0
  533. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/theme.py +0 -0
  534. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative/utils.py +0 -0
  535. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative.egg-info/dependency_links.txt +0 -0
  536. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative.egg-info/entry_points.txt +0 -0
  537. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative.egg-info/requires.txt +0 -0
  538. {pythonnative-0.52.0 → pythonnative-0.52.2}/src/pythonnative.egg-info/top_level.txt +0 -0
  539. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/contracts/list-trace.json +0 -0
  540. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/contracts/validation.json +0 -0
  541. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_alert.py +0 -0
  542. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_animated.py +0 -0
  543. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_animated_easing.py +0 -0
  544. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_animated_graph.py +0 -0
  545. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_appearance.py +0 -0
  546. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_assets.py +0 -0
  547. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_async_hooks.py +0 -0
  548. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_authoring.py +0 -0
  549. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_bridge.py +0 -0
  550. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_cli.py +0 -0
  551. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_cli_keys.py +0 -0
  552. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_codegen.py +0 -0
  553. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_components.py +0 -0
  554. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_contract_fixtures.py +0 -0
  555. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_core.py +0 -0
  556. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_core_semantics.py +0 -0
  557. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_devclient.py +0 -0
  558. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_device_modules.py +0 -0
  559. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_devserver.py +0 -0
  560. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_devserver_session.py +0 -0
  561. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_devserver_ws.py +0 -0
  562. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_devtools.py +0 -0
  563. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_devtools_page.py +0 -0
  564. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_e2e_suite_renders.py +0 -0
  565. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_element.py +0 -0
  566. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_errors.py +0 -0
  567. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_events.py +0 -0
  568. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_extended_components.py +0 -0
  569. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_gesture_activation.py +0 -0
  570. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_gesture_composition.py +0 -0
  571. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_gestures.py +0 -0
  572. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_handles.py +0 -0
  573. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_hooks.py +0 -0
  574. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_hosts.py +0 -0
  575. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_hot_reload.py +0 -0
  576. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_identity_bailout.py +0 -0
  577. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_inbox.py +0 -0
  578. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_incremental_pipeline.py +0 -0
  579. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_incremental_render.py +0 -0
  580. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_interaction_props.py +0 -0
  581. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_ios_log.py +0 -0
  582. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_layout.py +0 -0
  583. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_lint.py +0 -0
  584. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_list_features.py +0 -0
  585. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_metric_hooks.py +0 -0
  586. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_mutations.py +0 -0
  587. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_native_lists.py +0 -0
  588. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_native_modules.py +0 -0
  589. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_native_values.py +0 -0
  590. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_native_views.py +0 -0
  591. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_net.py +0 -0
  592. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_new_components.py +0 -0
  593. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_performance_budgets.py +0 -0
  594. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_platform.py +0 -0
  595. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_platform_metrics.py +0 -0
  596. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_qr.py +0 -0
  597. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_reconciler.py +0 -0
  598. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_ref.py +0 -0
  599. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_release_packaging.py +0 -0
  600. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_release_workflow.py +0 -0
  601. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_runtime.py +0 -0
  602. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_runtime_contracts.py +0 -0
  603. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_runtime_correctness.py +0 -0
  604. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_runtime_overhaul.py +0 -0
  605. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_sdk.py +0 -0
  606. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_smoke.py +0 -0
  607. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_storage.py +0 -0
  608. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_store.py +0 -0
  609. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_style.py +0 -0
  610. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_suspense.py +0 -0
  611. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_testing_library.py +0 -0
  612. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_theme.py +0 -0
  613. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_transitions.py +0 -0
  614. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_typed_events.py +0 -0
  615. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_typing_conformance.py +0 -0
  616. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_utils.py +0 -0
  617. {pythonnative-0.52.0 → pythonnative-0.52.2}/tests/test_web_transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.52.0
3
+ Version: 0.52.2
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.52.0"
7
+ version = "0.52.2"
8
8
  description = "Cross-platform native UI toolkit for Android and iOS"
9
9
  authors = [
10
10
  { name = "Owen Carey" }
@@ -66,7 +66,7 @@ Example:
66
66
  ```
67
67
  """
68
68
 
69
- __version__ = "0.52.0"
69
+ __version__ = "0.52.2"
70
70
 
71
71
  import importlib
72
72
  from typing import TYPE_CHECKING, Any
@@ -25,6 +25,13 @@ arguments, converted with its annotations (``str``, ``int``, ``float``,
25
25
  those). Query parameters the component doesn't accept are ignored. A
26
26
  URL whose values don't convert, or that lacks a required parameter,
27
27
  matches nothing.
28
+
29
+ Path placeholders arrive percent-decoded, once, before conversion, so
30
+ ``users/Ada%20Lovelace`` gives ``user="Ada Lovelace"`` and an encoded
31
+ ``%2F`` stays inside one value instead of splitting the path. A ``+`` in
32
+ a path is a literal plus, unlike in the query string, where it means a
33
+ space. Bytes that don't decode as UTF-8 are left as they arrived.
34
+ Literal segments are matched exactly as written.
28
35
  """
29
36
 
30
37
  from __future__ import annotations
@@ -34,7 +41,7 @@ import inspect
34
41
  import types
35
42
  import typing
36
43
  from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Sequence, Tuple, Union
37
- from urllib.parse import parse_qsl, quote, urlencode, urlsplit
44
+ from urllib.parse import parse_qsl, quote, unquote, urlencode, urlsplit
38
45
 
39
46
  from ..component import Component
40
47
  from .screen import Screen
@@ -113,6 +120,35 @@ def _stringify(value: Any) -> str:
113
120
  return str(value)
114
121
 
115
122
 
123
+ def _decode(segment: str) -> str:
124
+ """Percent-decode one captured path segment, or return it unchanged.
125
+
126
+ Strict decoding with a fallback to the raw segment is
127
+ non-regressive: a segment whose bytes aren't valid UTF-8 (``%FF``,
128
+ Latin-1 ``caf%E9``) reads back exactly as it does without any
129
+ decoding, where ``errors="replace"`` would overwrite it with U+FFFD
130
+ and lose information that can't be recovered.
131
+
132
+ The fallback hands the converter the raw segment, and the converter
133
+ then applies its ordinary rules: a ``str`` param keeps it, an ``int``
134
+ param rejects it so the pattern doesn't match, and a ``Literal`` or
135
+ ``Enum`` param matches only when one of its declared values equals
136
+ the raw text.
137
+
138
+ Args:
139
+ segment: One path segment, already split on ``/``, so an encoded
140
+ ``%2F`` decodes to a slash inside the value.
141
+
142
+ Returns:
143
+ The decoded segment, or ``segment`` itself when it isn't valid
144
+ UTF-8.
145
+ """
146
+ try:
147
+ return unquote(segment, errors="strict")
148
+ except UnicodeDecodeError:
149
+ return segment
150
+
151
+
116
152
  class _Param:
117
153
  __slots__ = ("name",)
118
154
 
@@ -165,7 +201,10 @@ class _Pattern:
165
201
  raw: Dict[str, str] = {}
166
202
  for pattern, actual in zip(self.segments, parts):
167
203
  if isinstance(pattern, _Param):
168
- raw[pattern.name] = actual
204
+ # Only captured values are decoded, and only here. Decoding
205
+ # in the conversion loop below would decode query values a
206
+ # second time, since ``parse_qsl`` has already decoded them.
207
+ raw[pattern.name] = _decode(actual)
169
208
  elif pattern != actual:
170
209
  return None
171
210
  for key, value in query.items():
@@ -202,6 +241,12 @@ def _split_path(path: Optional[str]) -> Tuple[Union[str, _Param], ...]:
202
241
  class LinkTable:
203
242
  """URL <-> navigation state mapping built from a navigator tree.
204
243
 
244
+ Path placeholders are percent-decoded once, where the segment is
245
+ captured and before conversion; ``+`` in a path stays a literal plus,
246
+ and undecodable bytes are left as-is. Literal segments match exactly
247
+ as the paths declare them, and query values are decoded by
248
+ ``parse_qsl`` alone.
249
+
205
250
  Args:
206
251
  navigator: The root navigator.
207
252
  prefixes: URL prefixes the app answers to (schemes such as
@@ -68,7 +68,12 @@ def read(config: AppConfig) -> dict[str, Any] | None:
68
68
  path = config.project_root / NAME
69
69
  if not config.use_lock or not path.exists():
70
70
  return None
71
- value = json.loads(path.read_text(encoding="utf-8"))
71
+ try:
72
+ value = json.loads(path.read_text(encoding="utf-8"))
73
+ except ValueError as exc:
74
+ raise DependencyError(f"{NAME} isn't valid JSON. Run 'pn deps --lock' to regenerate it.") from exc
75
+ if not isinstance(value, dict):
76
+ raise DependencyError(f"{NAME} must contain a JSON object. Run 'pn deps --lock' to regenerate it.")
72
77
  if (
73
78
  value.get("version") != 1
74
79
  or value.get("python") != config.python_version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.52.0
3
+ Version: 0.52.2
4
4
  Summary: Cross-platform native UI toolkit for Android and iOS
5
5
  Author: Owen Carey
6
6
  License: MIT License
@@ -557,6 +557,7 @@ tests/test_devtools.py
557
557
  tests/test_devtools_page.py
558
558
  tests/test_e2e_suite_renders.py
559
559
  tests/test_element.py
560
+ tests/test_equality.py
560
561
  tests/test_errors.py
561
562
  tests/test_events.py
562
563
  tests/test_extended_components.py
@@ -0,0 +1,67 @@
1
+ """Tests for the snapshot equality rule in pythonnative.equality."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pythonnative.equality import equal
6
+
7
+
8
+ def test_equal_returns_bool_for_equal_and_unequal_values() -> None:
9
+ assert equal(1, 1) is True
10
+ assert equal(1, 2) is False
11
+ assert equal([1, {"a": 2}], [1, {"a": 2}]) is True
12
+ assert equal({"a": [1]}, {"a": [2]}) is False
13
+
14
+
15
+ def test_equal_same_object_does_not_call_eq() -> None:
16
+ class ExplodingEq:
17
+ def __eq__(self, other: object) -> bool:
18
+ raise AssertionError("__eq__ should not be called")
19
+
20
+ value = ExplodingEq()
21
+
22
+ assert equal(value, value) is True
23
+
24
+
25
+ def test_equal_returns_false_when_comparison_raises() -> None:
26
+ class ExplodingEq:
27
+ def __eq__(self, other: object) -> bool:
28
+ raise RuntimeError("comparison failed")
29
+
30
+ left = ExplodingEq()
31
+ right = ExplodingEq()
32
+
33
+ assert equal(left, right) is False
34
+
35
+
36
+ def test_equal_returns_false_for_nonboolean_comparison_result() -> None:
37
+ class ComparisonResult:
38
+ def __bool__(self) -> bool:
39
+ raise AssertionError("__bool__ should not be called")
40
+
41
+ class ReturnsNonBool:
42
+ def __eq__(self, other: object) -> ComparisonResult: # type: ignore[override]
43
+ return ComparisonResult()
44
+
45
+ left = ReturnsNonBool()
46
+ right = ReturnsNonBool()
47
+
48
+ assert equal(left, right) is False
49
+
50
+
51
+ def test_equal_does_not_treat_truthy_nonbool_as_true() -> None:
52
+ class ReturnsOne:
53
+ def __eq__(self, other: object) -> int: # type: ignore[override]
54
+ return 1
55
+
56
+ left = ReturnsOne()
57
+ right = ReturnsOne()
58
+
59
+ assert equal(left, right) is False
60
+
61
+
62
+ def test_equal_same_mutable_object_after_in_place_mutation() -> None:
63
+ value: list[str] = []
64
+
65
+ value.append("changed")
66
+
67
+ assert equal(value, value) is True
@@ -36,6 +36,7 @@ from pythonnative.navigation import (
36
36
  use_route,
37
37
  use_screen_options,
38
38
  )
39
+ from pythonnative.navigation import linking as linking_table_module
39
40
  from pythonnative.navigation.screen import flatten_screens
40
41
  from pythonnative.testing import FakeHost, RenderResult, render, render_hook
41
42
  from pythonnative.theme import LIGHT_THEME
@@ -1842,6 +1843,207 @@ def test_link_table_round_trips_urls() -> None:
1842
1843
  assert links.url_from_state(state) == url
1843
1844
 
1844
1845
 
1846
+ # Percent-encoded path params (issue #89). url_from_state has always
1847
+ # encoded placeholders; match now decodes them where it captures them.
1848
+
1849
+
1850
+ @component
1851
+ def Pair(left: str, right: str) -> pn.Node:
1852
+ return Text(f"pair {left}/{right}")
1853
+
1854
+
1855
+ @component
1856
+ def OrgProfile(org: str = "", user: str = "") -> pn.Node:
1857
+ return Text(f"org {org}/{user}")
1858
+
1859
+
1860
+ @component
1861
+ def CityEncoded(city: Literal["new%20york", "paris"] = "paris") -> pn.Node:
1862
+ return Text(f"city {city}")
1863
+
1864
+
1865
+ @component
1866
+ def CityDecoded(city: Literal["new york", "paris"] = "paris") -> pn.Node:
1867
+ return Text(f"city {city}")
1868
+
1869
+
1870
+ @component
1871
+ def IntOnly(n: int) -> pn.Node:
1872
+ return Text(f"int {n}")
1873
+
1874
+
1875
+ @component
1876
+ def StrOnly(s: str) -> pn.Node:
1877
+ return Text(f"str {s}")
1878
+
1879
+
1880
+ @pytest.mark.parametrize(
1881
+ "value",
1882
+ [
1883
+ pytest.param("Ada Lovelace", id="space"),
1884
+ pytest.param("Zo\u00eb \u03a9mega \u65e5\u672c", id="unicode"),
1885
+ pytest.param("c++", id="literal-plus"),
1886
+ pytest.param("100%", id="percent-sign"),
1887
+ pytest.param("a/b", id="slash"),
1888
+ ],
1889
+ )
1890
+ def test_link_table_path_params_round_trip(value: str) -> None:
1891
+ links = _links()
1892
+ state = NavigationState([Route("Tabs", state=NavigationState([Route("Profile", {"user": value})]))])
1893
+ url = links.url_from_state(state)
1894
+ assert url is not None
1895
+
1896
+ assert _leaf(links.state_from_url(url)).params == {"user": value}
1897
+
1898
+
1899
+ def test_link_table_encoded_slash_stays_in_one_value() -> None:
1900
+ # Decoding happens per segment, after the split, so %2F can't become a
1901
+ # segment boundary and shift which pattern matches.
1902
+ route = _leaf(_links().state_from_url("myapp://tabs/u/a%2Fb"))
1903
+ assert route.name == "Profile"
1904
+ assert route.params == {"user": "a/b"}
1905
+
1906
+
1907
+ def test_link_table_double_encoded_value_decodes_once() -> None:
1908
+ assert _leaf(_links().state_from_url("myapp://tabs/u/%252F")).params == {"user": "%2F"}
1909
+
1910
+
1911
+ def test_link_table_converter_sees_the_decoded_value() -> None:
1912
+ # Detail.id is `int`, and the conversion loop returns None on failure, so
1913
+ # before this fix an encoded value matched nothing at all rather than
1914
+ # reaching the screen as a raw string.
1915
+ route = _leaf(_links().state_from_url("myapp://items/%34%32"))
1916
+ assert route.name == "Detail"
1917
+ assert route.params == {"id": 42} # tab has a default, so it stays absent
1918
+
1919
+
1920
+ def test_link_table_does_not_decode_query_values_twice() -> None:
1921
+ # match() merges the query into the same dict as the captured path values
1922
+ # and then converts both in one loop, and parse_qsl has already decoded
1923
+ # the query. A decode placed in that conversion loop instead of at the
1924
+ # capture site would decode query values a second time, turning a%252Bb
1925
+ # into a+b. Search(**filters) accepts any query key, so it is observable.
1926
+ route = _leaf(_links().state_from_url("myapp://search?q=a%252Bb"))
1927
+ assert route.name == "Search"
1928
+ assert route.params == {"q": "a%2Bb"}
1929
+
1930
+
1931
+ def test_link_table_plus_is_literal_in_a_path_and_a_space_in_a_query() -> None:
1932
+ # One URL, both rules: unquote leaves + alone, parse_qsl turns it into a
1933
+ # space. Detail takes a query param beside its path placeholder.
1934
+ detail = _leaf(_links().state_from_url("myapp://items/1?tab=a+b"))
1935
+ assert detail.params == {"id": 1, "tab": "a b"}
1936
+
1937
+ profile = _leaf(_links().state_from_url("myapp://tabs/u/a+b"))
1938
+ assert profile.params == {"user": "a+b"}
1939
+
1940
+
1941
+ @pytest.mark.parametrize(
1942
+ "raw",
1943
+ [pytest.param("%FF", id="invalid-utf8"), pytest.param("caf%E9", id="latin-1")],
1944
+ )
1945
+ def test_link_table_undecodable_path_param_is_left_raw(raw: str) -> None:
1946
+ # Strict decoding with a raw fallback: a str param whose bytes aren't
1947
+ # valid UTF-8 reads back exactly as it did before decoding existed,
1948
+ # rather than being replaced with U+FFFD.
1949
+ assert _leaf(_links().state_from_url(f"myapp://tabs/u/{raw}")).params == {"user": raw}
1950
+
1951
+
1952
+ def test_link_table_literal_segments_are_not_decoded() -> None:
1953
+ # The literal comparison still sees the raw segment, so an encoded
1954
+ # literal does not match, and a {param} still wins where it wins today.
1955
+ assert _links().state_from_url("myapp://tabs/%75/ada") is None
1956
+
1957
+ tabs = TabNavigator(Screen(Feed, path="new"), Screen(Profile, path="{user}"), name="Choice")
1958
+ table = LinkTable(StackNavigator(Screen(tabs, path="u")), ["myapp://"])
1959
+
1960
+ assert _leaf(table.state_from_url("myapp://u/new")).name == "Feed"
1961
+ encoded = _leaf(table.state_from_url("myapp://u/%6Eew"))
1962
+ assert encoded.name == "Profile"
1963
+ assert encoded.params == {"user": "new"}
1964
+
1965
+
1966
+ def test_link_table_decodes_every_captured_segment() -> None:
1967
+ # Two placeholders in one path, encoded differently, so a decode applied
1968
+ # to only one of them leaves the other raw.
1969
+ root = StackNavigator(Screen(Home, path=""), Screen(Pair, path="p/{left}/{right}"))
1970
+ table = LinkTable(root, ["myapp://"])
1971
+ params = {"left": "Ada Lovelace", "right": "a/b"}
1972
+ url = table.url_from_state(NavigationState([Route("Pair", params)]))
1973
+ assert url == "myapp://p/Ada%20Lovelace/a%2Fb"
1974
+
1975
+ assert _leaf(table.state_from_url(url)).params == params
1976
+
1977
+
1978
+ def test_link_table_decodes_captures_across_a_nested_navigator() -> None:
1979
+ # One placeholder on the outer navigator's path and one on the inner
1980
+ # screen's; both land on the leaf and both must be decoded.
1981
+ # The outer path prefixes every screen beneath it, and each resulting
1982
+ # pattern validates its placeholders against its own leaf component, so
1983
+ # the single inner screen has to accept both {org} and {user}.
1984
+ inner = StackNavigator(Screen(OrgProfile, path="u/{user}"), name="Inner")
1985
+ table = LinkTable(StackNavigator(Screen(inner, path="org/{org}")), ["myapp://"])
1986
+
1987
+ state = table.state_from_url("myapp://org/Zo%C3%AB/u/c%2B%2B")
1988
+ assert state is not None and state.current.name == "Inner"
1989
+ assert _leaf(state).params == {"user": "c++", "org": "Zo\u00eb"} # noqa: RUF001
1990
+
1991
+
1992
+ def test_link_table_decoding_can_change_which_pattern_wins() -> None:
1993
+ # Behavior change worth seeing: a failed conversion returns None and
1994
+ # state_from_url falls through to the next pattern. An encoded value that
1995
+ # only converts once decoded therefore moves from the str route to the
1996
+ # int route, which is the fix working rather than a regression.
1997
+ root = StackNavigator(Screen(Home, path=""), Screen(IntOnly, path="x/{n}"), Screen(StrOnly, path="x/{s}"))
1998
+ table = LinkTable(root, ["myapp://"])
1999
+
2000
+ assert _leaf(table.state_from_url("myapp://x/7")).params == {"n": 7}
2001
+ encoded = _leaf(table.state_from_url("myapp://x/%37"))
2002
+ assert encoded.name == "IntOnly"
2003
+ assert encoded.params == {"n": 7}
2004
+ # A value that converts for neither still falls through to the str route.
2005
+ assert _leaf(table.state_from_url("myapp://x/abc")).params == {"s": "abc"}
2006
+
2007
+
2008
+ def test_link_table_decoding_can_stop_a_pattern_matching() -> None:
2009
+ # The mirror of the test above, and a migration note. A Literal (or an
2010
+ # Enum) declared with an already-encoded value matched that URL on the
2011
+ # old behavior, because the raw segment was compared. Now the segment
2012
+ # decodes first, so "%20" no longer equals the declared text and the
2013
+ # pattern stops matching. The fix is to declare the decoded value,
2014
+ # which is what the second table here does.
2015
+ encoded = StackNavigator(Screen(Home, path=""), Screen(CityEncoded, path="c/{city}"))
2016
+ assert LinkTable(encoded, ["myapp://"]).state_from_url("myapp://c/new%20york") is None
2017
+
2018
+ decoded = StackNavigator(Screen(Home, path=""), Screen(CityDecoded, path="c/{city}"))
2019
+ route = _leaf(LinkTable(decoded, ["myapp://"]).state_from_url("myapp://c/new%20york"))
2020
+ assert route.params == {"city": "new york"}
2021
+
2022
+
2023
+ @pytest.mark.parametrize(
2024
+ "error",
2025
+ [
2026
+ pytest.param(RuntimeError("not a decoding problem"), id="runtime-error"),
2027
+ # A UnicodeError that isn't a decode error: catching UnicodeError
2028
+ # instead of UnicodeDecodeError would swallow this one too.
2029
+ pytest.param(UnicodeEncodeError("utf-8", "x", 0, 1, "not a decoding problem"), id="unicode-encode-error"),
2030
+ ],
2031
+ )
2032
+ def test_link_table_decode_fallback_only_swallows_decode_errors(
2033
+ monkeypatch: pytest.MonkeyPatch, error: Exception
2034
+ ) -> None:
2035
+ # The raw-segment fallback is for undecodable bytes only. Anything else
2036
+ # going wrong inside the decode is a bug and must surface rather than
2037
+ # quietly handing the screen an undecoded value.
2038
+ def _boom(*args: Any, **kwargs: Any) -> str:
2039
+ raise error
2040
+
2041
+ monkeypatch.setattr(linking_table_module, "unquote", _boom)
2042
+
2043
+ with pytest.raises(type(error), match="not a decoding problem"):
2044
+ _links().state_from_url("myapp://tabs/u/ada")
2045
+
2046
+
1845
2047
  @pytest.fixture
1846
2048
  def launch_url(monkeypatch: pytest.MonkeyPatch) -> Callable[[Optional[str]], None]:
1847
2049
  monkeypatch.setattr(linking_module, "_url_listeners", [])
File without changes
File without changes
File without changes
File without changes
File without changes