diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7fe7abb0..c7e479c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.8, 3.9, "3.10"] + python-version: [3.8, 3.9, "3.10", "3.11"] steps: - name: Check out code from GitHub uses: actions/checkout@v2 @@ -224,7 +224,7 @@ jobs: needs: prepare-base strategy: matrix: - python-version: [3.8, 3.9, "3.10"] + python-version: [3.8, 3.9, "3.10", "3.11"] name: >- Run tests Python ${{ matrix.python-version }} steps: diff --git a/setup.cfg b/setup.cfg index 1a3ecd52..48ed1daf 100644 --- a/setup.cfg +++ b/setup.cfg @@ -11,9 +11,9 @@ license = GPL-3.0 [options] packages = find: -python_requires = >=3.7 +python_requires = >=3.8 install_requires = - zigpy>=0.51.0 + zigpy>=0.52.0 async_timeout voluptuous coloredlogs diff --git a/zigpy_znp/commands/util.py b/zigpy_znp/commands/util.py index 6006ddb0..5d688e1a 100644 --- a/zigpy_znp/commands/util.py +++ b/zigpy_znp/commands/util.py @@ -12,6 +12,7 @@ class NodeRelation(t.enum_uint8): CHILD_FFD_RX_IDLE = 4 NEIGHBOR = 5 OTHER = 6 + UNKNOWN_8 = 8 NOTUSED = 0xFF diff --git a/zigpy_znp/tools/common.py b/zigpy_znp/tools/common.py index dd13d1be..33682548 100644 --- a/zigpy_znp/tools/common.py +++ b/zigpy_znp/tools/common.py @@ -177,7 +177,7 @@ class ClosableFileType(argparse.FileType): def __call__(self, string): f = super().__call__(string) - if f not in (sys.stdin, sys.stdout): + if f not in (sys.stdin, sys.stdout, sys.stdin.buffer, sys.stdout.buffer): return f return UnclosableFile(f) diff --git a/zigpy_znp/types/basic.py b/zigpy_znp/types/basic.py index 112469bf..7580a196 100644 --- a/zigpy_znp/types/basic.py +++ b/zigpy_znp/types/basic.py @@ -3,6 +3,8 @@ import enum import typing +import zigpy.types as zigpy_t + from zigpy_znp.types.cstruct import CStruct @@ -264,30 +266,6 @@ def deserialize(cls, data: bytes, *, align=False) -> tuple[CompleteList, bytes]: return r, data -def enum_flag_factory(int_type: FixedIntType) -> enum.Flag: - """ - Mixins are broken by Python 3.8.6 so we must dynamically create the enum with the - appropriate methods but with only one non-Enum parent class. - """ - - class _NewEnum(int_type, enum.Flag): # type:ignore[misc,valid-type] - # Rebind classmethods to our own class - _missing_ = classmethod(enum.IntFlag._missing_.__func__) - _create_pseudo_member_ = classmethod( - enum.IntFlag._create_pseudo_member_.__func__ - ) - - __or__ = enum.IntFlag.__or__ - __and__ = enum.IntFlag.__and__ - __xor__ = enum.IntFlag.__xor__ - __ror__ = enum.IntFlag.__ror__ - __rand__ = enum.IntFlag.__rand__ - __rxor__ = enum.IntFlag.__rxor__ - __invert__ = enum.IntFlag.__invert__ - - return _NewEnum # type:ignore[return-value] - - class enum_uint8(uint8_t, enum.Enum): pass @@ -320,33 +298,33 @@ class enum_uint64(uint64_t, enum.Enum): pass -class enum_flag_uint8(enum_flag_factory(uint8_t)): # type:ignore[misc] +class enum_flag_uint8(zigpy_t.bitmap_factory(uint8_t)): # type:ignore[misc] pass -class enum_flag_uint16(enum_flag_factory(uint16_t)): # type:ignore[misc] +class enum_flag_uint16(zigpy_t.bitmap_factory(uint16_t)): # type:ignore[misc] pass -class enum_flag_uint24(enum_flag_factory(uint24_t)): # type:ignore[misc] +class enum_flag_uint24(zigpy_t.bitmap_factory(uint24_t)): # type:ignore[misc] pass -class enum_flag_uint32(enum_flag_factory(uint32_t)): # type:ignore[misc] +class enum_flag_uint32(zigpy_t.bitmap_factory(uint32_t)): # type:ignore[misc] pass -class enum_flag_uint40(enum_flag_factory(uint40_t)): # type:ignore[misc] +class enum_flag_uint40(zigpy_t.bitmap_factory(uint40_t)): # type:ignore[misc] pass -class enum_flag_uint48(enum_flag_factory(uint48_t)): # type:ignore[misc] +class enum_flag_uint48(zigpy_t.bitmap_factory(uint48_t)): # type:ignore[misc] pass -class enum_flag_uint56(enum_flag_factory(uint56_t)): # type:ignore[misc] +class enum_flag_uint56(zigpy_t.bitmap_factory(uint56_t)): # type:ignore[misc] pass -class enum_flag_uint64(enum_flag_factory(uint64_t)): # type:ignore[misc] +class enum_flag_uint64(zigpy_t.bitmap_factory(uint64_t)): # type:ignore[misc] pass