Skip to content

Commit e5bb673

Browse files
authored
Merge pull request #307 from vkottler/dev/5.11.3
5.11.3 - Improve ByteOrder handling
2 parents f313a0f + 314bc9f commit e5bb673

File tree

12 files changed

+60
-39
lines changed

12 files changed

+60
-39
lines changed

.github/workflows/python-package.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
7878
- run: |
7979
mk python-release owner=vkottler \
80-
repo=runtimepy version=5.11.2
80+
repo=runtimepy version=5.11.3
8181
if: |
8282
matrix.python-version == '3.12'
8383
&& matrix.system == 'ubuntu-latest'

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
=====================================
33
generator=datazen
44
version=3.1.4
5-
hash=8a7622d7187fa17bfcc479f8f6f78d1a
5+
hash=8e8d3499d8579ca086dc80c977f6fd7f
66
=====================================
77
-->
88

9-
# runtimepy ([5.11.2](https://pypi.org/project/runtimepy/))
9+
# runtimepy ([5.11.3](https://pypi.org/project/runtimepy/))
1010

1111
[![python](https://img.shields.io/pypi/pyversions/runtimepy.svg)](https://pypi.org/project/runtimepy/)
1212
![Build Status](https://github.com/vkottler/runtimepy/workflows/Python%20Package/badge.svg)

local/variables/package.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
22
major: 5
33
minor: 11
4-
patch: 2
4+
patch: 3
55
entry: runtimepy

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta:__legacy__"
44

55
[project]
66
name = "runtimepy"
7-
version = "5.11.2"
7+
version = "5.11.3"
88
description = "A framework for implementing Python services."
99
readme = "README.md"
1010
requires-python = ">=3.12"

runtimepy/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# =====================================
22
# generator=datazen
33
# version=3.1.4
4-
# hash=c5b165c61995fe302ea31f7500b6359f
4+
# hash=f45f335bfb519a5a33f13603258a4d33
55
# =====================================
66

77
"""
@@ -10,7 +10,7 @@
1010

1111
DESCRIPTION = "A framework for implementing Python services."
1212
PKG_NAME = "runtimepy"
13-
VERSION = "5.11.2"
13+
VERSION = "5.11.3"
1414

1515
# runtimepy-specific content.
1616
METRICS_NAME = "metrics"

runtimepy/codec/system/__init__.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,14 @@
1010
from vcorelib.namespace import CPP_DELIM, Namespace
1111

1212
# internal
13-
from runtimepy import PKG_NAME
1413
from runtimepy.codec.protocol import Protocol
1514
from runtimepy.enum import RuntimeEnum
16-
from runtimepy.enum.registry import (
17-
DEFAULT_ENUM_PRIMITIVE,
18-
EnumRegistry,
19-
RuntimeIntEnum,
15+
from runtimepy.enum.registry import DEFAULT_ENUM_PRIMITIVE, RuntimeIntEnum
16+
from runtimepy.primitives.byte_order import (
17+
DEFAULT_BYTE_ORDER,
18+
ByteOrder,
19+
enum_registry,
2020
)
21-
from runtimepy.primitives.byte_order import DEFAULT_BYTE_ORDER, ByteOrder
2221
from runtimepy.primitives.types import AnyPrimitiveType, PrimitiveTypes
2322
from runtimepy.registry.name import RegistryKey
2423
from runtimepy.util import Identifier
@@ -54,7 +53,7 @@ def __init__(self, *namespace: str) -> None:
5453
self.custom: dict[str, Protocol] = {}
5554
self.custom_ids = Identifier(scale=1)
5655

57-
self._enums = EnumRegistry()
56+
self._enums = enum_registry(register_byte_order=False)
5857

5958
global_namespace = Namespace(delim=CPP_DELIM)
6059

@@ -65,9 +64,8 @@ def __init__(self, *namespace: str) -> None:
6564
self.root_namespace = global_namespace
6665

6766
# Register enums.
68-
with self.root_namespace.pushed(PKG_NAME):
69-
for enum in [ByteOrder]:
70-
self.runtime_int_enum(enum)
67+
for enum in [ByteOrder]:
68+
self.runtime_int_enum(enum)
7169

7270
self.root_namespace = global_namespace.child(*namespace)
7371

runtimepy/enum/registry.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,5 @@ def register_enum(
100100
data["id"] = ident
101101

102102
result = registry.register_dict(name, data)
103-
assert result is not None
103+
assert result is not None, (name, data)
104104
return result
105-
106-
107-
def enum_registry(*kinds: type[RuntimeIntEnum]) -> EnumRegistry:
108-
"""Create an enum registry with the provided custom types registered."""
109-
110-
result = EnumRegistry()
111-
for kind in kinds:
112-
kind.register_enum(result)
113-
return result

runtimepy/primitives/byte_order.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
A module implementing an enumeration for byte ordering options.
33
"""
44

5+
# built-in
6+
from typing import Optional
7+
58
# internal
6-
from runtimepy.enum.registry import RuntimeIntEnum as _RuntimeIntEnum
9+
from runtimepy.enum.registry import EnumRegistry, RuntimeIntEnum
710

811

9-
class ByteOrder(_RuntimeIntEnum):
12+
class ByteOrder(RuntimeIntEnum):
1013
"""An enumeration for viable byte orders."""
1114

1215
NATIVE = 1
@@ -30,5 +33,33 @@ def __str__(self) -> str:
3033
"""Get this byte order as a string."""
3134
return self.fmt
3235

36+
@classmethod
37+
def id(cls) -> Optional[int]:
38+
"""Override in sub-class to coerce enum id."""
39+
return 1
40+
41+
42+
# https://en.cppreference.com/w/cpp/types/endian
43+
STD_ENDIAN = {
44+
"little": ByteOrder.LITTLE_ENDIAN,
45+
"big": ByteOrder.BIG_ENDIAN,
46+
"native": ByteOrder.NATIVE,
47+
}
48+
3349

3450
DEFAULT_BYTE_ORDER = ByteOrder.NETWORK
51+
52+
53+
def enum_registry(
54+
*kinds: type[RuntimeIntEnum], register_byte_order: bool = True
55+
) -> EnumRegistry:
56+
"""Create an enum registry with the provided custom types registered."""
57+
58+
result = EnumRegistry()
59+
60+
if register_byte_order:
61+
ByteOrder.register_enum(result)
62+
63+
for kind in kinds:
64+
kind.register_enum(result)
65+
return result

tests/codec/system/test_system.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def test_type_system_basic():
7979

8080
system = get_test_system()
8181

82-
assert system.size("runtimepy::ByteOrder") == 1
82+
assert system.size("ByteOrder") == 1
8383

8484
new_type = system.register("SomeStruct")
8585
assert system.size("SomeStruct") == 0

tests/codec/test_protocol.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from runtimepy.codec.protocol.base import FieldSpec
1616
from runtimepy.enum.registry import EnumRegistry, RuntimeIntEnum
1717
from runtimepy.primitives import Uint32
18+
from runtimepy.primitives.byte_order import enum_registry
1819
from runtimepy.primitives.serializable import PrefixedChunk
1920

2021
# internal
@@ -260,8 +261,7 @@ def primitive(cls) -> str:
260261
return "uint16"
261262

262263

263-
ENUMS = EnumRegistry()
264-
Enum1.register_enum(ENUMS)
264+
ENUMS = enum_registry(Enum1)
265265

266266

267267
class Test1(ProtocolFactory):

tests/data/valid/enums/sample_enum.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
---
22
int1:
3-
id: 1
3+
id: 2
44
type: int
55
items:
66
a: 1
77
b: 2
88
c: 3
99

1010
bool1:
11-
id: 2
11+
id: 3
1212
type: bool
1313
items:
1414
valve_open: true

tests/enum/test_registry.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
from vcorelib.paths.context import tempfile
1111

1212
# module under test
13-
from runtimepy.enum.registry import EnumRegistry, RuntimeIntEnum, enum_registry
13+
from runtimepy.enum.registry import EnumRegistry, RuntimeIntEnum
14+
from runtimepy.primitives.byte_order import enum_registry
1415

1516
# internal
1617
from tests.resources import resource
@@ -50,10 +51,10 @@ def test_enum_registry_basic():
5051

5152
enums = EnumRegistry.decode(resource("enums", "sample_enum.yaml"))
5253
assert enums.get("int1") is not None
53-
assert enums.get(1) is not None
54+
assert enums.get(2) is not None
5455
assert enums["bool1"].is_boolean
55-
assert enums[2].is_boolean
56-
assert enums[1].is_integer
56+
assert enums[3].is_boolean
57+
assert enums[2].is_integer
5758

5859
with raises(KeyError):
5960
assert enums["bool2"]
@@ -66,7 +67,7 @@ def test_enum_registry_basic():
6667
is not None
6768
)
6869
assert (
69-
enums.register_dict("int2", {"id": 1, "type": "int", "items": {}})
70+
enums.register_dict("int2", {"id": 2, "type": "int", "items": {}})
7071
is None
7172
)
7273
assert enums.register_dict("!@#$", {}) is None

0 commit comments

Comments
 (0)