made features a frozenset

This commit is contained in:
Will McGugan
2022-08-18 10:34:38 +01:00
parent c717dec982
commit 965f3447d5
3 changed files with 19 additions and 6 deletions

View File

@@ -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:

View File

@@ -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()

View File

@@ -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)