runtimepy 5.11.3__py3-none-any.whl → 5.11.5__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
- # version=3.1.4
4
- # hash=f45f335bfb519a5a33f13603258a4d33
3
+ # version=3.2.0
4
+ # hash=ac222b5cb6e347a1d218135c6b5b25f1
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.11.3"
13
+ VERSION = "5.11.5"
14
14
 
15
15
  # runtimepy-specific content.
16
16
  METRICS_NAME = "metrics"
runtimepy/__main__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # =====================================
2
2
  # generator=datazen
3
- # version=3.1.4
3
+ # version=3.2.0
4
4
  # hash=b28a8111bcc727e854c1f6474a3c4232
5
5
  # =====================================
6
6
  """
runtimepy/app.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # =====================================
2
2
  # generator=datazen
3
- # version=3.1.4
3
+ # version=3.2.0
4
4
  # hash=a4deafb4ebcc179d8d85f9376d22dc92
5
5
  # =====================================
6
6
 
@@ -440,5 +440,6 @@ class BaseChannelEnvironment(_NamespaceMixin, FinalizeMixin):
440
440
 
441
441
  for fields in self.to_add:
442
442
  self.fields.add(fields)
443
+ self.to_add = []
443
444
 
444
445
  super().finalize(strict=strict)
@@ -91,10 +91,10 @@ def sample_fields(env: ChannelEnvironment, enum: str = "SampleEnum") -> None:
91
91
  env.int_channel("raw", prim)
92
92
 
93
93
  # Add a bit field and flag.
94
- env.add_field(BitFlag("flag1", prim, 0))
94
+ env.add_field(BitFlag(env.namespace(name="flag1"), prim, 0))
95
95
  env.add_field(
96
96
  BitFlag(
97
- "flag2",
97
+ env.namespace(name="flag2"),
98
98
  prim,
99
99
  1,
100
100
  commandable=True,
@@ -103,7 +103,7 @@ def sample_fields(env: ChannelEnvironment, enum: str = "SampleEnum") -> None:
103
103
  )
104
104
  env.add_field(
105
105
  BitField(
106
- "field1",
106
+ env.namespace(name="field1"),
107
107
  prim,
108
108
  2,
109
109
  2,
@@ -112,7 +112,11 @@ def sample_fields(env: ChannelEnvironment, enum: str = "SampleEnum") -> None:
112
112
  description="Sample bit field.",
113
113
  )
114
114
  )
115
- env.add_field(BitField("field2", prim, 4, 4, commandable=True))
115
+ env.add_field(
116
+ BitField(
117
+ env.namespace(name="field2"), prim, 4, 4, commandable=True
118
+ )
119
+ )
116
120
 
117
121
 
118
122
  def sample_float(
@@ -21,7 +21,7 @@ from runtimepy.enum import RuntimeEnum as _RuntimeEnum
21
21
  from runtimepy.enum.registry import EnumRegistry as _EnumRegistry
22
22
  from runtimepy.primitives import AnyPrimitive as _AnyPrimitive
23
23
  from runtimepy.primitives import Primitivelike as _Primitivelike
24
- from runtimepy.primitives import create as _create
24
+ from runtimepy.primitives import normalize_instance as _normalize_instance
25
25
  from runtimepy.primitives.array import PrimitiveArray
26
26
  from runtimepy.primitives.byte_order import (
27
27
  DEFAULT_BYTE_ORDER as _DEFAULT_BYTE_ORDER,
@@ -40,7 +40,7 @@ class FieldSpec(NamedTuple):
40
40
  """Information specifying a protocol field."""
41
41
 
42
42
  name: str
43
- kind: _Primitivelike
43
+ kind: str
44
44
  enum: _Optional[_RegistryKey] = None
45
45
  array_length: _Optional[int] = None
46
46
 
@@ -49,7 +49,7 @@ class FieldSpec(NamedTuple):
49
49
 
50
50
  result: _JsonObject = {
51
51
  "name": self.name,
52
- "kind": _create(self.kind).kind.name,
52
+ "kind": self.kind,
53
53
  "array_length": self.array_length,
54
54
  }
55
55
  if self.enum is not None:
@@ -58,7 +58,7 @@ class FieldSpec(NamedTuple):
58
58
 
59
59
 
60
60
  T = _TypeVar("T", bound="ProtocolBase")
61
- ProtocolBuild = list[_Union[int, FieldSpec, tuple[str, int]]]
61
+ ProtocolBuild = list[_Union[tuple[int, str], FieldSpec, tuple[str, int]]]
62
62
 
63
63
 
64
64
  class ProtocolBase(PrimitiveArray):
@@ -114,16 +114,15 @@ class ProtocolBase(PrimitiveArray):
114
114
  if build is None:
115
115
  build = []
116
116
  for item in build:
117
- if isinstance(item, int):
118
- self._add_bit_fields(self._fields.fields[item])
119
- elif isinstance(item, FieldSpec):
117
+ if isinstance(item, FieldSpec):
120
118
  self.add_field(
121
119
  item.name,
122
120
  item.kind,
123
121
  enum=item.enum,
124
122
  array_length=item.array_length,
125
123
  )
126
- else:
124
+
125
+ elif isinstance(item[0], str):
127
126
  assert serializables, (item, serializables)
128
127
  name = item[0]
129
128
  self.add_serializable(
@@ -133,6 +132,11 @@ class ProtocolBase(PrimitiveArray):
133
132
  )
134
133
  del serializables[name]
135
134
 
135
+ elif isinstance(item[0], int):
136
+ self._add_bit_fields(
137
+ item[1], self._fields.fields[item[0]], index=item[0]
138
+ )
139
+
136
140
  # Ensure all serializables were handled via build.
137
141
  assert not serializables, serializables
138
142
 
@@ -169,15 +173,18 @@ class ProtocolBase(PrimitiveArray):
169
173
 
170
174
  instances = self.add_to_end(serializable, array_length=array_length)
171
175
  self._build.append((name, len(instances)))
176
+
177
+ assert name not in self.serializables, name
172
178
  self.serializables[name] = instances
173
179
 
174
180
  def add_field(
175
181
  self,
176
182
  name: str,
177
- kind: _Primitivelike = None,
183
+ kind: _Primitivelike | _Optional[_AnyPrimitive] = None,
178
184
  enum: _RegistryKey = None,
179
185
  serializable: Serializable = None,
180
186
  array_length: int = None,
187
+ track: bool = True,
181
188
  ) -> None:
182
189
  """Add a new field to the protocol."""
183
190
 
@@ -201,30 +208,39 @@ class ProtocolBase(PrimitiveArray):
201
208
  kind = runtime_enum.primitive
202
209
 
203
210
  assert kind is not None
211
+ inst = _normalize_instance(kind)
204
212
 
205
- self._regular_fields[name] = self.add(
206
- _create(kind), array_length=array_length
207
- )
213
+ assert name not in self._regular_fields, name
214
+ self._regular_fields[name] = self.add(inst, array_length=array_length)
208
215
 
209
- self._build.append(
210
- FieldSpec(name, kind, enum, array_length=array_length)
211
- )
216
+ if track:
217
+ self._build.append(
218
+ FieldSpec(
219
+ name, inst.kind.name, enum, array_length=array_length
220
+ )
221
+ )
212
222
 
213
- def _add_bit_fields(self, fields: _BitFields) -> None:
223
+ def _add_bit_fields(
224
+ self, name: str, fields: _BitFields, index: int = None
225
+ ) -> None:
214
226
  """Add a bit-fields instance."""
215
227
 
216
- self._build.append(self._fields.add(fields))
217
- self.add(fields.raw)
228
+ # If the index is known, these fields are already registered.
229
+ if index is None:
230
+ index = self._fields.add(fields)
231
+
232
+ self._build.append((index, name))
233
+ self.add_field(name, kind=fields.raw, track=False)
218
234
 
219
235
  @contextmanager
220
236
  def add_bit_fields(
221
- self, kind: _Primitivelike = "uint8"
237
+ self, name: str, kind: _Primitivelike | _AnyPrimitive = "uint8"
222
238
  ) -> _Iterator[_BitFields]:
223
239
  """Add a bit-fields primitive to the protocol."""
224
240
 
225
241
  new = _BitFields.new(value=kind)
226
242
  yield new
227
- self._add_bit_fields(new)
243
+ self._add_bit_fields(name, new)
228
244
 
229
245
  def value(
230
246
  self, name: str, resolve_enum: bool = True, index: int = 0
@@ -79,7 +79,9 @@ class JsonProtocol(ProtocolBase):
79
79
  )
80
80
 
81
81
  # Export the build specification.
82
- build: list[_Union[int, _JsonObject, str, tuple[str, int]]] = []
82
+ build: list[
83
+ _Union[tuple[int, str], _JsonObject, str, tuple[str, int]]
84
+ ] = []
83
85
  for item in self._build:
84
86
  if isinstance(item, FieldSpec):
85
87
  build.append(item.asdict())
@@ -3,6 +3,7 @@ A basic type-system implementation.
3
3
  """
