| """ |
| |
| uritemplate.api |
| =============== |
| |
| This module contains the very simple API provided by uritemplate. |
| |
| """ |
| import typing as t |
|
|
| from uritemplate import variable |
| from uritemplate.orderedset import OrderedSet |
| from uritemplate.template import URITemplate |
|
|
| __all__ = ("OrderedSet", "URITemplate", "expand", "partial", "variables") |
|
|
|
|
| def expand( |
| uri: str, |
| var_dict: t.Optional[variable.VariableValueDict] = None, |
| **kwargs: variable.VariableValue, |
| ) -> str: |
| """Expand the template with the given parameters. |
| |
| :param str uri: The templated URI to expand |
| :param dict var_dict: Optional dictionary with variables and values |
| :param kwargs: Alternative way to pass arguments |
| :returns: str |
| |
| Example:: |
| |
| expand('https://api.github.com{/end}', {'end': 'users'}) |
| expand('https://api.github.com{/end}', end='gists') |
| |
| .. note:: Passing values by both parts, may override values in |
| ``var_dict``. For example:: |
| |
| expand('https://{var}', {'var': 'val1'}, var='val2') |
| |
| ``val2`` will be used instead of ``val1``. |
| |
| """ |
| return URITemplate(uri).expand(var_dict, **kwargs) |
|
|
|
|
| def partial( |
| uri: str, |
| var_dict: t.Optional[variable.VariableValueDict] = None, |
| **kwargs: variable.VariableValue, |
| ) -> URITemplate: |
| """Partially expand the template with the given parameters. |
| |
| If all of the parameters for the template are not given, return a |
| partially expanded template. |
| |
| :param dict var_dict: Optional dictionary with variables and values |
| :param kwargs: Alternative way to pass arguments |
| :returns: :class:`URITemplate` |
| |
| Example:: |
| |
| t = URITemplate('https://api.github.com{/end}') |
| t.partial() # => URITemplate('https://api.github.com{/end}') |
| |
| """ |
| return URITemplate(uri).partial(var_dict, **kwargs) |
|
|
|
|
| def variables(uri: str) -> OrderedSet: |
| """Parse the variables of the template. |
| |
| This returns all of the variable names in the URI Template. |
| |
| :returns: Set of variable names |
| :rtype: set |
| |
| Example:: |
| |
| variables('https://api.github.com{/end}) |
| # => {'end'} |
| variables('https://api.github.com/repos{/username}{/repository}') |
| # => {'username', 'repository'} |
| |
| """ |
| return OrderedSet(URITemplate(uri).variable_names) |
|
|