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

1from typing import Annotated 

2 

3from pydantic import ( 

4 AfterValidator, 

5 AnyHttpUrl, 

6 PlainValidator, 

7 TypeAdapter, 

8) 

9 

10AnyHttpUrlAdapter = TypeAdapter(AnyHttpUrl) 

11 

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] 

18 

19 

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("/") 

27 

28 

29# Type that can be either a URL or an environment variable reference 

30UrlOrEnvVar = Annotated[str, AfterValidator(validate_url_or_env_var)]