pythonnative 0.41.0__tar.gz → 0.42.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 (476) hide show
  1. {pythonnative-0.41.0/src/pythonnative.egg-info → pythonnative-0.42.0}/PKG-INFO +1 -1
  2. {pythonnative-0.41.0 → pythonnative-0.42.0}/pyproject.toml +1 -1
  3. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/__init__.py +1 -1
  4. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/cli/pn.py +71 -10
  5. {pythonnative-0.41.0 → pythonnative-0.42.0/src/pythonnative.egg-info}/PKG-INFO +1 -1
  6. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_cli.py +199 -11
  7. {pythonnative-0.41.0 → pythonnative-0.42.0}/.github/workflows/release.yml +0 -0
  8. {pythonnative-0.41.0 → pythonnative-0.42.0}/LICENSE +0 -0
  9. {pythonnative-0.41.0 → pythonnative-0.42.0}/MANIFEST.in +0 -0
  10. {pythonnative-0.41.0 → pythonnative-0.42.0}/README.md +0 -0
  11. {pythonnative-0.41.0 → pythonnative-0.42.0}/scripts/check-distributions.py +0 -0
  12. {pythonnative-0.41.0 → pythonnative-0.42.0}/scripts/cibuildwheel.toml +0 -0
  13. {pythonnative-0.41.0 → pythonnative-0.42.0}/scripts/release-assets.py +0 -0
  14. {pythonnative-0.41.0 → pythonnative-0.42.0}/setup.cfg +0 -0
  15. {pythonnative-0.41.0 → pythonnative-0.42.0}/setup.py +0 -0
  16. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/_ios_log.py +0 -0
  17. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/alerts.py +0 -0
  18. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/animated.py +0 -0
  19. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/animation_graph.py +0 -0
  20. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/appearance.py +0 -0
  21. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bootstrap.py +0 -0
  22. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/__init__.py +0 -0
  23. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/android.py +0 -0
  24. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/codec.py +0 -0
  25. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/commits.py +0 -0
  26. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/fake.py +0 -0
  27. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/ios.py +0 -0
  28. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/web.py +0 -0
  29. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/cli/__init__.py +0 -0
  30. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/component.py +0 -0
  31. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/__init__.py +0 -0
  32. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/_base.py +0 -0
  33. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/controls.py +0 -0
  34. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/layout.py +0 -0
  35. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/lists.py +0 -0
  36. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/media.py +0 -0
  37. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/overlays.py +0 -0
  38. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/pressable.py +0 -0
  39. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/structural.py +0 -0
  40. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/text.py +0 -0
  41. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devclient.py +0 -0
  42. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/__init__.py +0 -0
  43. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/server.py +0 -0
  44. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/animation_graph.js +0 -0
  45. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/bridge.js +0 -0
  46. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/colors.js +0 -0
  47. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/host.js +0 -0
  48. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/index.html +0 -0
  49. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/layout.js +0 -0
  50. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/preview.css +0 -0
  51. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/renderer.js +0 -0
  52. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/shell.js +0 -0
  53. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/LICENSE +0 -0
  54. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +0 -0
  55. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +0 -0
  56. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js +0 -0
  57. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +0 -0
  58. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/index.d.ts +0 -0
  59. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/index.js +0 -0
  60. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/index.js.map +0 -0
  61. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/load.d.ts +0 -0
  62. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/load.js +0 -0
  63. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/load.js.map +0 -0
  64. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +0 -0
  65. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js +0 -0
  66. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +0 -0
  67. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/watcher.py +0 -0
  68. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/ws.py +0 -0
  69. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/diagnostics.py +0 -0
  70. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/element.py +0 -0
  71. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/equality.py +0 -0
  72. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/events.py +0 -0
  73. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/gestures.py +0 -0
  74. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/hooks.py +0 -0
  75. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/hosts/__init__.py +0 -0
  76. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/hosts/base.py +0 -0
  77. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/hosts/native.py +0 -0
  78. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/hot_reload.py +0 -0
  79. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/layout.py +0 -0
  80. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/mutations.py +0 -0
  81. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/build.gradle +0 -0
  82. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/gradle.properties +0 -0
  83. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/settings.gradle +0 -0
  84. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/AndroidManifest.xml +0 -0
  85. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/cpp/CMakeLists.txt +0 -0
  86. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/cpp/yoga_jni.cpp +0 -0
  87. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +0 -0
  88. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +0 -0
  89. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +0 -0
  90. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +0 -0
  91. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +0 -0
  92. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +0 -0
  93. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +0 -0
  94. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +0 -0
  95. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +0 -0
  96. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +0 -0
  97. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +0 -0
  98. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +0 -0
  99. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +0 -0
  100. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +0 -0
  101. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +0 -0
  102. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +0 -0
  103. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +0 -0
  104. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +0 -0
  105. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +0 -0
  106. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +0 -0
  107. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +0 -0
  108. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +0 -0
  109. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +0 -0
  110. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +0 -0
  111. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +0 -0
  112. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +0 -0
  113. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +0 -0
  114. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +0 -0
  115. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +0 -0
  116. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +0 -0
  117. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +0 -0
  118. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +0 -0
  119. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +0 -0
  120. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +0 -0
  121. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +0 -0
  122. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +0 -0
  123. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +0 -0
  124. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +0 -0
  125. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +0 -0
  126. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +0 -0
  127. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +0 -0
  128. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +0 -0
  129. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +0 -0
  130. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +0 -0
  131. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +0 -0
  132. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +0 -0
  133. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +0 -0
  134. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +0 -0
  135. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +0 -0
  136. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +0 -0
  137. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +0 -0
  138. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +0 -0
  139. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +0 -0
  140. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +0 -0
  141. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +0 -0
  142. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +0 -0
  143. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +0 -0
  144. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +0 -0
  145. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +0 -0
  146. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +0 -0
  147. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +0 -0
  148. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +0 -0
  149. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +0 -0
  150. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +0 -0
  151. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +0 -0
  152. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Package.swift +0 -0
  153. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +0 -0
  154. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +0 -0
  155. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +0 -0
  156. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +0 -0
  157. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +0 -0
  158. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +0 -0
  159. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +0 -0
  160. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +0 -0
  161. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +0 -0
  162. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +0 -0
  163. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +0 -0
  164. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +0 -0
  165. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +0 -0
  166. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +0 -0
  167. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +0 -0
  168. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +0 -0
  169. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +0 -0
  170. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +0 -0
  171. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +0 -0
  172. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +0 -0
  173. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +0 -0
  174. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +0 -0
  175. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +0 -0
  176. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +0 -0
  177. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +0 -0
  178. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +0 -0
  179. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +0 -0
  180. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +0 -0
  181. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +0 -0
  182. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +0 -0
  183. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +0 -0
  184. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +0 -0
  185. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +0 -0
  186. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +0 -0
  187. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +0 -0
  188. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +0 -0
  189. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +0 -0
  190. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +0 -0
  191. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +0 -0
  192. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +0 -0
  193. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +0 -0
  194. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +0 -0
  195. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +0 -0
  196. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +0 -0
  197. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +0 -0
  198. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +0 -0
  199. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +0 -0
  200. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +0 -0
  201. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +0 -0
  202. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +0 -0
  203. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +0 -0
  204. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +0 -0
  205. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/LICENSE +0 -0
  206. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/Package.swift +0 -0
  207. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/VENDORED.md +0 -0
  208. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/PNStyle.h +0 -0
  209. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/module.modulemap +0 -0
  210. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGConfig.h +0 -0
  211. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGEnums.h +0 -0
  212. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGMacros.h +0 -0
  213. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGNode.h +0 -0
  214. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGNodeLayout.h +0 -0
  215. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGNodeStyle.h +0 -0
  216. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGPixelGrid.h +0 -0
  217. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGValue.h +0 -0
  218. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/Yoga.h +0 -0
  219. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/python.cpp +0 -0
  220. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/style.cpp +0 -0
  221. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/CMakeLists.txt +0 -0
  222. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGConfig.cpp +0 -0
  223. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGConfig.h +0 -0
  224. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGEnums.cpp +0 -0
  225. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGEnums.h +0 -0
  226. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGMacros.h +0 -0
  227. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNode.cpp +0 -0
  228. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNode.h +0 -0
  229. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.cpp +0 -0
  230. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.h +0 -0
  231. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.cpp +0 -0
  232. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.h +0 -0
  233. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.cpp +0 -0
  234. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.h +0 -0
  235. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGValue.cpp +0 -0
  236. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGValue.h +0 -0
  237. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/Yoga.h +0 -0
  238. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +0 -0
  239. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +0 -0
  240. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/Align.h +0 -0
  241. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +0 -0
  242. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.h +0 -0
  243. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +0 -0
  244. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.cpp +0 -0
  245. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.h +0 -0
  246. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +0 -0
  247. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +0 -0
  248. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +0 -0
  249. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +0 -0
  250. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.h +0 -0
  251. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +0 -0
  252. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +0 -0
  253. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/SizingMode.h +0 -0
  254. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +0 -0
  255. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/config/Config.cpp +0 -0
  256. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/config/Config.h +0 -0
  257. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +0 -0
  258. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.h +0 -0
  259. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/debug/Log.cpp +0 -0
  260. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/debug/Log.h +0 -0
  261. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Align.h +0 -0
  262. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/BoxSizing.h +0 -0
  263. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Dimension.h +0 -0
  264. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Direction.h +0 -0
  265. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Display.h +0 -0
  266. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Edge.h +0 -0
  267. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Errata.h +0 -0
  268. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +0 -0
  269. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/FlexDirection.h +0 -0
  270. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Gutter.h +0 -0
  271. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Justify.h +0 -0
  272. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/LogLevel.h +0 -0
  273. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/MeasureMode.h +0 -0
  274. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/NodeType.h +0 -0
  275. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Overflow.h +0 -0
  276. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +0 -0
  277. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/PositionType.h +0 -0
  278. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Unit.h +0 -0
  279. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Wrap.h +0 -0
  280. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/YogaEnums.h +0 -0
  281. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/event/event.cpp +0 -0
  282. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/event/event.h +0 -0
  283. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/module.modulemap +0 -0
  284. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/CachedMeasurement.h +0 -0
  285. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.cpp +0 -0
  286. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.h +0 -0
  287. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/LayoutableChildren.h +0 -0
  288. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/Node.cpp +0 -0
  289. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/Node.h +0 -0
  290. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/numeric/Comparison.h +0 -0
  291. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/numeric/FloatOptional.h +0 -0
  292. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +0 -0
  293. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/style/Style.h +0 -0
  294. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/style/StyleLength.h +0 -0
  295. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/style/StyleValueHandle.h +0 -0
  296. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/style/StyleValuePool.h +0 -0
  297. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/__init__.py +0 -0
  298. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/app_state.py +0 -0
  299. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/battery.py +0 -0
  300. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/biometrics.py +0 -0
  301. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/camera.py +0 -0
  302. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/clipboard.py +0 -0
  303. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/fallback.py +0 -0
  304. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/file_system.py +0 -0
  305. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/haptics.py +0 -0
  306. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/linking.py +0 -0
  307. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/location.py +0 -0
  308. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/net_info.py +0 -0
  309. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/notifications.py +0 -0
  310. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/permissions.py +0 -0
  311. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/registry.py +0 -0
  312. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/secure_store.py +0 -0
  313. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/share.py +0 -0
  314. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_views/__init__.py +0 -0
  315. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_views/base.py +0 -0
  316. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_views/bridge_backend.py +0 -0
  317. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/__init__.py +0 -0
  318. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/container.py +0 -0
  319. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/handle.py +0 -0
  320. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/hooks.py +0 -0
  321. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/host.py +0 -0
  322. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/linking.py +0 -0
  323. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/navigators.py +0 -0
  324. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/screen.py +0 -0
  325. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/state.py +0 -0
  326. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/net.py +0 -0
  327. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/platform.py +0 -0
  328. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/platform_metrics.py +0 -0
  329. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/preview.py +0 -0
  330. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/profiling.py +0 -0
  331. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/__init__.py +0 -0
  332. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/android.py +0 -0
  333. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/builder.py +0 -0
  334. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/config.py +0 -0
  335. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/deps.py +0 -0
  336. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/devices.py +0 -0
  337. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/doctor.py +0 -0
  338. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/fingerprint.py +0 -0
  339. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/icons.py +0 -0
  340. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/ios.py +0 -0
  341. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/lockfile.py +0 -0
  342. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/permissions.py +0 -0
  343. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/plugins.py +0 -0
  344. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/runtime_assets.py +0 -0
  345. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/py.typed +0 -0
  346. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/query.py +0 -0
  347. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/__init__.py +0 -0
  348. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/boundaries.py +0 -0
  349. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/children.py +0 -0
  350. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/core.py +0 -0
  351. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/layout_pass.py +0 -0
  352. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/vnode.py +0 -0
  353. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/refresh.py +0 -0
  354. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/runtime.py +0 -0
  355. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/scheduler.py +0 -0
  356. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/__init__.py +0 -0
  357. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/_components.py +0 -0
  358. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/builtins.py +0 -0
  359. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/codegen.py +0 -0
  360. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/module_codegen.py +0 -0
  361. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/schema.py +0 -0
  362. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/templates/contracts.kt +0 -0
  363. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/templates/contracts.swift +0 -0
  364. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/storage.py +0 -0
  365. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/style.py +0 -0
  366. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/suspense.py +0 -0
  367. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/build.gradle +0 -0
  368. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/proguard-rules.pro +0 -0
  369. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +0 -0
  370. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +0 -0
  371. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +0 -0
  372. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +0 -0
  373. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +0 -0
  374. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  375. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -0
  376. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +0 -0
  377. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  378. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  379. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  380. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  381. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  382. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  383. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  384. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  385. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  386. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  387. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  388. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  389. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +0 -0
  390. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/values/colors.xml +0 -0
  391. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/values/strings.xml +0 -0
  392. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/values/themes.xml +0 -0
  393. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +0 -0
  394. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +0 -0
  395. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  396. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +0 -0
  397. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/build.gradle +0 -0
  398. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
  399. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +0 -0
  400. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/gradle.properties +0 -0
  401. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/gradlew +0 -0
  402. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/gradlew.bat +0 -0
  403. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/settings.gradle +0 -0
  404. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/AppDelegate.swift +0 -0
  405. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  406. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  407. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +0 -0
  408. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +0 -0
  409. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/BridgingHeader.h +0 -0
  410. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/Info.plist +0 -0
  411. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +0 -0
  412. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +0 -0
  413. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +0 -0
  414. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +0 -0
  415. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  416. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +0 -0
  417. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +0 -0
  418. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +0 -0
  419. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/testing/__init__.py +0 -0
  420. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/testing/backend.py +0 -0
  421. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/testing/harness.py +0 -0
  422. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/utils.py +0 -0
  423. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative.egg-info/SOURCES.txt +0 -0
  424. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative.egg-info/dependency_links.txt +0 -0
  425. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative.egg-info/entry_points.txt +0 -0
  426. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative.egg-info/requires.txt +0 -0
  427. {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative.egg-info/top_level.txt +0 -0
  428. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_alert.py +0 -0
  429. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_animated.py +0 -0
  430. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_animated_graph.py +0 -0
  431. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_appearance.py +0 -0
  432. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_async_hooks.py +0 -0
  433. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_bridge.py +0 -0
  434. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_codegen.py +0 -0
  435. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_components.py +0 -0
  436. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_core_semantics.py +0 -0
  437. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_devclient.py +0 -0
  438. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_devserver.py +0 -0
  439. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_devserver_ws.py +0 -0
  440. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_element.py +0 -0
  441. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_events.py +0 -0
  442. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_extended_components.py +0 -0
  443. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_gesture_composition.py +0 -0
  444. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_gestures.py +0 -0
  445. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_hooks.py +0 -0
  446. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_hosts.py +0 -0
  447. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_hot_reload.py +0 -0
  448. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_inbox.py +0 -0
  449. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_incremental_render.py +0 -0
  450. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_interaction_props.py +0 -0
  451. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_ios_log.py +0 -0
  452. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_layout.py +0 -0
  453. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_metric_hooks.py +0 -0
  454. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_mutations.py +0 -0
  455. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_native_lists.py +0 -0
  456. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_native_modules.py +0 -0
  457. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_native_views.py +0 -0
  458. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_navigation.py +0 -0
  459. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_net.py +0 -0
  460. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_new_components.py +0 -0
  461. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_platform.py +0 -0
  462. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_platform_metrics.py +0 -0
  463. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_reconciler.py +0 -0
  464. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_ref.py +0 -0
  465. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_release_packaging.py +0 -0
  466. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_release_workflow.py +0 -0
  467. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_runtime.py +0 -0
  468. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_runtime_contracts.py +0 -0
  469. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_sdk.py +0 -0
  470. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_smoke.py +0 -0
  471. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_storage.py +0 -0
  472. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_style.py +0 -0
  473. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_suspense.py +0 -0
  474. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_transitions.py +0 -0
  475. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_utils.py +0 -0
  476. {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_web_transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.41.0
3
+ Version: 0.42.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.41.0"
7
+ version = "0.42.0"
8
8
  description = "Cross-platform native UI toolkit for Android and iOS"
9
9
  authors = [
10
10
  { name = "Owen Carey" }
@@ -64,7 +64,7 @@ Example:
64
64
  ```
65
65
  """
66
66
 
67
- __version__ = "0.41.0"
67
+ __version__ = "0.42.0"
68
68
 
69
69
  from . import appearance, diagnostics, gestures, runtime, sdk
70
70
  from .alerts import Alert
@@ -25,7 +25,7 @@ The console script `pn` (declared in `pyproject.toml`) dispatches to:
25
25
  - `pn build android|ios`: produce standalone artifacts (signed APK/AAB,
26
26
  or an iOS archive/IPA, optionally uploaded to App Store Connect).
27
27
  - `pn app-id android|ios`: print the resolved application/bundle id
28
- (handy for scripts and CI).
28
+ (handy for scripts and CI), as plain text or as JSON with `--json`.
29
29
  - `pn clean`: remove the local `build/` directory.
30
30
 
31
31
  The heavy lifting lives in the ``pythonnative.project`` and
@@ -147,6 +147,37 @@ def _sanitize_name(name: str) -> str:
147
147
 
148
148
 
149
149
  def _app_id_from_name(name: str) -> str:
150
+ """Derive the default reverse-DNS app id from a project name.
151
+
152
+ The result is an identifier rather than a name, and it fills
153
+ ``app.id``, the default for both the Android application id and the
154
+ iOS bundle id. It therefore has to satisfy the stricter of the two
155
+ grammars, ``config._APP_ID_SEGMENT``, which admits no hyphen. An
156
+ explicit ``[ios].bundle_id`` may contain one, because
157
+ ``config._validate_app_id`` is called with ``allow_hyphen=True`` for
158
+ that field alone.
159
+
160
+ Deleting hyphens is lossy, so the derivation is not injective:
161
+ ``my-app`` and ``myapp`` both give ``com.example.myapp``. Mapping
162
+ ``-`` to ``_`` instead would not fix that, only move it, since
163
+ ``_NAME_RE`` permits both characters and ``my-app`` would then
164
+ collide with ``my_app``. Injectivity would need an escaping scheme;
165
+ deletion is the deliberate choice here.
166
+
167
+ The ``app`` prefix covers the name taken from the current directory
168
+ when ``pn init`` is given none. A typed name cannot reach it, because
169
+ ``_NAME_RE`` already guarantees a leading letter.
170
+
171
+ The result always satisfies ``_APP_ID_SEGMENT`` but is not guaranteed
172
+ to pass ``config._validate_app_id``, which also rejects reserved
173
+ words: ``class`` is a legal project name and passes through here.
174
+
175
+ Args:
176
+ name: A project name, either typed or taken from the directory.
177
+
178
+ Returns:
179
+ A reverse-DNS id under ``com.example``.
180
+ """
150
181
  slug = re.sub(r"[^a-z0-9_]", "", name.lower())
151
182
  if not slug or not slug[0].isalpha():
152
183
  slug = "app" + slug
@@ -312,11 +343,27 @@ def doctor_command(args: argparse.Namespace) -> None:
312
343
  def app_id_command(args: argparse.Namespace) -> None:
313
344
  """Print the resolved application id (Android) or bundle id (iOS).
314
345
 
346
+ With ``--json``, stdout carries one object,
347
+ ``{"platform": "...", "app_id": "..."}``, and nothing else; the config
348
+ error goes to stderr instead so stdout stays parseable. Keys may be
349
+ added to that object later, but none will be removed or renamed, so
350
+ a caller reading ``app_id`` keeps working.
351
+
352
+ A missing or invalid config still exits 1, with or without the flag.
353
+ That differs from ``pn devices --json``, which exits 0 on an empty
354
+ result, because "no devices" is a valid answer to a query whereas
355
+ an unreadable config means there is no id to report at all.
356
+
315
357
  Args:
316
- args: Parsed namespace with ``platform``.
358
+ args: Parsed namespace with ``platform`` and optional ``json``.
317
359
  """
318
- config = _load_config_or_exit()
319
- print(config.application_id if args.platform == "android" else config.bundle_id)
360
+ as_json: bool = getattr(args, "json", False)
361
+ config = _load_config_or_exit(stream=sys.stderr if as_json else None)
362
+ app_id = config.application_id if args.platform == "android" else config.bundle_id
363
+ if as_json:
364
+ print(json.dumps({"platform": args.platform, "app_id": app_id}, indent=2))
365
+ return
366
+ print(app_id)
320
367
 
321
368
 
322
369
  # ======================================================================
@@ -950,11 +997,22 @@ def clean_project(args: argparse.Namespace) -> None:
950
997
  # ======================================================================
951
998
 
952
999
 
953
- def _load_config_or_exit(project_dir: Optional[Path] = None) -> AppConfig:
1000
+ def _load_config_or_exit(project_dir: Optional[Path] = None, *, stream: Optional[TextIO] = None) -> AppConfig:
1001
+ """Load the project config or exit 1, reporting the error on ``stream``.
1002
+
1003
+ Args:
1004
+ project_dir: Project root; defaults to the current directory.
1005
+ stream: Where to report a failure. Defaults to stdout, which is
1006
+ what every caller wants except a machine-readable mode, where
1007
+ an error on stdout would corrupt the document.
1008
+
1009
+ Returns:
1010
+ The loaded config.
1011
+ """
954
1012
  try:
955
1013
  return AppConfig.load(project_dir or Path.cwd())
956
1014
  except ConfigError as exc:
957
- print(f"Error: {exc}")
1015
+ print(f"Error: {exc}", file=stream or sys.stdout)
958
1016
  sys.exit(1)
959
1017
 
960
1018
 
@@ -1169,7 +1227,7 @@ def _build_parser() -> argparse.ArgumentParser:
1169
1227
  parser_devices.set_defaults(func=devices_command)
1170
1228
 
1171
1229
  parser_run = subparsers.add_parser("run", help="Build, install, and launch on a device/simulator")
1172
- parser_run.add_argument("platform", choices=["android", "ios"])
1230
+ parser_run.add_argument("platform", choices=["android", "ios"], help="Target platform")
1173
1231
  parser_run.add_argument(
1174
1232
  "--device",
1175
1233
  "-d",
@@ -1196,7 +1254,7 @@ def _build_parser() -> argparse.ArgumentParser:
1196
1254
  parser_run.set_defaults(func=run_project)
1197
1255
 
1198
1256
  parser_logs = subparsers.add_parser("logs", help="Stream logs from the running app")
1199
- parser_logs.add_argument("platform", choices=["android", "ios"])
1257
+ parser_logs.add_argument("platform", choices=["android", "ios"], help="Target platform")
1200
1258
  parser_logs.add_argument(
1201
1259
  "--device",
1202
1260
  "-d",
@@ -1206,7 +1264,7 @@ def _build_parser() -> argparse.ArgumentParser:
1206
1264
  parser_logs.set_defaults(func=logs_command)
1207
1265
 
1208
1266
  parser_build = subparsers.add_parser("build", help="Build distributable artifacts")
1209
- parser_build.add_argument("platform", choices=["android", "ios"])
1267
+ parser_build.add_argument("platform", choices=["android", "ios"], help="Target platform")
1210
1268
  parser_build.add_argument("--debug", action="store_true", help="Build the debug variant instead of release")
1211
1269
  parser_build.add_argument(
1212
1270
  "--upload",
@@ -1216,7 +1274,10 @@ def _build_parser() -> argparse.ArgumentParser:
1216
1274
  parser_build.set_defaults(func=build_project)
1217
1275
 
1218
1276
  parser_app_id = subparsers.add_parser("app-id", help="Print the resolved application/bundle id")
1219
- parser_app_id.add_argument("platform", choices=["android", "ios"])
1277
+ parser_app_id.add_argument("platform", choices=["android", "ios"], help="Target platform")
1278
+ parser_app_id.add_argument(
1279
+ "--json", action="store_true", help="Print a JSON object to stdout for scripting (errors go to stderr)"
1280
+ )
1220
1281
  parser_app_id.set_defaults(func=app_id_command)
1221
1282
 
1222
1283
  parser_clean = subparsers.add_parser("clean", help="Remove the local build/ directory")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.41.0
3
+ Version: 0.42.0
4
4
  Summary: Cross-platform native UI toolkit for Android and iOS
5
5
  Author: Owen Carey
6
6
  License: MIT License
@@ -1,6 +1,7 @@
1
1
  import argparse
2
2
  import json
3
3
  import os
4
+ import re
4
5
  import shutil
5
6
  import subprocess
6
7
  import sys
@@ -309,16 +310,103 @@ def test_cli_init_suggestion_is_stable_for_legal_names() -> None:
309
310
  assert pn_cli._sanitize_name(name) == name
310
311
 
311
312
 
312
- def test_cli_init_without_name_accepts_a_cwd_that_fails_the_pattern(tmp_path: Path) -> None:
313
- # Validation covers the typed name only. A directory named MyProject is
314
- # extremely ordinary, and `pn init` there must keep working.
315
- project_dir = tmp_path / "MyProject"
313
+ # _app_id_from_name maps a project name onto a reverse-DNS segment, whose
314
+ # grammar (config._APP_ID_SEGMENT) differs from _NAME_RE's. These two groups
315
+ # split by which entry path can actually produce the input.
316
+
317
+ # Reachable from a typed `pn init <name>`: _NAME_RE admits only [a-z][a-z0-9_-]*,
318
+ # so the sole character the substitution can remove is the hyphen.
319
+ _APP_ID_TYPED_CASES = [
320
+ pytest.param("my_app", "com.example.my_app", id="underscore"),
321
+ pytest.param("myapp", "com.example.myapp", id="plain"),
322
+ pytest.param("my-app", "com.example.myapp", id="hyphen"),
323
+ pytest.param("my--app", "com.example.myapp", id="doubled-hyphen"),
324
+ pytest.param("my-app-", "com.example.myapp", id="trailing-hyphen"),
325
+ pytest.param("e2e-suite", "com.example.e2esuite", id="digits-and-hyphen"),
326
+ ]
327
+
328
+ # Reachable only from the derived path, `pn init` with no name taking cwd.name,
329
+ # which is never validated. A typed name cannot produce any of these: _NAME_RE
330
+ # rejects uppercase, a leading digit, a leading underscore, the empty string,
331
+ # and non-ASCII.
332
+ _APP_ID_DERIVED_ONLY_CASES = [
333
+ pytest.param("MyApp", "com.example.myapp", id="uppercase"),
334
+ pytest.param("MyProject", "com.example.myproject", id="mixed-case"),
335
+ pytest.param("3d_viewer", "com.example.app3d_viewer", id="digit-leading"),
336
+ pytest.param("2048", "com.example.app2048", id="all-digits"),
337
+ pytest.param("_leading", "com.example.app_leading", id="underscore-leading"),
338
+ pytest.param("", "com.example.app", id="empty"),
339
+ pytest.param("\u5de5\u7a0b", "com.example.app", id="all-non-ascii"),
340
+ pytest.param("caf\u00e9", "com.example.caf", id="partly-stripped-non-ascii"),
341
+ pytest.param("app.v2", "com.example.appv2", id="dotted"),
342
+ ]
343
+
344
+ _APP_ID_ALL_CASES = _APP_ID_TYPED_CASES + _APP_ID_DERIVED_ONLY_CASES
345
+
346
+ # The pattern the issue suggests asserting. It cannot fail against the current
347
+ # implementation for any input, because the substitution leaves only [a-z0-9_]
348
+ # and the "app" prefix supplies a leading letter otherwise. It still earns its
349
+ # place: it catches a change that admits a character outside the segment
350
+ # grammar, such as keeping hyphens. It does not catch a changed prefix, which
351
+ # is what the exact-value cases above are for.
352
+ _REVERSE_DNS_RE = re.compile(r"^com\.example\.[a-z][a-z0-9_]*$")
353
+
354
+
355
+ @pytest.mark.parametrize(("name", "expected"), _APP_ID_TYPED_CASES)
356
+ def test_cli_app_id_from_name_typed_names(name: str, expected: str) -> None:
357
+ assert pn_cli._NAME_RE.fullmatch(name), f"{name!r} should be typeable"
358
+ assert pn_cli._app_id_from_name(name) == expected
359
+
360
+
361
+ @pytest.mark.parametrize(("name", "expected"), _APP_ID_DERIVED_ONLY_CASES)
362
+ def test_cli_app_id_from_name_derived_only_names(name: str, expected: str) -> None:
363
+ assert not pn_cli._NAME_RE.fullmatch(name), f"{name!r} should not be typeable"
364
+ assert pn_cli._app_id_from_name(name) == expected
365
+
366
+
367
+ @pytest.mark.parametrize(("name", "expected"), _APP_ID_ALL_CASES)
368
+ def test_cli_app_id_from_name_is_reverse_dns(name: str, expected: str) -> None:
369
+ assert _REVERSE_DNS_RE.fullmatch(pn_cli._app_id_from_name(name))
370
+
371
+
372
+ def test_cli_app_id_from_name_collides_on_hyphens() -> None:
373
+ # Deleting hyphens is lossy, so distinct names share an id. Recorded so
374
+ # the collision is known rather than discovered when two projects install
375
+ # over each other.
376
+ assert pn_cli._app_id_from_name("my-app") == pn_cli._app_id_from_name("myapp")
377
+ assert pn_cli._app_id_from_name("a-b-c") == pn_cli._app_id_from_name("abc")
378
+ # Mapping "-" to "_" would not fix this, only move it: _NAME_RE permits
379
+ # both characters, so this pair, distinct today, would merge under that
380
+ # scheme. Across every typed-legal name up to length 4 the two schemes
381
+ # lose the same number of names to collision.
382
+ assert pn_cli._app_id_from_name("my-app") != pn_cli._app_id_from_name("my_app")
383
+
384
+
385
+ def _init_in_directory_named(tmp_path: Path, dirname: str) -> str:
386
+ """`pn init` with no name inside a directory called ``dirname``."""
387
+ project_dir = tmp_path / dirname
316
388
  project_dir.mkdir()
317
389
 
318
390
  result = run_pn(["init"], str(project_dir))
319
391
 
320
392
  assert result.returncode == 0, result.stdout
321
- toml_text = (project_dir / "pythonnative.toml").read_text(encoding="utf-8")
393
+ return (project_dir / "pythonnative.toml").read_text(encoding="utf-8")
394
+
395
+
396
+ def test_cli_init_without_name_reaches_the_app_prefix(tmp_path: Path) -> None:
397
+ # The prefix branch is unreachable from a typed name, so this is the only
398
+ # end-to-end path to it: a directory whose name starts with a digit.
399
+ toml_text = _init_in_directory_named(tmp_path, "3d_viewer")
400
+
401
+ assert 'id = "com.example.app3d_viewer"' in toml_text
402
+ assert 'name = "3d_viewer"' in toml_text
403
+
404
+
405
+ def test_cli_init_without_name_accepts_a_cwd_that_fails_the_pattern(tmp_path: Path) -> None:
406
+ # Validation covers the typed name only. A directory named MyProject is
407
+ # extremely ordinary, and `pn init` there must keep working.
408
+ toml_text = _init_in_directory_named(tmp_path, "MyProject")
409
+
322
410
  assert 'name = "MyProject"' in toml_text
323
411
  assert 'id = "com.example.myproject"' in toml_text
324
412
 
@@ -331,6 +419,7 @@ def test_cli_run_help_lists_flags() -> None:
331
419
  assert "--no-logs" in result.stdout
332
420
  assert "--dev-server" in result.stdout
333
421
  assert "--prepare-only" in result.stdout
422
+ assert "Target platform" in result.stdout
334
423
  finally:
335
424
  shutil.rmtree(tmpdir, ignore_errors=True)
336
425
 
@@ -341,6 +430,7 @@ def test_cli_build_help_lists_debug() -> None:
341
430
  result = run_pn(["build", "--help"], tmpdir)
342
431
  assert result.returncode == 0, result.stderr
343
432
  assert "--debug" in result.stdout
433
+ assert "Target platform" in result.stdout
344
434
  finally:
345
435
  shutil.rmtree(tmpdir, ignore_errors=True)
346
436
 
@@ -364,13 +454,111 @@ def test_cli_run_without_config_errors() -> None:
364
454
  shutil.rmtree(tmpdir, ignore_errors=True)
365
455
 
366
456
 
367
- def test_cli_app_id_resolves(tmp_path: Path) -> None:
368
- assert run_pn(["init", "my_app"], str(tmp_path)).returncode == 0
369
- project_dir = str(tmp_path / "my_app")
370
- result = run_pn(["app-id", "android"], project_dir)
457
+ # A default `pn init` scaffold sets only `app.id`, so both platforms resolve to
458
+ # the same string and a test built on it passes with the platform branch
459
+ # inverted. These per-platform overrides make the two diverge.
460
+ _APP_ID_TOML = """\
461
+ [app]
462
+ id = "com.example.base"
463
+ name = "over"
464
+
465
+ [ios]
466
+ bundle_id = "com.example.ios_override"
467
+
468
+ [android]
469
+ application_id = "com.example.android_override"
470
+ """
471
+
472
+ _EXPECTED_APP_IDS = {
473
+ "android": "com.example.android_override",
474
+ "ios": "com.example.ios_override",
475
+ }
476
+
477
+
478
+ def _app_id_project(tmp_path: Path) -> str:
479
+ project_dir = tmp_path / "proj"
480
+ project_dir.mkdir()
481
+ (project_dir / "pythonnative.toml").write_text(_APP_ID_TOML, encoding="utf-8")
482
+ return str(project_dir)
483
+
484
+
485
+ @pytest.mark.parametrize("platform", ["android", "ios"])
486
+ def test_cli_app_id_resolves(tmp_path: Path, platform: str) -> None:
487
+ project_dir = _app_id_project(tmp_path)
488
+
489
+ result = run_pn(["app-id", platform], project_dir)
490
+
371
491
  assert result.returncode == 0, result.stderr
372
- assert result.stdout.strip() == "com.example.my_app"
373
- assert run_pn(["app-id", "ios"], project_dir).stdout.strip() == "com.example.my_app"
492
+ # Unstripped, because scripts/run-e2e.sh captures this into a shell
493
+ # variable: any extra line would corrupt APP_ID and only surface later
494
+ # as a Maestro failure against a bundle id that doesn't exist.
495
+ assert result.stdout == f"{_EXPECTED_APP_IDS[platform]}\n"
496
+ assert result.stderr == ""
497
+
498
+
499
+ @pytest.mark.parametrize("platform", ["android", "ios"])
500
+ def test_cli_app_id_json(tmp_path: Path, platform: str) -> None:
501
+ project_dir = _app_id_project(tmp_path)
502
+
503
+ result = run_pn(["app-id", platform, "--json"], project_dir)
504
+
505
+ assert result.returncode == 0, result.stderr
506
+ payload = json.loads(result.stdout)
507
+ assert payload == {"platform": platform, "app_id": _EXPECTED_APP_IDS[platform]}
508
+ assert result.stderr == ""
509
+
510
+
511
+ def test_cli_app_id_json_is_indented(tmp_path: Path) -> None:
512
+ # json.loads is blind to formatting, so nothing else here would notice
513
+ # indent=2 being dropped. Scripts consume the bytes, and the docstring
514
+ # promises an additive-only contract, so pin the exact shape once.
515
+ project_dir = _app_id_project(tmp_path)
516
+
517
+ result = run_pn(["app-id", "android", "--json"], project_dir)
518
+
519
+ assert result.stdout == ("{\n" ' "platform": "android",\n' ' "app_id": "com.example.android_override"\n' "}\n")
520
+
521
+
522
+ def test_cli_app_id_json_differs_per_platform(tmp_path: Path) -> None:
523
+ # The pair, so a branch that ignored `platform` would fail even if each
524
+ # single-platform assertion above were somehow satisfied.
525
+ project_dir = _app_id_project(tmp_path)
526
+
527
+ android = json.loads(run_pn(["app-id", "android", "--json"], project_dir).stdout)
528
+ ios = json.loads(run_pn(["app-id", "ios", "--json"], project_dir).stdout)
529
+
530
+ assert android["app_id"] != ios["app_id"]
531
+
532
+
533
+ def test_cli_app_id_json_keeps_errors_off_stdout(tmp_path: Path) -> None:
534
+ # Without --json this same error goes to stdout, which is why the stream
535
+ # is scoped rather than global.
536
+ result = run_pn(["app-id", "android", "--json"], str(tmp_path))
537
+
538
+ assert result.returncode == 1
539
+ assert result.stdout == ""
540
+ # Match the noun, not the sentence. A malformed config also exits 1 with
541
+ # an error on stderr, so without this phrase the test passes for either.
542
+ assert "No pythonnative.toml" in result.stderr
543
+
544
+
545
+ def test_cli_app_id_plain_error_stays_on_stdout(tmp_path: Path) -> None:
546
+ # Pins the scoping: the default path is untouched by the stream change.
547
+ result = run_pn(["app-id", "android"], str(tmp_path))
548
+
549
+ assert result.returncode == 1
550
+ assert "No pythonnative.toml" in result.stdout
551
+ assert result.stderr == ""
552
+
553
+
554
+ def test_cli_app_id_json_flag_is_wired_through_argparse(tmp_path: Path) -> None:
555
+ # Everything here goes through run_pn, so argparse is always exercised.
556
+ # Confirmed rather than assumed: #22 shipped six in-process tests that
557
+ # all passed with the add_argument deleted.
558
+ result = run_pn(["app-id", "android", "--json"], str(tmp_path))
559
+
560
+ assert result.returncode == 1, "expected the config error, not argparse exit 2"
561
+ assert "unrecognized arguments" not in result.stderr
374
562
 
375
563
 
376
564
  def test_cli_doctor_runs(tmp_path: Path) -> None:
File without changes
File without changes
File without changes
File without changes
File without changes