pythonnative 0.40.0__cp314-cp314-win_amd64.whl

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 (418) hide show
  1. pythonnative/__init__.py +411 -0
  2. pythonnative/_ios_log.py +92 -0
  3. pythonnative/_yoga.cp314-win_amd64.pyd +0 -0
  4. pythonnative/alerts.py +236 -0
  5. pythonnative/animated.py +1687 -0
  6. pythonnative/animation_graph.py +78 -0
  7. pythonnative/appearance.py +124 -0
  8. pythonnative/bootstrap.py +100 -0
  9. pythonnative/bridge/__init__.py +302 -0
  10. pythonnative/bridge/android.py +78 -0
  11. pythonnative/bridge/codec.py +170 -0
  12. pythonnative/bridge/commits.py +114 -0
  13. pythonnative/bridge/fake.py +243 -0
  14. pythonnative/bridge/ios.py +138 -0
  15. pythonnative/bridge/web.py +489 -0
  16. pythonnative/cli/__init__.py +7 -0
  17. pythonnative/cli/pn.py +1214 -0
  18. pythonnative/component.py +271 -0
  19. pythonnative/components/__init__.py +111 -0
  20. pythonnative/components/_base.py +166 -0
  21. pythonnative/components/controls.py +521 -0
  22. pythonnative/components/layout.py +518 -0
  23. pythonnative/components/lists.py +785 -0
  24. pythonnative/components/media.py +204 -0
  25. pythonnative/components/overlays.py +107 -0
  26. pythonnative/components/pressable.py +252 -0
  27. pythonnative/components/structural.py +167 -0
  28. pythonnative/components/text.py +291 -0
  29. pythonnative/devclient.py +824 -0
  30. pythonnative/devserver/__init__.py +34 -0
  31. pythonnative/devserver/server.py +718 -0
  32. pythonnative/devserver/static/animation_graph.js +82 -0
  33. pythonnative/devserver/static/bridge.js +147 -0
  34. pythonnative/devserver/static/colors.js +70 -0
  35. pythonnative/devserver/static/host.js +552 -0
  36. pythonnative/devserver/static/index.html +60 -0
  37. pythonnative/devserver/static/layout.js +85 -0
  38. pythonnative/devserver/static/preview.css +415 -0
  39. pythonnative/devserver/static/renderer.js +1994 -0
  40. pythonnative/devserver/static/shell.js +345 -0
  41. pythonnative/devserver/static/yoga/LICENSE +21 -0
  42. pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +75 -0
  43. pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +189 -0
  44. pythonnative/devserver/static/yoga/src/generated/YGEnums.js +211 -0
  45. pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +1 -0
  46. pythonnative/devserver/static/yoga/src/index.d.ts +12 -0
  47. pythonnative/devserver/static/yoga/src/index.js +16 -0
  48. pythonnative/devserver/static/yoga/src/index.js.map +1 -0
  49. pythonnative/devserver/static/yoga/src/load.d.ts +11 -0
  50. pythonnative/devserver/static/yoga/src/load.js +17 -0
  51. pythonnative/devserver/static/yoga/src/load.js.map +1 -0
  52. pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +155 -0
  53. pythonnative/devserver/static/yoga/src/wrapAssembly.js +125 -0
  54. pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +1 -0
  55. pythonnative/devserver/watcher.py +267 -0
  56. pythonnative/devserver/ws.py +421 -0
  57. pythonnative/diagnostics.py +241 -0
  58. pythonnative/element.py +159 -0
  59. pythonnative/equality.py +19 -0
  60. pythonnative/events.py +231 -0
  61. pythonnative/gestures.py +1333 -0
  62. pythonnative/hooks.py +1621 -0
  63. pythonnative/hosts/__init__.py +63 -0
  64. pythonnative/hosts/base.py +596 -0
  65. pythonnative/hosts/native.py +302 -0
  66. pythonnative/hot_reload.py +585 -0
  67. pythonnative/layout.py +328 -0
  68. pythonnative/mutations.py +142 -0
  69. pythonnative/native/android/build.gradle +52 -0
  70. pythonnative/native/android/gradle.properties +3 -0
  71. pythonnative/native/android/settings.gradle +12 -0
  72. pythonnative/native/android/src/main/AndroidManifest.xml +11 -0
  73. pythonnative/native/android/src/main/cpp/CMakeLists.txt +9 -0
  74. pythonnative/native/android/src/main/cpp/yoga_jni.cpp +52 -0
  75. pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +5 -0
  76. pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +3705 -0
  77. pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +129 -0
  78. pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +261 -0
  79. pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +20 -0
  80. pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +108 -0
  81. pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +141 -0
  82. pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +257 -0
  83. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +106 -0
  84. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +175 -0
  85. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +40 -0
  86. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +33 -0
  87. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +82 -0
  88. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +80 -0
  89. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +117 -0
  90. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +74 -0
  91. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +37 -0
  92. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +32 -0
  93. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +213 -0
  94. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +69 -0
  95. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +186 -0
  96. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +123 -0
  97. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +141 -0
  98. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +162 -0
  99. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +134 -0
  100. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +201 -0
  101. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +86 -0
  102. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +55 -0
  103. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +122 -0
  104. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +110 -0
  105. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +214 -0
  106. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +113 -0
  107. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +52 -0
  108. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +131 -0
  109. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +250 -0
  110. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +233 -0
  111. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +355 -0
  112. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +159 -0
  113. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +149 -0
  114. pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +233 -0
  115. pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +127 -0
  116. pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +527 -0
  117. pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +145 -0
  118. pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +29 -0
  119. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +73 -0
  120. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +316 -0
  121. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +61 -0
  122. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +200 -0
  123. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +158 -0
  124. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +100 -0
  125. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +99 -0
  126. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +89 -0
  127. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +178 -0
  128. pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +16 -0
  129. pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +188 -0
  130. pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +80 -0
  131. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +48 -0
  132. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +76 -0
  133. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +18 -0
  134. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +49 -0
  135. pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +75 -0
  136. pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +197 -0
  137. pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +47 -0
  138. pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +78 -0
  139. pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +89 -0
  140. pythonnative/native/ios/Package.swift +23 -0
  141. pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +199 -0
  142. pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +312 -0
  143. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +255 -0
  144. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +104 -0
  145. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +142 -0
  146. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +166 -0
  147. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +53 -0
  148. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +207 -0
  149. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +173 -0
  150. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +183 -0
  151. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +56 -0
  152. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +281 -0
  153. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +222 -0
  154. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +243 -0
  155. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +114 -0
  156. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +107 -0
  157. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +197 -0
  158. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +106 -0
  159. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +297 -0
  160. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +230 -0
  161. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +82 -0
  162. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +86 -0
  163. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +87 -0
  164. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +340 -0
  165. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +155 -0
  166. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +124 -0
  167. pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +1 -0
  168. pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +3775 -0
  169. pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +46 -0
  170. pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +260 -0
  171. pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +173 -0
  172. pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +92 -0
  173. pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +80 -0
  174. pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +174 -0
  175. pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +177 -0
  176. pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +168 -0
  177. pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +266 -0
  178. pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +251 -0
  179. pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +8 -0
  180. pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +46 -0
  181. pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +237 -0
  182. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +46 -0
  183. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +173 -0
  184. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +47 -0
  185. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +51 -0
  186. pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +26 -0
  187. pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +50 -0
  188. pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +86 -0
  189. pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +101 -0
  190. pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +126 -0
  191. pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +111 -0
  192. pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +91 -0
  193. pythonnative/native/yoga/LICENSE +21 -0
  194. pythonnative/native/yoga/Package.swift +9 -0
  195. pythonnative/native/yoga/VENDORED.md +2 -0
  196. pythonnative/native/yoga/include/PNStyle.h +10 -0
  197. pythonnative/native/yoga/include/module.modulemap +5 -0
  198. pythonnative/native/yoga/include/yoga/YGConfig.h +158 -0
  199. pythonnative/native/yoga/include/yoga/YGEnums.h +142 -0
  200. pythonnative/native/yoga/include/yoga/YGMacros.h +99 -0
  201. pythonnative/native/yoga/include/yoga/YGNode.h +304 -0
  202. pythonnative/native/yoga/include/yoga/YGNodeLayout.h +35 -0
  203. pythonnative/native/yoga/include/yoga/YGNodeStyle.h +130 -0
  204. pythonnative/native/yoga/include/yoga/YGPixelGrid.h +29 -0
  205. pythonnative/native/yoga/include/yoga/YGValue.h +84 -0
  206. pythonnative/native/yoga/include/yoga/Yoga.h +21 -0
  207. pythonnative/native/yoga/python.cpp +16 -0
  208. pythonnative/native/yoga/style.cpp +272 -0
  209. pythonnative/native/yoga/yoga/CMakeLists.txt +41 -0
  210. pythonnative/native/yoga/yoga/YGConfig.cpp +92 -0
  211. pythonnative/native/yoga/yoga/YGConfig.h +158 -0
  212. pythonnative/native/yoga/yoga/YGEnums.cpp +262 -0
  213. pythonnative/native/yoga/yoga/YGEnums.h +142 -0
  214. pythonnative/native/yoga/yoga/YGMacros.h +99 -0
  215. pythonnative/native/yoga/yoga/YGNode.cpp +366 -0
  216. pythonnative/native/yoga/yoga/YGNode.h +304 -0
  217. pythonnative/native/yoga/yoga/YGNodeLayout.cpp +92 -0
  218. pythonnative/native/yoga/yoga/YGNodeLayout.h +35 -0
  219. pythonnative/native/yoga/yoga/YGNodeStyle.cpp +405 -0
  220. pythonnative/native/yoga/yoga/YGNodeStyle.h +130 -0
  221. pythonnative/native/yoga/yoga/YGPixelGrid.cpp +22 -0
  222. pythonnative/native/yoga/yoga/YGPixelGrid.h +29 -0
  223. pythonnative/native/yoga/yoga/YGValue.cpp +20 -0
  224. pythonnative/native/yoga/yoga/YGValue.h +84 -0
  225. pythonnative/native/yoga/yoga/Yoga.h +21 -0
  226. pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +563 -0
  227. pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +41 -0
  228. pythonnative/native/yoga/yoga/algorithm/Align.h +72 -0
  229. pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +78 -0
  230. pythonnative/native/yoga/yoga/algorithm/Baseline.h +21 -0
  231. pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +79 -0
  232. pythonnative/native/yoga/yoga/algorithm/Cache.cpp +121 -0
  233. pythonnative/native/yoga/yoga/algorithm/Cache.h +30 -0
  234. pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +2428 -0
  235. pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +38 -0
  236. pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +120 -0
  237. pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +124 -0
  238. pythonnative/native/yoga/yoga/algorithm/FlexLine.h +75 -0
  239. pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +132 -0
  240. pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +29 -0
  241. pythonnative/native/yoga/yoga/algorithm/SizingMode.h +73 -0
  242. pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +44 -0
  243. pythonnative/native/yoga/yoga/config/Config.cpp +135 -0
  244. pythonnative/native/yoga/yoga/config/Config.h +92 -0
  245. pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +53 -0
  246. pythonnative/native/yoga/yoga/debug/AssertFatal.h +29 -0
  247. pythonnative/native/yoga/yoga/debug/Log.cpp +107 -0
  248. pythonnative/native/yoga/yoga/debug/Log.h +34 -0
  249. pythonnative/native/yoga/yoga/enums/Align.h +47 -0
  250. pythonnative/native/yoga/yoga/enums/BoxSizing.h +40 -0
  251. pythonnative/native/yoga/yoga/enums/Dimension.h +40 -0
  252. pythonnative/native/yoga/yoga/enums/Direction.h +41 -0
  253. pythonnative/native/yoga/yoga/enums/Display.h +41 -0
  254. pythonnative/native/yoga/yoga/enums/Edge.h +47 -0
  255. pythonnative/native/yoga/yoga/enums/Errata.h +41 -0
  256. pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +39 -0
  257. pythonnative/native/yoga/yoga/enums/FlexDirection.h +42 -0
  258. pythonnative/native/yoga/yoga/enums/Gutter.h +41 -0
  259. pythonnative/native/yoga/yoga/enums/Justify.h +44 -0
  260. pythonnative/native/yoga/yoga/enums/LogLevel.h +44 -0
  261. pythonnative/native/yoga/yoga/enums/MeasureMode.h +41 -0
  262. pythonnative/native/yoga/yoga/enums/NodeType.h +40 -0
  263. pythonnative/native/yoga/yoga/enums/Overflow.h +41 -0
  264. pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +21 -0
  265. pythonnative/native/yoga/yoga/enums/PositionType.h +41 -0
  266. pythonnative/native/yoga/yoga/enums/Unit.h +42 -0
  267. pythonnative/native/yoga/yoga/enums/Wrap.h +41 -0
  268. pythonnative/native/yoga/yoga/enums/YogaEnums.h +85 -0
  269. pythonnative/native/yoga/yoga/event/event.cpp +87 -0
  270. pythonnative/native/yoga/yoga/event/event.h +130 -0
  271. pythonnative/native/yoga/yoga/module.modulemap +21 -0
  272. pythonnative/native/yoga/yoga/node/CachedMeasurement.h +53 -0
  273. pythonnative/native/yoga/yoga/node/LayoutResults.cpp +48 -0
  274. pythonnative/native/yoga/yoga/node/LayoutResults.h +122 -0
  275. pythonnative/native/yoga/yoga/node/LayoutableChildren.h +148 -0
  276. pythonnative/native/yoga/yoga/node/Node.cpp +443 -0
  277. pythonnative/native/yoga/yoga/node/Node.h +337 -0
  278. pythonnative/native/yoga/yoga/numeric/Comparison.h +81 -0
  279. pythonnative/native/yoga/yoga/numeric/FloatOptional.h +93 -0
  280. pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +133 -0
  281. pythonnative/native/yoga/yoga/style/Style.h +757 -0
  282. pythonnative/native/yoga/yoga/style/StyleLength.h +107 -0
  283. pythonnative/native/yoga/yoga/style/StyleValueHandle.h +98 -0
  284. pythonnative/native/yoga/yoga/style/StyleValuePool.h +127 -0
  285. pythonnative/native_modules/__init__.py +124 -0
  286. pythonnative/native_modules/app_state.py +99 -0
  287. pythonnative/native_modules/battery.py +75 -0
  288. pythonnative/native_modules/biometrics.py +42 -0
  289. pythonnative/native_modules/camera.py +65 -0
  290. pythonnative/native_modules/clipboard.py +46 -0
  291. pythonnative/native_modules/fallback.py +324 -0
  292. pythonnative/native_modules/file_system.py +145 -0
  293. pythonnative/native_modules/haptics.py +75 -0
  294. pythonnative/native_modules/linking.py +123 -0
  295. pythonnative/native_modules/location.py +75 -0
  296. pythonnative/native_modules/net_info.py +112 -0
  297. pythonnative/native_modules/notifications.py +129 -0
  298. pythonnative/native_modules/permissions.py +108 -0
  299. pythonnative/native_modules/registry.py +526 -0
  300. pythonnative/native_modules/secure_store.py +52 -0
  301. pythonnative/native_modules/share.py +51 -0
  302. pythonnative/native_views/__init__.py +375 -0
  303. pythonnative/native_views/base.py +316 -0
  304. pythonnative/native_views/bridge_backend.py +277 -0
  305. pythonnative/navigation/__init__.py +103 -0
  306. pythonnative/navigation/container.py +154 -0
  307. pythonnative/navigation/handle.py +540 -0
  308. pythonnative/navigation/hooks.py +133 -0
  309. pythonnative/navigation/host.py +58 -0
  310. pythonnative/navigation/linking.py +200 -0
  311. pythonnative/navigation/navigators.py +659 -0
  312. pythonnative/navigation/screen.py +149 -0
  313. pythonnative/navigation/state.py +269 -0
  314. pythonnative/net.py +248 -0
  315. pythonnative/platform.py +166 -0
  316. pythonnative/platform_metrics.py +252 -0
  317. pythonnative/preview.py +287 -0
  318. pythonnative/profiling.py +101 -0
  319. pythonnative/project/__init__.py +68 -0
  320. pythonnative/project/android.py +557 -0
  321. pythonnative/project/builder.py +817 -0
  322. pythonnative/project/config.py +773 -0
  323. pythonnative/project/deps.py +719 -0
  324. pythonnative/project/devices.py +304 -0
  325. pythonnative/project/doctor.py +283 -0
  326. pythonnative/project/fingerprint.py +171 -0
  327. pythonnative/project/icons.py +247 -0
  328. pythonnative/project/ios.py +325 -0
  329. pythonnative/project/lockfile.py +100 -0
  330. pythonnative/project/permissions.py +361 -0
  331. pythonnative/project/plugins.py +519 -0
  332. pythonnative/project/runtime_assets.py +183 -0
  333. pythonnative/py.typed +0 -0
  334. pythonnative/query.py +153 -0
  335. pythonnative/reconciler/__init__.py +29 -0
  336. pythonnative/reconciler/boundaries.py +375 -0
  337. pythonnative/reconciler/children.py +88 -0
  338. pythonnative/reconciler/core.py +1165 -0
  339. pythonnative/reconciler/layout_pass.py +393 -0
  340. pythonnative/reconciler/vnode.py +266 -0
  341. pythonnative/refresh.py +55 -0
  342. pythonnative/runtime.py +306 -0
  343. pythonnative/scheduler.py +159 -0
  344. pythonnative/sdk/__init__.py +153 -0
  345. pythonnative/sdk/_components.py +427 -0
  346. pythonnative/sdk/builtins.py +91 -0
  347. pythonnative/sdk/codegen.py +149 -0
  348. pythonnative/sdk/module_codegen.py +184 -0
  349. pythonnative/sdk/schema.py +224 -0
  350. pythonnative/sdk/templates/contracts.kt +46 -0
  351. pythonnative/sdk/templates/contracts.swift +46 -0
  352. pythonnative/storage.py +184 -0
  353. pythonnative/style.py +841 -0
  354. pythonnative/suspense.py +183 -0
  355. pythonnative/templates/android_template/app/build.gradle +75 -0
  356. pythonnative/templates/android_template/app/proguard-rules.pro +21 -0
  357. pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +24 -0
  358. pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +7 -0
  359. pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +32 -0
  360. pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +130 -0
  361. pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +13 -0
  362. pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
  363. pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +30 -0
  364. pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +10 -0
  365. pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +6 -0
  366. pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +6 -0
  367. pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  368. pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  369. pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  370. pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  371. pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  372. pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  373. pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  374. pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  375. pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  376. pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  377. pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +22 -0
  378. pythonnative/templates/android_template/app/src/main/res/values/colors.xml +5 -0
  379. pythonnative/templates/android_template/app/src/main/res/values/strings.xml +5 -0
  380. pythonnative/templates/android_template/app/src/main/res/values/themes.xml +9 -0
  381. pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +7 -0
  382. pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +13 -0
  383. pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +19 -0
  384. pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +17 -0
  385. pythonnative/templates/android_template/build.gradle +10 -0
  386. pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
  387. pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +6 -0
  388. pythonnative/templates/android_template/gradle.properties +23 -0
  389. pythonnative/templates/android_template/gradlew +185 -0
  390. pythonnative/templates/android_template/gradlew.bat +89 -0
  391. pythonnative/templates/android_template/settings.gradle +17 -0
  392. pythonnative/templates/ios_template/ios_template/AppDelegate.swift +51 -0
  393. pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  394. pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +13 -0
  395. pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +6 -0
  396. pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +25 -0
  397. pythonnative/templates/ios_template/ios_template/BridgingHeader.h +14 -0
  398. pythonnative/templates/ios_template/ios_template/Info.plist +28 -0
  399. pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +390 -0
  400. pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +61 -0
  401. pythonnative/templates/ios_template/ios_template/ViewController.swift +23 -0
  402. pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +745 -0
  403. pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  404. pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +36 -0
  405. pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +41 -0
  406. pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +32 -0
  407. pythonnative/testing/__init__.py +53 -0
  408. pythonnative/testing/backend.py +276 -0
  409. pythonnative/testing/harness.py +369 -0
  410. pythonnative/utils.py +145 -0
  411. pythonnative-0.40.0.dist-info/DELVEWHEEL +2 -0
  412. pythonnative-0.40.0.dist-info/METADATA +150 -0
  413. pythonnative-0.40.0.dist-info/RECORD +418 -0
  414. pythonnative-0.40.0.dist-info/WHEEL +5 -0
  415. pythonnative-0.40.0.dist-info/entry_points.txt +2 -0
  416. pythonnative-0.40.0.dist-info/licenses/LICENSE +21 -0
  417. pythonnative-0.40.0.dist-info/top_level.txt +1 -0
  418. pythonnative.libs/msvcp140-a4c2229bdc2a2a630acdc095b4d86008.dll +0 -0
