uritemplate
===========

Release v\ |version|.

Examples
--------

This first example shows how simple the API can be when using for a one-off 
item in a script or elsewhere.

.. code-block:: python

    from requests import get
    from uritemplate import expand

    uri = 'https://api.github.com{/user}'

    user = get(expand(uri, user='sigmavirus24')).json()

This second example shows how using the class will save you time for template 
parsing and object creation. Making the template once means the URI is parsed 
once which decreases the number of :class:`URITemplate 
<uritemplate.URITemplate>` objects created and usage of the ``re`` module.  
This means that as soon as the file is parsed, the ``User.github_url`` and 
``Repository.github_url`` variables are made once and only once. They're then 
usable in every instance of those classes.

.. code-block:: python

    from uritemplate import URITemplate

    class User(object):
        github_url = URITemplate('https://api.github.com{/user}')
        def __init__(self, name):
            self.uri = self.github_url.expand({'user': name})
            self.name = name

    class Repository(object):
        github_url = URITemplate('https://api.github.com{/user}{/repo}')
        def __init__(self, name):
            self.uri = self.github_url.expand(
                dict(zip(['user', 'repo'], name.split('/')))
            )
            self.name = name

API
---

.. module:: uritemplate

.. autofunction:: uritemplate.expand

.. autofunction:: uritemplate.partial

.. autofunction:: uritemplate.variables

.. autoclass:: uritemplate.URITemplate
    :members:

Implementation Details
----------------------

Classes, their methods, and functions in this section are not part of the API 
and as such are not meant to be used by users of ``uritemplate.py``. These are 
documented here purely for reference as they are inadvertently exposed via the 
public API.

For example::

    t = URITemplate('https://api.github.com/users{/user}')
    t.variables
    # => [URIVariable(/user)]

Users can interact with :class:`URIVariable` objects as they see fit, but 
their API may change and are not guaranteed to be consistent across versions.  
Code relying on methods defined on :class:`URIVariable` and other classes, 
methods, and functions in this section may break in future releases.

.. autoclass:: uritemplate.template.URIVariable
    :members: expand
