Since we support python 3.8 and higher, there is no need for backwards support for most of the features we use in the standard typing library.
import argparse
import sys
from enum import Enum
-from typing import List, Optional, Tuple, Type
-
-from typing_extensions import Literal
+from typing import List, Literal, Optional, Tuple, Type
from knot_resolver.client.command import Command, CommandArgs, CompWords, register_command
from knot_resolver.utils.modeling.parsing import DataFormat, parse_json, try_to_parse
import logging
import os
+from typing import Literal
from dataclasses import dataclass
from pathlib import Path
from jinja2 import Template
-from typing_extensions import Literal
from knot_resolver.constants import (
kres_cache_gc_executable,
import os
import sys
import traceback
-from typing import Any
+from typing import Any, Literal
from supervisor.dispatchers import POutputDispatcher
from supervisor.loggers import LevelsByName, StreamHandler, SyslogHandler
from supervisor.supervisord import Supervisor
-from typing_extensions import Literal
FORWARD_LOG_LEVEL = LevelsByName.CRIT # to make sure it's always printed
-from typing import List, Optional, Union
-
-from typing_extensions import Literal
+from typing import List, Literal, Optional, Union
from knot_resolver.datamodel.templates import template_from_str
from knot_resolver.datamodel.types import (
import logging
import os
import socket
-from typing import Any, Dict, List, Optional, Tuple, Union
-
-from typing_extensions import Literal
+from typing import Any, Dict, List, Literal, Optional, Tuple, Union
from knot_resolver.constants import RUN_DIR_DEFAULT, API_SOCK_PATH_DEFAULT, WORKERS_MAX_DEFAULT
-from typing import Any, List, Optional, Union
-
-from typing_extensions import Literal
+from typing import Any, List, Literal, Optional, Union
from knot_resolver.datamodel.types import (
DomainName,
-from typing import Dict, List, Optional
-
-from typing_extensions import Literal
+from typing import Dict, List, Literal, Optional
from knot_resolver.datamodel.types import (
DomainName,
import os
-from typing import Any, List, Optional, Set, Type, Union, cast
-
-from typing_extensions import Literal
+from typing import Any, List, Literal, Optional, Set, Type, Union, cast
from knot_resolver.datamodel.types import TimeUnit, WritableFilePath
from knot_resolver.utils.modeling import ConfigSchema
from knot_resolver.utils.modeling.base_schema import is_obj_type_valid
-try:
- # On Debian 10, the typing_extensions library does not contain TypeAlias.
- # We don't strictly need the import for anything except for type checking,
- # so this try-except makes sure it works either way.
- from typing_extensions import TypeAlias # pylint: disable=ungrouped-imports
-except ImportError:
- TypeAlias = None # type: ignore
-
-
LogLevelEnum = Literal["crit", "err", "warning", "notice", "info", "debug"]
LogTargetEnum = Literal["syslog", "stderr", "stdout"]
-LogGroupsEnum: TypeAlias = Literal[
+LogGroupsEnum = Literal[
"manager",
"supervisord",
"cache-gc",
-from typing import Union
-
-from typing_extensions import Literal
+from typing import Literal, Union
from knot_resolver.datamodel.types import DomainName, EscapedStr, IPAddress, PortNumber, TimeUnit
from knot_resolver.utils.modeling import ConfigSchema
-from typing import List, Optional, Union
-
-from typing_extensions import Literal
+from typing import List, Literal, Optional, Union
from knot_resolver.datamodel.types import (
EscapedStr32B,
-from typing_extensions import Literal
+from typing import Literal
from knot_resolver.utils.modeling import ConfigSchema
-from typing import List, Optional
-
-from typing_extensions import Literal
+from typing import List, Literal, Optional
from knot_resolver.datamodel.policy_schema import ActionSchema
from knot_resolver.utils.modeling import ConfigSchema
-from typing_extensions import Literal
+from typing import Literal
# Policy actions
PolicyActionEnum = Literal[
-from typing import List, Optional
-
-from typing_extensions import Literal
+from typing import List, Literal, Optional
from knot_resolver.datamodel.types import IDPattern, IPNetwork
from knot_resolver.utils.modeling import ConfigSchema
from http import HTTPStatus
from pathlib import Path
from time import time
-from typing import Any, Dict, List, Optional, Set, Union, cast
+from typing import Any, Dict, List, Literal, Optional, Set, Union, cast
from aiohttp import web
from aiohttp.web import middleware
from aiohttp.web_app import Application
from aiohttp.web_response import json_response
from aiohttp.web_runner import AppRunner, TCPSite, UnixSite
-from typing_extensions import Literal
import knot_resolver.utils.custom_atexit as atexit
from knot_resolver import KresBaseException
import copy
from abc import ABC, abstractmethod # pylint: disable=[no-name-in-module]
-from typing import Any, List, Optional, Tuple, Union
+from typing import Any, List, Literal, Optional, Tuple, Union
-from typing_extensions import Literal
from knot_resolver.utils.modeling.base_schema import BaseSchema, map_object
from knot_resolver.utils.modeling.json_pointer import json_ptr_resolve
import enum
import inspect
import sys
-from typing import Any, Dict, List, Optional, Tuple, Type, TypeVar, Union
-
-from typing_extensions import Literal
+from typing import Any, Dict, List, Literal, Optional, Tuple, Type, TypeVar, Union
from .base_generic_type_wrapper import BaseGenericTypeWrapper
import socket
import sys
from http.client import HTTPConnection
-from typing import Any, Optional, Union
+from typing import Any, Literal, Optional, Union
from urllib.error import HTTPError, URLError
from urllib.parse import quote, unquote, urlparse
from urllib.request import AbstractHTTPHandler, Request, build_opener, install_opener, urlopen
-from typing_extensions import Literal
-
class SocketDesc:
def __init__(self, socket_def: str, source: str):
-from typing import Any, Dict, List, Optional, Tuple, Type, Union
+from typing import Any, Dict, List, Literal, Optional, Tuple, Type, Union
import pytest
from pytest import raises
-from typing_extensions import Literal
from knot_resolver.utils.modeling import ConfigSchema, parse_json, parse_yaml
from knot_resolver.utils.modeling.exceptions import DataDescriptionError, DataValidationError
-from typing import Any, Dict, List, Tuple, Union
+from typing import Any, Dict, List, Literal, Tuple, Union
import pytest
-from typing_extensions import Literal
from knot_resolver.utils.modeling import BaseSchema
from knot_resolver.utils.modeling.types import is_list, is_literal