3 ]i%@s<dZddlmZddlmZddlmZGdddeZdS)z6Module containing the logic for the URIBuilder object.)compat) normalizers)uric@sjeZdZdZdddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZdS) URIBuildera Object to aid in building up a URI Reference from parts. .. note:: This object should be instantiated by the user, but it's recommended that it is not provided with arguments. Instead, use the available method to populate the fields. NcCs.||_||_||_||_||_||_||_dS)aInitialize our URI builder. :param str scheme: (optional) :param str userinfo: (optional) :param str host: (optional) :param int port: (optional) :param str path: (optional) :param str query: (optional) :param str fragment: (optional) N)schemeuserinfohostportpathqueryfragment)selfrrrr r r r rC/tmp/pip-build-el9acr48/urllib3/urllib3/packages/rfc3986/builder.py__init__ szURIBuilder.__init__cCsd}|j|dS)z0Provide a convenient view of our builder object.zURIBuilder(scheme={b.scheme}, userinfo={b.userinfo}, host={b.host}, port={b.port}, path={b.path}, query={b.query}, fragment={b.fragment}))b)format)r Z formatstrrrr__repr__;szURIBuilder.__repr__c Cs,tj|}t||j|j|j|j|j|jdS)aAdd a scheme to our builder object. After normalizing, this will generate a new URIBuilder instance with the specified scheme and all other attributes the same. .. code-block:: python >>> URIBuilder().add_scheme('HTTPS') URIBuilder(scheme='https', userinfo=None, host=None, port=None, path=None, query=None, fragment=None) )rrrr r r r ) rZnormalize_schemerrrr r r r )r rrrr add_schemeBs zURIBuilder.add_schemec CsV|dkrtdtj|}|dk r4dj|tj|}t|j||j|j|j |j |j dS)aAdd credentials as the userinfo portion of the URI. .. code-block:: python >>> URIBuilder().add_credentials('root', 's3crete') URIBuilder(scheme=None, userinfo='root:s3crete', host=None, port=None, path=None, query=None, fragment=None) >>> URIBuilder().add_credentials('root', None) URIBuilder(scheme=None, userinfo='root', host=None, port=None, path=None, query=None, fragment=None) NzUsername cannot be Nonez{}:{})rrrr r r r ) ValueErrorrZnormalize_usernamerZnormalize_passwordrrrr r r r )r usernamepasswordrrrradd_credentialsZs   zURIBuilder.add_credentialsc Cs(t|j|jtj||j|j|j|jdS)aAdd hostname to the URI. .. code-block:: python >>> URIBuilder().add_host('google.com') URIBuilder(scheme=None, userinfo=None, host='google.com', port=None, path=None, query=None, fragment=None) )rrrr r r r ) rrrrZnormalize_hostr r r r )r rrrradd_host{s zURIBuilder.add_hostc Cs\t|}|dkrtdj||dkr4tdj|t|j|j|jdj||j|j|j dS)aAdd port to the URI. .. code-block:: python >>> URIBuilder().add_port(80) URIBuilder(scheme=None, userinfo=None, host=None, port='80', path=None, query=None, fragment=None) >>> URIBuilder().add_port(443) URIBuilder(scheme=None, userinfo=None, host=None, port='443', path=None, query=None, fragment=None) z5ports are not allowed to be negative. You provided {}iz>ports are not allowed to be larger than 65535. You provided {}z{})rrrr r r r ) intrrrrrrr r r )r r Zport_intrrradd_ports"zURIBuilder.add_portc Cs<|jdsdj|}t|j|j|j|jtj||j |j dS)aAdd a path to the URI. .. code-block:: python >>> URIBuilder().add_path('sigmavirus24/rfc3985') URIBuilder(scheme=None, userinfo=None, host=None, port=None, path='/sigmavirus24/rfc3986', query=None, fragment=None) >>> URIBuilder().add_path('/checkout.php') URIBuilder(scheme=None, userinfo=None, host=None, port=None, path='/checkout.php', query=None, fragment=None) /z/{})rrrr r r r ) startswithrrrrrr rnormalize_pathr r )r r rrradd_paths  zURIBuilder.add_pathc Cs2tjtj|}t|j|j|j|j|j ||j dS)aGenerate and add a query a dictionary or list of tuples. .. code-block:: python >>> URIBuilder().add_query_from({'a': 'b c'}) URIBuilder(scheme=None, userinfo=None, host=None, port=None, path=None, query='a=b+c', fragment=None) >>> URIBuilder().add_query_from([('a', 'b c')]) URIBuilder(scheme=None, userinfo=None, host=None, port=None, path=None, query='a=b+c', fragment=None) )rrrr r r r ) rnormalize_queryr urlencoderrrrr r r )r Z query_itemsr rrradd_query_fromszURIBuilder.add_query_fromc Cs(t|j|j|j|j|jtj||jdS)aAdd a pre-formated query string to the URI. .. code-block:: python >>> URIBuilder().add_query('a=b&c=d') URIBuilder(scheme=None, userinfo=None, host=None, port=None, path=None, query='a=b&c=d', fragment=None) )rrrr r r r ) rrrrr r rr!r )r r rrr add_querys zURIBuilder.add_queryc Cs(t|j|j|j|j|j|jtj|dS)aAdd a fragment to the URI. .. code-block:: python >>> URIBuilder().add_fragment('section-2.6.1') URIBuilder(scheme=None, userinfo=None, host=None, port=None, path=None, query=None, fragment='section-2.6.1') )rrrr r r r ) rrrrr r r rZnormalize_fragment)r r rrr add_fragments zURIBuilder.add_fragmentcCs,tj|jtj|j|j|jf|j|j |j S)a>Create a URIReference from our builder. .. code-block:: python >>> URIBuilder().add_scheme('https').add_host('github.com' ... ).add_path('sigmavirus24/rfc3986').finalize().unsplit() 'https://github.com/sigmavirus24/rfc3986' >>> URIBuilder().add_scheme('https').add_host('github.com' ... ).add_path('sigmavirus24/rfc3986').add_credentials( ... 'sigmavirus24', 'not-re@l').finalize().unsplit() 'https://sigmavirus24:not-re%40l@github.com/sigmavirus24/rfc3986' ) rZ URIReferencerrZnormalize_authorityrrr r r r )r rrrfinalizeszURIBuilder.finalize)NNNNNNN)__name__ __module__ __qualname____doc__rrrrrrr r#r$r%r&rrrrrs  !'rN)r*rrrobjectrrrrrs