Source code for behave_kit.skip.conditions
"""Reusable skip conditions, usable standalone or via `skip.decorators`."""
from __future__ import annotations
import importlib
import logging
import platform
from behave_kit._core.types import Context
logger = logging.getLogger("behave_kit.skip.conditions")
[docs]
def is_env(context: Context, env_name: str) -> bool:
"""True if ``context.config.env == env_name``."""
config = getattr(context, "config", None)
return getattr(config, "env", None) == env_name
[docs]
def is_os(os_name: str) -> bool:
"""True if the current OS matches ``os_name`` (case-insensitive)."""
if not isinstance(os_name, str):
logger.warning("is_os() expected a string, got %s", type(os_name).__name__)
return False
return platform.system().lower() == os_name.lower()
[docs]
def is_missing(module_name: str) -> bool:
"""True if ``module_name`` cannot be imported.
Invalid inputs (non-string or empty) are treated as missing to avoid
executing arbitrary code.
"""
if not isinstance(module_name, str) or not module_name:
return True
try:
importlib.import_module(module_name)
except Exception:
return True
return False
[docs]
def is_no_browser() -> bool:
"""True if Selenium is not installed."""
return is_missing("selenium")