{ "info": { "author": "Alice Bevan-McGregor", "author_email": "alice@gothcandy.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "===\nuri\n===\n\n \u00a9 2017-2018 Alice Bevan-McGregor and contributors.\n\n..\n\n https://github.com/marrow/uri\n\n..\n\n |latestversion| |ghtag| |downloads| |masterstatus| |mastercover| |masterreq| |ghwatch| |ghstar|\n\n\nInstallation\n============\n\nInstalling ``uri`` is easy, just execute the following in a terminal::\n\n pip install uri\n\n**Note:** We *strongly* recommend always using a container, virtualization, or sandboxing environment of some kind when\ndeveloping using Python; installing things system-wide is yucky (for a variety of reasons) nine times out of ten. We\nprefer light-weight `virtualenv `__, others prefer solutions as\nrobust as `Vagrant `__.\n\nIf you add ``uri`` to the ``install_requires`` argument of the call to ``setup()`` in your application's\n``setup.py`` file, ``uri`` will be automatically installed and made available when your own application or\nlibrary is installed. We recommend using \"less than\" version numbers to ensure there are no unintentional\nside-effects when updating. Use ``uri<2.1`` to get all bugfixes for the current release, and\n``uri<3.0`` to get bugfixes and feature updates while ensuring that large breaking changes are not installed.\n\nWhile uri does not have any hard dependencies on any other package, it is **strongly** recommended that applications\nusing uri in web-based applications also install the ``markupsafe`` package to provide more efficient string escaping and\nsome additional functionality.\n\n\nDevelopment Version\n-------------------\n\n |developstatus| |developcover| |ghsince| |issuecount| |ghfork|\n\nDevelopment takes place on `GitHub `__ in the\n`uri `__ project. Issue tracking, documentation, and downloads\nare provided there.\n\nInstalling the current development version requires `Git `__, a distributed source code management\nsystem. If you have Git you can run the following to download and *link* the development version into your Python\nruntime::\n\n git clone https://github.com/marrow/uri.git\n (cd uri; python setup.py develop)\n\nYou can then upgrade to the latest version at any time::\n\n (cd uri; git pull; python setup.py develop)\n\nIf you would like to make changes and contribute them back to the project, fork the GitHub project, make your changes,\nand submit a pull request. This process is beyond the scope of this documentation; for more information see\n`GitHub's documentation `_.\n\n\nGetting Started\n===============\n\n\nURI\n---\n\nAn abstract string-like (and mapping-like, and iterator-like...) identifier for a resource with the regular form\ndefined by `RFC 3986 `_::\n\n scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]\n\nFor details on these components, `please refer to Wikipedia\n`__. Each of these components is represented by an\nappropraite rich datatype:\n\n* The ``scheme`` of a URI represents an extensible API of string-like plugins.\n* Any IPv6 ``host`` is automatically wrapped and unwrapped in square braces.\n* The ``path`` is represented by a ``PurePosixPath``.\n* The ``query`` is a rich ordered multi-value bucketed mutable mapping called ``QSO``. (Ouch, but that's what it is!)\n\nInstantiate a new URI by passing in a string or string-castable object, ``pathlib.Path`` compatible object, or object\nexposing a ``__link__`` method or attribute::\n\n home = URI(\"https://github.com/marrow/\")\n\nThe *scalar* attributes are combined into several *compound* groups for convienence:\n\n* The ``credentials`` are a colon (``:``) separated combination of: ``user`` + ``password`` \u2014 also accessible via the\n shorter ``auth`` or the longer ``authentication`` attributes.\n* The ``authority`` part is the combination of: ``credentials`` + ``host`` + ``port``\n* The ``heirarchical`` part is the combination of: ``authority`` part + ``path``\n\nOther aliases are provided for the scalar components, typically for compliance with external APIs, such as\ninteroperability with ``pathlib.Path`` or ``urlsplit`` objects:\n\n* ``username`` is the long form of ``user``.\n* ``hostname`` is the long form of ``host``.\n* ``authentication`` is the long form of ``auth``.\n\nIn addition, several string views are provided for convienence, but ultimately all just call `str()` against the\ninstance or one of the compound groups described above:\n\n* ``uri`` represents the entire URI as a string.\n* ``safe_uri`` represents the enture URI, sans any password that may be present.\n* ``base`` is the combination of ``scheme`` and the ``heirarchical`` part.\n* ``summary`` is a useful shortcut for web presentation containing only the ``host`` and ``port`` of the URI.\n* ``qs`` is just the query string, as a plain string instead of QSO instance.\n\nURI values may be absolute identifiers or relative references. Absolute URIs are what most people see every day:\n\n* ``https://example.com/about/us``\n* ``ftp://example.com/thing.txt``\n* ``mailto:user@example.com``\n* ``uri:ISSN:1535-3613``\n\nIndirect references require the context of an absolute identifier in order to resolve them. Examples include:\n\n* ``//example.com/protocol/relative`` \u2014 protocol implied from context, frequently used in HTML when referencing\n resources hosted on content delivery networks.\n* ``/host/relative`` \u2014 all elements *up to* the path are preserved from context, also frequently used in HTML when\n referencing resources on the same server. This is not equivalent to ``file:///host/relative``, as the protocol is\n unknown.\n* ``relative/path`` \u2014 the resulting path is relative to the \"current working directory\" of the context.\n* ``../parent/relative/path`` \u2014 references may ascend into parents of the context.\n* ``resource#fragment`` \u2014 referencing a specific fragment of a sibling resource.\n* ``#fragment`` \u2014 a same-document reference to a specific fragment of the context.\n\nTwo primary methods are provided to combine a base URI with another URI, absolute or relative. The first, utilizing\nthe ``uri.resolve(uri, **parts)`` method, allows you to both resolve a target URL as well as provide explicit\noverrides for any of the above scalar attributes, such as query string. The second, which is recommended for general\nuse, is to use the division and floor division operators::\n\n base = URI(\"https://example.com/about/us\")\n cdn = base // \"cdn.example.com\"\n js = cdn / \"script.js\"\n css = cdn / \"script.css\"\n\nPlease note that once a URI has an \"authority\" part (basically, the parts prior to the path such as host) then any\npath directly assigned must be \"rooted\", or contain a leading slash.\n\n\nSchemes\n-------\n\nEach URI has a scheme which should be registered with the `Internet Assigned Numbers Authority (IANA)\n`_ which specifies the mechanics of the URI\nfields. Examples include: ``http``, ``https``, ``ftp``, ``mailto``, ``file``, ``data``, etc.\n\n\nVersion History\n===============\n\nVersion 2.0.1\n-------------\n\n* Added non-standard `resource` compound view.\n* Removed Python 3.3 support, added 3.7, removed deprecated testing dependency.\n* Scheme objects hash as per their string representation. #5\n* Dead code clean-up.\n* Additional tests covering previously uncovered edge cases, such as assignment to a compound view property.\n* Restrict assignment of rootless paths (no leading `/`) if an authority part is already present. #8\n* Enable handling of the following schemes as per URL (colon + double slash):\n\t* sftp\n\t* mysql\n\t* redis\n\t* mongodb\n\n\nVersion 2.0\n-----------\n\n* Extraction of the ``URIString`` object from Marrow Mongo.\n\n\nVersion 1.0\n-----------\n\n* Original package by Jacob Kaplan-Moss. Copyright 2008 and released under the BSD License.\n\n\nLicense\n=======\n\nThe URI package has been released under the MIT Open Source license.\n\nThe MIT License\n---------------\n\nCopyright \u00a9 2017-2018 Alice Bevan-McGregor and contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \u201cSoftware\u201d), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the\nSoftware.\n\nTHE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n.. |ghwatch| image:: https://img.shields.io/github/watchers/marrow/uri.svg?style=social&label=Watch\n :target: https://github.com/marrow/uri/subscription\n :alt: Subscribe to project activity on Github.\n\n.. |ghstar| image:: https://img.shields.io/github/stars/marrow/uri.svg?style=social&label=Star\n :target: https://github.com/marrow/uri/subscription\n :alt: Star this project on Github.\n\n.. |ghfork| image:: https://img.shields.io/github/forks/marrow/uri.svg?style=social&label=Fork\n :target: https://github.com/marrow/uri/fork\n :alt: Fork this project on Github.\n\n.. |masterstatus| image:: http://img.shields.io/travis/marrow/uri/master.svg?style=flat\n :target: https://travis-ci.org/marrow/uri/branches\n :alt: Release build status.\n\n.. |mastercover| image:: http://img.shields.io/codecov/c/github/marrow/uri/master.svg?style=flat\n :target: https://codecov.io/github/marrow/uri?branch=master\n :alt: Release test coverage.\n\n.. |masterreq| image:: https://img.shields.io/requires/github/marrow/uri.svg\n :target: https://requires.io/github/marrow/uri/requirements/?branch=master\n :alt: Status of release dependencies.\n\n.. |developstatus| image:: http://img.shields.io/travis/marrow/uri/develop.svg?style=flat\n :target: https://travis-ci.org/marrow/uri/branches\n :alt: Development build status.\n\n.. |developcover| image:: http://img.shields.io/codecov/c/github/marrow/uri/develop.svg?style=flat\n :target: https://codecov.io/github/marrow/uri?branch=develop\n :alt: Development test coverage.\n\n.. |developreq| image:: https://img.shields.io/requires/github/marrow/uri.svg\n :target: https://requires.io/github/marrow/uri/requirements/?branch=develop\n :alt: Status of development dependencies.\n\n.. |issuecount| image:: http://img.shields.io/github/issues-raw/marrow/uri.svg?style=flat\n :target: https://github.com/marrow/uri/issues\n :alt: Github Issues\n\n.. |ghsince| image:: https://img.shields.io/github/commits-since/marrow/uri/2.0.0.svg\n :target: https://github.com/marrow/uri/commits/develop\n :alt: Changes since last release.\n\n.. |ghtag| image:: https://img.shields.io/github/tag/marrow/uri.svg\n :target: https://github.com/marrow/uri/tree/2.0.0\n :alt: Latest Github tagged release.\n\n.. |latestversion| image:: http://img.shields.io/pypi/v/uri.svg?style=flat\n :target: https://pypi.python.org/pypi/uri\n :alt: Latest released version.\n\n.. |downloads| image:: http://img.shields.io/pypi/dw/uri.svg?style=flat\n :target: https://pypi.python.org/pypi/uri\n :alt: Downloads per week.\n\n.. |cake| image:: http://img.shields.io/badge/cake-lie-1b87fb.svg?style=flat\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/marrow/uri/", "keywords": "type,URI,URL,rfc,rfc", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "uri", "package_url": "https://pypi.org/project/uri/", "platform": "", "project_url": "https://pypi.org/project/uri/", "project_urls": { "Homepage": "https://github.com/marrow/uri/" }, "release_url": "https://pypi.org/project/uri/2.0.1/", "requires_dist": [ "pathlib2; python_version < \"3.4\"", "pytest; extra == 'development'", "pytest-cov; extra == 'development'", "pytest-flakes; extra == 'development'", "pytest-isort; extra == 'development'", "pre-commit; extra == 'development'", "requests; extra == 'http'" ], "requires_python": "", "summary": "A type to represent, query, and manipulate a Uniform Resource Identifier.", "version": "2.0.1" }, "last_serial": 4453320, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "439fad23e4460f47b5f9ec717654c67d", "sha256": "a884a68eb6ee0698077f9ab7c9ec133d853bb82670787eeafc1f460642ebf712" }, "downloads": -1, "filename": "uri-1.0.tar.gz", "has_sig": false, "md5_digest": "439fad23e4460f47b5f9ec717654c67d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4499, "upload_time": "2008-01-29T17:17:50", "url": "https://files.pythonhosted.org/packages/0c/dc/dea5c72d43ce06f15f14e59c260f0c200b14cc93146f07d212cf6c68c0fc/uri-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "f673cf1f24619b93d42b16fcbea8b7b2", "sha256": "bfe07cc21da83e571af336f2680747c49f3c531665562ae005bf09807bde655d" }, "downloads": -1, "filename": "uri-1.0.1.tar.gz", "has_sig": false, "md5_digest": "f673cf1f24619b93d42b16fcbea8b7b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3830, "upload_time": "2017-06-01T17:39:19", "url": "https://files.pythonhosted.org/packages/26/e9/428dbd3c59e7f31773c9e57ad436b9bbf0dfb9c82a3777693831707099e0/uri-1.0.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "9682b784b802608633309b825651edaf", "sha256": "f87f18d8b29b8c0cf51a2b0382429be5895df86493ed43836d1b6df41934043d" }, "downloads": -1, "filename": "uri-2.0.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "9682b784b802608633309b825651edaf", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 47798, "upload_time": "2017-06-12T05:04:23", "url": "https://files.pythonhosted.org/packages/5a/c9/a5f2778e71dbfac6e7e4f67f7550035193e6a6ef3378cd107f72c847ac4e/uri-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "068a59b1700c52535b324004710feebe", "sha256": "c9387311d1a13a022cf47a37e03ec3e1837843e8e3f31cd5fe8157be74d25057" }, "downloads": -1, "filename": "uri-2.0.0.tar.gz", "has_sig": true, "md5_digest": "068a59b1700c52535b324004710feebe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25050, "upload_time": "2017-06-12T05:04:22", "url": "https://files.pythonhosted.org/packages/51/22/085f63cfb67eb0d357234d6ed80bc1db239b04946bb2509fe45164135a3a/uri-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "56ccb15a8df4e88577331fcbcada226c", "sha256": "df7df5653c8d38cf8a394db0d86728fcbfc6b4ecc62522a7972e078c1cace963" }, "downloads": -1, "filename": "uri-2.0.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "56ccb15a8df4e88577331fcbcada226c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42995, "upload_time": "2018-11-05T15:23:40", "url": "https://files.pythonhosted.org/packages/18/86/d479ab18971bc123c52debbd459304481a3eb0b58b517bc54c3ad4a9a90d/uri-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "31b75e8088fd37c01cc285b6c652917e", "sha256": "b56fa1ca7fdbb43d919d921c360a145358529d5430dec90d46a7b902179529b9" }, "downloads": -1, "filename": "uri-2.0.1.tar.gz", "has_sig": true, "md5_digest": "31b75e8088fd37c01cc285b6c652917e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26302, "upload_time": "2018-11-05T15:23:42", "url": "https://files.pythonhosted.org/packages/a1/bb/49f30dbac18a61318ea7cf4c1cef974602072c7ebb5611701ddf712a8a62/uri-2.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "56ccb15a8df4e88577331fcbcada226c", "sha256": "df7df5653c8d38cf8a394db0d86728fcbfc6b4ecc62522a7972e078c1cace963" }, "downloads": -1, "filename": "uri-2.0.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "56ccb15a8df4e88577331fcbcada226c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42995, "upload_time": "2018-11-05T15:23:40", "url": "https://files.pythonhosted.org/packages/18/86/d479ab18971bc123c52debbd459304481a3eb0b58b517bc54c3ad4a9a90d/uri-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "31b75e8088fd37c01cc285b6c652917e", "sha256": "b56fa1ca7fdbb43d919d921c360a145358529d5430dec90d46a7b902179529b9" }, "downloads": -1, "filename": "uri-2.0.1.tar.gz", "has_sig": true, "md5_digest": "31b75e8088fd37c01cc285b6c652917e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26302, "upload_time": "2018-11-05T15:23:42", "url": "https://files.pythonhosted.org/packages/a1/bb/49f30dbac18a61318ea7cf4c1cef974602072c7ebb5611701ddf712a8a62/uri-2.0.1.tar.gz" } ] }