diff --git a/mypy.ini b/mypy.ini index 5de83593..8d7ecd55 100644 --- a/mypy.ini +++ b/mypy.ini @@ -9,7 +9,3 @@ exclude = (?x)( ) show_error_codes = True pretty = True - -# suppress error on conditional import of typing_extensions module -[mypy-optimizely.helpers.types] -no_warn_unused_ignores = True diff --git a/optimizely/bucketer.py b/optimizely/bucketer.py index d1e0b047..e21fb865 100644 --- a/optimizely/bucketer.py +++ b/optimizely/bucketer.py @@ -12,19 +12,12 @@ # limitations under the License. from __future__ import annotations -from typing import Optional, TYPE_CHECKING, cast +from typing import Optional, TYPE_CHECKING, cast, Final import math -from sys import version_info from .lib import pymmh3 as mmh3 -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final - - if TYPE_CHECKING: # prevent circular dependenacy by skipping import at runtime from .project_config import ProjectConfig diff --git a/optimizely/decision/optimizely_decide_option.py b/optimizely/decision/optimizely_decide_option.py index 0443ddef..7e5e4350 100644 --- a/optimizely/decision/optimizely_decide_option.py +++ b/optimizely/decision/optimizely_decide_option.py @@ -11,12 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from sys import version_info - -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final +from typing import Final class OptimizelyDecideOption: diff --git a/optimizely/decision/optimizely_decision_message.py b/optimizely/decision/optimizely_decision_message.py index c6178322..27112d8f 100644 --- a/optimizely/decision/optimizely_decision_message.py +++ b/optimizely/decision/optimizely_decision_message.py @@ -11,12 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from sys import version_info - -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final +from typing import Final class OptimizelyDecisionMessage: diff --git a/optimizely/entities.py b/optimizely/entities.py index 39caafe6..b928141c 100644 --- a/optimizely/entities.py +++ b/optimizely/entities.py @@ -11,13 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. from __future__ import annotations -from typing import TYPE_CHECKING, Any, Optional, Sequence -from sys import version_info - -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final +from typing import TYPE_CHECKING, Any, Optional, Sequence, Final if TYPE_CHECKING: diff --git a/optimizely/event/event_factory.py b/optimizely/event/event_factory.py index b6a9c02a..34bc04e2 100644 --- a/optimizely/event/event_factory.py +++ b/optimizely/event/event_factory.py @@ -12,8 +12,7 @@ # limitations under the License. from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Sequence, cast, List -from sys import version_info +from typing import TYPE_CHECKING, Optional, Sequence, cast, List, Final from optimizely import entities from optimizely.helpers import enums from optimizely.helpers import event_tag_utils @@ -23,11 +22,6 @@ from . import payload from . import user_event -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final - if TYPE_CHECKING: # prevent circular dependenacy by skipping import at runtime from optimizely.project_config import ProjectConfig diff --git a/optimizely/event/event_processor.py b/optimizely/event/event_processor.py index bdce6d9d..0d0211d0 100644 --- a/optimizely/event/event_processor.py +++ b/optimizely/event/event_processor.py @@ -17,10 +17,9 @@ import threading import time -from typing import Optional +from typing import Optional, Final from datetime import timedelta import queue -from sys import version_info from optimizely import logger as _logging from optimizely import notification_center as _notification_center @@ -31,12 +30,6 @@ from .user_event import UserEvent -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final - - class BaseEventProcessor(ABC): """ Class encapsulating event processing. Override with your own implementation. """ diff --git a/optimizely/event/log_event.py b/optimizely/event/log_event.py index 49c344dd..568c2cef 100644 --- a/optimizely/event/log_event.py +++ b/optimizely/event/log_event.py @@ -12,17 +12,10 @@ # limitations under the License. from __future__ import annotations -from typing import Optional, Any -from sys import version_info +from typing import Optional, Any, Literal from optimizely import event_builder -if version_info < (3, 8): - from typing_extensions import Literal -else: - from typing import Literal - - class LogEvent(event_builder.Event): """ Representation of an event which can be sent to Optimizely events API. """ diff --git a/optimizely/event/user_event.py b/optimizely/event/user_event.py index 8006c052..a2cb2df7 100644 --- a/optimizely/event/user_event.py +++ b/optimizely/event/user_event.py @@ -13,18 +13,11 @@ from __future__ import annotations import time import uuid -from typing import TYPE_CHECKING, Optional -from sys import version_info +from typing import TYPE_CHECKING, Optional, Final from optimizely import version -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final - - if TYPE_CHECKING: # prevent circular dependenacy by skipping import at runtime from optimizely.entities import Experiment, Variation, Event, Holdout diff --git a/optimizely/event_builder.py b/optimizely/event_builder.py index 7ef6b347..67169d2a 100644 --- a/optimizely/event_builder.py +++ b/optimizely/event_builder.py @@ -13,9 +13,8 @@ from __future__ import annotations import time -from typing import TYPE_CHECKING, Any, Optional +from typing import TYPE_CHECKING, Any, Optional, Final, Literal import uuid -from sys import version_info from . import version from .event import event_id_normalizer @@ -23,11 +22,6 @@ from .helpers import event_tag_utils from .helpers import validator -if version_info < (3, 8): - from typing_extensions import Final, Literal -else: - from typing import Final, Literal - if TYPE_CHECKING: # prevent circular dependenacy by skipping import at runtime from .entities import Experiment diff --git a/optimizely/event_dispatcher.py b/optimizely/event_dispatcher.py index b06b9e18..cf468340 100644 --- a/optimizely/event_dispatcher.py +++ b/optimizely/event_dispatcher.py @@ -13,7 +13,7 @@ import json import logging -from sys import version_info +from typing import Protocol import requests from requests import exceptions as request_exception @@ -23,11 +23,6 @@ from . import event_builder from .helpers.enums import HTTPVerbs, EventDispatchConfig -if version_info < (3, 8): - from typing_extensions import Protocol -else: - from typing import Protocol - class CustomEventDispatcher(Protocol): """Interface for a custom event dispatcher and required method `dispatch_event`. """ diff --git a/optimizely/helpers/condition.py b/optimizely/helpers/condition.py index 40338b40..48f097d9 100644 --- a/optimizely/helpers/condition.py +++ b/optimizely/helpers/condition.py @@ -14,8 +14,7 @@ from __future__ import annotations import json import numbers -from typing import TYPE_CHECKING, Any, Callable, Optional -from sys import version_info +from typing import TYPE_CHECKING, Any, Callable, Optional, Literal, Final from . import validator from optimizely import optimizely_user_context @@ -29,12 +28,6 @@ from optimizely.logger import Logger -if version_info < (3, 8): - from typing_extensions import Literal, Final -else: - from typing import Literal, Final - - class ConditionOperatorTypes: AND: Final = 'and' OR: Final = 'or' diff --git a/optimizely/helpers/enums.py b/optimizely/helpers/enums.py index 2d1d4676..0e4eb316 100644 --- a/optimizely/helpers/enums.py +++ b/optimizely/helpers/enums.py @@ -12,12 +12,7 @@ # limitations under the License. import logging -from sys import version_info - -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final +from typing import Final class CommonAudienceEvaluationLogs: diff --git a/optimizely/helpers/event_tag_utils.py b/optimizely/helpers/event_tag_utils.py index ad90cc13..61825950 100644 --- a/optimizely/helpers/event_tag_utils.py +++ b/optimizely/helpers/event_tag_utils.py @@ -12,16 +12,10 @@ # limitations under the License. from __future__ import annotations -from typing import TYPE_CHECKING, Any, Optional, NewType, Dict +from typing import TYPE_CHECKING, Any, Optional, NewType, Dict, Final from . import enums import math import numbers -from sys import version_info - -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final if TYPE_CHECKING: diff --git a/optimizely/helpers/types.py b/optimizely/helpers/types.py index 7b65ab13..2d8ba7d4 100644 --- a/optimizely/helpers/types.py +++ b/optimizely/helpers/types.py @@ -12,14 +12,7 @@ # limitations under the License. from __future__ import annotations -from typing import Literal, Optional, Any -from sys import version_info - - -if version_info < (3, 8): - from typing_extensions import TypedDict -else: - from typing import TypedDict # type: ignore +from typing import Literal, Optional, Any, TypedDict # Intermediate types for type checking deserialized datafile json before actual class instantiation. diff --git a/optimizely/logger.py b/optimizely/logger.py index 42f879de..c50b3694 100644 --- a/optimizely/logger.py +++ b/optimizely/logger.py @@ -11,17 +11,11 @@ # See the License for the specific language governing permissions and # limitations under the License. import logging -from typing import Any, Optional, Union +from typing import Any, Optional, Union, Final import warnings -from sys import version_info from .helpers import enums -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final - _DEFAULT_LOG_FORMAT: Final = '%(levelname)-8s %(asctime)s %(filename)s:%(lineno)s:%(message)s' diff --git a/optimizely/notification_center.py b/optimizely/notification_center.py index 3d0b0cba..b6b89ffd 100644 --- a/optimizely/notification_center.py +++ b/optimizely/notification_center.py @@ -12,15 +12,9 @@ # limitations under the License. from __future__ import annotations -from typing import Any, Callable, Optional +from typing import Any, Callable, Optional, Final from .helpers import enums from . import logger as optimizely_logger -from sys import version_info - -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final NOTIFICATION_TYPES: Final = tuple( diff --git a/optimizely/odp/lru_cache.py b/optimizely/odp/lru_cache.py index 64337dad..55d62a94 100644 --- a/optimizely/odp/lru_cache.py +++ b/optimizely/odp/lru_cache.py @@ -16,13 +16,7 @@ import threading from time import time from collections import OrderedDict -from typing import Optional, Generic, TypeVar, Hashable -from sys import version_info - -if version_info < (3, 8): - from typing_extensions import Protocol -else: - from typing import Protocol +from typing import Optional, Generic, TypeVar, Hashable, Protocol # generic type definitions for LRUCache parameters K = TypeVar('K', bound=Hashable, contravariant=True) diff --git a/optimizely/odp/optimizely_odp_option.py b/optimizely/odp/optimizely_odp_option.py index 94e1e90e..62163fd7 100644 --- a/optimizely/odp/optimizely_odp_option.py +++ b/optimizely/odp/optimizely_odp_option.py @@ -11,12 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from sys import version_info - -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final +from typing import Final class OptimizelyOdpOption: diff --git a/optimizely/project_config.py b/optimizely/project_config.py index a7152ae8..3cbf730e 100644 --- a/optimizely/project_config.py +++ b/optimizely/project_config.py @@ -12,8 +12,7 @@ # limitations under the License. from __future__ import annotations import json -from typing import TYPE_CHECKING, Optional, Type, TypeVar, Union, cast, Any, Iterable, List -from sys import version_info +from typing import TYPE_CHECKING, Optional, Type, TypeVar, Union, cast, Any, Iterable, List, Final from . import entities from . import exceptions @@ -21,11 +20,6 @@ from .helpers import enums from .helpers import types -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final - if TYPE_CHECKING: # prevent circular dependenacy by skipping import at runtime from .logger import Logger diff --git a/optimizely/user_profile.py b/optimizely/user_profile.py index e3a56195..591df5ea 100644 --- a/optimizely/user_profile.py +++ b/optimizely/user_profile.py @@ -12,19 +12,13 @@ # limitations under the License. from __future__ import annotations -from typing import Any, Optional -from sys import version_info +from typing import Any, Optional, Final, TYPE_CHECKING from . import logger as _logging -if version_info < (3, 8): - from typing_extensions import Final -else: - from typing import Final, TYPE_CHECKING - - if TYPE_CHECKING: - # prevent circular dependenacy by skipping import at runtime - from .entities import Experiment, Variation - from optimizely.error_handler import BaseErrorHandler +if TYPE_CHECKING: + # prevent circular dependenacy by skipping import at runtime + from .entities import Experiment, Variation + from optimizely.error_handler import BaseErrorHandler class UserProfile: