mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
made features a frozenset
This commit is contained in:
@@ -14,6 +14,7 @@ from time import perf_counter
|
||||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
Any,
|
||||
cast,
|
||||
Generic,
|
||||
Iterable,
|
||||
Iterator,
|
||||
@@ -163,7 +164,7 @@ class App(Generic[ReturnType], DOMNode):
|
||||
_init_uvloop()
|
||||
|
||||
super().__init__()
|
||||
self.features: set[FeatureFlag] = parse_features(os.getenv("TEXTUAL", ""))
|
||||
self.features: frozenset[FeatureFlag] = parse_features(os.getenv("TEXTUAL", ""))
|
||||
|
||||
self.console = Console(
|
||||
file=(open(os.devnull, "wt") if self.is_headless else sys.__stdout__),
|
||||
@@ -555,7 +556,9 @@ class App(Generic[ReturnType], DOMNode):
|
||||
"""
|
||||
|
||||
if headless:
|
||||
self.features.add("headless")
|
||||
self.features = cast(
|
||||
frozenset[FeatureFlag], self.features.union({"headless"})
|
||||
)
|
||||
|
||||
async def run_app() -> None:
|
||||
if quit_after is not None:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import annotations
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import sys
|
||||
@@ -44,6 +44,14 @@ class WindowsDriver(Driver):
|
||||
write("\x1b[?1006l")
|
||||
self.console.file.flush()
|
||||
|
||||
def _enable_bracketed_paste(self) -> None:
|
||||
"""Enable bracketed paste mode."""
|
||||
self.console.file.write("\x1b[?2004h")
|
||||
|
||||
def _disable_bracketed_paste(self) -> None:
|
||||
"""Disable bracketed pasgte mode."""
|
||||
self.console.file.write("\x1b[?2004l")
|
||||
|
||||
def start_application_mode(self) -> None:
|
||||
|
||||
loop = asyncio.get_running_loop()
|
||||
@@ -54,6 +62,7 @@ class WindowsDriver(Driver):
|
||||
self._enable_mouse_support()
|
||||
self.console.show_cursor(False)
|
||||
self.console.file.write("\033[?1003h\n")
|
||||
self._enable_bracketed_paste()
|
||||
|
||||
app = active_app.get()
|
||||
|
||||
@@ -75,6 +84,7 @@ class WindowsDriver(Driver):
|
||||
pass
|
||||
|
||||
def stop_application_mode(self) -> None:
|
||||
self._disable_bracketed_paste()
|
||||
self.disable_input()
|
||||
if self._restore_console:
|
||||
self._restore_console()
|
||||
|
||||
@@ -14,7 +14,7 @@ FEATURES: Final = {"devtools", "debug", "headless"}
|
||||
FeatureFlag = Literal["devtools", "debug", "headless"]
|
||||
|
||||
|
||||
def parse_features(features: str) -> set[FeatureFlag]:
|
||||
def parse_features(features: str) -> frozenset[FeatureFlag]:
|
||||
"""Parse features env var
|
||||
|
||||
Args:
|
||||
@@ -24,8 +24,8 @@ def parse_features(features: str) -> set[FeatureFlag]:
|
||||
frozenset[FeatureFlag]: A frozen set of known features.
|
||||
"""
|
||||
|
||||
features_set = set(
|
||||
features_set = frozenset(
|
||||
feature.strip().lower() for feature in features.split(",") if feature.strip()
|
||||
).intersection(FEATURES)
|
||||
|
||||
return cast("set[FeatureFlag]", features_set)
|
||||
return cast("frozenset[FeatureFlag]", features_set)
|
||||
|
||||
Reference in New Issue
Block a user