1"""Module for URI Template expansion."""
2
3from __future__ import annotations
4
5from .expansions import ExpansionFailedError
6from .uritemplate import ExpansionInvalidError, ExpansionReservedError, URITemplate
7from .variable import Variable, VariableInvalidError
8
9
10__all__ = (
11 'URITemplate',
12 'Variable',
13 'ExpansionInvalidError',
14 'ExpansionReservedError',
15 'VariableInvalidError',
16 'ExpansionFailedError',
17)
18
19
20def expand(template: str, **kwargs) -> (str | None):
21 try:
22 templ = URITemplate(template)
23 return templ.expand(**kwargs)
24 except Exception:
25 return None
26
27
28def partial(template: str, **kwargs) -> (str | None):
29 try:
30 templ = URITemplate(template)
31 return str(templ.partial(**kwargs))
32 except Exception:
33 return None
34
35
36def validate(template: str) -> bool:
37 try:
38 URITemplate(template)
39 return True
40 except Exception:
41 return False