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.
- {pythonnative-0.41.0/src/pythonnative.egg-info → pythonnative-0.42.0}/PKG-INFO +1 -1
- {pythonnative-0.41.0 → pythonnative-0.42.0}/pyproject.toml +1 -1
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/__init__.py +1 -1
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/cli/pn.py +71 -10
- {pythonnative-0.41.0 → pythonnative-0.42.0/src/pythonnative.egg-info}/PKG-INFO +1 -1
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_cli.py +199 -11
- {pythonnative-0.41.0 → pythonnative-0.42.0}/.github/workflows/release.yml +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/LICENSE +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/MANIFEST.in +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/README.md +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/scripts/check-distributions.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/scripts/cibuildwheel.toml +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/scripts/release-assets.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/setup.cfg +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/setup.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/_ios_log.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/alerts.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/animated.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/animation_graph.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/appearance.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bootstrap.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/android.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/codec.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/commits.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/fake.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/ios.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/bridge/web.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/cli/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/component.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/_base.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/controls.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/layout.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/lists.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/media.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/overlays.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/pressable.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/structural.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/components/text.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devclient.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/server.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/animation_graph.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/bridge.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/colors.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/host.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/index.html +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/layout.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/preview.css +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/renderer.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/shell.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/LICENSE +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/index.d.ts +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/index.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/index.js.map +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/load.d.ts +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/load.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/load.js.map +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/watcher.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/ws.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/diagnostics.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/element.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/equality.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/events.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/gestures.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/hooks.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/hosts/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/hosts/base.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/hosts/native.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/hot_reload.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/layout.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/mutations.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/build.gradle +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/gradle.properties +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/settings.gradle +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/AndroidManifest.xml +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/cpp/CMakeLists.txt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/cpp/yoga_jni.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Package.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/LICENSE +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/Package.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/VENDORED.md +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/PNStyle.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/module.modulemap +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGConfig.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGEnums.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGMacros.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGNode.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGNodeLayout.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGNodeStyle.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGPixelGrid.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/YGValue.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/include/yoga/Yoga.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/python.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/style.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/CMakeLists.txt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGConfig.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGConfig.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGEnums.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGEnums.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGMacros.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNode.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNode.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGValue.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/YGValue.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/Yoga.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/Align.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/SizingMode.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/config/Config.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/config/Config.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/debug/Log.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/debug/Log.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Align.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/BoxSizing.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Dimension.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Direction.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Display.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Edge.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Errata.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/FlexDirection.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Gutter.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Justify.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/LogLevel.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/MeasureMode.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/NodeType.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Overflow.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/PositionType.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Unit.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/Wrap.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/enums/YogaEnums.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/event/event.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/event/event.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/module.modulemap +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/CachedMeasurement.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/LayoutableChildren.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/Node.cpp +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/node/Node.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/numeric/Comparison.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/numeric/FloatOptional.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/style/Style.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/style/StyleLength.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/style/StyleValueHandle.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/yoga/yoga/style/StyleValuePool.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/app_state.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/battery.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/biometrics.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/camera.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/clipboard.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/fallback.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/file_system.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/haptics.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/linking.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/location.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/net_info.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/notifications.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/permissions.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/registry.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/secure_store.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_modules/share.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_views/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_views/base.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native_views/bridge_backend.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/container.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/handle.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/hooks.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/host.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/linking.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/navigators.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/screen.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/navigation/state.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/net.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/platform.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/platform_metrics.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/preview.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/profiling.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/android.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/builder.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/config.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/deps.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/devices.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/doctor.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/fingerprint.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/icons.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/ios.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/lockfile.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/permissions.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/plugins.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/project/runtime_assets.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/py.typed +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/query.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/boundaries.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/children.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/core.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/layout_pass.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/reconciler/vnode.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/refresh.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/runtime.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/scheduler.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/_components.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/builtins.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/codegen.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/module_codegen.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/schema.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/templates/contracts.kt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/sdk/templates/contracts.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/storage.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/style.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/suspense.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/build.gradle +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/proguard-rules.pro +0 -0
- {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
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +0 -0
- {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
- {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
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
- {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
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +0 -0
- {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
- {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
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
- {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
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
- {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
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
- {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
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
- {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
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
- {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
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/values/colors.xml +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/values/strings.xml +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/values/themes.xml +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +0 -0
- {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
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/build.gradle +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/gradle.properties +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/gradlew +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/gradlew.bat +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/android_template/settings.gradle +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/AppDelegate.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/BridgingHeader.h +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/Info.plist +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/testing/__init__.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/testing/backend.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/testing/harness.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/utils.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative.egg-info/SOURCES.txt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative.egg-info/dependency_links.txt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative.egg-info/entry_points.txt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative.egg-info/requires.txt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative.egg-info/top_level.txt +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_alert.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_animated.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_animated_graph.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_appearance.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_async_hooks.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_bridge.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_codegen.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_components.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_core_semantics.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_devclient.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_devserver.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_devserver_ws.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_element.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_events.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_extended_components.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_gesture_composition.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_gestures.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_hooks.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_hosts.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_hot_reload.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_inbox.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_incremental_render.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_interaction_props.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_ios_log.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_layout.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_metric_hooks.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_mutations.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_native_lists.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_native_modules.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_native_views.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_navigation.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_net.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_new_components.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_platform.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_platform_metrics.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_reconciler.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_ref.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_release_packaging.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_release_workflow.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_runtime.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_runtime_contracts.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_sdk.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_smoke.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_storage.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_style.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_suspense.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_transitions.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_utils.py +0 -0
- {pythonnative-0.41.0 → pythonnative-0.42.0}/tests/test_web_transport.py +0 -0
|
@@ -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
|
-
|
|
319
|
-
|
|
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,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
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
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
|
-
|
|
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
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
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
|
-
|
|
373
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/animation_graph.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/index.d.ts
RENAMED
|
File without changes
|
{pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/index.js
RENAMED
|
File without changes
|
{pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/index.js.map
RENAMED
|
File without changes
|
{pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/load.d.ts
RENAMED
|
File without changes
|
{pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/load.js
RENAMED
|
File without changes
|
{pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/devserver/static/yoga/src/load.js.map
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pythonnative-0.41.0 → pythonnative-0.42.0}/src/pythonnative/native/android/gradle.properties
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|