Metadata-Version: 1.1
Name: rfc3987
Version: 1.3.1
Summary: 
Parsing and validation of URIs (RFC 3896) and IRIs (RFC 3987)
Home-page: http://pypi.python.org/pypi/rfc3987
Author: Daniel Gerber
Author-email: daniel.g.gerber@gmail.com
License: UNKNOWN
Download-URL: https://github.com/dgerber/rfc3987
Description: This module provides regular expressions according to `RFC 3986 "Uniform 
        Resource Identifier (URI): Generic Syntax"
        <http://tools.ietf.org/html/rfc3986>`_ and `RFC 3987 "Internationalized
        Resource Identifiers (IRIs)" <http://tools.ietf.org/html/rfc3987>`_, and
        utilities for composition and relative resolution of references.
        
        Tested on python 2.7 and 3.2. Some features require regex_.
        
        
        API
        ---
        
        `get_compiled_pattern`
            Returns a compiled pattern object for a rule name or template string.
        
            Usage for validation::
                
                >>> uri = get_compiled_pattern('^%(URI)s$')
                >>> assert uri.match('http://tools.ietf.org/html/rfc3986#appendix-A')
                >>> from unicodedata import lookup
                >>> smp = 'urn:' + lookup('OLD ITALIC LETTER A')  # U+00010300
                >>> assert not uri.match(smp)
                >>> assert get_compiled_pattern('^%(IRI)s$').match(smp)
                >>> assert not get_compiled_pattern('^%(relative_ref)s$').match('#f#g')
            
            For parsing, some subcomponents are captured in named groups (*only if*
            regex_ is available, otherwise see `parse`)::
        
                >>> match = uri.match('http://tools.ietf.org/html/rfc3986#appendix-A')
                >>> d = match.groupdict()
                >>> if REGEX:
                ...     assert all([ d['scheme'] == 'http',
                ...                  d['authority'] == 'tools.ietf.org',
                ...                  d['path'] == '/html/rfc3986',
                ...                  d['query'] == None,
                ...                  d['fragment'] == 'appendix-A' ])
        
            
        
        `parse`
            Parses `string` according to `rule` into a dict of subcomponents.
        
            If regex_ is available, any rule is supported; with re_, `rule` must be
            'IRI_reference' or some special case thereof ('IRI', 'absolute_IRI',
            'irelative_ref', 'irelative_part', 'URI_reference', 'URI', 'absolute_URI',
            'relative_ref', 'relative_part'). ::
            
                >>> d = parse('http://tools.ietf.org/html/rfc3986#appendix-A',
                ...           rule='URI')
                >>> assert all([ d['scheme'] == 'http',
                ...              d['authority'] == 'tools.ietf.org',
                ...              d['path'] == '/html/rfc3986',
                ...              d['query'] == None,
                ...              d['fragment'] == 'appendix-A' ])
                
            
        
        `format_patterns`
            Returns a dict of patterns (regular expressions) keyed by
            `rule names for URIs`_ and `rule names for IRIs`_.
            
            See also the module level dict `patterns`, and `get_compiled_pattern`.
        
            To wrap a rule in a named capture group, pass as it keyword argument:
            rule_name='group_name'. By default, the formatted patterns contain no
            named groups.
        
            Patterns are `str` instances (be it in python 2.x or 3.x) containing ASCII
            characters only.
        
            Note that, *if* compiling with the standard library re_ module:
        
              - ``\u`` and ``\U`` escapes must be preprocessed (see `issue3665
                <http://bugs.python.org/issue3665>`_)::
                
                  >>> import re, sys, ast
                  >>> re.compile(patterns['ucschar']) #doctest:+IGNORE_EXCEPTION_DETAIL
                  Traceback (most recent call last):
                    ...
                    File "/usr/lib/python2.6/re.py", line 245, in _compile
                      raise error, v # invalid expression
                  error: bad character range
                  >>> tpl = 'u"%s"' if sys.version_info[0] < 3 else '"%s"'
                  >>> utext_pattern = ast.literal_eval(tpl % patterns['ucschar'])
                  >>> assert re.compile(utext_pattern)
        
              - named capture groups cannot occur on multiple branches of an
                alternation::
        
                  >>> re.compile(patterns['path']) #doctest:+IGNORE_EXCEPTION_DETAIL
                  Traceback (most recent call last):
                    ...
                    File "/usr/lib/python2.6/re.py", line 245, in _compile
                      raise error, v # invalid expression
                  error: redefinition of group name 'path' as group 2; was group 1
                  >>> pat = format_patterns(path='outermost_group_name')['path']
                  >>> assert re.compile(pat)
        
            .. _rule names for URIs: http://tools.ietf.org/html/rfc3986#appendix-A
            .. _rule names for IRIs: http://tools.ietf.org/html/rfc3987#section-2.2
            
            
        `patterns`
            A dict of regular expressions with useful group names.
            Compilable (with regex_ only) without need for any particular compilation
            flag.
        
        `compose`
            Returns an URI composed_ from named parts.
        
            .. _composed: http://tools.ietf.org/html/rfc3986#section-5.3
            
        
        `resolve`
            Resolves_ an `URI reference` relative to a `base` URI.
            
            `Test cases <http://tools.ietf.org/html/rfc3986#section-5.4>`_::
            
                >>> base = resolve.test_cases_base
                >>> for relative, resolved in resolve.test_cases.items():
                ...     assert resolve(base, relative) == resolved
            
            If `return_parts` is True, returns a dict of named parts instead of
            a string.
                
            .. _Resolves: http://tools.ietf.org/html/rfc3986#section-5.2
        
            
        
        
        
        What's new
        ----------
        
        version 1.3.1:
        
        - some re_ compatibility: get_compiled_pattern, parse
        - dropped regex_ from setup.py requirements
        
        version 1.3.0:
        
        - python 3.x compatibility
        - format_patterns 
        
        version 1.2.1:
        
        - compose, resolve
        
              
        .. _re: http://docs.python.org/library/re
        .. _regex: http://pypi.python.org/pypi/regex
        
        
Keywords: URI IRI URL rfc3986 rfc3987 validation
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Topic :: Internet
