features module

This commit is contained in:
Will McGugan
2022-04-29 14:53:53 +01:00
parent eac5345886
commit 5026b21e26
2 changed files with 34 additions and 6 deletions

View File

@@ -36,6 +36,7 @@ from .devtools.client import DevtoolsClient, DevtoolsConnectionError, DevtoolsLo
from .devtools.redirect_output import StdoutRedirector
from .dom import DOMNode
from .driver import Driver
from .features import parse_features, FeatureFlag
from .file_monitor import FileMonitor
from .geometry import Offset, Region, Size
from .layouts.dock import Dock
@@ -89,7 +90,6 @@ class App(Generic[ReturnType], DOMNode):
def __init__(
self,
screen: bool = True,
driver_class: Type[Driver] | None = None,
log: str = "",
log_verbosity: int = 1,
@@ -162,11 +162,7 @@ class App(Generic[ReturnType], DOMNode):
if css is not None:
self.css = css
self.features = set(
feature.strip().lower()
for feature in os.getenv("TEXTUAL", "").split(",")
if feature.strip()
)
self.features: frozenset[FeatureFlag] = parse_features(os.getenv("TEXTUAL", ""))
self.registry: set[MessagePump] = set()

32
src/textual/features.py Normal file
View File

@@ -0,0 +1,32 @@
import sys
from typing import cast
if sys.version_info >= (3, 8):
from typing import Final, Literal
else:
from typing_extensions import Final, Literal
FEATURES: Final = {"devtools", "debug"}
FeatureFlag = Literal["devtools", "debug"]
def parse_features(features: str) -> frozenset[FeatureFlag]:
"""Parse features env var
Args:
features (str): Comma seprated feature flags
Returns:
frozenset[FeatureFlag]: A frozen set of known features.
"""
features_set = frozenset(
set(
feature.strip().lower()
for feature in features.split(",")
if feature.strip()
).intersection(FEATURES)
)
return cast("frozenset[FeatureFlag]", features_set)