runtimepy 5.6.4__py3-none-any.whl → 5.7.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.
runtimepy/__init__.py CHANGED
@@ -1,7 +1,7 @@
1
1
  # =====================================
2
2
  # generator=datazen
3
3
  # version=3.1.4
4
- # hash=beefe82269955725f177c01474f7cea1
4
+ # hash=c51f4ac6cf134b3c3fa872a096e83489
5
5
  # =====================================
6
6
 
7
7
  """
@@ -10,7 +10,7 @@ Useful defaults and other package metadata.
10
10
 
11
11
  DESCRIPTION = "A framework for implementing Python services."
12
12
  PKG_NAME = "runtimepy"
13
- VERSION = "5.6.4"
13
+ VERSION = "5.7.0"
14
14
 
15
15
  # runtimepy-specific content.
16
16
  METRICS_NAME = "metrics"
@@ -77,19 +77,17 @@ textarea.text-logs {
77
77
  padding-bottom: 0 !important;
78
78
 
79
79
  border-top: 0;
80
- background-color: var(--bs-secondary-bg-subtle);
81
80
  }
82
81
 
83
82
  .vertical-divider {
84
83
  flex-basis: 0.75em;
85
84
  flex-grow: 0;
86
85
  flex-shrink: 0;
87
- background-color: var(--bs-secondary-bg-subtle);
88
86
  }
89
87
 
90
88
  .vertical-divider:hover {
91
89
  cursor: col-resize;
92
- background-color: var(--bs-secondary-bg);
90
+ background-color: var(--bs-highlight-bg) !important;
93
91
  }
94
92
 
95
93
  button:hover {
@@ -99,3 +97,14 @@ button:hover {
99
97
  .channel-value-input {
100
98
  width: 6em;
101
99
  }
100
+
101
+ /*
102
+ * Should probably build the bootstrap stuff from source and set custom Sass:
103
+ * https://getbootstrap.com/docs/5.3/customize/sass/
104
+ */
105
+
106
+ :root {
107
+ /* Prefer 'Arial' and 'Consolas' at the highest priority. */
108
+ --bs-font-sans-serif: Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
109
+ --bs-font-monospace: Consolas, "Liberation Mono", "Courier New", monospace;
110
+ }
@@ -28,7 +28,6 @@ body > :first-child {
28
28
  width: 100vw;
29
29
  height: 100vh;
30
30
  opacity: 1.0;
31
- background-color: var(--bs-secondary-bg-subtle);
32
31
  }
33
32
 
34
33
  .click-plot {
@@ -7,6 +7,7 @@ class WindowHashManager {
7
7
  this.tabFilter = "";
8
8
  this.tabsShown = true;
9
9
  this.channelsShown = true;
10
+ this.lightMode = false;
10
11
  this.plotChannels = {};
11
12
  this.filters = {};
12
13
  this.minTxPeriod = 0.0;
@@ -17,6 +18,15 @@ class WindowHashManager {
17
18
  this.update();
18
19
  }
19
20
 
21
+ lightDarkClick(event) {
22
+ this.lightMode = !this.lightMode;
23
+
24
+ document.getElementById("runtimepy")
25
+ .setAttribute("data-bs-theme", this.lightMode ? "light" : "dark");
26
+
27
+ this.update();
28
+ }
29
+
20
30
  channelClick(event) {
21
31
  this.channelsShown = !this.channelsShown;
22
32
 
@@ -106,6 +116,12 @@ class WindowHashManager {
106
116
  channelsButton.addEventListener("click", this.channelClick.bind(this));
107
117
  }
108
118
 
119
+ /* Click handler for light/dark toggle. */
120
+ let lightDarkButton = document.getElementById("theme-button");
121
+ if (lightDarkButton) {
122
+ lightDarkButton.addEventListener("click", this.lightDarkClick.bind(this));
123
+ }
124
+
109
125
  /* Click handlers for new window buttons. */
110
126
  for (const button of document.querySelectorAll(".window-button")) {
111
127
  button.onclick = () => {
@@ -150,13 +166,6 @@ class WindowHashManager {
150
166
  }
151
167
  }
152
168
 
153
- if (split.includes("hide-tabs")) {
154
- tabButton.click();
155
- }
156
- if (split.includes("hide-channels")) {
157
- channelsButton.click();
158
- }
159
-
160
169
  /* Check for tab filter. */
161
170
  for (let item of split) {
162
171
  if (item.includes("=")) {
@@ -171,6 +180,16 @@ class WindowHashManager {
171
180
  }
172
181
  }
173
182
  }
183
+
184
+ if (split.includes("hide-tabs")) {
185
+ tabButton.click();
186
+ }
187
+ if (split.includes("hide-channels")) {
188
+ channelsButton.click();
189
+ }
190
+ if (split.includes("light-mode")) {
191
+ lightDarkButton.click();
192
+ }
174
193
  }
175
194
  }
176
195
 
@@ -199,6 +218,9 @@ class WindowHashManager {
199
218
  if (!this.channelsShown) {
200
219
  hash += ",hide-channels"
201
220
  }
221
+ if (this.lightMode) {
222
+ hash += ",light-mode";
223
+ }
202
224
 
203
225
  if (this.minTxPeriod != 0.0) {
204
226
  hash += `,min-tx-period-ms=${this.minTxPeriod}`;
@@ -192,7 +192,7 @@ def centered_markdown(
192
192
  div(
193
193
  text=stream.getvalue(),
194
194
  parent=horiz_container,
195
- class_str="text-light p-3 pb-0",
195
+ class_str="text-body p-3 pb-0",
196
196
  )
197
197
 
198
198
  div(parent=horiz_container)
@@ -8,8 +8,10 @@ from svgen.element.html import div
8
8
 
9
9
  # internal
10
10
  from runtimepy import PKG_NAME
11
+ from runtimepy.net.server.app.bootstrap import icon_str
11
12
  from runtimepy.net.server.app.bootstrap.elements import (
12
13
  BOOTSTRAP_BUTTON,
14
+ bootstrap_button,
13
15
  collapse_button,
14
16
  flex,
15
17
  toggle_button,
@@ -85,16 +87,23 @@ class TabbedContent:
85
87
 
86
88
  # Create application container.
87
89
  self.container = div(parent=parent, id=name)
88
- self.container.add_class("d-flex", "align-items-start")
90
+ self.container.add_class("d-flex", "align-items-start", "bg-body")
89
91
 
90
92
  # Dark theme.
91
93
  self.container["data-bs-theme"] = "dark"
92
- parent.add_class("bg-dark")
93
94
 
94
95
  # Buttons.
95
96
  self.button_column = div(parent=self.container)
96
97
  self.button_column.add_class(
97
- "d-flex", "flex-column", "h-100", "bg-secondary-subtle"
98
+ "d-flex", "flex-column", "h-100", "bg-dark-subtle"
99
+ )
100
+
101
+ # Dark/light theme switch button.
102
+ bootstrap_button(
103
+ icon_str("lightbulb"),
104
+ tooltip=" Toggle light/dark.",
105
+ id="theme-button",
106
+ parent=self.button_column,
98
107
  )
99
108
 
100
109
  # Toggle tabs button.
@@ -155,4 +155,8 @@ def channel_environments(app: AppInfo, tabs: TabbedContent) -> None:
155
155
  )
156
156
 
157
157
  # Add splash screen element.
158
- div(id=f"{PKG_NAME}-splash", parent=tabs.container)
158
+ div(
159
+ id=f"{PKG_NAME}-splash",
160
+ parent=tabs.container,
161
+ class_str="bg-success-subtle bg-gradient",
162
+ )
@@ -32,7 +32,7 @@ class Modal:
32
32
 
33
33
  content = div(
34
34
  parent=div(
35
- parent=modal, class_str="modal-dialog text-light " + TEXT
35
+ parent=modal, class_str="modal-dialog text-body " + TEXT
36
36
  ),
37
37
  class_str="modal-content rounded-0",
38
38
  )
@@ -43,7 +43,7 @@ def plot_settings(tabs: TabbedContent) -> None:
43
43
  div(
44
44
  text="0 ms ('high', run at native refresh rate)",
45
45
  parent=container,
46
- class_str="text-nowrap text-primary",
46
+ class_str="text-nowrap text-body-emphasis",
47
47
  )
48
48
 
49
49
  slider(
@@ -53,7 +53,7 @@ def plot_settings(tabs: TabbedContent) -> None:
53
53
  div(
54
54
  text="100 ms ('low', 10 Hz)",
55
55
  parent=container,
56
- class_str="text-nowrap text-primary",
56
+ class_str="text-nowrap text-body-emphasis",
57
57
  )
58
58
 
59
59
  div(tag="hr", parent=modal.body)
@@ -238,7 +238,7 @@ class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
238
238
  logs = div(
239
239
  tag="textarea",
240
240
  parent=div(parent=vert_container, class_str="form-floating"),
241
- class_str=f"form-control rounded-0 {TEXT} text-logs",
241
+ class_str=(f"form-control rounded-0 {TEXT} text-logs"),
242
242
  id=self.get_id("logs"),
243
243
  title=f"Text logs for {self.name}.",
244
244
  )
@@ -258,7 +258,7 @@ class ChannelEnvironmentTabHtml(ChannelEnvironmentTabControls):
258
258
  div(
259
259
  id=self.get_id("divider"),
260
260
  parent=container,
261
- class_str="vertical-divider border-start",
261
+ class_str="vertical-divider border-start bg-dark-subtle",
262
262
  )
263
263
 
264
264
  self._compose_plot(container)
@@ -19,7 +19,7 @@ class DummyTab(Tab):
19
19
  def compose(self, parent: Element) -> None:
20
20
  """Compose the tab's HTML elements."""