4
4
 
5
5
  # built-in
6
+ from contextlib import suppress
6
7
  from typing import Iterable, Optional, Union
7
8
 
8
9
  # third-party
@@ -69,6 +70,17 @@ class TypeSystem(LoggerMixin):
69
70
 
70
71
  self.root_namespace = global_namespace.child(*namespace)
71
72
 
73
+ def is_enum(self, name: str, *namespace: str, exact: bool = True) -> bool:
74
+ """Determine if the arguments identify a registered enumeration."""
75
+
76
+ result = False
77
+
78
+ with suppress(KeyError, AssertionError):
79
+ self.get_enum(name, *namespace, exact=exact)
80
+ result = True
81
+
82
+ return result
83
+
72
84
  def get_enum(
73
85
  self, name: str, *namespace: str, exact: bool = True
74
86
  ) -> RuntimeEnum:
@@ -118,6 +130,19 @@ class TypeSystem(LoggerMixin):
118
130
  self.custom[resolved] = new_type
119
131
  return new_type
120
132
 
133
+ def is_custom(
134
+ self, name: str, *namespace: str, exact: bool = True
135
+ ) -> bool:
136
+ """Determine if the parameters identify a custom type."""
137
+
138
+ result = False
139
+
140
+ with suppress(KeyError, AssertionError):
141
+ self.get_protocol(name, *namespace, exact=exact)
142
+ result = True
143
+
144
+ return result
145
+
121
146
  def get_protocol(
122
147
  self, name: str, *namespace: str, exact: bool = True
123
148
  ) -> Protocol:
