pythonnative 0.37.0__py3-none-any.whl → 0.38.0__py3-none-any.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 (47) hide show
  1. pythonnative/__init__.py +9 -1
  2. pythonnative/alerts.py +6 -14
  3. pythonnative/cli/pn.py +96 -10
  4. pythonnative/components/_base.py +31 -0
  5. pythonnative/components/controls.py +19 -16
  6. pythonnative/components/layout.py +5 -8
  7. pythonnative/components/lists.py +6 -6
  8. pythonnative/gestures.py +27 -6
  9. pythonnative/native_modules/__init__.py +19 -0
  10. pythonnative/native_modules/battery.py +13 -14
  11. pythonnative/native_modules/biometrics.py +12 -14
  12. pythonnative/native_modules/camera.py +10 -6
  13. pythonnative/native_modules/clipboard.py +9 -11
  14. pythonnative/native_modules/file_system.py +81 -172
  15. pythonnative/native_modules/haptics.py +14 -10
  16. pythonnative/native_modules/linking.py +9 -8
  17. pythonnative/native_modules/location.py +10 -12
  18. pythonnative/native_modules/net_info.py +1 -4
  19. pythonnative/native_modules/notifications.py +25 -32
  20. pythonnative/native_modules/permissions.py +70 -22
  21. pythonnative/native_modules/secure_store.py +16 -20
  22. pythonnative/native_modules/share.py +5 -5
  23. pythonnative/navigation/__init__.py +2 -1
  24. pythonnative/navigation/hooks.py +46 -7
  25. pythonnative/navigation/state.py +30 -9
  26. pythonnative/project/android.py +23 -0
  27. pythonnative/project/builder.py +64 -35
  28. pythonnative/project/config.py +84 -24
  29. pythonnative/project/deps.py +703 -0
  30. pythonnative/project/doctor.py +53 -4
  31. pythonnative/project/runtime_assets.py +13 -14
  32. pythonnative/style.py +94 -44
  33. pythonnative/templates/android_template/app/build.gradle +5 -2
  34. pythonnative/templates/android_template/build.gradle +7 -4
  35. pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +1 -1
  36. pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +15 -4
  37. pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/PermissionModules.swift +25 -10
  38. pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +3 -2
  39. pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +35 -9
  40. pythonnative/utils.py +22 -27
  41. pythonnative/virtual_rows.py +10 -20
  42. {pythonnative-0.37.0.dist-info → pythonnative-0.38.0.dist-info}/METADATA +8 -8
  43. {pythonnative-0.37.0.dist-info → pythonnative-0.38.0.dist-info}/RECORD +47 -46
  44. {pythonnative-0.37.0.dist-info → pythonnative-0.38.0.dist-info}/WHEEL +0 -0
  45. {pythonnative-0.37.0.dist-info → pythonnative-0.38.0.dist-info}/entry_points.txt +0 -0
  46. {pythonnative-0.37.0.dist-info → pythonnative-0.38.0.dist-info}/licenses/LICENSE +0 -0
  47. {pythonnative-0.37.0.dist-info → pythonnative-0.38.0.dist-info}/top_level.txt +0 -0
pythonnative/utils.py CHANGED
@@ -7,12 +7,12 @@ results are cached the first time
7
7
  [`IS_IOS`][pythonnative.utils.IS_IOS] are read.
8
8
 
9
9
  Attributes:
10
- IS_ANDROID: `True` when running inside an Android process (either
11
- because `ANDROID_*` env vars are present or because Chaquopy's
12
- `java` module imports successfully).
13
- IS_IOS: `True` when running inside an iOS app bundle (signaled by
14
- `PN_PLATFORM=ios`, `sys.platform == "ios"`, or a Simulator
15
- `HOME` path).
10
+ IS_ANDROID: `True` when running inside an Android process
11
+ (`sys.platform == "android"` on the embedded CPython 3.13+, or
12
+ Chaquopy's `java` module imports successfully).
13
+ IS_IOS: `True` when running inside an iOS app bundle
14
+ (`sys.platform == "ios"` on the embedded CPython 3.13+, or the
15
+ explicit `PN_PLATFORM=ios` override).
16
16
  IS_DESKTOP: `True` when running the desktop preview backend
17
17
  (signaled by `PN_PLATFORM=desktop`, set by ``pn preview``).
18
18
  This drives the Tkinter native-view registry so a PythonNative
@@ -33,9 +33,12 @@ _is_desktop: Optional[bool] = None
33
33
 
34
34
 
35
35
  def _detect_android() -> bool:
36
- """Return whether we're running inside an Android process."""
37
- env = os.environ
38
- if "ANDROID_BOOTLOGO" in env or "ANDROID_ROOT" in env or "ANDROID_DATA" in env or "ANDROID_ARGUMENT" in env:
36
+ """Return whether we're running inside an Android process.
37
+
38
+ CPython 3.13+ reports ``sys.platform == "android"`` (PEP 738); the
39
+ Chaquopy ``java`` module import is kept as a secondary signal.
40
+ """
41
+ if sys.platform == "android":
39
42
  return True
40
43
  try:
41
44
  from java import jclass # noqa: F401
@@ -51,25 +54,18 @@ def _detect_ios() -> bool:
51
54
 
52
55
  Signals, in priority order:
53
56
 
54
- - Explicit `PN_PLATFORM=ios` env var (set by the iOS template's
55
- `ViewController.swift` before Python starts). This is the
56
- canonical signal and survives even on hosts where `sys.platform`
57
- is generic `darwin`.
58
- - `sys.platform == "ios"` (CPython 3.13+ native iOS builds).
59
- - `/CoreSimulator/Devices/` in `$HOME` (iOS Simulator fallback if
60
- the template signal is missing for some reason).
57
+ - `sys.platform == "ios"`: CPython 3.13+ reports this on both
58
+ devices and the Simulator (PEP 730), so it is the canonical
59
+ signal for the embedded runtime.
60
+ - Explicit `PN_PLATFORM=ios` env var: set by the iOS template before
61
+ Python starts as a belt-and-braces override, and by tests.
61
62
 
62
63
  Running on macOS is never enough on its own: the desktop preview
63
64
  and unit tests run there and must not be mistaken for iOS.
64
65
  """
65
- if os.environ.get("PN_PLATFORM") == "ios":
66
- return True
67
66
  if sys.platform == "ios":
68
67
  return True
69
- home = os.environ.get("HOME", "")
70
- if "/CoreSimulator/Devices/" in home:
71
- return True
72
- return False
68
+ return os.environ.get("PN_PLATFORM") == "ios"
73
69
 
74
70
 
75
71
  def _detect_desktop() -> bool:
@@ -121,16 +117,15 @@ def _get_is_desktop() -> bool:
121
117
  IS_ANDROID: bool = _get_is_android()
122
118
  """``True`` when running inside an Android process.
123
119
 
124
- The flag is computed once at import time, by checking for `ANDROID_*`
125
- environment variables and trying to import Chaquopy's `java` module.
120
+ The flag is computed once at import time, from ``sys.platform ==
121
+ "android"`` or a successful import of Chaquopy's `java` module.
126
122
  """
127
123
 
128
124
  IS_IOS: bool = _get_is_ios()
129
125
  """``True`` when running inside an iOS app bundle.
130
126
 
131
- The flag is computed once at import time, by checking
132
- `PN_PLATFORM=ios`, `sys.platform == "ios"`, and the iOS Simulator
133
- `HOME` path.
127
+ The flag is computed once at import time, from ``sys.platform ==
128
+ "ios"`` or the explicit `PN_PLATFORM=ios` override.
134
129
  """
135
130
 
136
131
  IS_DESKTOP: bool = _get_is_desktop()
@@ -15,7 +15,9 @@ a different row index (recycling), and tears everything down when the
15
15
  list is destroyed.
16
16
 
17
17
  State inside rows works: hooks like ``use_state`` mark the row's own
18
- reconciler dirty and a guarded flush re-renders just that row.
18
+ reconciler dirty and the reconciler's inline flush (its default when
19
+ no host render callback is set) re-renders just that row. Re-entrant
20
+ requests during a flush are drained by the reconciler itself.
19
21
  """
20
22
 
21
23
  from typing import Any, Callable, Dict
@@ -39,27 +41,15 @@ class RowSubtree:
39
41
  from .reconciler import Reconciler
40
42
 
41
43
  self._reconciler = Reconciler(get_registry())
42
- # Guarded synchronous flush so ``use_state`` inside a row
43
- # re-renders the row. Re-entrant requests (a setter firing
44
- # during the flush itself) are queued and drained after.
45
- self._flushing = False
46
- self._flush_queued = False
47
- self._reconciler._screen_re_render = self._request_flush
44
+ # Rows flush synchronously: a ``use_state`` setter inside a row
45
+ # re-renders that row before the setter returns. The reconciler
46
+ # queues and drains re-entrant requests on its own, so no
47
+ # extra guard is needed here.
48
+ self._reconciler.on_render_requested = self._flush
48
49
  self.native_root: Any = None
49
50
 
50
- def _request_flush(self) -> None:
51
- if self._flushing:
52
- self._flush_queued = True
53
- return
54
- self._flushing = True
55
- try:
56
- for _ in range(8):
57
- self._flush_queued = False
58
- self.native_root = self._reconciler.flush_dirty()
59
- if not self._flush_queued:
60
- break
61
- finally:
62
- self._flushing = False
51
+ def _flush(self) -> None:
52
+ self.native_root = self._reconciler.flush_dirty()
63
53
 
64
54
  def mount(self, element: Element, width: float, height: float) -> Any:
65
55
  """Mount ``element`` at the given cell size; returns the native root."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.37.0
3
+ Version: 0.38.0
4
4
  Summary: Cross-platform native UI toolkit for Android and iOS
5
5
  Author: Owen Carey
6
6
  License: MIT License
@@ -34,16 +34,13 @@ Classifier: Intended Audience :: Developers
34
34
  Classifier: License :: OSI Approved :: MIT License
35
35
  Classifier: Programming Language :: Python :: 3
36
36
  Classifier: Programming Language :: Python :: 3 :: Only
37
- Classifier: Programming Language :: Python :: 3.10
38
- Classifier: Programming Language :: Python :: 3.11
39
- Classifier: Programming Language :: Python :: 3.12
37
+ Classifier: Programming Language :: Python :: 3.13
38
+ Classifier: Programming Language :: Python :: 3.14
40
39
  Classifier: Topic :: Software Development :: User Interfaces
41
- Requires-Python: >=3.10
40
+ Requires-Python: >=3.13
42
41
  Description-Content-Type: text/markdown
43
42
  License-File: LICENSE
44
43
  Requires-Dist: requests>=2.31.0
45
- Requires-Dist: tomli>=2.0; python_version < "3.11"
46
- Requires-Dist: typing_extensions>=4.4; python_version < "3.11"
47
44
  Provides-Extra: build
48
45
  Requires-Dist: Pillow>=10.0; extra == "build"
49
46
  Dynamic: license-file
@@ -86,7 +83,7 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
86
83
  - **Hooks and function components:** Manage state with `use_state`, side effects with `use_effect` / `use_layout_effect`, refs and imperative handles with `use_ref` / `use_imperative_handle`, and navigation with `use_navigation`, all through one consistent pattern. Components can return a single element, a list of siblings, or `None`, and `Fragment`, `Portal`, and reactive `Provider` context work the way they do in React.
87
84
  - **Async-first rendering:** One `asyncio` event loop runs the whole framework on the platform's main thread. Components can be `async def` and `await` data directly in the body; `Suspense` boundaries show declarative loading states while they wait. `use_resource` fetches during render, `use_effect` accepts coroutine callbacks (cancelled automatically on unmount), `lazy` code-splits components, and `use_transition` / `use_deferred_value` keep the UI responsive during expensive updates.
88
85
  - **Developer feedback that finds your bugs:** In dev mode (`pn preview`, hot reload, or `PN_DEV=1`), uncaught errors from renders, effects, and event handlers show a full-screen RedBox with the traceback; unknown style keys and duplicate list keys print "did you mean" warnings; and conditional hooks raise a `HookOrderError` at the source instead of silently cross-wiring state.
89
- - **Typed `style` prop:** Pass all visual and layout properties through a single `style` dict, fully described by the `pn.Style` `TypedDict` and the ergonomic `pn.style(...)` helper for IDE autocomplete and static checking. Compose reusable styles with `StyleSheet`.
86
+ - **Typed `style` prop and theme:** Pass all visual and layout properties through a single `style` dict, fully described by the `pn.Style` `TypedDict` and the ergonomic `pn.style(...)` helper for IDE autocomplete and static checking. Compose reusable styles with `StyleSheet`, and read design tokens from a typed, immutable `pn.Theme` via `use_theme()` that follows light and dark mode by default.
90
87
  - **Cross-platform flexbox engine:** A pure-Python, Yoga-style layout engine computes frames once and applies them to native views, so `flex`, `padding`, `aspect_ratio`, and `position: "absolute"` produce the same geometry on Android and iOS.
91
88
  - **Virtual view tree + reconciler:** Element trees are diffed and patched with minimal native mutations, similar to React's reconciliation. Each commit lands as **one batched transaction** of mutation ops, and event callbacks are routed through a tag-based registry so re-renders that only change closures cost zero native calls. State updates re-render **locally**: only the component whose state changed (and its subtree) re-runs, and unchanged leaves reuse cached intrinsic measurements, so deep UIs stay responsive instead of re-rendering the whole app from the root on every tap.
92
89
  - **Native-driven animations:** The `Animated` API (timing / spring / decay / loop / stagger, awaitable or fire-and-forget) hands animations to Core Animation and `ViewPropertyAnimator` whenever possible, so no Python code runs per frame; a pure-Python ticker covers the rest. `interpolate`, arithmetic operators on animated nodes, `Animated.event` scroll binding, and `diff_clamp` cover the scroll-driven patterns (collapsing headers, parallax) that define native feel.
@@ -95,6 +92,7 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
95
92
  - **Native rendering core:** each commit is one serialized transaction applied by Swift and Kotlin component managers, the same shape as React Native's Fabric. Device APIs are native modules registered by name (TurboModules-style), callable from thin Python facades.
96
93
  - **Custom-component SDK:** Wrap any platform widget as a first-class element with type-checked props via `pythonnative.sdk` (`Props`, `@native_component`, `element_factory`). Plugins distributed on PyPI auto-register through the `pythonnative.handlers` entry-point group.
97
94
  - **CLI scaffolding:** `pn init` creates a ready-to-run project; `pn run android` and `pn run ios` build and launch your app.
95
+ - **PyPI packages, binary wheels included:** List requirements in `pythonnative.toml` and the CLI resolves them for the *device* (iOS wheels via PEP 730 and BeeWare's index, Android wheels via PEP 738 and Chaquopy), bundling numpy, Pillow, cryptography, and friends alongside pure-Python packages. `pn deps` reports what each target resolves to before you build, and a weekly-checked compatibility matrix keeps the docs honest.
98
96
  - **Instant desktop preview:** `pn preview` renders your app in a native desktop window via Tkinter with Fast Refresh on every save: iterate on layout, state, and navigation in milliseconds without booting a simulator or device. The reconciler, hooks, layout engine, and navigation are the same code that ships to the phone.
99
97
  - **Native-backed navigation:** Declarative `Stack`, `Tab`, and `Drawer` navigators inspired by React Navigation. The root stack drives the platform's native navigation controller (`UINavigationController` on iOS, AndroidX Navigation Component on Android), so transitions, back gestures, and the hardware back button match what users expect; `use_back_handler` intercepts the back action when a screen needs to.
100
98
  - **Fast Refresh hot reload:** `pn run --hot-reload` watches `app/` and patches edits into the running app on save, preserving component state across most changes.
@@ -104,6 +102,8 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
104
102
 
105
103
  ### Installation
106
104
 
105
+ Requires Python 3.13 or newer.
106
+
107
107
  ```bash
108
108
  pip install pythonnative
109
109
  ```
@@ -1,6 +1,6 @@
1
- pythonnative/__init__.py,sha256=Eo3V3xNFhjGLusCVU2AYTAhRasCvn-tfgPebbQp5OTQ,9135
1
+ pythonnative/__init__.py,sha256=UCEJhPHefkOJJ9L1Eamgn8UUaQXPvaDFaTtta6p6rig,9267
2
2
  pythonnative/_ios_log.py,sha256=jmghL5GgcceTVL0e_2EwMDJjX0GMPhuwKOAJfZzRM0E,2576
3
- pythonnative/alerts.py,sha256=QymInXpjCYyGzORVuHguPF24eEmRzx0ET0rDkCNwDwY,8054
3
+ pythonnative/alerts.py,sha256=PO6ih7jiS7aiDKN-egwrcLjriTfvuhhOkCN2cB9bVr4,7848
4
4
  pythonnative/animated.py,sha256=T8xVB7uqbHLzOJAfSqjYmiaA30OikdYOcE1GX8LbqaY,60065
5
5
  pythonnative/appearance.py,sha256=vMkDRIz9ptaprMmlPmiYJLVwrDslfnc1bhwyE27M2ZI,3891
6
6
  pythonnative/bootstrap.py,sha256=oXrVOyDmp_jpBYM3iuBcAb1w3-RX1Gis45WNo2w6m-8,3031
@@ -8,7 +8,7 @@ pythonnative/component.py,sha256=a7lfcd_WxEpQgYwehxDMkvphH1h960EFW8OQWrXwWnI,966
8
8
  pythonnative/diagnostics.py,sha256=S4ULu8ROsCIt2j6hsGXmGNVnyH5n9sn12nZ3WBqegiE,7991
9
9
  pythonnative/element.py,sha256=j27rIFEADgCwgtNOTMZVX1mzx5R7Ejn2sb18rhUa1s4,5569
10
10
  pythonnative/events.py,sha256=EFYz8HxVOTA3soAe0Z9P2gZN9ShLjXhKH7I34DmnNbM,7895
11
- pythonnative/gestures.py,sha256=u-4QzgD5HdaPzoJ6SyF4sGeOfKt0f7l-3rrKhEaYgSg,46635
11
+ pythonnative/gestures.py,sha256=CyukKo7x-5yC2wT5wUTwmfCdKGZE-DM3iQYvKD6kIAU,47529
12
12
  pythonnative/hooks.py,sha256=Fe1l-7eabGFeDmIvPROtgaDJBluyilsHQEloGq-oKQs,56026
13
13
  pythonnative/hot_reload.py,sha256=MQVW8jqJiOMrNlsDlINiBa_P3ulLxm1JNtkF8E0pOqc,25198
14
14
  pythonnative/images.py,sha256=MU_6ljEeIsjQEFpGuc38On4Y5Ri0i51HuQv8psXFtT4,6561
@@ -22,22 +22,22 @@ pythonnative/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  pythonnative/runtime.py,sha256=qpRJ0-EAsWeXmxJoCCkyY4gLsJ3QlgdBUTeaQhi7xu0,19394
23
23
  pythonnative/scheduler.py,sha256=PAj3ybfs6Gn1RF2PHLN7Oqbe8R7ps83RXP8lwy-0vYQ,5457
24
24
  pythonnative/storage.py,sha256=7AAgz9wAuDTad-Y0uBKkwtqcgYa_s-ScvDcgZ8Wmf3w,6131
25
- pythonnative/style.py,sha256=32p1oRaHMiuJi3lnML82I8_77tQ5s6N6-y8bswJ3idM,24500
25
+ pythonnative/style.py,sha256=PK9hHAwdAYCq8lvdvnqLEZmgQQrgVvz-sZnFiErR1wo,26281
26
26
  pythonnative/suspense.py,sha256=ojyz2yW1jTt2BJw0uLFYpnjTrCfUGsGC52lsAlKYgzg,14570
27
- pythonnative/utils.py,sha256=MVw7U2atbxd2Z_I5XQ6XpDrgeNO65lvh9SsvxZE-ifc,4865
28
- pythonnative/virtual_rows.py,sha256=auo5V327O5rUiNcF3Rex1yxxfhSsguj7HlupUkoYgK4,5048
27
+ pythonnative/utils.py,sha256=EUebhRGO1Ob-vAxxoDeRFJZ8uQySpH0WuHgxIhfucmI,4656
28
+ pythonnative/virtual_rows.py,sha256=zbus3zAebMNul1vAspLKC5TRc_oEyjxB2GYDPwlYd8M,4825
29
29
  pythonnative/bridge/__init__.py,sha256=lKzVBv82VbyaxCaezUsDXNTYG930Yd9N_sFcr4Uq628,10374
30
30
  pythonnative/bridge/android.py,sha256=x2z7Ni0puQpSzdwkzbpTvUUPbSX2isE2RnWnYwvqcZM,3177
31
31
  pythonnative/bridge/codec.py,sha256=qXpnE2jxZH6JCOnZ-TwV8ssIqht3JPDk_AMoH1m_FRU,5824
32
32
  pythonnative/bridge/fake.py,sha256=U8eTkJGo1KwgeH6yE_OLFusEvvlhUXtEOfuVGuqpxRk,10417
33
33
  pythonnative/bridge/ios.py,sha256=NeCxmWsp6qFweG8vobsvVbsR144wRRoIEiYZjzW3qvw,5936
34
34
  pythonnative/cli/__init__.py,sha256=NM1psvKe8jT0vzp8Ak4MMoygZz4P_msk5g-YEsY8xLk,232
35
- pythonnative/cli/pn.py,sha256=5p9tW6KQfjrr1Zcm2B0Ofj1wDYlo6RZZtb8w0bZGekU,41334
35
+ pythonnative/cli/pn.py,sha256=mPSvdr-8CvluVzE-MrsuQ0XknMSWGA6p8U1rYQjsUhM,44705
36
36
  pythonnative/components/__init__.py,sha256=6xbkZYU3M4Jvv4wOLSiL8pj5HGkEYbOHXcyC0gj4oZU,2640
37
- pythonnative/components/_base.py,sha256=avUjUcEpODVJSsOI845w7A0U85WAhp2fTbYXYjJsM8U,4744
38
- pythonnative/components/controls.py,sha256=qd3Ir1_W-jliI7_BTM0AJB4RS-cxnj0QYQA5QKyHOZQ,18462
39
- pythonnative/components/layout.py,sha256=3QcsTyqVk1lRy6MuVFSW2XyJUJsNHKWQPisLqDv8keY,21108
40
- pythonnative/components/lists.py,sha256=uofhliTd14k8S1Kt8_jsENwiRinfzBKUPjah0CR2D2k,33028
37
+ pythonnative/components/_base.py,sha256=nuIMUxPfxB5KdnWjHgSFm0gDqU_UMgLJkpkozNkbR10,6068
38
+ pythonnative/components/controls.py,sha256=RNX0Nsy0k77vQ-I9hWNaCl9WKSwNL1j6fZtRw-m5YrU,18620
39
+ pythonnative/components/layout.py,sha256=4uhMSBcDSNgOOmjICNDNULGB40ALN26kRiX3eOvipQY,21069
40
+ pythonnative/components/lists.py,sha256=ilPqFC5wPo2oIIv-G5vMA5Op2XbzMqsoW2IFGVxFxkY,33044
41
41
  pythonnative/components/media.py,sha256=g6bf8bidJlrASJ3bxEaFpuW9WegstkzvFgysLzALjC8,8167
42
42
  pythonnative/components/overlays.py,sha256=n8wkOT2TST9aLD7Yrx8dW72qv5vXdx7DuuXHbM4C9wM,4124
43
43
  pythonnative/components/pressable.py,sha256=vLPDOblFkWIErera0Cj8p3FQUAyB0xhK3Ut50-WWRUA,10214
@@ -47,47 +47,48 @@ pythonnative/hosts/__init__.py,sha256=jCPXGnPaSNw7sSG2ATA6qpiT9UW0oAA7gzfjEsTOXv
47
47
  pythonnative/hosts/base.py,sha256=CDXBrRsE5ZieDvN-GL9P9z4M0w7YAGVlEiTJ7VmBu7k,26657
48
48
  pythonnative/hosts/desktop.py,sha256=CnhveLgGcgQaAsa8J7avJ1ufAHdm8SikLdfQbbdgOqg,3922
49
49
  pythonnative/hosts/native.py,sha256=A6msAdMLGA3S5Cu-uyajftFFW9WprSKGszjUJ0_jwj0,12686
50
- pythonnative/native_modules/__init__.py,sha256=N1UM1KkWgu3HsYLe8VDqQWO9vyOPLGctZ8LGiepx6YQ,3417
50
+ pythonnative/native_modules/__init__.py,sha256=t3xiiQervny7FAWEZGe0S1kmjGaWpTjVONHoPZatYkw,4563
51
51
  pythonnative/native_modules/app_state.py,sha256=TnuaeacxpgFUQbd1qrGIv_4A_B000Ik3oq0ZmzuHZnQ,2757
52
- pythonnative/native_modules/battery.py,sha256=RPHy1_nV8DFLo5UB1qHjk99UnhOoC8tpwKIjSY5EDf8,2546
53
- pythonnative/native_modules/biometrics.py,sha256=C4kUQXV7SsnPnPBsHiwqnb7jg40qMZbPa6Jlg3_7Gvw,1350
54
- pythonnative/native_modules/camera.py,sha256=1lat5jhRbpgivyFDV-BGZ97tFRKd68ifDrlW9qdu0zc,1832
55
- pythonnative/native_modules/clipboard.py,sha256=bBqBfyZ3AEXIAguKC6iNK6u6H6EgM1An1WcpQXgDLtE,1448
52
+ pythonnative/native_modules/battery.py,sha256=sLVnkbQuFQXOt0P1I7ckaqqFWYqwN3mxP7URE0PRKBk,2597
53
+ pythonnative/native_modules/biometrics.py,sha256=_lP8tWl-fWYQkRLiotkW9eHZkpTKlLpQF1G5LL6Q0Js,1399
54
+ pythonnative/native_modules/camera.py,sha256=0Pt0CTICu9m8LiU3ViiM34gLNrzjZzrPYMfmLnYCXgU,2033
55
+ pythonnative/native_modules/clipboard.py,sha256=DOJfQkX-ZmYt3CwBVfQXC_-XB_OAQvMy3K86dh4FYHM,1401
56
56
  pythonnative/native_modules/desktop.py,sha256=4hkV3h_SUNpBM4fbgFShSW2FE48Dq512THrc2bEc0Xk,9258
57
- pythonnative/native_modules/file_system.py,sha256=4bp3zK0jZRB0cIpP1bJDzLfxiHg79DFyQjPRP8yZqA8,7359
58
- pythonnative/native_modules/haptics.py,sha256=dObM9WjWx5VM0WFn3Djcgf5YIEM5n5YOrxPFUQFfy40,2200
59
- pythonnative/native_modules/linking.py,sha256=zwUCay18nn7g2O4Fes2WEgcUdomECtpayUPIRAQhTaI,3754
60
- pythonnative/native_modules/location.py,sha256=gG1brnA6dcKzj_vVc1gjE1L2TvFoGv4pvO2KelCXgr8,2584
61
- pythonnative/native_modules/net_info.py,sha256=NjWfGJE4a5hU4Oce2XcGnUBAmYGJe96mDop0ijyLpIM,3413
62
- pythonnative/native_modules/notifications.py,sha256=NgLcRdjQMcEQAEjeiRp_R-b_2658KjwHn0R4kqqfYLo,4860
63
- pythonnative/native_modules/permissions.py,sha256=jzgs4Q3oqCGzXhFAsmToqkScf60h7KbAwOm8vsvAW3Q,2047
57
+ pythonnative/native_modules/file_system.py,sha256=JzmCu1QYNg2Yq8M0Tson9aD7Kvn41bxbxvJYFqmnPjs,5425
58
+ pythonnative/native_modules/haptics.py,sha256=ENoGVZSMZBt81eFRJ8oO8_4CAuACJ0JZeFXAivZmNCI,2258
59
+ pythonnative/native_modules/linking.py,sha256=laOcVgx0eH5nDIJ4Eupdt14IYAHsPYKzUc3ivGQQUug,3808
60
+ pythonnative/native_modules/location.py,sha256=YgSqlW-d72nTMGb2nmoFTPK0TFR1jHZ_Gq_74VCGF0A,2681
61
+ pythonnative/native_modules/net_info.py,sha256=f_PSGW5PaChRAvnxZS2LVM3fsVPGW2-yrCB2hmUyR1Y,3342
62
+ pythonnative/native_modules/notifications.py,sha256=kPC3C572j3sTmeX2nYxR-pHhGMLcl_jYOhV4ElvbSeM,4701
63
+ pythonnative/native_modules/permissions.py,sha256=5vLEjNac0eMC4nUO-KgzdiHwX_kHDv0zxCfNFi5j55g,3740
64
64
  pythonnative/native_modules/registry.py,sha256=g0c8oB96sciw5AEOPxWETjw_6hLlHarbQ6hndNZJ7YI,17875
65
- pythonnative/native_modules/secure_store.py,sha256=hB2_ADzzKiCKbJxmbDbqyLroXk4aRYS6UJgK8FjmFpo,1823
66
- pythonnative/native_modules/share.py,sha256=fqRnJuCOVNbr7mDiQ47YAuZsb5rK07m3D2q5Tgxcv6U,1435
65
+ pythonnative/native_modules/secure_store.py,sha256=ldcxXGc8QUeCM17IHhj2VmLe9TSHnpANl_Azhzt6yUw,1861
66
+ pythonnative/native_modules/share.py,sha256=vcPKVxrbtElQAAFN2fk_Nr0RsnqvPN6PeOYZPYMs5cg,1476
67
67
  pythonnative/native_views/__init__.py,sha256=8SdHxna9ffVrnR6XPciZMWnqHXLARrSrNz8OYySeyCw,14833
68
68
  pythonnative/native_views/base.py,sha256=5z9P_2iF1bui9_1CWOQ1cEd86D4Peo4ELN4os3AYQME,12062
69
69
  pythonnative/native_views/bridge_backend.py,sha256=-O71Lxltygy2-5N8P8wkNve2_n_9CtCYt8lHuPQxpYQ,10920
70
70
  pythonnative/native_views/desktop.py,sha256=0p4z_QkSYMjHyV2Q_S96NHmhOHKEbS1sSs0Kl5yLnMM,94418
71
- pythonnative/navigation/__init__.py,sha256=IWuHOmL4SO_PIPW9nNfPi5pF1n6t4ChFK1R4_Algguw,2845
71
+ pythonnative/navigation/__init__.py,sha256=qp4MHsEYnoDdQUftqXw0OPdrwut28vMa9XY-Lw7Luiw,2877
72
72
  pythonnative/navigation/container.py,sha256=eob849GyalJnq1aQxXC0Jz79MdK9Cs1i6dh7W7D3uqo,5298
73
73
  pythonnative/navigation/handle.py,sha256=SYjfqMIQWCcHmd0sDQE9OQ0iaHPPhA1iOKQjdwCeWIQ,23550
74
- pythonnative/navigation/hooks.py,sha256=bfFjdpBvlRKEjSXKPWHFQZAvOaoi9K9DmySbfntWFJw,2954
74
+ pythonnative/navigation/hooks.py,sha256=vbT-oh5-jdEi1seJlCSVNiPq-o3fyAuwPR93W0dZRWw,4431
75
75
  pythonnative/navigation/host.py,sha256=ZDT16pMssTwLQ48Xash887GQoNlOxijGDJK4wmcU7gk,2365
76
76
  pythonnative/navigation/linking.py,sha256=A4as0oZN9kv32w_Ormr3wFGAJ5DVRzJ6e-ch3iUoV88,7972
77
77
  pythonnative/navigation/navigators.py,sha256=hzjjWwUZOqAhznsiMQo2ekr3-OMK3yZ14tSDzW6umXI,22056
78
78
  pythonnative/navigation/screen.py,sha256=8U7sPWrhDKjrKzDht22FiZG4eI8n_fiREWDzUegN5so,6386
79
- pythonnative/navigation/state.py,sha256=TN2YokWXtp02Ksv9MD-qC6r-5yDV5EicdIlmlkyNGjg,10084
79
+ pythonnative/navigation/state.py,sha256=fdSBegt7QAef068AKVqsFzWztoNK3QOFCEB2WqocBGY,10827
80
80
  pythonnative/project/__init__.py,sha256=kAhWLONs53H1L7xVtczLmzYcQSOOkdRZTAJnIMhpBts,2064
81
- pythonnative/project/android.py,sha256=1ONQLnWtwtl_KNod1ZdBiei39TankScTZ0MP-SeCDyY,19920
82
- pythonnative/project/builder.py,sha256=XcbFVZn2_M250KndhNbKjVOpRX-1tNcNVMuNPQWdXdQ,24867
83
- pythonnative/project/config.py,sha256=hkV68Uvutfaw3bQCAD_PL-8dfmUt6wD9HBS4vKKHeTA,26987
81
+ pythonnative/project/android.py,sha256=a-R_w7eZ5ycJrX64Km2SFPkr3hrLglaPGiCQMeVCErM,20795
82
+ pythonnative/project/builder.py,sha256=q321_fBORu7_NOCVYcj_RRElTGRhGC3qTfNnR1rSoMQ,26255
83
+ pythonnative/project/config.py,sha256=6ws9CpSOzrG9Md1x9s11imeBAdrw0gyUt-d8-ROuRHs,29998
84
+ pythonnative/project/deps.py,sha256=igQ4slCdoELmv-N7i3T8pawTNGXyLllm19pkLPeygfI,27023
84
85
  pythonnative/project/devices.py,sha256=zH0v95vOqWxXGdeTDljrZTA0RWBuU79v3zTQSaXkDh8,10106
85
- pythonnative/project/doctor.py,sha256=aXkmKmAzwsUK_c5S25b6nxJfIQ8byOqcrzh7HbmJh2g,8619
86
+ pythonnative/project/doctor.py,sha256=SdIGGrzR-FD91YJkmbf1xAo_XcZGUsIGvNGmX4oyzZE,10549
86
87
  pythonnative/project/icons.py,sha256=GaXpktQ9v4v2JZPM3ppueNPmwjTuFiLanHJDaZbLGuo,7945
87
88
  pythonnative/project/ios.py,sha256=7Hb-PNm8ZJwXoCQoVCb57n2Qfsjvsdgx0KnckMS9ZBA,13126
88
89
  pythonnative/project/permissions.py,sha256=WyApoqZ0mCTeAtffYbpCGV-bgLvOG7SlPcV7zSO_IV8,14227
89
90
  pythonnative/project/plugins.py,sha256=j609UgtxZYW5Tbc-ijBQN-FZFFpao55pFVyLqxF9Pig,14228
90
- pythonnative/project/runtime_assets.py,sha256=cYqfj4LUBykUswHZPX3Kp_wRU6nQ8VBCe2oc_QT4Io0,6868
91
+ pythonnative/project/runtime_assets.py,sha256=DeYOby42bDkgzxF7k-WVNMjS3inGHmuGmSCnIrX2lbQ,6900
91
92
  pythonnative/reconciler/__init__.py,sha256=mwlPUA5naD50N-JpTyXGy030xA-0R5x9EaunNgDKlfg,808
92
93
  pythonnative/reconciler/boundaries.py,sha256=FIt0fxL-mFs6SGKwwCWMcvW8GjNyzCsK6T1egEwW2K0,15038
93
94
  pythonnative/reconciler/children.py,sha256=k_eP2FmSAjtvEEGTz6eGXpMpLeQ6PgyHnZpnKzTAyhE,3340
@@ -96,12 +97,12 @@ pythonnative/reconciler/layout_pass.py,sha256=OBsqzMp6hphxPMGTRNlh8N31OHn51K2bfW
96
97
  pythonnative/reconciler/vnode.py,sha256=4AMqZBFXxJeV1v2qn_FEbaLw9hSIXGJEvAx7ifImH0k,10052
97
98
  pythonnative/sdk/__init__.py,sha256=3Jj3WZyb6zCXEgb9OOgm6T1bTk8Mvd7BiVAPCsprfsk,4208
98
99
  pythonnative/sdk/_components.py,sha256=ezu9CCxaMO6xaThveaCo330WyskPJmY_1ikK2GWBkX8,13959
99
- pythonnative/templates/android_template/build.gradle,sha256=4gE6CRS6RuBu9kp-_e_uYYU9mBgHVZrqQg9caSxgyuc,352
100
+ pythonnative/templates/android_template/build.gradle,sha256=MR1GSgugCawgte6Uw0f9XOjhR0Ay9lNYioaNco_GTyQ,562
100
101
  pythonnative/templates/android_template/gradle.properties,sha256=REPaKLRfQiiVfIV8wYmgwzPWvF1f3bhh_kAMV9p4HME,1358
101
102
  pythonnative/templates/android_template/gradlew,sha256=YxNShxF6Hm0SyEWA8fScYdG6AiGOzShmBgXpf5dufWU,5766
102
103
  pythonnative/templates/android_template/gradlew.bat,sha256=xGonx5AHdG3lkisXq7YjDWStixujrRWF7lxlQ8KpsSk,2674
103
104
  pythonnative/templates/android_template/settings.gradle,sha256=t3iF-7oXBYWt9AijuZm3yyUQBEOr98uF3KMSGQEfHL0,357
104
- pythonnative/templates/android_template/app/build.gradle,sha256=d3KpoDshoIgYT1SeQKI5kP2-eHqIccOXKXNesfiQURw,1994
105
+ pythonnative/templates/android_template/app/build.gradle,sha256=cbiIyY0o6PTZUhLyEafhw9CArTKWRJEo5hNmlim4YaQ,2191
105
106
  pythonnative/templates/android_template/app/proguard-rules.pro,sha256=Vv2WDPIl9spA-YKxOl27DYvD394T_3ZCKCXGBw0KGJA,750
106
107
  pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt,sha256=Am8Yla3i1eR_ac5FVgPU_RsuMrCbyT79h1BcajGE-zI,693
107
108
  pythonnative/templates/android_template/app/src/main/AndroidManifest.xml,sha256=BYJG1s2BZKY-WenCpgWYpHFUiioB9LGHAdoNV0ry9cE,1245
@@ -131,7 +132,7 @@ pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml,sh
131
132
  pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml,sha256=yx_EerSphFMO1g4ObuY4kpwwOCkOfn4LSwOjow--c4E,551
132
133
  pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt,sha256=Z6lsNy__lyw7Nzj4GndWK1VLZkgAyX3czP8YX9to7r4,357
133
134
  pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar,sha256=6ZbUUtJkXnDAHBEUPKLTdCc0oo2iv2HyXIK9wojJ5jc,59203
134
- pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties,sha256=nG5CWg_8OmJISSdiSxhYMPnob2ji-O7t0vYmSsW48vc,232
135
+ pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties,sha256=guGpN9_pjqfL3mOpsGEaTmzf-Lvby7NZazlPbP3OmzM,230
135
136
  pythonnative/templates/android_template/pythonnative/build.gradle,sha256=nyO-iIffzOM1mCVe2Hyti0l7163eITyCWNukVFUXjeM,1368
136
137
  pythonnative/templates/android_template/pythonnative/src/main/AndroidManifest.xml,sha256=X30MdSw3RdlAYuLGZ1lc7Zn4bCUKFfJiBSsOIU-lvFo,527
137
138
  pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/PNBridge.kt,sha256=wI8NBi8EEt-uogIkLlR487K2XDEjhfYTwCRNlrFoMrs,7922
@@ -176,7 +177,7 @@ pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnat
176
177
  pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt,sha256=2yNWP-GsLqslCApnyttQO_xu_2Z7zsoLY-mAU9F6oSg,8060
177
178
  pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt,sha256=hOs0pvaLjXkFA-Tw84j1DSXnCSyX6AJhv4BG0qBYVaQ,5214
178
179
  pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt,sha256=tOHKerLi9bwNtaLvUR76KN4Gm7NhtlwbukL5e8nWSOE,3842
179
- pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt,sha256=iu7-WHnLlh948iH9zTUMzWyHgHaNlAP0Znd_kbzTQN4,4010
180
+ pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt,sha256=GSjVjfB1O_TW_0dcqDK_To9yV92l4iXW6UFNiVE-GPg,4610
180
181
  pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt,sha256=pPHkPY6uZRmdJeCLjux5ePXukc8ZxFrpnTkY-O0CDGs,3543
181
182
  pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt,sha256=opvoMziD5_q55RrenoG4aDhgJt8feyMLeySzA1ow_A4,6788
182
183
  pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt,sha256=EHxRUYYDLoa4Yw-LPPXITHQ8q0VnLaf-Dp0inNhLOaQ,531
@@ -223,7 +224,7 @@ pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modu
223
224
  pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/LifecycleModules.swift,sha256=1t0tdZpml5CMt9ZxG6sYs_A10T6jgcjEE_iYb-hPNuU,6597
224
225
  pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/MediaModules.swift,sha256=anUy6xmnAa0dy1-M6B0J-Yq2_lcKHTuR2knfBvlzyrI,6686
225
226
  pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/PNNativeModule.swift,sha256=wlHJO6ni-jyRoQUMP63Rat--hSCECNSgWZ-N52qZeEo,4436
226
- pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/PermissionModules.swift,sha256=yKDJ0hGx8SijtCvt0InQINbhV6wBlo7oank_5mcPhg0,9832
227
+ pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/PermissionModules.swift,sha256=Gj_mmZDcMYdJm-oiJPIHQV-4bL6fuNLvSXONaGmA1nM,10622
227
228
  pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/SystemModules.swift,sha256=H9MukERogcDCfJDbut9TnD7_ggXnFGDRaxv-8Pb_aT4,9472
228
229
  pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift,sha256=WbWwvoHy1yY5wpF3vomM-h0ifNbpkgeziDYoRQohYk8,382
229
230
  pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift,sha256=_tb7laOdgUQhv4aM-Z0jAPSj8F5IOvtTPFIQTmOoiBI,1378
@@ -240,14 +241,14 @@ pythonnative/templates/ios_template/PythonNativeKit/Tests/PythonNativeKitTests/P
240
241
  pythonnative/templates/ios_template/ios_template/AppDelegate.swift,sha256=gUq-urF0ehOQ7yiUrfcQl0Vea_QQdg0ZvweQkZdot1g,1544
241
242
  pythonnative/templates/ios_template/ios_template/BridgingHeader.h,sha256=JwlbCXMf3xsSrZYhTbW-F6JJw7xrXkA1W7ctc6Qc2Nw,332
242
243
  pythonnative/templates/ios_template/ios_template/Info.plist,sha256=LuiCWAutMwxwVSkVC2tFPfycdKVDiGMBSP5dYYEpjNI,920
243
- pythonnative/templates/ios_template/ios_template/PythonRuntime.swift,sha256=0fE2T-NtE-_w3EgZt3sxSl8PSesyPt7S8rLvQ6Lv3iM,15776
244
+ pythonnative/templates/ios_template/ios_template/PythonRuntime.swift,sha256=fNpXcAjPFf7rxMBr5skiHf6jX5Fo4wR7yibeYR3sYas,15822
244
245
  pythonnative/templates/ios_template/ios_template/SceneDelegate.swift,sha256=8gs0LJIBroRlFkh_eJ5nN-t2_Rs1paRVPo8kin7_mH4,1930
245
246
  pythonnative/templates/ios_template/ios_template/ViewController.swift,sha256=qN_kXcZvkHMznl_MWQfPnpOmNyeEDbek3IBYl6pO1Pg,792
246
247
  pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json,sha256=D9Sbo8NYXHCWeOAEaoIcPGBoXscGNyDTDTo0SL46IIs,63
247
248
  pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json,sha256=mvZQhvowtJJS-uGhIlcxaR3nlPd3WvdNcb7-tQfRK3w,123
248
249
  pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json,sha256=VUwGr7K_geOvQjFh5VKB6iVXV1mi0tjGMinUmB2JvQs,177
249
250
  pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard,sha256=HJWMXGXzJJWbBcAvFwAE8_Wq0p6coMJUV2fv1baxVhY,1665
250
- pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj,sha256=81ZT5klpVxvn0VxFdBoihMf5kPcLJeaqDmnvbMRn-qo,30040
251
+ pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj,sha256=lOkvRtM6ehepYPH7GnxQj6rSg-TN_ghG4x8mmy0svjU,30813
251
252
  pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist,sha256=36D5u4W5XMupxoEa2t-MtAf7XVIIjonbg-vDCOxEhUI,238
252
253
  pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift,sha256=YnwzZx7yXB13xKAXEGNgz17VuhWeqkHTRTtBJ2Vu3_E,1238
253
254
  pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift,sha256=HLRr3cmouRqQeXG13WrZ2XSAmgMgCsNXfZpbwkxeFcs,1385
@@ -255,9 +256,9 @@ pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunc
255
256
  pythonnative/testing/__init__.py,sha256=a76InZThMU9UI1-AJURZ6rB9guZLJFl62Ep5CEOjpno,1683
256
257
  pythonnative/testing/backend.py,sha256=1uePC5rWj4X2bz4w2z3esD675LEJWok8EFbixiiwk60,11299
257
258
  pythonnative/testing/harness.py,sha256=nAUGPqgVhKBuSmdGXLKO7qxTRyHVLtzGVKXCZAkH35M,16418
258
- pythonnative-0.37.0.dist-info/licenses/LICENSE,sha256=A69iG7TIAe6KkGQf6xoVHkc5JSZtOr5eRSvC5iuivnI,1067
259
- pythonnative-0.37.0.dist-info/METADATA,sha256=ifi5PyHSZ2Ja8yL5ZIBAXHtBsmgW0FIizJxi_glD2_0,11170
260
- pythonnative-0.37.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
261
- pythonnative-0.37.0.dist-info/entry_points.txt,sha256=iUtDawWSAJAEyWTycpZxDuYz73ol31butpzDIEAgPO0,48
262
- pythonnative-0.37.0.dist-info/top_level.txt,sha256=kT4SEATY2ywzrZ2Pgea6_zxyym44Q_PbOsUoOYjJLFE,13
263
- pythonnative-0.37.0.dist-info/RECORD,,
259
+ pythonnative-0.38.0.dist-info/licenses/LICENSE,sha256=A69iG7TIAe6KkGQf6xoVHkc5JSZtOr5eRSvC5iuivnI,1067
260
+ pythonnative-0.38.0.dist-info/METADATA,sha256=9hNA5iQs6sBmt7mW7Rixo--ChIn4Jj_5HoWozx_AkE8,11596
261
+ pythonnative-0.38.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
262
+ pythonnative-0.38.0.dist-info/entry_points.txt,sha256=iUtDawWSAJAEyWTycpZxDuYz73ol31butpzDIEAgPO0,48
263
+ pythonnative-0.38.0.dist-info/top_level.txt,sha256=kT4SEATY2ywzrZ2Pgea6_zxyym44Q_PbOsUoOYjJLFE,13
264
+ pythonnative-0.38.0.dist-info/RECORD,,