21
21
 
22
- parent.add_class("text-light")
22
+ parent.add_class("text-body")
23
23
 
24
24
  for idx in range(10):
25
25
  div(parent=parent, text="Hello, world! " + str(idx))
@@ -17,7 +17,7 @@ class SoundTab(Tab):
17
17
  def compose(self, parent: Element) -> None:
18
18
  """Compose the tab's HTML elements."""
19
19
 
20
- container = div(parent=parent, class_str="text-light")
20
+ container = div(parent=parent, class_str="text-body")
21
21
 
22
22
  div(text="Hello, world! 1", parent=container)
23
23
  div(text="Hello, world! 2", parent=container)
@@ -1,5 +1,5 @@
1
1
  aiofiles
2
- vcorelib>=3.4.1
2
+ vcorelib>=3.4.2
3
3
  svgen>=0.6.8
4
4
  websockets
5
5
  psutil
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: runtimepy
3
- Version: 5.6.4
3
+ Version: 5.7.0
4
4
  Summary: A framework for implementing Python services.
5
5
  Home-page: https://github.com/vkottler/runtimepy
6
6
  Author: Vaughn Kottler
@@ -19,9 +19,9 @@ Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Requires-Dist: svgen >=0.6.8
21
21
  Requires-Dist: aiofiles
22
- Requires-Dist: vcorelib >=3.4.1
23
- Requires-Dist: psutil
24
22
  Requires-Dist: websockets
