diff --git a/space_packet_parser/common.py b/space_packet_parser/common.py index 975fcad..d6f95c3 100644 --- a/space_packet_parser/common.py +++ b/space_packet_parser/common.py @@ -1,5 +1,7 @@ """Common mixins""" +from __future__ import annotations + import inspect import logging import warnings @@ -154,7 +156,7 @@ def from_xml( parameter_lookup: dict[str, any] | None, parameter_type_lookup: dict[str, any] | None, container_lookup: dict[str, any] | None, - ) -> "XmlObject": + ) -> XmlObject: """Create an object from an XML element Notes @@ -202,7 +204,7 @@ def to_xml(self, *, elmaker: ElementMaker) -> ElementTree.Element: class Parseable(Protocol): """Defines an object that can be parsed from packet data.""" - def parse(self, packet: "SpacePacket") -> None: + def parse(self, packet: SpacePacket) -> None: """Parse this entry from the packet data and add the necessary items to the packet.""" diff --git a/space_packet_parser/xtce/calibrators.py b/space_packet_parser/xtce/calibrators.py index 84709ae..a880de4 100644 --- a/space_packet_parser/xtce/calibrators.py +++ b/space_packet_parser/xtce/calibrators.py @@ -1,5 +1,7 @@ """Calibrator definitions""" +from __future__ import annotations + from abc import ABCMeta, abstractmethod from collections import namedtuple @@ -23,7 +25,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "Calibrator": + ) -> Calibrator: """Abstract classmethod to create a default_calibrator object from an XML element. Parameters @@ -100,7 +102,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "SplineCalibrator": + ) -> SplineCalibrator: """Create a spline default_calibrator object from an XML element. Parameters @@ -270,7 +272,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "PolynomialCalibrator": + ) -> PolynomialCalibrator: """Create a polynomial default_calibrator object from an XML element. Parameters @@ -352,7 +354,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "MathOperationCalibrator": + ) -> MathOperationCalibrator: """Create a math operation default_calibrator from an XML element. Parameters @@ -456,7 +458,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "ContextCalibrator": + ) -> ContextCalibrator: """Create a ContextCalibrator object from an XML element Parameters diff --git a/space_packet_parser/xtce/comparisons.py b/space_packet_parser/xtce/comparisons.py index 4f7152c..99fef94 100644 --- a/space_packet_parser/xtce/comparisons.py +++ b/space_packet_parser/xtce/comparisons.py @@ -1,5 +1,7 @@ """Matching logical objects""" +from __future__ import annotations + from abc import ABCMeta, abstractmethod from collections import namedtuple from typing import Any @@ -111,7 +113,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "Comparison": + ) -> Comparison: """Create Parameters @@ -301,7 +303,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "Condition": + ) -> Condition: """Classmethod to create a Condition object from an XML element. Parameters @@ -448,7 +450,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "BooleanExpression": + ) -> BooleanExpression: """Abstract classmethod to create a match criteria object from an XML element. Parameters @@ -615,7 +617,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "DiscreteLookup": + ) -> DiscreteLookup: """Create a DiscreteLookup object from an XML element Parameters diff --git a/space_packet_parser/xtce/encodings.py b/space_packet_parser/xtce/encodings.py index 19a5d04..50b3504 100644 --- a/space_packet_parser/xtce/encodings.py +++ b/space_packet_parser/xtce/encodings.py @@ -1,5 +1,7 @@ """DataEncoding definitions""" +from __future__ import annotations + import logging import struct import warnings @@ -378,7 +380,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "StringDataEncoding": + ) -> StringDataEncoding: """Create a data encoding object from an XML element. Notes @@ -724,7 +726,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "IntegerDataEncoding": + ) -> IntegerDataEncoding: """Create a data encoding object from an XML element. Parameters @@ -891,7 +893,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "FloatDataEncoding": + ) -> FloatDataEncoding: """Create a data encoding object from an XML element. Parameters @@ -1029,7 +1031,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "BinaryDataEncoding": + ) -> BinaryDataEncoding: """Create a data encoding object from an XML element. Parameters diff --git a/space_packet_parser/xtce/parameter_types.py b/space_packet_parser/xtce/parameter_types.py index 4f0c793..15ba3ac 100644 --- a/space_packet_parser/xtce/parameter_types.py +++ b/space_packet_parser/xtce/parameter_types.py @@ -1,5 +1,7 @@ """Parameter type objects""" +from __future__ import annotations + import warnings from abc import ABCMeta @@ -48,7 +50,7 @@ def from_xml( parameter_lookup: dict | None = None, parameter_type_lookup: dict | None = None, container_lookup: dict[str, any] | None = None, - ) -> "ParameterType": + ) -> ParameterType: """Create a *ParameterType* from an XML element. Parameters @@ -241,7 +243,7 @@ def from_xml( parameter_lookup: dict[str, any] | None = None, parameter_type_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "EnumeratedParameterType": + ) -> EnumeratedParameterType: """Create an EnumeratedParameterType from an XML element. Overrides ParameterType.from_parameter_type_xml_element diff --git a/space_packet_parser/xtce/parameters.py b/space_packet_parser/xtce/parameters.py index a4bbe88..da1fbe4 100644 --- a/space_packet_parser/xtce/parameters.py +++ b/space_packet_parser/xtce/parameters.py @@ -1,5 +1,7 @@ """ParameterType definitions""" +from __future__ import annotations + from dataclasses import dataclass import lxml.etree as ElementTree @@ -47,7 +49,7 @@ def from_xml( tree: ElementTree.ElementTree | None = None, parameter_lookup: dict[str, any] | None = None, container_lookup: dict[str, any] | None = None, - ) -> "Parameter": + ) -> Parameter: """Create a Parameter object from an XML element. Parameters diff --git a/space_packet_parser/xtce/validation.py b/space_packet_parser/xtce/validation.py index f8ef402..8d778f0 100644 --- a/space_packet_parser/xtce/validation.py +++ b/space_packet_parser/xtce/validation.py @@ -1,5 +1,7 @@ """XTCE document validation classes and utilities.""" +from __future__ import annotations + import hashlib import logging import os @@ -534,7 +536,11 @@ def validate_xtce( # Parse XML document into a tree object try: - if isinstance(xml_source, ElementTree.ElementTree): + # In lxml >= 5.2.1 (Cython 3.0), ElementTree.ElementTree is a Cython function + # rather than a class, which makes isinstance() fail with a TypeError. + # ElementTree._ElementTree is the actual underlying class and is available in all + # supported lxml versions. + if isinstance(xml_source, ElementTree._ElementTree): xml_tree = xml_source elif isinstance(xml_source, Path): xml_tree = ElementTree.parse(str(xml_source))