@@ -0,0 +1,411 @@
1
+ """PythonNative: declarative native UI for Android and iOS.
2
+
3
+ PythonNative is a cross-platform toolkit that turns Python ``@component``
4
+ functions into real, native Android and iOS views. The component model
5
+ is React-like (function components plus hooks). Python owns the
6
+ component tree, reconciliation, and layout; each commit crosses once
7
+ into a native rendering core (Swift ``PythonNativeKit`` on iOS, the
8
+ Kotlin ``pythonnative`` module on Android) that owns every platform
9
+ view, gesture, animation, and device API. There is no JavaScript.
10
+
11
+ Key building blocks:
12
+
13
+ - **Element factories** ([`Text`][pythonnative.Text],
14
+ [`Button`][pythonnative.Button], [`Column`][pythonnative.Column], etc.)
15
+ return immutable [`Element`][pythonnative.Element] descriptors.
16
+ - **Hooks** ([`use_state`][pythonnative.use_state],
17
+ [`use_effect`][pythonnative.use_effect],
18
+ [`use_reducer`][pythonnative.use_reducer], etc.) manage state, side
19
+ effects, and context inside `@component` functions.
20
+ - **Navigation** is built from
21
+ [`NavigationContainer`][pythonnative.NavigationContainer] plus one of
22
+ the [`create_stack_navigator`][pythonnative.create_stack_navigator],
23
+ [`create_tab_navigator`][pythonnative.create_tab_navigator], or
24
+ [`create_drawer_navigator`][pythonnative.create_drawer_navigator]
25
+ factories.
26
+ - **Styling** uses a single ``style`` dict per element (or a list of
27
+ dicts), composable via [`StyleSheet`][pythonnative.StyleSheet].
28
+ PythonNative ships a fully-typed [`Style`][pythonnative.style.Style]
29
+ TypedDict so editors and ``mypy`` validate every key as you type.
30
+ - **Animations** use the ``Animated`` namespace, modeled on React
31
+ Native's animation API. Animations are driven natively (Core
32
+ Animation / ``ViewPropertyAnimator``) whenever possible.
33
+ - **Gestures** attach to any view via the ``gestures=`` prop using
34
+ descriptors from ``pythonnative.gestures``
35
+ ([`Tap`][pythonnative.gestures.Tap],
36
+ [`LongPress`][pythonnative.gestures.LongPress],
37
+ [`Pan`][pythonnative.gestures.Pan],
38
+ [`Swipe`][pythonnative.gestures.Swipe],
39
+ [`Pinch`][pythonnative.gestures.Pinch],
40
+ [`Rotation`][pythonnative.gestures.Rotation]).
41
+ - **Custom native components** can be authored with the
42
+ ``pythonnative.sdk`` package: define a typed
43
+ [`Props`][pythonnative.sdk.Props] dataclass, implement a
44
+ [`ViewHandler`][pythonnative.native_views.base.ViewHandler] for each
45
+ platform, and register it via
46
+ [`@native_component`][pythonnative.sdk.native_component] (or expose
47
+ it from a PyPI package via the ``pythonnative.handlers`` entry-point
48
+ group).
49
+
50
+ Example:
51
+ ```python
52
+ import pythonnative as pn
53
+
54
+ @pn.component
55
+ def App():
56
+ count, set_count = pn.use_state(0)
57
+ return pn.Column(
58
+ pn.Text(f"Count: {count}", style=pn.style(font_size=24)),
59
+ pn.Button("+", on_press=lambda: set_count(count + 1)),
60
+ style=pn.style(spacing=12),
61
+ )
62
+ ```
63
+ """
64
+
65
+
66
+ # start delvewheel patch
67
+ def _delvewheel_patch_1_13_1():
68
+ import os
69
+ if os.path.isdir(libs_dir := os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, 'pythonnative.libs'))):
70
+ os.add_dll_directory(libs_dir)
71
+
72
+
73
+ _delvewheel_patch_1_13_1()
74
+ del _delvewheel_patch_1_13_1
75
+ # end delvewheel patch
76
+
77
+ __version__ = "0.40.0"
78
+
79
+ from . import appearance, diagnostics, gestures, runtime, sdk
80
+ from .alerts import Alert
81
+ from .animated import Animated, AnimatedValue, use_animated_value
82
+ from .component import Component, component, memo
83
+ from .components import (
84
+ ActivityIndicator,
85
+ Button,
86
+ Checkbox,
87
+ Column,
88
+ DatePicker,
89
+ ErrorBoundary,
90
+ FlatList,
91
+ Fragment,
92
+ Image,
93
+ ImageBackground,
94
+ KeyboardAvoidingView,
95
+ ListController,
96
+ Modal,
97
+ Picker,
98
+ Portal,
99
+ Pressable,
100
+ ProgressBar,
101
+ RefreshControl,
102
+ Row,
103
+ SafeAreaView,
104
+ ScrollView,
105
+ SectionList,
106
+ SegmentedControl,
107
+ Slider,
108
+ Spacer,
109
+ StatusBar,
110
+ Suspense,
111
+ Switch,
112
+ Text,
113
+ TextInput,
114
+ TouchableOpacity,
115
+ View,
116
+ WebView,
117
+ )
118
+ from .diagnostics import HookOrderError
119
+ from .element import Element
120
+ from .hooks import (
121
+ Context,
122
+ MutationCall,
123
+ MutationState,
124
+ QueryResult,
125
+ Ref,
126
+ create_context,
127
+ use_back_handler,
128
+ use_callback,
129
+ use_color_scheme,
130
+ use_context,
131
+ use_deferred_value,
132
+ use_effect,
133
+ use_imperative_handle,
134
+ use_keyboard_height,
135
+ use_layout_effect,
136
+ use_memo,
137
+ use_mutation,
138
+ use_query,
139
+ use_reducer,
140
+ use_ref,
141
+ use_resource,
142
+ use_safe_area_insets,
143
+ use_state,
144
+ use_subscription,
145
+ use_transition,
146
+ use_window_dimensions,
147
+ )
148
+ from .hosts import create_screen
149
+ from .native_modules import (
150
+ AppState,
151
+ Battery,
152
+ Biometrics,
153
+ Camera,
154
+ Clipboard,
155
+ FileSystem,
156
+ Haptics,
157
+ Linking,
158
+ Location,
159
+ NetInfo,
160
+ Notifications,
161
+ Permissions,
162
+ SecureStore,
163
+ Share,
164
+ Vibration,
165
+ use_app_state,
166
+ use_net_info,
167
+ )
168
+ from .navigation import (
169
+ LinkingConfig,
170
+ Navigation,
171
+ NavigationContainer,
172
+ NavigationState,
173
+ Route,
174
+ ScreenOptions,
175
+ create_drawer_navigator,
176
+ create_stack_navigator,
177
+ create_tab_navigator,
178
+ use_focus_effect,
179
+ use_is_focused,
180
+ use_navigation,
181
+ use_route,
182
+ )
183
+ from .net import HTTPError, Response, fetch
184
+ from .platform import Platform, get_platform
185
+ from .runtime import run_async, run_blocking
186
+ from .scheduler import batch_updates
187
+ from .sdk import (
188
+ Props,
189
+ ViewHandler,
190
+ element_factory,
191
+ native_component,
192
+ register_component,
193
+ )
194
+ from .storage import AsyncStorage, use_persisted_state
195
+ from .style import (
196
+ DEFAULT_DARK_THEME,
197
+ DEFAULT_LIGHT_THEME,
198
+ AccessibilityState,
199
+ AlignContent,
200
+ AlignItems,
201
+ AlignSelf,
202
+ AutoCapitalize,
203
+ Color,
204
+ Dimension,
205
+ Display,
206
+ EdgeInsets,
207
+ FlexDirection,
208
+ FlexWrap,
209
+ FontWeight,
210
+ JustifyContent,
211
+ KeyboardType,
212
+ LayoutDirection,
213
+ Overflow,
214
+ PointerEvents,
215
+ Position,
216
+ ReturnKeyType,
217
+ ScaleType,
218
+ ShadowOffset,
219
+ Style,
220
+ StyleProp,
221
+ StyleSheet,
222
+ TextAlign,
223
+ TextDecoration,
224
+ TextTransform,
225
+ Theme,
226
+ ThemeContext,
227
+ TransformSpec,
228
+ default_theme,
229
+ resolve_style,
230
+ style,
231
+ use_theme,
232
+ )
233
+ from .suspense import Resource, lazy, start_resource
234
+
235
+ __all__ = [
236
+ # Components
237
+ "ActivityIndicator",
238
+ "Button",
239
+ "Checkbox",
240
+ "Column",
241
+ "DatePicker",
242
+ "ErrorBoundary",
243
+ "FlatList",
244
+ "Fragment",
245
+ "Image",
246
+ "ImageBackground",
247
+ "KeyboardAvoidingView",
248
+ "ListController",
249
+ "Modal",
250
+ "Picker",
251
+ "Portal",
252
+ "Pressable",
253
+ "ProgressBar",
254
+ "RefreshControl",
255
+ "Row",
256
+ "SafeAreaView",
257
+ "ScrollView",
258
+ "SectionList",
259
+ "SegmentedControl",
260
+ "Slider",
261
+ "Spacer",
262
+ "StatusBar",
263
+ "Suspense",
264
+ "Switch",
265
+ "Text",
266
+ "TextInput",
267
+ "TouchableOpacity",
268
+ "View",
269
+ "WebView",
270
+ # Core
271
+ "Component",
272
+ "Element",
273
+ "component",
274
+ "create_screen",
275
+ "memo",
276
+ # Hooks
277
+ "Context",
278
+ "MutationCall",
279
+ "MutationState",
280
+ "QueryResult",
281
+ "Ref",
282
+ "batch_updates",
283
+ "create_context",
284
+ "use_back_handler",
285
+ "use_callback",
286
+ "use_color_scheme",
287
+ "use_context",
288
+ "use_deferred_value",
289
+ "use_effect",
290
+ "use_imperative_handle",
291
+ "use_keyboard_height",
292
+ "use_layout_effect",
293
+ "use_memo",
294
+ "use_mutation",
295
+ "use_persisted_state",
296
+ "use_query",
297
+ "use_reducer",
298
+ "use_ref",
299
+ "use_resource",
300
+ "use_safe_area_insets",
301
+ "use_state",
302
+ "use_subscription",
303
+ "use_transition",
304
+ "use_window_dimensions",
305
+ # Suspense and async rendering
306
+ "Resource",
307
+ "lazy",
308
+ "start_resource",
309
+ # Navigation
310
+ "LinkingConfig",
311
+ "Navigation",
312
+ "NavigationContainer",
313
+ "NavigationState",
314
+ "Route",
315
+ "ScreenOptions",
316
+ "create_drawer_navigator",
317
+ "create_stack_navigator",
318
+ "create_tab_navigator",
319
+ "use_focus_effect",
320
+ "use_is_focused",
321
+ "use_navigation",
322
+ "use_route",
323
+ # Styling - typed primitives
324
+ "AccessibilityState",
325
+ "AlignContent",
326
+ "AlignItems",
327
+ "AlignSelf",
328
+ "AutoCapitalize",
329
+ "Color",
330
+ "DEFAULT_DARK_THEME",
331
+ "DEFAULT_LIGHT_THEME",
332
+ "Dimension",
333
+ "Display",
334
+ "EdgeInsets",
335
+ "FlexDirection",
336
+ "FlexWrap",
337
+ "FontWeight",
338
+ "JustifyContent",
339
+ "KeyboardType",
340
+ "LayoutDirection",
341
+ "Overflow",
342
+ "PointerEvents",
343
+ "Position",
344
+ "ReturnKeyType",
345
+ "ScaleType",
346
+ "ShadowOffset",
347
+ "Style",
348
+ "StyleProp",
349
+ "StyleSheet",
350
+ "TextAlign",
351
+ "TextDecoration",
352
+ "TextTransform",
353
+ "Theme",
354
+ "ThemeContext",
355
+ "TransformSpec",
356
+ "default_theme",
357
+ "resolve_style",
358
+ "style",
359
+ "use_theme",
360
+ # Appearance
361
+ "appearance",
362
+ # Image pipeline
363
+ # Animation
364
+ "Animated",
365
+ "AnimatedValue",
366
+ "use_animated_value",
367
+ # Gestures
368
+ "gestures",
369
+ # Imperative
370
+ "Alert",
371
+ # Native modules
372
+ "AppState",
373
+ "Battery",
374
+ "Biometrics",
375
+ "Camera",
376
+ "Clipboard",
377
+ "FileSystem",
378
+ "Haptics",
379
+ "Linking",
380
+ "Location",
381
+ "NetInfo",
382
+ "Notifications",
383
+ "Permissions",
384
+ "SecureStore",
385
+ "Share",
386
+ "Vibration",
387
+ "use_app_state",
388
+ "use_net_info",
389
+ # Networking + persistence
390
+ "AsyncStorage",
391
+ "fetch",
392
+ "HTTPError",
393
+ "Response",
394
+ # Runtime
395
+ "run_async",
396
+ "run_blocking",
397
+ "runtime",
398
+ # Diagnostics
399
+ "HookOrderError",
400
+ "diagnostics",
401
+ # Platform
402
+ "Platform",
403
+ "get_platform",
404
+ # Custom-component SDK
405
+ "Props",
406
+ "ViewHandler",
407
+ "element_factory",
408
+ "native_component",
409
+ "register_component",
410
+ "sdk",
411
+ ]
@@ -0,0 +1,92 @@
1
+ """Route Python `sys.stdout`/`sys.stderr` through fd 2 on iOS.
2
+
3
+ When an app is launched via `xcrun simctl launch --console-pty`
4
+ (what `pn run ios` does), the simulator attaches the caller's
5
+ terminal to the app's stderr, which is the same channel `NSLog` and
6
+ `os_log` write to. Python `print()` calls, however, go to
7
+ `sys.stdout` (fd 1), and for reasons specific to how CPython's
8
+ embedded framework is started on the iOS Simulator that descriptor
9
+ does not reach the attached console. As a result, users see
10
+ Swift-side `NSLog` output but never their own `print()` output.
11
+
12
+ Redirecting `sys.stdout` and `sys.stderr` at a Python level to write
13
+ straight to fd 2 is a small, reliable fix: fd 2 *is* visible to
14
+ `simctl` (that is exactly how `NSLog` reaches the terminal), so
15
+ Python output lands next to the Swift logs with correct ordering.
16
+
17
+ This module is intentionally self-contained (no bridge or
18
+ platform-specific C bindings required), so it is safe to import
19
+ early during `pythonnative` package initialization.
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ import os
25
+ import sys
26
+ from typing import Iterable
27
+
28
+ _STDERR_FD = 2
29
+
30
+
31
+ class _StderrStream:
32
+ """Minimal text-mode file-like that writes UTF-8 bytes to fd 2.
33
+
34
+ Write-through (no buffering), so a `print()` call appears in the
35
+ terminal immediately. That matches user expectations for an
36
+ interactive "run on simulator" log stream.
37
+ """
38
+
39
+ encoding = "utf-8"
40
+ errors = "replace"
41
+ mode = "w"
42
+ name = "<stderr>"
43
+
44
+ def write(self, s: str) -> int:
45
+ if not s:
46
+ return 0
47
+ data = s.encode(self.encoding, self.errors)
48
+ try:
49
+ return os.write(_STDERR_FD, data)
50
+ except OSError:
51
+ return 0
52
+
53
+ def writelines(self, lines: Iterable[str]) -> None:
54
+ for line in lines:
55
+ self.write(line)
56
+
57
+ def flush(self) -> None:
58
+ # os.write is unbuffered; nothing to flush.
59
+ return None
60
+
61
+ def isatty(self) -> bool:
62
+ try:
63
+ return os.isatty(_STDERR_FD)
64
+ except OSError:
65
+ return False
66
+
67
+ def fileno(self) -> int:
68
+ return _STDERR_FD
69
+
70
+ def close(self) -> None:
71
+ # Don't actually close fd 2.
72
+ return None
73
+
74
+ @property
75
+ def closed(self) -> bool:
76
+ return False
77
+
78
+
79
+ _installed = False
80
+
81
+
82
+ def install() -> None:
83
+ """Swap `sys.stdout` and `sys.stderr` for fd-2 writers.
84
+
85
+ Idempotent: only the first call has effect.
86
+ """
87
+ global _installed
88
+ if _installed:
89
+ return
90
+ sys.stdout = _StderrStream()
91
+ sys.stderr = _StderrStream()
92
+ _installed = True
Binary file