runtimepy/commands/all.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # =====================================
2
2
  # generator=datazen
3
- # version=3.1.4
3
+ # version=3.2.0
4
4
  # hash=1814b7f7fae3556a0dbeec37141e4182
5
5
  # =====================================
6
6
 
runtimepy/entry.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # =====================================
2
2
  # generator=datazen
3
- # version=3.1.4
3
+ # version=3.2.0
4
4
  # hash=79c31d1280a6e97b5d326aecb758c597
5
5
  # =====================================
6
6
 
@@ -119,3 +119,13 @@ def normalize(value: Primitivelike) -> type[AnyPrimitive]:
119
119
  def create(value: Primitivelike, **kwargs) -> AnyPrimitive:
120
120
  """Create an instance of a primitive."""
121
121
  return normalize(value)(**kwargs)
122
+
123
+
124
+ def normalize_instance(
125
+ value: Primitivelike | AnyPrimitive, **kwargs
126
+ ) -> AnyPrimitive:
127
+ """Creates a new instance only if necessary."""
128
+
129
+ if not isinstance(value, Primitive):
130
+ value = create(value, **kwargs)
131
+ return value
@@ -14,8 +14,9 @@ from vcorelib.io.types import JsonObject as _JsonObject
14
14
  from vcorelib.io.types import JsonValue as _JsonValue
