diff --git a/examples/five_by_five.py b/examples/five_by_five.py index a29cfcbafd..8b85a127db 100644 --- a/examples/five_by_five.py +++ b/examples/five_by_five.py @@ -15,7 +15,7 @@ from textual.widgets import Button, Footer, Label, Markdown if TYPE_CHECKING: - from typing_extensions import Final + from typing import Final class Help(Screen): diff --git a/src/textual/_animator.py b/src/textual/_animator.py index 6d13c288c2..c510a08331 100644 --- a/src/textual/_animator.py +++ b/src/textual/_animator.py @@ -4,9 +4,7 @@ from abc import ABC, abstractmethod from dataclasses import dataclass from functools import partial -from typing import TYPE_CHECKING, Any, Callable, TypeVar - -from typing_extensions import Protocol, runtime_checkable +from typing import TYPE_CHECKING, Any, Callable, Protocol, TypeVar, runtime_checkable from textual import _time from textual._callback import invoke diff --git a/src/textual/_ansi_sequences.py b/src/textual/_ansi_sequences.py index 04a58f4f6f..90cf4d075f 100644 --- a/src/textual/_ansi_sequences.py +++ b/src/textual/_ansi_sequences.py @@ -1,8 +1,6 @@ from __future__ import annotations -from typing import Mapping, Tuple - -from typing_extensions import Final +from typing import Final, Mapping, Tuple from textual.keys import Keys diff --git a/src/textual/_layout_resolve.py b/src/textual/_layout_resolve.py index 902e8476cb..1dc9b127ed 100644 --- a/src/textual/_layout_resolve.py +++ b/src/textual/_layout_resolve.py @@ -1,9 +1,7 @@ from __future__ import annotations from fractions import Fraction -from typing import Sequence, cast - -from typing_extensions import Protocol +from typing import Protocol, Sequence, cast class EdgeProtocol(Protocol): diff --git a/src/textual/_resolve.py b/src/textual/_resolve.py index 5f7e85ca81..8dd5735979 100644 --- a/src/textual/_resolve.py +++ b/src/textual/_resolve.py @@ -2,9 +2,7 @@ from fractions import Fraction from itertools import accumulate -from typing import TYPE_CHECKING, Iterable, Sequence, cast - -from typing_extensions import Literal +from typing import TYPE_CHECKING, Iterable, Literal, Sequence, cast from textual.box_model import BoxModel from textual.css.scalar import Scalar diff --git a/src/textual/_slug.py b/src/textual/_slug.py index 8d23ca4dab..88ab9c88ab 100644 --- a/src/textual/_slug.py +++ b/src/textual/_slug.py @@ -19,11 +19,9 @@ from collections import defaultdict from re import compile from string import punctuation -from typing import Pattern +from typing import Final, Pattern from urllib.parse import quote -from typing_extensions import Final - WHITESPACE_REPLACEMENT: Final[str] = "-" """The character to replace undesirable characters with.""" diff --git a/src/textual/_types.py b/src/textual/_types.py index f37bae70c4..95f9a8259e 100644 --- a/src/textual/_types.py +++ b/src/textual/_types.py @@ -1,6 +1,13 @@ -from typing import TYPE_CHECKING, Any, Awaitable, Callable, List, Literal, Union - -from typing_extensions import Protocol +from typing import ( + TYPE_CHECKING, + Any, + Awaitable, + Callable, + List, + Literal, + Protocol, + Union, +) if TYPE_CHECKING: from rich.segment import Segment diff --git a/src/textual/_xterm_parser.py b/src/textual/_xterm_parser.py index 3936290d21..28438116c3 100644 --- a/src/textual/_xterm_parser.py +++ b/src/textual/_xterm_parser.py @@ -2,9 +2,7 @@ import os import re -from typing import Any, Generator, Iterable - -from typing_extensions import Final +from typing import Any, Final, Generator, Iterable from textual import constants, events, messages from textual._ansi_sequences import ANSI_SEQUENCES_KEYS, IGNORE_SEQUENCE diff --git a/src/textual/app.py b/src/textual/app.py index 6861012863..b125d40613 100644 --- a/src/textual/app.py +++ b/src/textual/app.py @@ -131,8 +131,10 @@ from textual.worker_manager import WorkerManager if TYPE_CHECKING: + from typing import Coroutine, Literal + from textual_dev.client import DevtoolsClient - from typing_extensions import Coroutine, Literal, Self, TypeAlias + from typing_extensions import Self, TypeAlias from textual._types import MessageTarget diff --git a/src/textual/canvas.py b/src/textual/canvas.py index d783e1d1b2..853ae24865 100644 --- a/src/textual/canvas.py +++ b/src/textual/canvas.py @@ -13,11 +13,11 @@ from collections import defaultdict from dataclasses import dataclass from operator import itemgetter -from typing import NamedTuple, Sequence +from typing import Literal, NamedTuple, Sequence from rich.segment import Segment from rich.style import Style -from typing_extensions import Literal, TypeAlias +from typing_extensions import TypeAlias from textual._box_drawing import BOX_CHARACTERS, Quad, combine_quads from textual.color import Color diff --git a/src/textual/color.py b/src/textual/color.py index fe73b06943..278a4ea4ed 100644 --- a/src/textual/color.py +++ b/src/textual/color.py @@ -34,14 +34,13 @@ from colorsys import hls_to_rgb, rgb_to_hls from functools import lru_cache from operator import itemgetter -from typing import Callable, NamedTuple +from typing import Callable, Final, NamedTuple import rich.repr from rich.color import Color as RichColor from rich.color import ColorType from rich.color_triplet import ColorTriplet from rich.terminal_theme import TerminalTheme -from typing_extensions import Final from textual._color_constants import ANSI_COLORS, COLOR_NAME_TO_RGB from textual.css.scalar import percentage_string_to_float diff --git a/src/textual/command.py b/src/textual/command.py index 0d74f1993f..80d32c831a 100644 --- a/src/textual/command.py +++ b/src/textual/command.py @@ -29,6 +29,7 @@ AsyncIterator, Callable, ClassVar, + Final, Iterable, NamedTuple, ) @@ -36,7 +37,7 @@ import rich.repr from rich.align import Align from rich.text import Text -from typing_extensions import Final, TypeAlias +from typing_extensions import TypeAlias from textual import on, work from textual.binding import Binding, BindingType diff --git a/src/textual/constants.py b/src/textual/constants.py index feedbea6e9..55f6ffcba8 100644 --- a/src/textual/constants.py +++ b/src/textual/constants.py @@ -5,9 +5,9 @@ from __future__ import annotations import os -from typing import get_args +from typing import Final, get_args -from typing_extensions import Final, TypeGuard +from typing_extensions import TypeGuard from textual._types import AnimationLevel diff --git a/src/textual/content.py b/src/textual/content.py index 20d9480562..d7cff7aff9 100644 --- a/src/textual/content.py +++ b/src/textual/content.py @@ -12,7 +12,7 @@ import re from functools import cached_property, total_ordering from operator import itemgetter -from typing import Callable, Iterable, NamedTuple, Sequence, Union +from typing import Callable, Final, Iterable, NamedTuple, Sequence, Union import rich.repr from rich._wrap import divide_line @@ -22,7 +22,7 @@ from rich.style import Style as RichStyle from rich.terminal_theme import TerminalTheme from rich.text import Text -from typing_extensions import Final, TypeAlias +from typing_extensions import TypeAlias from textual._cells import cell_len from textual._context import active_app diff --git a/src/textual/css/_help_text.py b/src/textual/css/_help_text.py index 2e925e0de6..4936c01ab7 100644 --- a/src/textual/css/_help_text.py +++ b/src/textual/css/_help_text.py @@ -1,9 +1,7 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Iterable, Sequence - -from typing_extensions import Literal +from typing import Iterable, Literal, Sequence from textual.color import ColorParseError from textual.css._error_tools import friendly_list diff --git a/src/textual/css/constants.py b/src/textual/css/constants.py index e2cd109dcd..1fef4d6247 100644 --- a/src/textual/css/constants.py +++ b/src/textual/css/constants.py @@ -3,7 +3,7 @@ import typing if typing.TYPE_CHECKING: - from typing_extensions import Final + from typing import Final VALID_VISIBILITY: Final = {"visible", "hidden"} VALID_DISPLAY: Final = {"block", "none"} diff --git a/src/textual/css/types.py b/src/textual/css/types.py index 9fda239590..b6e57d26f8 100644 --- a/src/textual/css/types.py +++ b/src/textual/css/types.py @@ -1,8 +1,6 @@ from __future__ import annotations -from typing import Tuple - -from typing_extensions import Literal +from typing import Literal, Tuple from textual.color import Color diff --git a/src/textual/document/_document.py b/src/textual/document/_document.py index 47e87eb09b..060e93c0b4 100644 --- a/src/textual/document/_document.py +++ b/src/textual/document/_document.py @@ -3,9 +3,7 @@ from abc import ABC, abstractmethod from dataclasses import dataclass from functools import lru_cache -from typing import TYPE_CHECKING, NamedTuple, Tuple, overload - -from typing_extensions import Literal, get_args +from typing import TYPE_CHECKING, Literal, NamedTuple, Tuple, get_args, overload if TYPE_CHECKING: from tree_sitter import Node, Query diff --git a/src/textual/dom.py b/src/textual/dom.py index 00b5595c65..43d4a23fcc 100644 --- a/src/textual/dom.py +++ b/src/textual/dom.py @@ -68,7 +68,7 @@ # Unused & ignored imports are needed for the docs to link to these objects: from textual.css.query import WrongType # type: ignore # noqa: F401 -from typing_extensions import Literal +from typing import Literal _re_identifier = re.compile(IDENTIFIER) diff --git a/src/textual/drivers/_writer_thread.py b/src/textual/drivers/_writer_thread.py index a26ef46fbb..4f8ff09070 100644 --- a/src/textual/drivers/_writer_thread.py +++ b/src/textual/drivers/_writer_thread.py @@ -2,9 +2,7 @@ import threading from queue import Queue -from typing import IO - -from typing_extensions import Final +from typing import IO, Final MAX_QUEUED_WRITES: Final[int] = 30 diff --git a/src/textual/features.py b/src/textual/features.py index 9799363cd2..7c9b2daa2f 100644 --- a/src/textual/features.py +++ b/src/textual/features.py @@ -1,11 +1,9 @@ from __future__ import annotations -from typing import TYPE_CHECKING, cast - -from typing_extensions import Literal +from typing import TYPE_CHECKING, Literal, cast if TYPE_CHECKING: - from typing_extensions import Final + from typing import Final FEATURES: Final = {"devtools", "debug", "headless"} diff --git a/src/textual/geometry.py b/src/textual/geometry.py index 9847052fa8..ee80276f3d 100644 --- a/src/textual/geometry.py +++ b/src/textual/geometry.py @@ -11,6 +11,7 @@ TYPE_CHECKING, Any, Collection, + Final, Literal, NamedTuple, Tuple, @@ -19,8 +20,6 @@ cast, ) -from typing_extensions import Final - if TYPE_CHECKING: from typing_extensions import TypeAlias diff --git a/src/textual/notifications.py b/src/textual/notifications.py index d721590071..29506c4884 100644 --- a/src/textual/notifications.py +++ b/src/textual/notifications.py @@ -4,11 +4,11 @@ from dataclasses import dataclass, field from time import time -from typing import Iterator +from typing import Iterator, Literal from uuid import uuid4 from rich.repr import Result -from typing_extensions import Literal, Self, TypeAlias +from typing_extensions import Self, TypeAlias from textual.message import Message diff --git a/src/textual/screen.py b/src/textual/screen.py index 1268858e22..508e70b403 100644 --- a/src/textual/screen.py +++ b/src/textual/screen.py @@ -63,7 +63,7 @@ from textual.widgets._toast import ToastRack if TYPE_CHECKING: - from typing_extensions import Final + from typing import Final from textual.command import Provider diff --git a/src/textual/widgets/_button.py b/src/textual/widgets/_button.py index c11ff39fb0..b3c0adb3db 100644 --- a/src/textual/widgets/_button.py +++ b/src/textual/widgets/_button.py @@ -1,12 +1,12 @@ from __future__ import annotations from functools import partial -from typing import TYPE_CHECKING, cast +from typing import TYPE_CHECKING, Literal, cast import rich.repr from rich.cells import cell_len from rich.console import ConsoleRenderable, RenderableType -from typing_extensions import Literal, Self +from typing_extensions import Self from textual import events diff --git a/src/textual/widgets/_data_table.py b/src/textual/widgets/_data_table.py index caf6e760f3..0a13fc6373 100644 --- a/src/textual/widgets/_data_table.py +++ b/src/textual/widgets/_data_table.py @@ -4,7 +4,16 @@ from dataclasses import dataclass from itertools import chain, zip_longest from operator import itemgetter -from typing import Any, Callable, ClassVar, Generic, Iterable, NamedTuple, TypeVar +from typing import ( + Any, + Callable, + ClassVar, + Generic, + Iterable, + Literal, + NamedTuple, + TypeVar, +) import rich.repr from rich.console import RenderableType @@ -13,7 +22,7 @@ from rich.segment import Segment from rich.style import Style from rich.text import Text, TextType -from typing_extensions import Literal, Self, TypeAlias +from typing_extensions import Self, TypeAlias from textual import events from textual._segment_tools import line_crop diff --git a/src/textual/widgets/_input.py b/src/textual/widgets/_input.py index ae78c68cd6..f531661c3f 100644 --- a/src/textual/widgets/_input.py +++ b/src/textual/widgets/_input.py @@ -2,13 +2,12 @@ import re from dataclasses import dataclass -from typing import TYPE_CHECKING, ClassVar, Iterable, NamedTuple +from typing import TYPE_CHECKING, ClassVar, Iterable, Literal, NamedTuple from rich.cells import cell_len, get_character_cell_size from rich.console import RenderableType from rich.highlighter import Highlighter from rich.text import Text -from typing_extensions import Literal from textual import events from textual.expand_tabs import expand_tabs_inline diff --git a/src/textual/widgets/_masked_input.py b/src/textual/widgets/_masked_input.py index 560258f332..582feee3d7 100644 --- a/src/textual/widgets/_masked_input.py +++ b/src/textual/widgets/_masked_input.py @@ -3,12 +3,11 @@ import re from dataclasses import dataclass from enum import Flag, auto -from typing import TYPE_CHECKING, Iterable, Pattern +from typing import TYPE_CHECKING, Iterable, Literal, Pattern from rich.console import RenderableType from rich.segment import Segment from rich.text import Text -from typing_extensions import Literal from textual import events from textual.strip import Strip diff --git a/src/textual/widgets/_placeholder.py b/src/textual/widgets/_placeholder.py index bc1257d78d..67adbe6f81 100644 --- a/src/textual/widgets/_placeholder.py +++ b/src/textual/widgets/_placeholder.py @@ -3,10 +3,10 @@ from __future__ import annotations from itertools import cycle -from typing import TYPE_CHECKING, Iterator +from typing import TYPE_CHECKING, Iterator, Literal from weakref import WeakKeyDictionary -from typing_extensions import Literal, Self +from typing_extensions import Self from textual import events diff --git a/src/textual/widgets/_rule.py b/src/textual/widgets/_rule.py index 4ffaa8cd63..541c224a4c 100644 --- a/src/textual/widgets/_rule.py +++ b/src/textual/widgets/_rule.py @@ -1,11 +1,10 @@ from __future__ import annotations -from typing import Iterable +from typing import Iterable, Literal from rich.console import Console, ConsoleOptions from rich.segment import Segment from rich.style import Style -from typing_extensions import Literal from textual.app import RenderResult from textual.css._error_tools import friendly_list diff --git a/src/textual/widgets/_tabbed_content.py b/src/textual/widgets/_tabbed_content.py index a7fcb9b0aa..c84f13760b 100644 --- a/src/textual/widgets/_tabbed_content.py +++ b/src/textual/widgets/_tabbed_content.py @@ -3,10 +3,9 @@ from asyncio import gather from dataclasses import dataclass from itertools import zip_longest -from typing import Awaitable +from typing import Awaitable, Final from rich.repr import Result -from typing_extensions import Final from textual import events from textual.app import ComposeResult diff --git a/src/textual/widgets/_text_area.py b/src/textual/widgets/_text_area.py index 7c16716ed5..2a2bcae3a6 100644 --- a/src/textual/widgets/_text_area.py +++ b/src/textual/widgets/_text_area.py @@ -6,12 +6,11 @@ from dataclasses import dataclass from functools import lru_cache from pathlib import Path -from typing import TYPE_CHECKING, ClassVar, Iterable, Optional, Sequence, Tuple +from typing import TYPE_CHECKING, ClassVar, Iterable, Literal, Optional, Sequence, Tuple from rich.console import RenderableType from rich.style import Style from rich.text import Text -from typing_extensions import Literal from textual._text_area_theme import TextAreaTheme from textual._tree_sitter import TREE_SITTER, get_language diff --git a/tests/snapshot_tests/snapshot_apps/data_table_style_order.py b/tests/snapshot_tests/snapshot_apps/data_table_style_order.py index 796ef7bbc3..e4d62b42cd 100644 --- a/tests/snapshot_tests/snapshot_apps/data_table_style_order.py +++ b/tests/snapshot_tests/snapshot_apps/data_table_style_order.py @@ -1,4 +1,4 @@ -from typing_extensions import Literal +from typing import Literal from textual.app import App, ComposeResult from textual.widgets import DataTable, Label diff --git a/tests/test_tooltips.py b/tests/test_tooltips.py index 5e78a2f30f..442d44bf65 100644 --- a/tests/test_tooltips.py +++ b/tests/test_tooltips.py @@ -1,6 +1,6 @@ """Tests for the tooltips.""" -from typing_extensions import Final +from typing import Final from textual.app import App, ComposeResult from textual.widgets import Static