Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/venvalid/utils_errors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
def pretty_print_error(error: Exception) -> None:
"""Pretty print errors using rich if available, else fallback to plain text"""
try:
from rich.console import Console

console = Console()
console.print(f"[bold red]Error:[/bold red] {error}")
except ImportError:
print(f"Error: {error}")
7 changes: 7 additions & 0 deletions src/venvalid/validator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from .errors import EnvSafeError


def validate_env_var(name: str, value: str | None):
if not value:
raise EnvSafeError(f"Missing required environment variable: {name}")
return True
40 changes: 40 additions & 0 deletions tests/test_utils_errors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import sys
import types

import src.venvalid.utils_errors as utils_errors


class DummyConsole:
def __init__(self):
self.last_message = None

def print(self, msg):
self.last_message = msg


def test_pretty_print_error_with_rich(monkeypatch):
dummy_console = DummyConsole()

fake_rich_pkg = types.ModuleType("rich")
fake_rich_pkg.__path__ = [] # mark as package

fake_console_mod = types.ModuleType("rich.console")
setattr(fake_console_mod, "Console", lambda: dummy_console)

monkeypatch.setitem(sys.modules, "rich", fake_rich_pkg)
monkeypatch.setitem(sys.modules, "rich.console", fake_console_mod)

utils_errors.pretty_print_error(ValueError("boom"))

assert dummy_console.last_message is not None
assert "boom" in dummy_console.last_message


def test_pretty_print_error_without_rich(monkeypatch, capsys):
monkeypatch.delitem(sys.modules, "rich.console", raising=False)
monkeypatch.delitem(sys.modules, "rich", raising=False)

utils_errors.pretty_print_error(ValueError("fail"))

out = capsys.readouterr().out
assert "Error: fail" in out
15 changes: 15 additions & 0 deletions tests/test_validator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import pytest

from src.venvalid.errors import EnvSafeError
from src.venvalid.validator import validate_env_var


def test_validate_env_var_success():
assert validate_env_var("API_KEY", "secret") is True


def test_validate_env_var_missing():
with pytest.raises(EnvSafeError) as exc_info:
validate_env_var("API_KEY", None)

assert "Missing required environment variable: API_KEY" in str(exc_info.value)