15
15
 
16
16
  # internal
17
+ from runtimepy.primitives import AnyPrimitive as _AnyPrimitive
17
18
  from runtimepy.primitives import Primitivelike as _Primitivelike
18
- from runtimepy.primitives import normalize as _normalize
19
+ from runtimepy.primitives import normalize_instance as _normalize_instance
19
20
  from runtimepy.primitives.field import BitField as _BitField
20
21
  from runtimepy.primitives.field import BitFieldBase as _BitFieldBase
21
22
  from runtimepy.primitives.field import BitFlag as _BitFlag
@@ -37,7 +38,7 @@ class BitFields(_RuntimepyDictCodec):
37
38
 
38
39
  # Create the underlying storage element.
39
40
  self.raw: _UnsignedInt = _cast(
40
- _UnsignedInt, _normalize(_cast(str, data["type"]))()
41
+ _UnsignedInt, _normalize_instance(_cast(str, data["type"]))
41
42
  )
42
43
 
43
44
  self.curr_index = 0
@@ -194,6 +195,8 @@ class BitFields(_RuntimepyDictCodec):
194
195
  def claim_field(self, field: _BitField) -> _BitField:
195
196
  """Claim a bit field."""
196
197
 
198
+ self._claim_bits(field.width, index=field.index)
199
+
197
200
  assert field.name not in self.fields, field.name
198
201
  self.fields[field.name] = field
199
202
  self.by_index[field.index] = field
@@ -216,7 +219,7 @@ class BitFields(_RuntimepyDictCodec):
216
219
  _BitField(
217
220
  name,
218
221
  self.raw,
219
- self._claim_bits(width, index=index),
222
+ index if index is not None else self.curr_index,
220
223
  width,
221
224
  enum=enum,
222
225
  description=description,
@@ -225,7 +228,9 @@ class BitFields(_RuntimepyDictCodec):
225
228
  )
226
229
 
227
230
  @classmethod
228
- def new(cls: type[T], value: _Primitivelike = "uint8") -> T:
231
+ def new(
232
+ cls: type[T], value: _Primitivelike | _AnyPrimitive = "uint8"
233
+ ) -> T:
229
234
  """Create a new bit-field storage entity."""
230
235
 
