Coverage for packages/core/src/langgate/core/fields.py: 91%
11 statements
« prev ^ index » next coverage.py v7.7.1, created at 2025-04-09 21:23 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2025-04-09 21:23 +0000
1from typing import Annotated
3from pydantic import (
4 AfterValidator,
5 AnyHttpUrl,
6 PlainValidator,
7 TypeAdapter,
8)
10AnyHttpUrlAdapter = TypeAdapter(AnyHttpUrl)
12# https://github.com/pydantic/pydantic/issues/7186
13HttpUrlStr = Annotated[
14 str,
15 PlainValidator(lambda x: AnyHttpUrlAdapter.validate_strings(x)),
16 AfterValidator(lambda x: str(x).rstrip("/")),
17]
20def validate_url_or_env_var(v: str) -> str:
21 """Validate a string as either a URL or an environment variable reference."""
22 if v is None:
23 return v
24 if isinstance(v, str) and v.startswith("${") and v.endswith("}"):
25 return v
26 return str(AnyHttpUrlAdapter.validate_strings(v)).rstrip("/")
29# Type that can be either a URL or an environment variable reference
30UrlOrEnvVar = Annotated[str, AfterValidator(validate_url_or_env_var)]