23
+ Requires-Dist: psutil
24
+ Requires-Dist: vcorelib >=3.4.2
25
25
  Provides-Extra: test
26
26
  Requires-Dist: pylint ; extra == 'test'
27
27
  Requires-Dist: flake8 ; extra == 'test'
@@ -45,11 +45,11 @@ Requires-Dist: uvloop ; (sys_platform != "win32" and sys_platform != "cygwin") a
45
45
  =====================================
46
46
  generator=datazen
47
47
  version=3.1.4
48
- hash=41c5a2511c80b2cbbaee668bb6a75bd2
48
+ hash=aa59dcef7f11c767458b14ad97f9de59
49
49
  =====================================
50
50
  -->
51
51
 
52
- # runtimepy ([5.6.4](https://pypi.org/project/runtimepy/))
52
+ # runtimepy ([5.7.0](https://pypi.org/project/runtimepy/))
53
53
 
54
54
  [![python](https://img.shields.io/pypi/pyversions/runtimepy.svg)](https://pypi.org/project/runtimepy/)
55
55
  ![Build Status](https://github.com/vkottler/runtimepy/workflows/Python%20Package/badge.svg)
@@ -1,11 +1,11 @@
1
- runtimepy/__init__.py,sha256=xynGRUb4uW0naY4GEs3m1GbeVeu1jEcDHpifIJsSHIg,390
1
+ runtimepy/__init__.py,sha256=7qUy8p7EC5Gtz7wvmBh-jnZVUn-dIOF6t1tjTI1I9v8,390
2
2
  runtimepy/__main__.py,sha256=OPAed6hggoQdw-6QAR62mqLC-rCkdDhOq0wyeS2vDRI,332
3
3
  runtimepy/app.py,sha256=sTvatbsGZ2Hdel36Si_WUbNMtg9CzsJyExr5xjIcxDE,970
4
4
  runtimepy/dev_requirements.txt,sha256=j0dh11ztJAzfaUL0iFheGjaZj9ppDzmTkclTT8YKO8c,230
5
5
  runtimepy/entry.py,sha256=3672ccoslf2h8Wg5M_SuW6SoEx0oslRoi0ngZsgjNz8,1954
6
6
  runtimepy/mapping.py,sha256=VQK1vzmQVvYYKI85_II37-hIEbvgL3PzNy-WI6TTo80,5091
7
7
  runtimepy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- runtimepy/requirements.txt,sha256=r9nEQ2tlTwbwI_WBVa-GxOt4KcmPjOQgFk1NR3LNlms,124
8
+ runtimepy/requirements.txt,sha256=77PnkPte9OZyyJg88wF_6su2H4XSvuN8rQH1tibLdv4,124
9
9
  runtimepy/schemas.py,sha256=NROlzVCZGLTJ9xe7d1eNIYmjzf0AOv3qHK-f6g1jGHk,678
10
10
  runtimepy/util.py,sha256=q1Spqt8AiG8_64COh1fU5cUKl-cZhp8BK1CHw_IOya0,399
11
11
  runtimepy/channel/__init__.py,sha256=pf0RJ5g37_FVV8xoUNgzFGuIfbZEYSBA_cQlJSDTPDo,4774
@@ -50,8 +50,8 @@ runtimepy/data/server.yaml,sha256=wS_Ceiu2TpkfPurpqoYoPlgzc9DAWtUd24MW7t-S5rU,97
50
50
  runtimepy/data/server_base.yaml,sha256=QkF1xcHyMEViUhOc5rKFbFXjbRDDDHbX5LXvSQJRS58,615
51
51
  runtimepy/data/server_dev.yaml,sha256=nQsPh7LuQig3pzHfdg_aD3yOUiCj1sKKfI-WwW3hXmQ,523
52
52
  runtimepy/data/tftp_server.yaml,sha256=-bFOWJSagI-fEQQcT8k7eDMJVfSPm2XAxLVG3dqUTa4,204
53
- runtimepy/data/css/bootstrap_extra.css,sha256=l-LKE8KnwnuiWbc4NEtYVqFPM4BBnd0fmlmHtEZzA40,1405
54
- runtimepy/data/css/main.css,sha256=PifjIDKw-5-i5b12edNwSRE4K8Yi0KPgh607mFN6_p8,731
53
+ runtimepy/data/css/bootstrap_extra.css,sha256=la8scLWyYDzAmQV5qh_44PAEX0RMnPP35Kcs9US63sU,1758
54
+ runtimepy/data/css/main.css,sha256=OSg5g7FYbjsHY7QNbFCTPAD1MlypeoYfaOyAfvnT2kI,680
55
55
  runtimepy/data/js/DataConnection.js,sha256=DnX8FMehjJXqmI62UMYXSvl_XdfQMzq3XUDFbLu2GgI,98
56
56
  runtimepy/data/js/JsonConnection.js,sha256=rclZrbmWc_zSs6I_JhOgxnVPFIyPMo5WdjAe8alyZ3o,2729
57
57
  runtimepy/data/js/audio.js,sha256=bLkBqbeHMiGGidfL3iXjmVoF9seK-ZeZ3kwgOrcpgk4,1092
@@ -74,7 +74,7 @@ runtimepy/data/js/classes/PointManager.js,sha256=0lr2AReLdDNrY47UuOjjCRDPMiSRsOV
74
74
  runtimepy/data/js/classes/TabFilter.js,sha256=FygFFmWa1IRQ0DZlrOscdrkz6W3VkG87nHSud56kCzI,1185
75
75
  runtimepy/data/js/classes/TabInterface.js,sha256=i-dM_FpRsp_hJEh6CdtSY8hiTS6-KZx5dkOYXD_crh0,12084
76
76
  runtimepy/data/js/classes/UnitSystem.js,sha256=ys4OMabq47k_VvJpRItm82U0IequDvx3ysRJOQzDf94,906
77
- runtimepy/data/js/classes/WindowHashManager.js,sha256=aQcdUwWw-Ksp-ffywOlv64TdG6R-UrP4DVGLrGIi8QQ,6253
77
+ runtimepy/data/js/classes/WindowHashManager.js,sha256=tHGhjfPJCF253L98Dh8gKlxUDY2ct0G7RudoQXXxB-E,6860
78
78
  runtimepy/data/js/classes/WorkerInterface.js,sha256=qARPW1CUDnHnVFVE8UjqKq74QfommCLwd6nisy-ayOw,346
79
79
  runtimepy/data/js/tab/env.js,sha256=MB79l3XyXKELWRqHcTnwWHiwdiceLHl1N_s-mS33pyU,22
80
80
  runtimepy/data/js/tab/sound.js,sha256=RSKp0AXM_zGOCsUvIT-BUjIzOE7Dp5NHiQG4fy7gBgY,1388
@@ -169,21 +169,21 @@ runtimepy/net/server/app/create.py,sha256=N-g3kClBsG4pKOd9tx947rOq4sfgrH_FAMVfZa
169
169
  runtimepy/net/server/app/elements.py,sha256=KJt9vWqkfvniJMiLOJN467JjPPrEqJYZXmDuY1JoY1g,455
170
170
  runtimepy/net/server/app/files.py,sha256=cIHtIKqaVvOpKL62LSVV1IRPdUyCRCg0TOX9XXmYtqk,2903
171
171
  runtimepy/net/server/app/landing_page.py,sha256=axHGBeFpjn5PF87Yb-n73me4T9b8pQxBq4zlvX5CjmE,663
172
- runtimepy/net/server/app/placeholder.py,sha256=aHHc0--agRq0o5CH-Yzvp_IBihaKmiioGpwm7qu-ysk,1677
172
+ runtimepy/net/server/app/placeholder.py,sha256=BDoLtS6dSeLUKnUZe3z17pb5QuXH4C69RqoIpEc3BIY,1676
173
173
  runtimepy/net/server/app/pyodide.py,sha256=dGJ4u78eYQLU9RQbZEWgzv-7jVIwblS6VopibG82tA4,478
174
- runtimepy/net/server/app/sound.py,sha256=iJTnisXgQb9bEzd0gpCuUdkvoWrC5plEhw04c3R6PrM,844
174
+ runtimepy/net/server/app/sound.py,sha256=AeJoa6XKNH3TYvH6OuAwyfJ5CyFJJwCF0zeCMIpLZAE,843
175
175
  runtimepy/net/server/app/tab.py,sha256=4jhw71LfA23wT9m9e5ofw-tBXYW6xky4tGwBOlGkOz8,2296
176
176
  runtimepy/net/server/app/bootstrap/__init__.py,sha256=ONhwx68piWjsrf88FMpda84TWSPqgi-RZCBuWCci_ak,1444
177
- runtimepy/net/server/app/bootstrap/elements.py,sha256=TsZE1nD8wLo7VoxwGpm2OazlqOZIjSTyigxdLaK9vwQ,4782
178
- runtimepy/net/server/app/bootstrap/tabs.py,sha256=0azUtpZTO80kjhX65vU3K5QfW4cwK7ULixqM8O0FgKQ,4179
179
- runtimepy/net/server/app/env/__init__.py,sha256=bPlW7QtItSKZXbCARZhwjNdfRego3vvlfWNsUro9BSc,4098
180
- runtimepy/net/server/app/env/modal.py,sha256=d7OdKVJfKXnOkDhvsF2nQmTfZHAdx70wbK2pGlNIcEQ,1753
181
- runtimepy/net/server/app/env/settings.py,sha256=M0DFibrzF5-nxZ8udKMi503HiTZWIQNbzj_t9TWi34Q,1720
177
+ runtimepy/net/server/app/bootstrap/elements.py,sha256=otKJGuDVNL7yKpjdIWZw2fyiHVlRRBPdgRrtRjOW2Vk,4781
178
+ runtimepy/net/server/app/bootstrap/tabs.py,sha256=tZHgG2NuJ0kJjNjgzCaQEwpuZywRy0bAEEtgg6aB-ns,4454
179
+ runtimepy/net/server/app/env/__init__.py,sha256=WGgIaB4cg4zqEc7BOCvtNEDvCYWyg48tVHtJiDdHtMA,4172
180
+ runtimepy/net/server/app/env/modal.py,sha256=BDnZvdzwu68ZCKISab39n8_NRWh518IyrtObovhC8SU,1752
181
+ runtimepy/net/server/app/env/settings.py,sha256=2dJydD7_lH8ae43d0D28BNRCbUjmmq4gc-eEAqDOCHs,1732
182
182
  runtimepy/net/server/app/env/widgets.py,sha256=_kNvPl7MXnZOiwTjoZiU2hfuSjkLnRUrORTVDi3w7Ls,5312
183
183
  runtimepy/net/server/app/env/tab/__init__.py,sha256=stTVKyHljLQWnnhxkWPwa7bLdZtjhiMFbiVFgbiYaFI,647
184
184
  runtimepy/net/server/app/env/tab/base.py,sha256=hcHKG17JGkAZjl2X7jT1B72RHTeMdocTakFyNKkmWJc,1168
185
185
  runtimepy/net/server/app/env/tab/controls.py,sha256=hsj0ErywfmOBtJLNZbMISrE2ELJEfyXvtCtpsDbXlYg,4734
186
- runtimepy/net/server/app/env/tab/html.py,sha256=fq97p-5dMi42mxJH04gZXH-sECWVVdizHkLG3cC93aQ,7082
186
+ runtimepy/net/server/app/env/tab/html.py,sha256=lF7W9zwxgQa-EPWi49lcM0gNVrlXcGjjUjdFyt_BtMQ,7099
187
187
  runtimepy/net/server/app/env/tab/message.py,sha256=OWqBIPRt6UdBHAXk5qvFMbnWuvIRUyp34lzb3GYdthk,4070
188
188
  runtimepy/net/server/struct/__init__.py,sha256=Zy37r6RLFu-XFr9vsanSq80BJdS6Dxr7zmPzQbb7xdw,1799
189
189
  runtimepy/net/server/websocket/__init__.py,sha256=KISuFUUQwNn6BXo8BOMuMOXyoVqE7Jw94ZQiSCQuRQE,5279
@@ -269,9 +269,9 @@ runtimepy/tui/task.py,sha256=nUZo9fuOC-k1Wpqdzkv9v1tQirCI28fZVgcC13Ijvus,1093
269
269
  runtimepy/tui/channels/__init__.py,sha256=evDaiIn-YS9uGhdo8ZGtP9VK1ek6sr_P1nJ9JuSET0o,4536
270
270
  runtimepy/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
271
271
  runtimepy/ui/controls.py,sha256=yvT7h3thbYaitsakcIAJ90EwKzJ4b-jnc6p3UuVf_XE,1241
272
- runtimepy-5.6.4.dist-info/LICENSE,sha256=okYCYhGsx_BlzvFdoNVBVpw_Cfb4SOqHA_VAARml4Hc,1071
273
- runtimepy-5.6.4.dist-info/METADATA,sha256=bXVccH4XiZfIbnaDCTTTq2xyxjaW86_NZ5xTHvOj1Ak,9308
274
- runtimepy-5.6.4.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
275
- runtimepy-5.6.4.dist-info/entry_points.txt,sha256=-btVBkYv7ybcopqZ_pRky-bEzu3vhbaG3W3Z7ERBiFE,51
276
- runtimepy-5.6.4.dist-info/top_level.txt,sha256=0jPmh6yqHyyJJDwEID-LpQly-9kQ3WRMjH7Lix8peLg,10
277
- runtimepy-5.6.4.dist-info/RECORD,,
272
+ runtimepy-5.7.0.dist-info/LICENSE,sha256=okYCYhGsx_BlzvFdoNVBVpw_Cfb4SOqHA_VAARml4Hc,1071
273
+ runtimepy-5.7.0.dist-info/METADATA,sha256=0gGgcxU2Cl_nKgBLgU8Y2RLsE39Iy3Bo_gycEbfvjgc,9308
274
+ runtimepy-5.7.0.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
275
+ runtimepy-5.7.0.dist-info/entry_points.txt,sha256=-btVBkYv7ybcopqZ_pRky-bEzu3vhbaG3W3Z7ERBiFE,51
276
+ runtimepy-5.7.0.dist-info/top_level.txt,sha256=0jPmh6yqHyyJJDwEID-LpQly-9kQ3WRMjH7Lix8peLg,10
277
+ runtimepy-5.7.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5