231
236
  return cls.create(
@@ -100,6 +100,7 @@ class BitFieldsManagerBase:
100
100
  for name, field in fields.fields.items():
101
101
  ident = self.registry.register_name(name)
102
102
  assert ident is not None, "Couldn't register bit-field '{name}'!"
103
+ assert name not in self.lookup, name
103
104
  self.lookup[name] = index
104
105
 
105
106
  # Also store the enum mapping.
@@ -220,7 +221,11 @@ class BitFieldsManagerBase:
220
221
  new_fields.raw = prim
221
222
  self.by_primitive[prim] = new_fields
222
223
 
223
- self.by_primitive[prim].claim_field(field)
224
+ fields = self.by_primitive[prim]
225
+ fields.claim_field(field)
226
+
227
+ if not fields.bits_available:
228
+ del self.by_primitive[prim]
224
229
 
225
230
  # self.add(new_fields, finalize=False)
226
231
  return new_fields
@@ -1,11 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runtimepy
3
- Version: 5.11.3
3
+ Version: 5.11.5
4
4
  Summary: A framework for implementing Python services.
5
- Home-page: https://github.com/vkottler/runtimepy
6
- Author: Vaughn Kottler
7
- Author-email: Vaughn Kottler <vaughn@libre-embedded.com>
8
- Maintainer-email: Vaughn Kottler <vaughn@libre-embedded.com>
5
+ Home-page: https://github.com/libre-embedded/runtimepy
6
+ Author: Libre Embedded
7
+ Author-email: Libre Embedded <vaughn@libre-embedded.com>
8
+ Maintainer-email: Libre Embedded <vaughn@libre-embedded.com>
9
+ License-Expression: MIT
9
10
  Classifier: Programming Language :: Python :: 3.12
10
11
  Classifier: Programming Language :: Python :: 3.13
11
12
  Classifier: Operating System :: Microsoft :: Windows
@@ -13,14 +14,13 @@ Classifier: Operating System :: MacOS
13
14
  Classifier: Operating System :: POSIX :: Linux
14
15
  Classifier: Operating System :: Unix
15
16
  Classifier: Development Status :: 5 - Production/Stable
16
- Classifier: License :: OSI Approved :: MIT License
17
17
  Requires-Python: >=3.12
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Requires-Dist: websockets
21
21
  Requires-Dist: vcorelib>=3.5.1
22
- Requires-Dist: psutil
23
22
  Requires-Dist: svgen>=0.7.4
23
+ Requires-Dist: psutil
24
24
  Requires-Dist: aiofiles
25
25
  Provides-Extra: test
26
26
  Requires-Dist: pylint; extra == "test"
@@ -49,29 +49,22 @@ Dynamic: requires-python
49
49
  <!--
50
50
  =====================================
51
51
  generator=datazen
52
- version=3.1.4
53
- hash=8e8d3499d8579ca086dc80c977f6fd7f
52
+ version=3.2.0
53
+ hash=b043082ee29865c76d3785421e4dbff6
54
54
  =====================================
55
55
  -->
56
56
 
57
- # runtimepy ([5.11.3](https://pypi.org/project/runtimepy/))
57
+ # runtimepy ([5.11.5](https://pypi.org/project/runtimepy/))
58
58
 
59
59
  [![python](https://img.shields.io/pypi/pyversions/runtimepy.svg)](https://pypi.org/project/runtimepy/)
60
- ![Build Status](https://github.com/vkottler/runtimepy/workflows/Python%20Package/badge.svg)
61
- [![codecov](https://codecov.io/gh/vkottler/runtimepy/branch/master/graphs/badge.svg?branch=master)](https://codecov.io/github/vkottler/runtimepy)
60
+ ![Build Status](https://github.com/libre-embedded/runtimepy/workflows/Python%20Package/badge.svg)
61
+ [![codecov](https://codecov.io/gh/libre-embedded/runtimepy/branch/master/graphs/badge.svg?branch=master)](https://codecov.io/github/libre-embedded/runtimepy)
62
62
  ![PyPI - Status](https://img.shields.io/pypi/status/runtimepy)
63
63
  ![Dependents (via libraries.io)](https://img.shields.io/librariesio/dependents/pypi/runtimepy)
64
64
 
65
65
  *A framework for implementing Python services.*
66
66
 
67
- ## Documentation
68
-
69
- ### Generated
70
-
71
- * By [sphinx-apidoc](https://vkottler.github.io/python/sphinx/runtimepy)
72
- (What's [`sphinx-apidoc`](https://www.sphinx-doc.org/en/master/man/sphinx-apidoc.html)?)
73
- * By [pydoc](https://vkottler.github.io/python/pydoc/runtimepy.html)
74
- (What's [`pydoc`](https://docs.python.org/3/library/pydoc.html)?)
67
+ ([interface documentation](https://libre-embedded.github.io/python/runtimepy))
75
68
 
76
69
  ## Python Version Support
77
70
 
@@ -1,8 +1,8 @@
1
- runtimepy/__init__.py,sha256=RJTUf2wSfvc8jMmH7nL4hTPvTdBOQNL3-pYVsf-5Dp8,391
2
- runtimepy/__main__.py,sha256=OPAed6hggoQdw-6QAR62mqLC-rCkdDhOq0wyeS2vDRI,332
3
- runtimepy/app.py,sha256=sTvatbsGZ2Hdel36Si_WUbNMtg9CzsJyExr5xjIcxDE,970
1
+ runtimepy/__init__.py,sha256=IABCqCWGW0dyfhCaH29Q_tyh5vG1Zgu4M19K73tF38k,391
2
+ runtimepy/__main__.py,sha256=Aeo8mj2c2be30XmJQgOlzGSlkZKr4050Yoz1KN12MNk,332
3
+ runtimepy/app.py,sha256=t5mKNeh988WgTxM4EfWwgqRPnydi3g5O_s3HfJ8qaL8,970
4
4
  runtimepy/dev_requirements.txt,sha256=j0dh11ztJAzfaUL0iFheGjaZj9ppDzmTkclTT8YKO8c,230
5
- runtimepy/entry.py,sha256=3672ccoslf2h8Wg5M_SuW6SoEx0oslRoi0ngZsgjNz8,1954
5
+ runtimepy/entry.py,sha256=l2F3pbA6txmhi3PS_v-M0YAmNwieErlJh8YNaAc1s_4,1954
6
6
  runtimepy/mapping.py,sha256=VQK1vzmQVvYYKI85_II37-hIEbvgL3PzNy-WI6TTo80,5091
7
7
  runtimepy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  runtimepy/requirements.txt,sha256=PdID4t7w3qsEoNwrMR-SJoH5OQ9oIUcpesKJC4AiU64,124
@@ -12,10 +12,10 @@ runtimepy/channel/__init__.py,sha256=pf0RJ5g37_FVV8xoUNgzFGuIfbZEYSBA_cQlJSDTPDo
12
12
  runtimepy/channel/registry.py,sha256=nk36qM_Bf6qK6AFR0plaZHR1PU7b4LZqbQ0feJqk4lc,4784
13
13
  runtimepy/channel/environment/__init__.py,sha256=0Jj8g7Y4bdDvmWtzpegB9D4milGPhsZokoYxmps5zgU,1612
14
14
  runtimepy/channel/environment/array.py,sha256=f9cWaYsRXUw8qE629h6jQxbYKDpOwC2GLBo4QaMa1JM,3748
15
- runtimepy/channel/environment/base.py,sha256=tpD_6OHJv1bpfXmfFCNckoNo8ATOOi-XX66NQrkSNYU,14331
15
+ runtimepy/channel/environment/base.py,sha256=uCQKCH6wNrKqYSX2PMDAbIFoCZh68Xt-Cr_daGG7eeI,14356
16
16
  runtimepy/channel/environment/create.py,sha256=DHjoNmzZsARjfB_CfutXQ1PDdxPETi6yQoRMhM0FbwA,5319
17
17
  runtimepy/channel/environment/file.py,sha256=PV05KZ3-CvftbKUM8acQmawOMeGGCcMrEESEBuymykg,6949
18
- runtimepy/channel/environment/sample.py,sha256=Geinp2Q_qYkzYKpUJroepv6A4JWypUnAPl57jn_r_R4,4976
18
+ runtimepy/channel/environment/sample.py,sha256=c__4ZKs1ERoQNbBOimIqjdYbyb4KGgVFk6Ar606Luh4,5108
19
19
  runtimepy/channel/environment/telemetry.py,sha256=3A7Xcp-4eHJWz_oR1SnI6rsl4o8wiSUaiMHrnK1IaQ8,5338
20
20
  runtimepy/channel/environment/command/__init__.py,sha256=mymqk5roA-7evUovXlD2dmWaprSzrPb_3ae6bA9oEZ0,8162
21
21
  runtimepy/channel/environment/command/parser.py,sha256=cMOsEsXnfFlATiWTNSxlgvc_XoICsJlcZigFJlQ47tk,1804
@@ -25,11 +25,11 @@ runtimepy/channel/event/__init__.py,sha256=9LCSNa1Iiwr6Q6JkwQGELDQ7rWfU_xjAMh6qM
25
25
  runtimepy/channel/event/header.py,sha256=eDRZgzzM5HZQ8QtV4DjyAsrAhEZyM7IfwqK6WB5ACEw,868
26
26
  runtimepy/codec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  runtimepy/codec/protocol/__init__.py,sha256=Rg7RSKGn2UBpGMpwq1aCLUBA5h4pORdh53NfR7Cjw0U,1530
28
- runtimepy/codec/protocol/base.py,sha256=aIQCuUYPhe7-jgaYaoNzq3UU57lnBzrLqIr0H7fnHFc,10464
29
- runtimepy/codec/protocol/json.py,sha256=gYGB_OEfZYySKQ_n3eDxYNs6Ku80FdawY5zDqjx9ctc,4315
30
- runtimepy/codec/system/__init__.py,sha256=MLmczvxKnZoPnaPb_22EVC4TdVEj6P0IClejv5WCZ18,7245
28
+ runtimepy/codec/protocol/base.py,sha256=ezNX-93NBChNpMszkkcx-0X_YzdU2oOFdqAMfKaEqMo,11053
29
+ runtimepy/codec/protocol/json.py,sha256=qmcoCcTRS-HgVYLPBsCAPhekAgZmHX9JBfGivLl3b0Y,4349
30
+ runtimepy/codec/system/__init__.py,sha256=fIOUo7QhwI81YAIz9myeSo1oo94De41sK5HKJ-sAdfY,7959
31
31
  runtimepy/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- runtimepy/commands/all.py,sha256=jH2dsmkqyBFe_2ZlPFpko0UCMW3fFfJsuGIbeJFbDoQ,1619
32
+ runtimepy/commands/all.py,sha256=h4qprGG1ZZLGtNVGT9vJYwAxcM7oiCW76E9bBLsJzAA,1619
33
33
  runtimepy/commands/arbiter.py,sha256=CtTMRYpqCAN3vWHkkr9jqWpoF7JGNXafKIBFmkarAfc,1567
34
34
  runtimepy/commands/common.py,sha256=NvZdeIFBHAF52c1n7vqD59DW6ywc-rG5iC5MpuhGf-c,2449
35
35
  runtimepy/commands/mtu.py,sha256=LFFjTU4SsuV3j7Mhx_WuKa5lfdfMm70zJvDWToVrP7E,1357
@@ -230,7 +230,7 @@ runtimepy/net/udp/tftp/io.py,sha256=w6cnUt-T-Ma6Vg8BWoRbsNnIWUv0HTY4am6bcLWxNJs,
230
230
  runtimepy/net/websocket/__init__.py,sha256=YjSmoxiigmsI_hcQw6nueX7bxhrRGerEERnPvgLVEVA,313
231
231
  runtimepy/net/websocket/connection.py,sha256=BMR58bLpHuulCdbLGnmMdFJOF53wVxYcUe52WbdzKEM,9025
232
232
  runtimepy/noise/__init__.py,sha256=EJM7h3t_z74wwrn6FAFQwYE2yUcOZQ1K1IQqOb8Z0AI,384
233
- runtimepy/primitives/__init__.py,sha256=nwWJH1e0KN2NsVwQ3wvRtUpl9s9Ap8Q32NNZLGol0wU,2323
233
+ runtimepy/primitives/__init__.py,sha256=uyihG0zIzarH99iskrL97VUd44m6AqNoLZPF5cC7q9A,2569
234
234
  runtimepy/primitives/base.py,sha256=BaGPUTeVMnLnTPcpjqnS2lzPN74Pe5C0XaQdgrTfW7A,9185
235
235
  runtimepy/primitives/bool.py,sha256=lATPgb1e62rjLn5XlJX8lP3tVYR3DlxV8RT9HpOMdT0,1640
236
236
  runtimepy/primitives/byte_order.py,sha256=J2Pg3gXg8Lmu_uU2mduNJt3mnP_enwDI4Y-X8kWAUP0,1456
@@ -241,9 +241,9 @@ runtimepy/primitives/scaling.py,sha256=Vtxp2CSBahqPp4i2-IS4wjbcC023xwf-dqZMbYWf3
241
241
  runtimepy/primitives/string.py,sha256=ic5VKhXCSIwEOUfqIb1VUpZPwjdAcBul-cLLIihVkQI,2532
242
242
  runtimepy/primitives/array/__init__.py,sha256=ZVJt4810hTFYMdolY_R75lRRHHaNKxZ4comBvuK_69E,8956
243
243
  runtimepy/primitives/field/__init__.py,sha256=iHZSQBozMpfiv_5KE_GIX1FAvDB9unUO0xmWZHiA_Jk,4491
244
- runtimepy/primitives/field/fields.py,sha256=jDNi1tl2Xc3GBmt6QJuqxbhP8MtxgertGbPFmDXa7b4,7481
244
+ runtimepy/primitives/field/fields.py,sha256=c7J8BHAmOoJmRZQzYWKzYtsB_DnWwvRiKd0oj0HpyD0,7668
245
245
  runtimepy/primitives/field/manager/__init__.py,sha256=BCRi6-_5OOJ8kz78JHkiLp8cZ71KA1uiF2zq5FFe9js,2586
246
- runtimepy/primitives/field/manager/base.py,sha256=EyWs5D9_reKOTLkh8PuW45ySjCh31fY_qrtFIcmIOV4,6914
246
+ runtimepy/primitives/field/manager/base.py,sha256=lXEdRm4TlH8TYm_YQ8UH33RhDfH0OhUnwMx1Kc1I_ys,7066
247
247
  runtimepy/primitives/serializable/__init__.py,sha256=R9_derxnK1OCaYyqBZA4CCjPkXCBw6InkE8-3Zy75Uk,399
248
248
  runtimepy/primitives/serializable/base.py,sha256=EIj7Ao0sZaXCXgZari35kimjkr3SzFWGy3rNjxgsv1E,5727
249
249
  runtimepy/primitives/serializable/fixed.py,sha256=rhr6uVbo0Lvazk4fLI7iei-vVNEwP1J8-LoUjW1NaMI,1077
@@ -285,9 +285,9 @@ runtimepy/tui/task.py,sha256=nUZo9fuOC-k1Wpqdzkv9v1tQirCI28fZVgcC13Ijvus,1093
285
285
  runtimepy/tui/channels/__init__.py,sha256=evDaiIn-YS9uGhdo8ZGtP9VK1ek6sr_P1nJ9JuSET0o,4536
286
286
  runtimepy/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
287
  runtimepy/ui/controls.py,sha256=yvT7h3thbYaitsakcIAJ90EwKzJ4b-jnc6p3UuVf_XE,1241
288
- runtimepy-5.11.3.dist-info/licenses/LICENSE,sha256=yKBRwbO-cOPBrlpsZmJkkSa33DfY31aE8t7lZ0DwlUo,1071
289
- runtimepy-5.11.3.dist-info/METADATA,sha256=jorcstJRpdgXA-aUoZoyvC_cECYSEZSHA6XP0UWWxyU,9395
290
- runtimepy-5.11.3.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
291
- runtimepy-5.11.3.dist-info/entry_points.txt,sha256=-btVBkYv7ybcopqZ_pRky-bEzu3vhbaG3W3Z7ERBiFE,51
292
- runtimepy-5.11.3.dist-info/top_level.txt,sha256=0jPmh6yqHyyJJDwEID-LpQly-9kQ3WRMjH7Lix8peLg,10
293
- runtimepy-5.11.3.dist-info/RECORD,,
288
+ runtimepy-5.11.5.dist-info/licenses/LICENSE,sha256=yKBRwbO-cOPBrlpsZmJkkSa33DfY31aE8t7lZ0DwlUo,1071
289
+ runtimepy-5.11.5.dist-info/METADATA,sha256=r3YUndC8kmO9f8iakaOGJfPDdj3fHhy2r0La_HSi_y4,9141
290
+ runtimepy-5.11.5.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
291
+ runtimepy-5.11.5.dist-info/entry_points.txt,sha256=-btVBkYv7ybcopqZ_pRky-bEzu3vhbaG3W3Z7ERBiFE,51
292
+ runtimepy-5.11.5.dist-info/top_level.txt,sha256=0jPmh6yqHyyJJDwEID-LpQly-9kQ3WRMjH7Lix8peLg,10
293
+ runtimepy-5.11.5.dist-info/RECORD,,