Skip to content

Commit 66c8793

Browse files
authored
Python 3.11 compatibility (#195)
* Document an unknown node relation * Python 3.11 compatibility * Bump minimum required Python version * Add 3.11 to CI
1 parent e6e2c42 commit 66c8793

File tree

5 files changed

+16
-37
lines changed

5 files changed

+16
-37
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
runs-on: ubuntu-latest
1919
strategy:
2020
matrix:
21-
python-version: [3.8, 3.9, "3.10"]
21+
python-version: [3.8, 3.9, "3.10", "3.11"]
2222
steps:
2323
- name: Check out code from GitHub
2424
uses: actions/checkout@v2
@@ -224,7 +224,7 @@ jobs:
224224
needs: prepare-base
225225
strategy:
226226
matrix:
227-
python-version: [3.8, 3.9, "3.10"]
227+
python-version: [3.8, 3.9, "3.10", "3.11"]
228228
name: >-
229229
Run tests Python ${{ matrix.python-version }}
230230
steps:

setup.cfg

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ license = GPL-3.0
1111

1212
[options]
1313
packages = find:
14-
python_requires = >=3.7
14+
python_requires = >=3.8
1515
install_requires =
16-
zigpy>=0.51.0
16+
zigpy>=0.52.0
1717
async_timeout
1818
voluptuous
1919
coloredlogs

zigpy_znp/commands/util.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class NodeRelation(t.enum_uint8):
1212
CHILD_FFD_RX_IDLE = 4
1313
NEIGHBOR = 5
1414
OTHER = 6
15+
UNKNOWN_8 = 8
1516
NOTUSED = 0xFF
1617

1718

zigpy_znp/tools/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ class ClosableFileType(argparse.FileType):
177177
def __call__(self, string):
178178
f = super().__call__(string)
179179

180-
if f not in (sys.stdin, sys.stdout):
180+
if f not in (sys.stdin, sys.stdout, sys.stdin.buffer, sys.stdout.buffer):
181181
return f
182182

183183
return UnclosableFile(f)

zigpy_znp/types/basic.py

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import enum
44
import typing
55

6+
import zigpy.types as zigpy_t
7+
68
from zigpy_znp.types.cstruct import CStruct
79

810

@@ -264,30 +266,6 @@ def deserialize(cls, data: bytes, *, align=False) -> tuple[CompleteList, bytes]:
264266
return r, data
265267

266268

267-
def enum_flag_factory(int_type: FixedIntType) -> enum.Flag:
268-
"""
269-
Mixins are broken by Python 3.8.6 so we must dynamically create the enum with the
270-
appropriate methods but with only one non-Enum parent class.
271-
"""
272-
273-
class _NewEnum(int_type, enum.Flag): # type:ignore[misc,valid-type]
274-
# Rebind classmethods to our own class
275-
_missing_ = classmethod(enum.IntFlag._missing_.__func__)
276-
_create_pseudo_member_ = classmethod(
277-
enum.IntFlag._create_pseudo_member_.__func__
278-
)
279-
280-
__or__ = enum.IntFlag.__or__
281-
__and__ = enum.IntFlag.__and__
282-
__xor__ = enum.IntFlag.__xor__
283-
__ror__ = enum.IntFlag.__ror__
284-
__rand__ = enum.IntFlag.__rand__
285-
__rxor__ = enum.IntFlag.__rxor__
286-
__invert__ = enum.IntFlag.__invert__
287-
288-
return _NewEnum # type:ignore[return-value]
289-
290-
291269
class enum_uint8(uint8_t, enum.Enum):
292270
pass
293271

@@ -320,33 +298,33 @@ class enum_uint64(uint64_t, enum.Enum):
320298
pass
321299

322300

323-
class enum_flag_uint8(enum_flag_factory(uint8_t)): # type:ignore[misc]
301+
class enum_flag_uint8(zigpy_t.bitmap_factory(uint8_t)): # type:ignore[misc]
324302
pass
325303

326304

327-
class enum_flag_uint16(enum_flag_factory(uint16_t)): # type:ignore[misc]
305+
class enum_flag_uint16(zigpy_t.bitmap_factory(uint16_t)): # type:ignore[misc]
328306
pass
329307

330308

331-
class enum_flag_uint24(enum_flag_factory(uint24_t)): # type:ignore[misc]
309+
class enum_flag_uint24(zigpy_t.bitmap_factory(uint24_t)): # type:ignore[misc]
332310
pass
333311

334312

335-
class enum_flag_uint32(enum_flag_factory(uint32_t)): # type:ignore[misc]
313+
class enum_flag_uint32(zigpy_t.bitmap_factory(uint32_t)): # type:ignore[misc]
336314
pass
337315

338316

339-
class enum_flag_uint40(enum_flag_factory(uint40_t)): # type:ignore[misc]
317+
class enum_flag_uint40(zigpy_t.bitmap_factory(uint40_t)): # type:ignore[misc]
340318
pass
341319

342320

343-
class enum_flag_uint48(enum_flag_factory(uint48_t)): # type:ignore[misc]
321+
class enum_flag_uint48(zigpy_t.bitmap_factory(uint48_t)): # type:ignore[misc]
344322
pass
345323

346324

347-
class enum_flag_uint56(enum_flag_factory(uint56_t)): # type:ignore[misc]
325+
class enum_flag_uint56(zigpy_t.bitmap_factory(uint56_t)): # type:ignore[misc]
348326
pass
349327

350328

351-
class enum_flag_uint64(enum_flag_factory(uint64_t)): # type:ignore[misc]
329+
class enum_flag_uint64(zigpy_t.bitmap_factory(uint64_t)): # type:ignore[misc]
352330
pass

0 commit comments

Comments
 (0)