Bug 1731145: Don't ignore vendored package *.egg-info directories r=ahal

The `*.egg-info` directories are needed for the packages to show up as
"distributions" to `pip` and other environment-checking logic.

We know that `*.egg-info` directories are cross-platform because they
exist in the globally-usable `tar.gz` releases of packages.

Differential Revision: https://phabricator.services.mozilla.com/D125909
This commit is contained in:
Mitchell Hentges 2021-09-28 14:59:27 +00:00
parent ec0e3ea35a
commit 3ecc6dad6a
86 changed files with 5832 additions and 3 deletions

7
.gitignore vendored
View File

@ -14,11 +14,16 @@ ID
!id/
.DS_Store*
*.pdb
*.egg-info
.eslintcache
# Filesystem temporaries
.fuse_hidden*
# Ignore Python .egg-info directories for first-party modules (but,
# still add vendored packages' .egg-info directories)
*.egg-info
!third_party/python/**/*.egg-info
!testing/web-platform/tests/tools/third_party/**/*.egg-info
# Vim swap files.
.*.sw[a-z]
.sw[a-z]

View File

@ -7,13 +7,16 @@
(^|/)ID$
(^|/)\.DS_Store$
\.pdb
\.egg-info
\.eslintcache
\.gcda
\.gcno
\.gcov
compile_commands\.json
# Ignore Python .egg-info directories for first-party modules (but,
# still add vendored packages' .egg-info directories)
^(?=.*\.egg-info/)(?!^third_party/python/)(?!^testing/web-platform/tests/tools/third_party/)
# Vim swap files.
^\.sw.$
.[^/]*\.sw.$

View File

@ -53,7 +53,6 @@ def test_up_to_date_vendor():
existing_vendored,
work_vendored,
"--exclude=__pycache__",
"--exclude=*.egg-info",
]
)

View File

@ -0,0 +1,101 @@
Metadata-Version: 1.2
Name: MarkupSafe
Version: 1.1.1
Summary: Safely add untrusted strings to HTML/XML markup.
Home-page: https://palletsprojects.com/p/markupsafe/
Author: Armin Ronacher
Author-email: armin.ronacher@active-4.com
Maintainer: The Pallets Team
Maintainer-email: contact@palletsprojects.com
License: BSD-3-Clause
Project-URL: Documentation, https://markupsafe.palletsprojects.com/
Project-URL: Code, https://github.com/pallets/markupsafe
Project-URL: Issue tracker, https://github.com/pallets/markupsafe/issues
Description: MarkupSafe
==========
MarkupSafe implements a text object that escapes characters so it is
safe to use in HTML and XML. Characters that have special meanings are
replaced so that they display as the actual characters. This mitigates
injection attacks, meaning untrusted user input can safely be displayed
on a page.
Installing
----------
Install and update using `pip`_:
.. code-block:: text
pip install -U MarkupSafe
.. _pip: https://pip.pypa.io/en/stable/quickstart/
Examples
--------
.. code-block:: pycon
>>> from markupsafe import Markup, escape
>>> # escape replaces special characters and wraps in Markup
>>> escape('<script>alert(document.cookie);</script>')
Markup(u'&lt;script&gt;alert(document.cookie);&lt;/script&gt;')
>>> # wrap in Markup to mark text "safe" and prevent escaping
>>> Markup('<strong>Hello</strong>')
Markup('<strong>hello</strong>')
>>> escape(Markup('<strong>Hello</strong>'))
Markup('<strong>hello</strong>')
>>> # Markup is a text subclass (str on Python 3, unicode on Python 2)
>>> # methods and operators escape their arguments
>>> template = Markup("Hello <em>%s</em>")
>>> template % '"World"'
Markup('Hello <em>&#34;World&#34;</em>')
Donate
------
The Pallets organization develops and supports MarkupSafe and other
libraries that use it. In order to grow the community of contributors
and users, and allow the maintainers to devote more time to the
projects, `please donate today`_.
.. _please donate today: https://palletsprojects.com/donate
Links
-----
* Website: https://palletsprojects.com/p/markupsafe/
* Documentation: https://markupsafe.palletsprojects.com/
* License: `BSD-3-Clause <https://github.com/pallets/markupsafe/blob/master/LICENSE.rst>`_
* Releases: https://pypi.org/project/MarkupSafe/
* Code: https://github.com/pallets/markupsafe
* Issue tracker: https://github.com/pallets/markupsafe/issues
* Test status:
* Linux, Mac: https://travis-ci.org/pallets/markupsafe
* Windows: https://ci.appveyor.com/project/pallets/markupsafe
* Test coverage: https://codecov.io/gh/pallets/markupsafe
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Text Processing :: Markup :: HTML
Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*

View File

@ -0,0 +1,31 @@
CHANGES.rst
LICENSE.rst
MANIFEST.in
README.rst
setup.cfg
setup.py
tox.ini
docs/Makefile
docs/changes.rst
docs/conf.py
docs/escaping.rst
docs/formatting.rst
docs/html.rst
docs/index.rst
docs/license.rst
docs/make.bat
docs/requirements.txt
src/MarkupSafe.egg-info/PKG-INFO
src/MarkupSafe.egg-info/SOURCES.txt
src/MarkupSafe.egg-info/dependency_links.txt
src/MarkupSafe.egg-info/top_level.txt
src/markupsafe/__init__.py
src/markupsafe/_compat.py
src/markupsafe/_constants.py
src/markupsafe/_native.py
src/markupsafe/_speedups.c
tests/conftest.py
tests/test_escape.py
tests/test_exception_custom_html.py
tests/test_leak.py
tests/test_markupsafe.py

View File

@ -0,0 +1 @@
markupsafe

View File

@ -0,0 +1,44 @@
Metadata-Version: 1.2
Name: PyYAML
Version: 5.4.1
Summary: YAML parser and emitter for Python
Home-page: https://pyyaml.org/
Author: Kirill Simonov
Author-email: xi@resolvent.net
License: MIT
Download-URL: https://pypi.org/project/PyYAML/
Project-URL: Bug Tracker, https://github.com/yaml/pyyaml/issues
Project-URL: CI, https://github.com/yaml/pyyaml/actions
Project-URL: Documentation, https://pyyaml.org/wiki/PyYAMLDocumentation
Project-URL: Mailing lists, http://lists.sourceforge.net/lists/listinfo/yaml-core
Project-URL: Source Code, https://github.com/yaml/pyyaml
Description: YAML is a data serialization format designed for human readability
and interaction with scripting languages. PyYAML is a YAML parser
and emitter for Python.
PyYAML features a complete YAML 1.1 parser, Unicode support, pickle
support, capable extension API, and sensible error messages. PyYAML
supports standard YAML tags and provides Python-specific tags that
allow to represent an arbitrary Python object.
PyYAML is applicable for a broad range of tasks from complex
configuration files to object serialization and persistence.
Platform: Any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Cython
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Text Processing :: Markup
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*

View File

@ -0,0 +1,670 @@
CHANGES
LICENSE
MANIFEST.in
Makefile
README
pyproject.toml
setup.cfg
setup.py
examples/pygments-lexer/example.yaml
examples/pygments-lexer/yaml.py
examples/yaml-highlight/yaml_hl.cfg
examples/yaml-highlight/yaml_hl.py
lib/_yaml/__init__.py
lib/yaml/__init__.py
lib/yaml/composer.py
lib/yaml/constructor.py
lib/yaml/cyaml.py
lib/yaml/dumper.py
lib/yaml/emitter.py
lib/yaml/error.py
lib/yaml/events.py
lib/yaml/loader.py
lib/yaml/nodes.py
lib/yaml/parser.py
lib/yaml/reader.py
lib/yaml/representer.py
lib/yaml/resolver.py
lib/yaml/scanner.py
lib/yaml/serializer.py
lib/yaml/tokens.py
lib3/PyYAML.egg-info/PKG-INFO
lib3/PyYAML.egg-info/SOURCES.txt
lib3/PyYAML.egg-info/dependency_links.txt
lib3/PyYAML.egg-info/top_level.txt
lib3/_yaml/__init__.py
lib3/yaml/__init__.py
lib3/yaml/composer.py
lib3/yaml/constructor.py
lib3/yaml/cyaml.py
lib3/yaml/dumper.py
lib3/yaml/emitter.py
lib3/yaml/error.py
lib3/yaml/events.py
lib3/yaml/loader.py
lib3/yaml/nodes.py
lib3/yaml/parser.py
lib3/yaml/reader.py
lib3/yaml/representer.py
lib3/yaml/resolver.py
lib3/yaml/scanner.py
lib3/yaml/serializer.py
lib3/yaml/tokens.py
tests/data/a-nasty-libyaml-bug.loader-error
tests/data/aliases-cdumper-bug.code
tests/data/aliases.events
tests/data/bool.data
tests/data/bool.detect
tests/data/construct-binary-py2.code
tests/data/construct-binary-py2.data
tests/data/construct-binary-py3.code
tests/data/construct-binary-py3.data
tests/data/construct-bool.code
tests/data/construct-bool.data
tests/data/construct-custom.code
tests/data/construct-custom.data
tests/data/construct-float.code
tests/data/construct-float.data
tests/data/construct-int.code
tests/data/construct-int.data
tests/data/construct-map.code
tests/data/construct-map.data
tests/data/construct-merge.code
tests/data/construct-merge.data
tests/data/construct-null.code
tests/data/construct-null.data
tests/data/construct-omap.code
tests/data/construct-omap.data
tests/data/construct-pairs.code
tests/data/construct-pairs.data
tests/data/construct-python-bool.code
tests/data/construct-python-bool.data
tests/data/construct-python-bytes-py3.code
tests/data/construct-python-bytes-py3.data
tests/data/construct-python-complex.code
tests/data/construct-python-complex.data
tests/data/construct-python-float.code
tests/data/construct-python-float.data
tests/data/construct-python-int.code
tests/data/construct-python-int.data
tests/data/construct-python-long-short-py2.code
tests/data/construct-python-long-short-py2.data
tests/data/construct-python-long-short-py3.code
tests/data/construct-python-long-short-py3.data
tests/data/construct-python-name-module.code
tests/data/construct-python-name-module.data
tests/data/construct-python-none.code
tests/data/construct-python-none.data
tests/data/construct-python-object.code
tests/data/construct-python-object.data
tests/data/construct-python-str-ascii.code
tests/data/construct-python-str-ascii.data
tests/data/construct-python-str-utf8-py2.code
tests/data/construct-python-str-utf8-py2.data
tests/data/construct-python-str-utf8-py3.code
tests/data/construct-python-str-utf8-py3.data
tests/data/construct-python-tuple-list-dict.code
tests/data/construct-python-tuple-list-dict.data
tests/data/construct-python-unicode-ascii-py2.code
tests/data/construct-python-unicode-ascii-py2.data
tests/data/construct-python-unicode-ascii-py3.code
tests/data/construct-python-unicode-ascii-py3.data
tests/data/construct-python-unicode-utf8-py2.code
tests/data/construct-python-unicode-utf8-py2.data
tests/data/construct-python-unicode-utf8-py3.code
tests/data/construct-python-unicode-utf8-py3.data
tests/data/construct-seq.code
tests/data/construct-seq.data
tests/data/construct-set.code
tests/data/construct-set.data
tests/data/construct-str-ascii.code
tests/data/construct-str-ascii.data
tests/data/construct-str-utf8-py2.code
tests/data/construct-str-utf8-py2.data
tests/data/construct-str-utf8-py3.code
tests/data/construct-str-utf8-py3.data
tests/data/construct-str.code
tests/data/construct-str.data
tests/data/construct-timestamp.code
tests/data/construct-timestamp.data
tests/data/construct-value.code
tests/data/construct-value.data
tests/data/document-separator-in-quoted-scalar.loader-error
tests/data/documents.events
tests/data/duplicate-anchor-1.loader-error
tests/data/duplicate-anchor-2.loader-error
tests/data/duplicate-key.former-loader-error.code
tests/data/duplicate-key.former-loader-error.data
tests/data/duplicate-mapping-key.former-loader-error.code
tests/data/duplicate-mapping-key.former-loader-error.data
tests/data/duplicate-merge-key.former-loader-error.code
tests/data/duplicate-merge-key.former-loader-error.data
tests/data/duplicate-tag-directive.loader-error
tests/data/duplicate-value-key.former-loader-error.code
tests/data/duplicate-value-key.former-loader-error.data
tests/data/duplicate-yaml-directive.loader-error
tests/data/emit-block-scalar-in-simple-key-context-bug.canonical
tests/data/emit-block-scalar-in-simple-key-context-bug.data
tests/data/emitting-unacceptable-unicode-character-bug-py3.code
tests/data/emitting-unacceptable-unicode-character-bug-py3.data
tests/data/emitting-unacceptable-unicode-character-bug-py3.skip-ext
tests/data/emitting-unacceptable-unicode-character-bug.code
tests/data/emitting-unacceptable-unicode-character-bug.data
tests/data/emitting-unacceptable-unicode-character-bug.skip-ext
tests/data/emoticons.unicode
tests/data/emoticons2.unicode
tests/data/empty-anchor.emitter-error
tests/data/empty-document-bug.canonical
tests/data/empty-document-bug.data
tests/data/empty-document-bug.empty
tests/data/empty-documents.single-loader-error
tests/data/empty-python-module.loader-error
tests/data/empty-python-name.loader-error
tests/data/empty-tag-handle.emitter-error
tests/data/empty-tag-prefix.emitter-error
tests/data/empty-tag.emitter-error
tests/data/expected-document-end.emitter-error
tests/data/expected-document-start.emitter-error
tests/data/expected-mapping.loader-error
tests/data/expected-node-1.emitter-error
tests/data/expected-node-2.emitter-error
tests/data/expected-nothing.emitter-error
tests/data/expected-scalar.loader-error
tests/data/expected-sequence.loader-error
tests/data/expected-stream-start.emitter-error
tests/data/explicit-document.single-loader-error
tests/data/fetch-complex-value-bug.loader-error
tests/data/float-representer-2.3-bug.code
tests/data/float-representer-2.3-bug.data
tests/data/float.data
tests/data/float.detect
tests/data/forbidden-entry.loader-error
tests/data/forbidden-key.loader-error
tests/data/forbidden-value.loader-error
tests/data/implicit-document.single-loader-error
tests/data/int.data
tests/data/int.detect
tests/data/invalid-anchor-1.loader-error
tests/data/invalid-anchor-2.loader-error
tests/data/invalid-anchor.emitter-error
tests/data/invalid-base64-data-2.loader-error
tests/data/invalid-base64-data.loader-error
tests/data/invalid-block-scalar-indicator.loader-error
tests/data/invalid-character.loader-error
tests/data/invalid-character.stream-error
tests/data/invalid-directive-line.loader-error
tests/data/invalid-directive-name-1.loader-error
tests/data/invalid-directive-name-2.loader-error
tests/data/invalid-escape-character.loader-error
tests/data/invalid-escape-numbers.loader-error
tests/data/invalid-indentation-indicator-1.loader-error
tests/data/invalid-indentation-indicator-2.loader-error
tests/data/invalid-item-without-trailing-break.loader-error
tests/data/invalid-merge-1.loader-error
tests/data/invalid-merge-2.loader-error
tests/data/invalid-omap-1.loader-error
tests/data/invalid-omap-2.loader-error
tests/data/invalid-omap-3.loader-error
tests/data/invalid-pairs-1.loader-error
tests/data/invalid-pairs-2.loader-error
tests/data/invalid-pairs-3.loader-error
tests/data/invalid-python-bytes-2-py3.loader-error
tests/data/invalid-python-bytes-py3.loader-error
tests/data/invalid-python-module-kind.loader-error
tests/data/invalid-python-module-value.loader-error
tests/data/invalid-python-module.loader-error
tests/data/invalid-python-name-kind.loader-error
tests/data/invalid-python-name-module.loader-error
tests/data/invalid-python-name-object.loader-error
tests/data/invalid-python-name-value.loader-error
tests/data/invalid-simple-key.loader-error
tests/data/invalid-single-quote-bug.code
tests/data/invalid-single-quote-bug.data
tests/data/invalid-starting-character.loader-error
tests/data/invalid-tag-1.loader-error
tests/data/invalid-tag-2.loader-error
tests/data/invalid-tag-directive-handle.loader-error
tests/data/invalid-tag-directive-prefix.loader-error
tests/data/invalid-tag-handle-1.emitter-error
tests/data/invalid-tag-handle-1.loader-error
tests/data/invalid-tag-handle-2.emitter-error
tests/data/invalid-tag-handle-2.loader-error
tests/data/invalid-uri-escapes-1.loader-error
tests/data/invalid-uri-escapes-2.loader-error
tests/data/invalid-uri-escapes-3.loader-error
tests/data/invalid-uri.loader-error
tests/data/invalid-utf8-byte.loader-error
tests/data/invalid-utf8-byte.stream-error
tests/data/invalid-yaml-directive-version-1.loader-error
tests/data/invalid-yaml-directive-version-2.loader-error
tests/data/invalid-yaml-directive-version-3.loader-error
tests/data/invalid-yaml-directive-version-4.loader-error
tests/data/invalid-yaml-directive-version-5.loader-error
tests/data/invalid-yaml-directive-version-6.loader-error
tests/data/invalid-yaml-version.loader-error
tests/data/latin.unicode
tests/data/mapping.sort
tests/data/mapping.sorted
tests/data/mappings.events
tests/data/merge.data
tests/data/merge.detect
tests/data/more-floats.code
tests/data/more-floats.data
tests/data/multi-constructor.code
tests/data/multi-constructor.multi
tests/data/myfullloader.subclass_blacklist
tests/data/negative-float-bug.code
tests/data/negative-float-bug.data
tests/data/no-alias-anchor.emitter-error
tests/data/no-alias-anchor.skip-ext
tests/data/no-block-collection-end.loader-error
tests/data/no-block-mapping-end-2.loader-error
tests/data/no-block-mapping-end.loader-error
tests/data/no-document-start.loader-error
tests/data/no-flow-mapping-end.loader-error
tests/data/no-flow-sequence-end.loader-error
tests/data/no-node-1.loader-error
tests/data/no-node-2.loader-error
tests/data/no-tag.emitter-error
tests/data/null.data
tests/data/null.detect
tests/data/odd-utf16.stream-error
tests/data/overwrite-state-new-constructor.loader-error
tests/data/recursive-anchor.former-loader-error
tests/data/recursive-dict.recursive
tests/data/recursive-list.recursive
tests/data/recursive-set.recursive
tests/data/recursive-state.recursive
tests/data/recursive-tuple.recursive
tests/data/recursive.former-dumper-error
tests/data/remove-possible-simple-key-bug.loader-error
tests/data/resolver.data
tests/data/resolver.path
tests/data/run-parser-crash-bug.data
tests/data/scalars.events
tests/data/scan-document-end-bug.canonical
tests/data/scan-document-end-bug.data
tests/data/scan-line-break-bug.canonical
tests/data/scan-line-break-bug.data
tests/data/sequences.events
tests/data/serializer-is-already-opened.dumper-error
tests/data/serializer-is-closed-1.dumper-error
tests/data/serializer-is-closed-2.dumper-error
tests/data/serializer-is-not-opened-1.dumper-error
tests/data/serializer-is-not-opened-2.dumper-error
tests/data/single-dot-is-not-float-bug.code
tests/data/single-dot-is-not-float-bug.data
tests/data/sloppy-indentation.canonical
tests/data/sloppy-indentation.data
tests/data/spec-02-01.data
tests/data/spec-02-01.structure
tests/data/spec-02-01.tokens
tests/data/spec-02-02.data
tests/data/spec-02-02.structure
tests/data/spec-02-02.tokens
tests/data/spec-02-03.data
tests/data/spec-02-03.structure
tests/data/spec-02-03.tokens
tests/data/spec-02-04.data
tests/data/spec-02-04.structure
tests/data/spec-02-04.tokens
tests/data/spec-02-05.data
tests/data/spec-02-05.structure
tests/data/spec-02-05.tokens
tests/data/spec-02-06.data
tests/data/spec-02-06.structure
tests/data/spec-02-06.tokens
tests/data/spec-02-07.data
tests/data/spec-02-07.structure
tests/data/spec-02-07.tokens
tests/data/spec-02-08.data
tests/data/spec-02-08.structure
tests/data/spec-02-08.tokens
tests/data/spec-02-09.data
tests/data/spec-02-09.structure
tests/data/spec-02-09.tokens
tests/data/spec-02-10.data
tests/data/spec-02-10.structure
tests/data/spec-02-10.tokens
tests/data/spec-02-11.data
tests/data/spec-02-11.structure
tests/data/spec-02-11.tokens
tests/data/spec-02-12.data
tests/data/spec-02-12.structure
tests/data/spec-02-12.tokens
tests/data/spec-02-13.data
tests/data/spec-02-13.structure
tests/data/spec-02-13.tokens
tests/data/spec-02-14.data
tests/data/spec-02-14.structure
tests/data/spec-02-14.tokens
tests/data/spec-02-15.data
tests/data/spec-02-15.structure
tests/data/spec-02-15.tokens
tests/data/spec-02-16.data
tests/data/spec-02-16.structure
tests/data/spec-02-16.tokens
tests/data/spec-02-17.data
tests/data/spec-02-17.structure
tests/data/spec-02-17.tokens
tests/data/spec-02-18.data
tests/data/spec-02-18.structure
tests/data/spec-02-18.tokens
tests/data/spec-02-19.data
tests/data/spec-02-19.structure
tests/data/spec-02-19.tokens
tests/data/spec-02-20.data
tests/data/spec-02-20.structure
tests/data/spec-02-20.tokens
tests/data/spec-02-21.data
tests/data/spec-02-21.structure
tests/data/spec-02-21.tokens
tests/data/spec-02-22.data
tests/data/spec-02-22.structure
tests/data/spec-02-22.tokens
tests/data/spec-02-23.data
tests/data/spec-02-23.structure
tests/data/spec-02-23.tokens
tests/data/spec-02-24.data
tests/data/spec-02-24.structure
tests/data/spec-02-24.tokens
tests/data/spec-02-25.data
tests/data/spec-02-25.structure
tests/data/spec-02-25.tokens
tests/data/spec-02-26.data
tests/data/spec-02-26.structure
tests/data/spec-02-26.tokens
tests/data/spec-02-27.data
tests/data/spec-02-27.structure
tests/data/spec-02-27.tokens
tests/data/spec-02-28.data
tests/data/spec-02-28.structure
tests/data/spec-02-28.tokens
tests/data/spec-05-01-utf16be.data
tests/data/spec-05-01-utf16be.empty
tests/data/spec-05-01-utf16le.data
tests/data/spec-05-01-utf16le.empty
tests/data/spec-05-01-utf8.data
tests/data/spec-05-01-utf8.empty
tests/data/spec-05-02-utf16be.data
tests/data/spec-05-02-utf16be.error
tests/data/spec-05-02-utf16le.data
tests/data/spec-05-02-utf16le.error
tests/data/spec-05-02-utf8.data
tests/data/spec-05-02-utf8.error
tests/data/spec-05-03.canonical
tests/data/spec-05-03.data
tests/data/spec-05-04.canonical
tests/data/spec-05-04.data
tests/data/spec-05-05.data
tests/data/spec-05-05.empty
tests/data/spec-05-06.canonical
tests/data/spec-05-06.data
tests/data/spec-05-07.canonical
tests/data/spec-05-07.data
tests/data/spec-05-08.canonical
tests/data/spec-05-08.data
tests/data/spec-05-09.canonical
tests/data/spec-05-09.data
tests/data/spec-05-10.data
tests/data/spec-05-10.error
tests/data/spec-05-11.canonical
tests/data/spec-05-11.data
tests/data/spec-05-12.data
tests/data/spec-05-12.error
tests/data/spec-05-13.canonical
tests/data/spec-05-13.data
tests/data/spec-05-14.canonical
tests/data/spec-05-14.data
tests/data/spec-05-15.data
tests/data/spec-05-15.error
tests/data/spec-06-01.canonical
tests/data/spec-06-01.data
tests/data/spec-06-02.data
tests/data/spec-06-02.empty
tests/data/spec-06-03.canonical
tests/data/spec-06-03.data
tests/data/spec-06-04.canonical
tests/data/spec-06-04.data
tests/data/spec-06-05.canonical
tests/data/spec-06-05.data
tests/data/spec-06-06.canonical
tests/data/spec-06-06.data
tests/data/spec-06-07.canonical
tests/data/spec-06-07.data
tests/data/spec-06-08.canonical
tests/data/spec-06-08.data
tests/data/spec-07-01.canonical
tests/data/spec-07-01.data
tests/data/spec-07-01.skip-ext
tests/data/spec-07-02.canonical
tests/data/spec-07-02.data
tests/data/spec-07-02.skip-ext
tests/data/spec-07-03.data
tests/data/spec-07-03.error
tests/data/spec-07-04.canonical
tests/data/spec-07-04.data
tests/data/spec-07-05.data
tests/data/spec-07-05.error
tests/data/spec-07-06.canonical
tests/data/spec-07-06.data
tests/data/spec-07-07a.canonical
tests/data/spec-07-07a.data
tests/data/spec-07-07b.canonical
tests/data/spec-07-07b.data
tests/data/spec-07-08.canonical
tests/data/spec-07-08.data
tests/data/spec-07-09.canonical
tests/data/spec-07-09.data
tests/data/spec-07-10.canonical
tests/data/spec-07-10.data
tests/data/spec-07-11.data
tests/data/spec-07-11.empty
tests/data/spec-07-12a.canonical
tests/data/spec-07-12a.data
tests/data/spec-07-12b.canonical
tests/data/spec-07-12b.data
tests/data/spec-07-13.canonical
tests/data/spec-07-13.data
tests/data/spec-08-01.canonical
tests/data/spec-08-01.data
tests/data/spec-08-02.canonical
tests/data/spec-08-02.data
tests/data/spec-08-03.canonical
tests/data/spec-08-03.data
tests/data/spec-08-04.data
tests/data/spec-08-04.error
tests/data/spec-08-05.canonical
tests/data/spec-08-05.data
tests/data/spec-08-06.data
tests/data/spec-08-06.error
tests/data/spec-08-07.canonical
tests/data/spec-08-07.data
tests/data/spec-08-08.canonical
tests/data/spec-08-08.data
tests/data/spec-08-09.canonical
tests/data/spec-08-09.data
tests/data/spec-08-10.canonical
tests/data/spec-08-10.data
tests/data/spec-08-11.canonical
tests/data/spec-08-11.data
tests/data/spec-08-12.canonical
tests/data/spec-08-12.data
tests/data/spec-08-13.canonical
tests/data/spec-08-13.data
tests/data/spec-08-13.skip-ext
tests/data/spec-08-14.canonical
tests/data/spec-08-14.data
tests/data/spec-08-15.canonical
tests/data/spec-08-15.data
tests/data/spec-09-01.canonical
tests/data/spec-09-01.data
tests/data/spec-09-02.canonical
tests/data/spec-09-02.data
tests/data/spec-09-03.canonical
tests/data/spec-09-03.data
tests/data/spec-09-04.canonical
tests/data/spec-09-04.data
tests/data/spec-09-05.canonical
tests/data/spec-09-05.data
tests/data/spec-09-06.canonical
tests/data/spec-09-06.data
tests/data/spec-09-07.canonical
tests/data/spec-09-07.data
tests/data/spec-09-08.canonical
tests/data/spec-09-08.data
tests/data/spec-09-09.canonical
tests/data/spec-09-09.data
tests/data/spec-09-10.canonical
tests/data/spec-09-10.data
tests/data/spec-09-11.canonical
tests/data/spec-09-11.data
tests/data/spec-09-12.canonical
tests/data/spec-09-12.data
tests/data/spec-09-13.canonical
tests/data/spec-09-13.data
tests/data/spec-09-14.data
tests/data/spec-09-14.error
tests/data/spec-09-15.canonical
tests/data/spec-09-15.data
tests/data/spec-09-16.canonical
tests/data/spec-09-16.data
tests/data/spec-09-17.canonical
tests/data/spec-09-17.data
tests/data/spec-09-18.canonical
tests/data/spec-09-18.data
tests/data/spec-09-19.canonical
tests/data/spec-09-19.data
tests/data/spec-09-20.canonical
tests/data/spec-09-20.data
tests/data/spec-09-20.skip-ext
tests/data/spec-09-21.data
tests/data/spec-09-21.error
tests/data/spec-09-22.canonical
tests/data/spec-09-22.data
tests/data/spec-09-23.canonical
tests/data/spec-09-23.data
tests/data/spec-09-24.canonical
tests/data/spec-09-24.data
tests/data/spec-09-25.canonical
tests/data/spec-09-25.data
tests/data/spec-09-26.canonical
tests/data/spec-09-26.data
tests/data/spec-09-27.canonical
tests/data/spec-09-27.data
tests/data/spec-09-28.canonical
tests/data/spec-09-28.data
tests/data/spec-09-29.canonical
tests/data/spec-09-29.data
tests/data/spec-09-30.canonical
tests/data/spec-09-30.data
tests/data/spec-09-31.canonical
tests/data/spec-09-31.data
tests/data/spec-09-32.canonical
tests/data/spec-09-32.data
tests/data/spec-09-33.canonical
tests/data/spec-09-33.data
tests/data/spec-10-01.canonical
tests/data/spec-10-01.data
tests/data/spec-10-02.canonical
tests/data/spec-10-02.data
tests/data/spec-10-03.canonical
tests/data/spec-10-03.data
tests/data/spec-10-04.canonical
tests/data/spec-10-04.data
tests/data/spec-10-05.canonical
tests/data/spec-10-05.data
tests/data/spec-10-06.canonical
tests/data/spec-10-06.data
tests/data/spec-10-07.canonical
tests/data/spec-10-07.data
tests/data/spec-10-08.data
tests/data/spec-10-08.error
tests/data/spec-10-09.canonical
tests/data/spec-10-09.data
tests/data/spec-10-10.canonical
tests/data/spec-10-10.data
tests/data/spec-10-11.canonical
tests/data/spec-10-11.data
tests/data/spec-10-12.canonical
tests/data/spec-10-12.data
tests/data/spec-10-13.canonical
tests/data/spec-10-13.data
tests/data/spec-10-14.canonical
tests/data/spec-10-14.data
tests/data/spec-10-15.canonical
tests/data/spec-10-15.data
tests/data/str.data
tests/data/str.detect
tests/data/tags.events
tests/data/test_mark.marks
tests/data/timestamp-bugs.code
tests/data/timestamp-bugs.data
tests/data/timestamp.data
tests/data/timestamp.detect
tests/data/unacceptable-key.loader-error
tests/data/unclosed-bracket.loader-error
tests/data/unclosed-quoted-scalar.loader-error
tests/data/undefined-anchor.loader-error
tests/data/undefined-constructor.loader-error
tests/data/undefined-tag-handle.loader-error
tests/data/unknown.dumper-error
tests/data/unsupported-version.emitter-error
tests/data/utf16be.code
tests/data/utf16be.data
tests/data/utf16le.code
tests/data/utf16le.data
tests/data/utf8-implicit.code
tests/data/utf8-implicit.data
tests/data/utf8.code
tests/data/utf8.data
tests/data/value.data
tests/data/value.detect
tests/data/yaml.data
tests/data/yaml.detect
tests/lib/canonical.py
tests/lib/test_all.py
tests/lib/test_appliance.py
tests/lib/test_build.py
tests/lib/test_build_ext.py
tests/lib/test_canonical.py
tests/lib/test_constructor.py
tests/lib/test_emitter.py
tests/lib/test_errors.py
tests/lib/test_input_output.py
tests/lib/test_mark.py
tests/lib/test_multi_constructor.py
tests/lib/test_reader.py
tests/lib/test_recursive.py
tests/lib/test_representer.py
tests/lib/test_resolver.py
tests/lib/test_sort_keys.py
tests/lib/test_structure.py
tests/lib/test_tokens.py
tests/lib/test_yaml.py
tests/lib/test_yaml_ext.py
tests/lib3/canonical.py
tests/lib3/test_all.py
tests/lib3/test_appliance.py
tests/lib3/test_build.py
tests/lib3/test_build_ext.py
tests/lib3/test_canonical.py
tests/lib3/test_constructor.py
tests/lib3/test_emitter.py
tests/lib3/test_errors.py
tests/lib3/test_input_output.py
tests/lib3/test_mark.py
tests/lib3/test_multi_constructor.py
tests/lib3/test_reader.py
tests/lib3/test_recursive.py
tests/lib3/test_representer.py
tests/lib3/test_resolver.py
tests/lib3/test_sort_keys.py
tests/lib3/test_structure.py
tests/lib3/test_tokens.py
tests/lib3/test_yaml.py
tests/lib3/test_yaml_ext.py
yaml/__init__.pxd
yaml/_yaml.h
yaml/_yaml.pxd
yaml/_yaml.pyx

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,2 @@
_yaml
yaml

View File

@ -0,0 +1,966 @@
Metadata-Version: 2.1
Name: aiohttp
Version: 3.7.4.post0
Summary: Async http client/server framework (asyncio)
Home-page: https://github.com/aio-libs/aiohttp
Author: Nikolay Kim
Author-email: fafhrd91@gmail.com
Maintainer: Nikolay Kim <fafhrd91@gmail.com>, Andrew Svetlov <andrew.svetlov@gmail.com>
Maintainer-email: aio-libs@googlegroups.com
License: Apache 2
Project-URL: Chat: Gitter, https://gitter.im/aio-libs/Lobby
Project-URL: CI: Azure Pipelines, https://dev.azure.com/aio-libs/aiohttp/_build
Project-URL: Coverage: codecov, https://codecov.io/github/aio-libs/aiohttp
Project-URL: Docs: RTD, https://docs.aiohttp.org
Project-URL: GitHub: issues, https://github.com/aio-libs/aiohttp/issues
Project-URL: GitHub: repo, https://github.com/aio-libs/aiohttp
Description: ==================================
Async http client/server framework
==================================
.. image:: https://raw.githubusercontent.com/aio-libs/aiohttp/master/docs/_static/aiohttp-icon-128x128.png
:height: 64px
:width: 64px
:alt: aiohttp logo
|
.. image:: https://github.com/aio-libs/aiohttp/workflows/CI/badge.svg
:target: https://github.com/aio-libs/aiohttp/actions?query=workflow%3ACI
:alt: GitHub Actions status for master branch
.. image:: https://codecov.io/gh/aio-libs/aiohttp/branch/master/graph/badge.svg
:target: https://codecov.io/gh/aio-libs/aiohttp
:alt: codecov.io status for master branch
.. image:: https://badge.fury.io/py/aiohttp.svg
:target: https://pypi.org/project/aiohttp
:alt: Latest PyPI package version
.. image:: https://readthedocs.org/projects/aiohttp/badge/?version=latest
:target: https://docs.aiohttp.org/
:alt: Latest Read The Docs
.. image:: https://img.shields.io/discourse/status?server=https%3A%2F%2Faio-libs.discourse.group
:target: https://aio-libs.discourse.group
:alt: Discourse status
.. image:: https://badges.gitter.im/Join%20Chat.svg
:target: https://gitter.im/aio-libs/Lobby
:alt: Chat on Gitter
Key Features
============
- Supports both client and server side of HTTP protocol.
- Supports both client and server Web-Sockets out-of-the-box and avoids
Callback Hell.
- Provides Web-server with middlewares and plugable routing.
Getting started
===============
Client
------
To get something from the web:
.. code-block:: python
import aiohttp
import asyncio
async def main():
async with aiohttp.ClientSession() as session:
async with session.get('http://python.org') as response:
print("Status:", response.status)
print("Content-type:", response.headers['content-type'])
html = await response.text()
print("Body:", html[:15], "...")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
This prints:
.. code-block::
Status: 200
Content-type: text/html; charset=utf-8
Body: <!doctype html> ...
Coming from `requests <https://requests.readthedocs.io/>`_ ? Read `why we need so many lines <https://aiohttp.readthedocs.io/en/latest/http_request_lifecycle.html>`_.
Server
------
An example using a simple server:
.. code-block:: python
# examples/server_simple.py
from aiohttp import web
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(text=text)
async def wshandle(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
async for msg in ws:
if msg.type == web.WSMsgType.text:
await ws.send_str("Hello, {}".format(msg.data))
elif msg.type == web.WSMsgType.binary:
await ws.send_bytes(msg.data)
elif msg.type == web.WSMsgType.close:
break
return ws
app = web.Application()
app.add_routes([web.get('/', handle),
web.get('/echo', wshandle),
web.get('/{name}', handle)])
if __name__ == '__main__':
web.run_app(app)
Documentation
=============
https://aiohttp.readthedocs.io/
Demos
=====
https://github.com/aio-libs/aiohttp-demos
External links
==============
* `Third party libraries
<http://aiohttp.readthedocs.io/en/latest/third_party.html>`_
* `Built with aiohttp
<http://aiohttp.readthedocs.io/en/latest/built_with.html>`_
* `Powered by aiohttp
<http://aiohttp.readthedocs.io/en/latest/powered_by.html>`_
Feel free to make a Pull Request for adding your link to these pages!
Communication channels
======================
*aio-libs discourse group*: https://aio-libs.discourse.group
*gitter chat* https://gitter.im/aio-libs/Lobby
We support `Stack Overflow
<https://stackoverflow.com/questions/tagged/aiohttp>`_.
Please add *aiohttp* tag to your question there.
Requirements
============
- Python >= 3.6
- async-timeout_
- attrs_
- chardet_
- multidict_
- yarl_
Optionally you may install the cChardet_ and aiodns_ libraries (highly
recommended for sake of speed).
.. _chardet: https://pypi.python.org/pypi/chardet
.. _aiodns: https://pypi.python.org/pypi/aiodns
.. _attrs: https://github.com/python-attrs/attrs
.. _multidict: https://pypi.python.org/pypi/multidict
.. _yarl: https://pypi.python.org/pypi/yarl
.. _async-timeout: https://pypi.python.org/pypi/async_timeout
.. _cChardet: https://pypi.python.org/pypi/cchardet
License
=======
``aiohttp`` is offered under the Apache 2 license.
Keepsafe
========
The aiohttp community would like to thank Keepsafe
(https://www.getkeepsafe.com) for its support in the early days of
the project.
Source code
===========
The latest developer version is available in a GitHub repository:
https://github.com/aio-libs/aiohttp
Benchmarks
==========
If you are interested in efficiency, the AsyncIO community maintains a
list of benchmarks on the official wiki:
https://github.com/python/asyncio/wiki/Benchmarks
=========
Changelog
=========
..
You should *NOT* be adding new change log entries to this file, this
file is managed by towncrier. You *may* edit previous change logs to
fix problems like typo corrections or such.
To add a new change log entry, please see
https://pip.pypa.io/en/latest/development/#adding-a-news-entry
we named the news folder "changes".
WARNING: Don't drop the next directive!
.. towncrier release notes start
3.7.4.post0 (2021-03-06)
========================
Misc
----
- Bumped upper bound of the ``chardet`` runtime dependency
to allow their v4.0 version stream.
`#5366 <https://github.com/aio-libs/aiohttp/issues/5366>`_
----
3.7.4 (2021-02-25)
==================
Bugfixes
--------
- **(SECURITY BUG)** Started preventing open redirects in the
``aiohttp.web.normalize_path_middleware`` middleware. For
more details, see
https://github.com/aio-libs/aiohttp/security/advisories/GHSA-v6wp-4m6f-gcjg.
Thanks to `Beast Glatisant <https://github.com/g147>`__ for
finding the first instance of this issue and `Jelmer Vernooij
<https://jelmer.uk/>`__ for reporting and tracking it down
in aiohttp.
`#5497 <https://github.com/aio-libs/aiohttp/issues/5497>`_
- Fix interpretation difference of the pure-Python and the Cython-based
HTTP parsers construct a ``yarl.URL`` object for HTTP request-target.
Before this fix, the Python parser would turn the URI's absolute-path
for ``//some-path`` into ``/`` while the Cython code preserved it as
``//some-path``. Now, both do the latter.
`#5498 <https://github.com/aio-libs/aiohttp/issues/5498>`_
----
3.7.3 (2020-11-18)
==================
Features
--------
- Use Brotli instead of brotlipy
`#3803 <https://github.com/aio-libs/aiohttp/issues/3803>`_
- Made exceptions pickleable. Also changed the repr of some exceptions.
`#4077 <https://github.com/aio-libs/aiohttp/issues/4077>`_
Bugfixes
--------
- Raise a ClientResponseError instead of an AssertionError for a blank
HTTP Reason Phrase.
`#3532 <https://github.com/aio-libs/aiohttp/issues/3532>`_
- Fix ``web_middlewares.normalize_path_middleware`` behavior for patch without slash.
`#3669 <https://github.com/aio-libs/aiohttp/issues/3669>`_
- Fix overshadowing of overlapped sub-applications prefixes.
`#3701 <https://github.com/aio-libs/aiohttp/issues/3701>`_
- Make `BaseConnector.close()` a coroutine and wait until the client closes all connections. Drop deprecated "with Connector():" syntax.
`#3736 <https://github.com/aio-libs/aiohttp/issues/3736>`_
- Reset the ``sock_read`` timeout each time data is received for a ``aiohttp.client`` response.
`#3808 <https://github.com/aio-libs/aiohttp/issues/3808>`_
- Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of View
`#3880 <https://github.com/aio-libs/aiohttp/issues/3880>`_
- Fixed querying the address families from DNS that the current host supports.
`#5156 <https://github.com/aio-libs/aiohttp/issues/5156>`_
- Change return type of MultipartReader.__aiter__() and BodyPartReader.__aiter__() to AsyncIterator.
`#5163 <https://github.com/aio-libs/aiohttp/issues/5163>`_
- Provide x86 Windows wheels.
`#5230 <https://github.com/aio-libs/aiohttp/issues/5230>`_
Improved Documentation
----------------------
- Add documentation for ``aiohttp.web.FileResponse``.
`#3958 <https://github.com/aio-libs/aiohttp/issues/3958>`_
- Removed deprecation warning in tracing example docs
`#3964 <https://github.com/aio-libs/aiohttp/issues/3964>`_
- Fixed wrong "Usage" docstring of ``aiohttp.client.request``.
`#4603 <https://github.com/aio-libs/aiohttp/issues/4603>`_
- Add aiohttp-pydantic to third party libraries
`#5228 <https://github.com/aio-libs/aiohttp/issues/5228>`_
Misc
----
- `#4102 <https://github.com/aio-libs/aiohttp/issues/4102>`_
----
3.7.2 (2020-10-27)
==================
Bugfixes
--------
- Fixed static files handling for loops without ``.sendfile()`` support
`#5149 <https://github.com/aio-libs/aiohttp/issues/5149>`_
----
3.7.1 (2020-10-25)
==================
Bugfixes
--------
- Fixed a type error caused by the conditional import of `Protocol`.
`#5111 <https://github.com/aio-libs/aiohttp/issues/5111>`_
- Server doesn't send Content-Length for 1xx or 204
`#4901 <https://github.com/aio-libs/aiohttp/issues/4901>`_
- Fix run_app typing
`#4957 <https://github.com/aio-libs/aiohttp/issues/4957>`_
- Always require ``typing_extensions`` library.
`#5107 <https://github.com/aio-libs/aiohttp/issues/5107>`_
- Fix a variable-shadowing bug causing `ThreadedResolver.resolve` to
return the resolved IP as the ``hostname`` in each record, which prevented
validation of HTTPS connections.
`#5110 <https://github.com/aio-libs/aiohttp/issues/5110>`_
- Added annotations to all public attributes.
`#5115 <https://github.com/aio-libs/aiohttp/issues/5115>`_
- Fix flaky test_when_timeout_smaller_second
`#5116 <https://github.com/aio-libs/aiohttp/issues/5116>`_
- Ensure sending a zero byte file does not throw an exception
`#5124 <https://github.com/aio-libs/aiohttp/issues/5124>`_
- Fix a bug in ``web.run_app()`` about Python version checking on Windows
`#5127 <https://github.com/aio-libs/aiohttp/issues/5127>`_
----
3.7.0 (2020-10-24)
==================
Features
--------
- Response headers are now prepared prior to running ``on_response_prepare`` hooks, directly before headers are sent to the client.
`#1958 <https://github.com/aio-libs/aiohttp/issues/1958>`_
- Add a ``quote_cookie`` option to ``CookieJar``, a way to skip quotation wrapping of cookies containing special characters.
`#2571 <https://github.com/aio-libs/aiohttp/issues/2571>`_
- Call ``AccessLogger.log`` with the current exception available from ``sys.exc_info()``.
`#3557 <https://github.com/aio-libs/aiohttp/issues/3557>`_
- `web.UrlDispatcher.add_routes` and `web.Application.add_routes` return a list
of registered `AbstractRoute` instances. `AbstractRouteDef.register` (and all
subclasses) return a list of registered resources registered resource.
`#3866 <https://github.com/aio-libs/aiohttp/issues/3866>`_
- Added properties of default ClientSession params to ClientSession class so it is available for introspection
`#3882 <https://github.com/aio-libs/aiohttp/issues/3882>`_
- Don't cancel web handler on peer disconnection, raise `OSError` on reading/writing instead.
`#4080 <https://github.com/aio-libs/aiohttp/issues/4080>`_
- Implement BaseRequest.get_extra_info() to access a protocol transports' extra info.
`#4189 <https://github.com/aio-libs/aiohttp/issues/4189>`_
- Added `ClientSession.timeout` property.
`#4191 <https://github.com/aio-libs/aiohttp/issues/4191>`_
- allow use of SameSite in cookies.
`#4224 <https://github.com/aio-libs/aiohttp/issues/4224>`_
- Use ``loop.sendfile()`` instead of custom implementation if available.
`#4269 <https://github.com/aio-libs/aiohttp/issues/4269>`_
- Apply SO_REUSEADDR to test server's socket.
`#4393 <https://github.com/aio-libs/aiohttp/issues/4393>`_
- Use .raw_host instead of slower .host in client API
`#4402 <https://github.com/aio-libs/aiohttp/issues/4402>`_
- Allow configuring the buffer size of input stream by passing ``read_bufsize`` argument.
`#4453 <https://github.com/aio-libs/aiohttp/issues/4453>`_
- Pass tests on Python 3.8 for Windows.
`#4513 <https://github.com/aio-libs/aiohttp/issues/4513>`_
- Add `method` and `url` attributes to `TraceRequestChunkSentParams` and `TraceResponseChunkReceivedParams`.
`#4674 <https://github.com/aio-libs/aiohttp/issues/4674>`_
- Add ClientResponse.ok property for checking status code under 400.
`#4711 <https://github.com/aio-libs/aiohttp/issues/4711>`_
- Don't ceil timeouts that are smaller than 5 seconds.
`#4850 <https://github.com/aio-libs/aiohttp/issues/4850>`_
- TCPSite now listens by default on all interfaces instead of just IPv4 when `None` is passed in as the host.
`#4894 <https://github.com/aio-libs/aiohttp/issues/4894>`_
- Bump ``http_parser`` to 2.9.4
`#5070 <https://github.com/aio-libs/aiohttp/issues/5070>`_
Bugfixes
--------
- Fix keepalive connections not being closed in time
`#3296 <https://github.com/aio-libs/aiohttp/issues/3296>`_
- Fix failed websocket handshake leaving connection hanging.
`#3380 <https://github.com/aio-libs/aiohttp/issues/3380>`_
- Fix tasks cancellation order on exit. The run_app task needs to be cancelled first for cleanup hooks to run with all tasks intact.
`#3805 <https://github.com/aio-libs/aiohttp/issues/3805>`_
- Don't start heartbeat until _writer is set
`#4062 <https://github.com/aio-libs/aiohttp/issues/4062>`_
- Fix handling of multipart file uploads without a content type.
`#4089 <https://github.com/aio-libs/aiohttp/issues/4089>`_
- Preserve view handler function attributes across middlewares
`#4174 <https://github.com/aio-libs/aiohttp/issues/4174>`_
- Fix the string representation of ``ServerDisconnectedError``.
`#4175 <https://github.com/aio-libs/aiohttp/issues/4175>`_
- Raising RuntimeError when trying to get encoding from not read body
`#4214 <https://github.com/aio-libs/aiohttp/issues/4214>`_
- Remove warning messages from noop.
`#4282 <https://github.com/aio-libs/aiohttp/issues/4282>`_
- Raise ClientPayloadError if FormData re-processed.
`#4345 <https://github.com/aio-libs/aiohttp/issues/4345>`_
- Fix a warning about unfinished task in ``web_protocol.py``
`#4408 <https://github.com/aio-libs/aiohttp/issues/4408>`_
- Fixed 'deflate' compression. According to RFC 2616 now.
`#4506 <https://github.com/aio-libs/aiohttp/issues/4506>`_
- Fixed OverflowError on platforms with 32-bit time_t
`#4515 <https://github.com/aio-libs/aiohttp/issues/4515>`_
- Fixed request.body_exists returns wrong value for methods without body.
`#4528 <https://github.com/aio-libs/aiohttp/issues/4528>`_
- Fix connecting to link-local IPv6 addresses.
`#4554 <https://github.com/aio-libs/aiohttp/issues/4554>`_
- Fix a problem with connection waiters that are never awaited.
`#4562 <https://github.com/aio-libs/aiohttp/issues/4562>`_
- Always make sure transport is not closing before reuse a connection.
Reuse a protocol based on keepalive in headers is unreliable.
For example, uWSGI will not support keepalive even it serves a
HTTP 1.1 request, except explicitly configure uWSGI with a
``--http-keepalive`` option.
Servers designed like uWSGI could cause aiohttp intermittently
raise a ConnectionResetException when the protocol poll runs
out and some protocol is reused.
`#4587 <https://github.com/aio-libs/aiohttp/issues/4587>`_
- Handle the last CRLF correctly even if it is received via separate TCP segment.
`#4630 <https://github.com/aio-libs/aiohttp/issues/4630>`_
- Fix the register_resource function to validate route name before splitting it so that route name can include python keywords.
`#4691 <https://github.com/aio-libs/aiohttp/issues/4691>`_
- Improve typing annotations for ``web.Request``, ``aiohttp.ClientResponse`` and
``multipart`` module.
`#4736 <https://github.com/aio-libs/aiohttp/issues/4736>`_
- Fix resolver task is not awaited when connector is cancelled
`#4795 <https://github.com/aio-libs/aiohttp/issues/4795>`_
- Fix a bug "Aiohttp doesn't return any error on invalid request methods"
`#4798 <https://github.com/aio-libs/aiohttp/issues/4798>`_
- Fix HEAD requests for static content.
`#4809 <https://github.com/aio-libs/aiohttp/issues/4809>`_
- Fix incorrect size calculation for memoryview
`#4890 <https://github.com/aio-libs/aiohttp/issues/4890>`_
- Add HTTPMove to _all__.
`#4897 <https://github.com/aio-libs/aiohttp/issues/4897>`_
- Fixed the type annotations in the ``tracing`` module.
`#4912 <https://github.com/aio-libs/aiohttp/issues/4912>`_
- Fix typing for multipart ``__aiter__``.
`#4931 <https://github.com/aio-libs/aiohttp/issues/4931>`_
- Fix for race condition on connections in BaseConnector that leads to exceeding the connection limit.
`#4936 <https://github.com/aio-libs/aiohttp/issues/4936>`_
- Add forced UTF-8 encoding for ``application/rdap+json`` responses.
`#4938 <https://github.com/aio-libs/aiohttp/issues/4938>`_
- Fix inconsistency between Python and C http request parsers in parsing pct-encoded URL.
`#4972 <https://github.com/aio-libs/aiohttp/issues/4972>`_
- Fix connection closing issue in HEAD request.
`#5012 <https://github.com/aio-libs/aiohttp/issues/5012>`_
- Fix type hint on BaseRunner.addresses (from ``List[str]`` to ``List[Any]``)
`#5086 <https://github.com/aio-libs/aiohttp/issues/5086>`_
- Make `web.run_app()` more responsive to Ctrl+C on Windows for Python < 3.8. It slightly
increases CPU load as a side effect.
`#5098 <https://github.com/aio-libs/aiohttp/issues/5098>`_
Improved Documentation
----------------------
- Fix example code in client quick-start
`#3376 <https://github.com/aio-libs/aiohttp/issues/3376>`_
- Updated the docs so there is no contradiction in ``ttl_dns_cache`` default value
`#3512 <https://github.com/aio-libs/aiohttp/issues/3512>`_
- Add 'Deploy with SSL' to docs.
`#4201 <https://github.com/aio-libs/aiohttp/issues/4201>`_
- Change typing of the secure argument on StreamResponse.set_cookie from ``Optional[str]`` to ``Optional[bool]``
`#4204 <https://github.com/aio-libs/aiohttp/issues/4204>`_
- Changes ``ttl_dns_cache`` type from int to Optional[int].
`#4270 <https://github.com/aio-libs/aiohttp/issues/4270>`_
- Simplify README hello word example and add a documentation page for people coming from requests.
`#4272 <https://github.com/aio-libs/aiohttp/issues/4272>`_
- Improve some code examples in the documentation involving websockets and starting a simple HTTP site with an AppRunner.
`#4285 <https://github.com/aio-libs/aiohttp/issues/4285>`_
- Fix typo in code example in Multipart docs
`#4312 <https://github.com/aio-libs/aiohttp/issues/4312>`_
- Fix code example in Multipart section.
`#4314 <https://github.com/aio-libs/aiohttp/issues/4314>`_
- Update contributing guide so new contributors read the most recent version of that guide. Update command used to create test coverage reporting.
`#4810 <https://github.com/aio-libs/aiohttp/issues/4810>`_
- Spelling: Change "canonize" to "canonicalize".
`#4986 <https://github.com/aio-libs/aiohttp/issues/4986>`_
- Add ``aiohttp-sse-client`` library to third party usage list.
`#5084 <https://github.com/aio-libs/aiohttp/issues/5084>`_
Misc
----
- `#2856 <https://github.com/aio-libs/aiohttp/issues/2856>`_, `#4218 <https://github.com/aio-libs/aiohttp/issues/4218>`_, `#4250 <https://github.com/aio-libs/aiohttp/issues/4250>`_
----
3.6.3 (2020-10-12)
==================
Bugfixes
--------
- Pin yarl to ``<1.6.0`` to avoid buggy behavior that will be fixed by the next aiohttp
release.
3.6.2 (2019-10-09)
==================
Features
--------
- Made exceptions pickleable. Also changed the repr of some exceptions.
`#4077 <https://github.com/aio-libs/aiohttp/issues/4077>`_
- Use ``Iterable`` type hint instead of ``Sequence`` for ``Application`` *middleware*
parameter. `#4125 <https://github.com/aio-libs/aiohttp/issues/4125>`_
Bugfixes
--------
- Reset the ``sock_read`` timeout each time data is received for a
``aiohttp.ClientResponse``. `#3808
<https://github.com/aio-libs/aiohttp/issues/3808>`_
- Fix handling of expired cookies so they are not stored in CookieJar.
`#4063 <https://github.com/aio-libs/aiohttp/issues/4063>`_
- Fix misleading message in the string representation of ``ClientConnectorError``;
``self.ssl == None`` means default SSL context, not SSL disabled `#4097
<https://github.com/aio-libs/aiohttp/issues/4097>`_
- Don't clobber HTTP status when using FileResponse.
`#4106 <https://github.com/aio-libs/aiohttp/issues/4106>`_
Improved Documentation
----------------------
- Added minimal required logging configuration to logging documentation.
`#2469 <https://github.com/aio-libs/aiohttp/issues/2469>`_
- Update docs to reflect proxy support.
`#4100 <https://github.com/aio-libs/aiohttp/issues/4100>`_
- Fix typo in code example in testing docs.
`#4108 <https://github.com/aio-libs/aiohttp/issues/4108>`_
Misc
----
- `#4102 <https://github.com/aio-libs/aiohttp/issues/4102>`_
----
3.6.1 (2019-09-19)
==================
Features
--------
- Compatibility with Python 3.8.
`#4056 <https://github.com/aio-libs/aiohttp/issues/4056>`_
Bugfixes
--------
- correct some exception string format
`#4068 <https://github.com/aio-libs/aiohttp/issues/4068>`_
- Emit a warning when ``ssl.OP_NO_COMPRESSION`` is
unavailable because the runtime is built against
an outdated OpenSSL.
`#4052 <https://github.com/aio-libs/aiohttp/issues/4052>`_
- Update multidict requirement to >= 4.5
`#4057 <https://github.com/aio-libs/aiohttp/issues/4057>`_
Improved Documentation
----------------------
- Provide pytest-aiohttp namespace for pytest fixtures in docs.
`#3723 <https://github.com/aio-libs/aiohttp/issues/3723>`_
----
3.6.0 (2019-09-06)
==================
Features
--------
- Add support for Named Pipes (Site and Connector) under Windows. This feature requires
Proactor event loop to work. `#3629
<https://github.com/aio-libs/aiohttp/issues/3629>`_
- Removed ``Transfer-Encoding: chunked`` header from websocket responses to be
compatible with more http proxy servers. `#3798
<https://github.com/aio-libs/aiohttp/issues/3798>`_
- Accept non-GET request for starting websocket handshake on server side.
`#3980 <https://github.com/aio-libs/aiohttp/issues/3980>`_
Bugfixes
--------
- Raise a ClientResponseError instead of an AssertionError for a blank
HTTP Reason Phrase.
`#3532 <https://github.com/aio-libs/aiohttp/issues/3532>`_
- Fix an issue where cookies would sometimes not be set during a redirect.
`#3576 <https://github.com/aio-libs/aiohttp/issues/3576>`_
- Change normalize_path_middleware to use 308 redirect instead of 301.
This behavior should prevent clients from being unable to use PUT/POST
methods on endpoints that are redirected because of a trailing slash.
`#3579 <https://github.com/aio-libs/aiohttp/issues/3579>`_
- Drop the processed task from ``all_tasks()`` list early. It prevents logging about a
task with unhandled exception when the server is used in conjunction with
``asyncio.run()``. `#3587 <https://github.com/aio-libs/aiohttp/issues/3587>`_
- ``Signal`` type annotation changed from ``Signal[Callable[['TraceConfig'],
Awaitable[None]]]`` to ``Signal[Callable[ClientSession, SimpleNamespace, ...]``.
`#3595 <https://github.com/aio-libs/aiohttp/issues/3595>`_
- Use sanitized URL as Location header in redirects
`#3614 <https://github.com/aio-libs/aiohttp/issues/3614>`_
- Improve typing annotations for multipart.py along with changes required
by mypy in files that references multipart.py.
`#3621 <https://github.com/aio-libs/aiohttp/issues/3621>`_
- Close session created inside ``aiohttp.request`` when unhandled exception occurs
`#3628 <https://github.com/aio-libs/aiohttp/issues/3628>`_
- Cleanup per-chunk data in generic data read. Memory leak fixed.
`#3631 <https://github.com/aio-libs/aiohttp/issues/3631>`_
- Use correct type for add_view and family
`#3633 <https://github.com/aio-libs/aiohttp/issues/3633>`_
- Fix _keepalive field in __slots__ of ``RequestHandler``.
`#3644 <https://github.com/aio-libs/aiohttp/issues/3644>`_
- Properly handle ConnectionResetError, to silence the "Cannot write to closing
transport" exception when clients disconnect uncleanly.
`#3648 <https://github.com/aio-libs/aiohttp/issues/3648>`_
- Suppress pytest warnings due to ``test_utils`` classes
`#3660 <https://github.com/aio-libs/aiohttp/issues/3660>`_
- Fix overshadowing of overlapped sub-application prefixes.
`#3701 <https://github.com/aio-libs/aiohttp/issues/3701>`_
- Fixed return type annotation for WSMessage.json()
`#3720 <https://github.com/aio-libs/aiohttp/issues/3720>`_
- Properly expose TooManyRedirects publicly as documented.
`#3818 <https://github.com/aio-libs/aiohttp/issues/3818>`_
- Fix missing brackets for IPv6 in proxy CONNECT request
`#3841 <https://github.com/aio-libs/aiohttp/issues/3841>`_
- Make the signature of ``aiohttp.test_utils.TestClient.request`` match
``asyncio.ClientSession.request`` according to the docs `#3852
<https://github.com/aio-libs/aiohttp/issues/3852>`_
- Use correct style for re-exported imports, makes mypy ``--strict`` mode happy.
`#3868 <https://github.com/aio-libs/aiohttp/issues/3868>`_
- Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of
View `#3880 <https://github.com/aio-libs/aiohttp/issues/3880>`_
- Made cython HTTP parser set Reason-Phrase of the response to an empty string if it is
missing. `#3906 <https://github.com/aio-libs/aiohttp/issues/3906>`_
- Add URL to the string representation of ClientResponseError.
`#3959 <https://github.com/aio-libs/aiohttp/issues/3959>`_
- Accept ``istr`` keys in ``LooseHeaders`` type hints.
`#3976 <https://github.com/aio-libs/aiohttp/issues/3976>`_
- Fixed race conditions in _resolve_host caching and throttling when tracing is enabled.
`#4013 <https://github.com/aio-libs/aiohttp/issues/4013>`_
- For URLs like "unix://localhost/..." set Host HTTP header to "localhost" instead of
"localhost:None". `#4039 <https://github.com/aio-libs/aiohttp/issues/4039>`_
Improved Documentation
----------------------
- Modify documentation for Background Tasks to remove deprecated usage of event loop.
`#3526 <https://github.com/aio-libs/aiohttp/issues/3526>`_
- use ``if __name__ == '__main__':`` in server examples.
`#3775 <https://github.com/aio-libs/aiohttp/issues/3775>`_
- Update documentation reference to the default access logger.
`#3783 <https://github.com/aio-libs/aiohttp/issues/3783>`_
- Improve documentation for ``web.BaseRequest.path`` and ``web.BaseRequest.raw_path``.
`#3791 <https://github.com/aio-libs/aiohttp/issues/3791>`_
- Removed deprecation warning in tracing example docs
`#3964 <https://github.com/aio-libs/aiohttp/issues/3964>`_
----
3.5.4 (2019-01-12)
==================
Bugfixes
--------
- Fix stream ``.read()`` / ``.readany()`` / ``.iter_any()`` which used to return a
partial content only in case of compressed content
`#3525 <https://github.com/aio-libs/aiohttp/issues/3525>`_
3.5.3 (2019-01-10)
==================
Bugfixes
--------
- Fix type stubs for ``aiohttp.web.run_app(access_log=True)`` and fix edge case of
``access_log=True`` and the event loop being in debug mode. `#3504
<https://github.com/aio-libs/aiohttp/issues/3504>`_
- Fix ``aiohttp.ClientTimeout`` type annotations to accept ``None`` for fields
`#3511 <https://github.com/aio-libs/aiohttp/issues/3511>`_
- Send custom per-request cookies even if session jar is empty
`#3515 <https://github.com/aio-libs/aiohttp/issues/3515>`_
- Restore Linux binary wheels publishing on PyPI
----
3.5.2 (2019-01-08)
==================
Features
--------
- ``FileResponse`` from ``web_fileresponse.py`` uses a ``ThreadPoolExecutor`` to work
with files asynchronously. I/O based payloads from ``payload.py`` uses a
``ThreadPoolExecutor`` to work with I/O objects asynchronously. `#3313
<https://github.com/aio-libs/aiohttp/issues/3313>`_
- Internal Server Errors in plain text if the browser does not support HTML.
`#3483 <https://github.com/aio-libs/aiohttp/issues/3483>`_
Bugfixes
--------
- Preserve MultipartWriter parts headers on write. Refactor the way how
``Payload.headers`` are handled. Payload instances now always have headers and
Content-Type defined. Fix Payload Content-Disposition header reset after initial
creation. `#3035 <https://github.com/aio-libs/aiohttp/issues/3035>`_
- Log suppressed exceptions in ``GunicornWebWorker``.
`#3464 <https://github.com/aio-libs/aiohttp/issues/3464>`_
- Remove wildcard imports.
`#3468 <https://github.com/aio-libs/aiohttp/issues/3468>`_
- Use the same task for app initialization and web server handling in gunicorn workers.
It allows to use Python3.7 context vars smoothly.
`#3471 <https://github.com/aio-libs/aiohttp/issues/3471>`_
- Fix handling of chunked+gzipped response when first chunk does not give uncompressed
data `#3477 <https://github.com/aio-libs/aiohttp/issues/3477>`_
- Replace ``collections.MutableMapping`` with ``collections.abc.MutableMapping`` to
avoid a deprecation warning. `#3480
<https://github.com/aio-libs/aiohttp/issues/3480>`_
- ``Payload.size`` type annotation changed from ``Optional[float]`` to
``Optional[int]``. `#3484 <https://github.com/aio-libs/aiohttp/issues/3484>`_
- Ignore done tasks when cancels pending activities on ``web.run_app`` finalization.
`#3497 <https://github.com/aio-libs/aiohttp/issues/3497>`_
Improved Documentation
----------------------
- Add documentation for ``aiohttp.web.HTTPException``.
`#3490 <https://github.com/aio-libs/aiohttp/issues/3490>`_
Misc
----
- `#3487 <https://github.com/aio-libs/aiohttp/issues/3487>`_
----
3.5.1 (2018-12-24)
====================
- Fix a regression about ``ClientSession._requote_redirect_url`` modification in debug
mode.
3.5.0 (2018-12-22)
====================
Features
--------
- The library type annotations are checked in strict mode now.
- Add support for setting cookies for individual request (`#2387
<https://github.com/aio-libs/aiohttp/pull/2387>`_)
- Application.add_domain implementation (`#2809
<https://github.com/aio-libs/aiohttp/pull/2809>`_)
- The default ``app`` in the request returned by ``test_utils.make_mocked_request`` can
now have objects assigned to it and retrieved using the ``[]`` operator. (`#3174
<https://github.com/aio-libs/aiohttp/pull/3174>`_)
- Make ``request.url`` accessible when transport is closed. (`#3177
<https://github.com/aio-libs/aiohttp/pull/3177>`_)
- Add ``zlib_executor_size`` argument to ``Response`` constructor to allow compression
to run in a background executor to avoid blocking the main thread and potentially
triggering health check failures. (`#3205
<https://github.com/aio-libs/aiohttp/pull/3205>`_)
- Enable users to set ``ClientTimeout`` in ``aiohttp.request`` (`#3213
<https://github.com/aio-libs/aiohttp/pull/3213>`_)
- Don't raise a warning if ``NETRC`` environment variable is not set and ``~/.netrc``
file doesn't exist. (`#3267 <https://github.com/aio-libs/aiohttp/pull/3267>`_)
- Add default logging handler to web.run_app If the ``Application.debug``` flag is set
and the default logger ``aiohttp.access`` is used, access logs will now be output
using a *stderr* ``StreamHandler`` if no handlers are attached. Furthermore, if the
default logger has no log level set, the log level will be set to ``DEBUG``. (`#3324
<https://github.com/aio-libs/aiohttp/pull/3324>`_)
- Add method argument to ``session.ws_connect()``. Sometimes server API requires a
different HTTP method for WebSocket connection establishment. For example, ``Docker
exec`` needs POST. (`#3378 <https://github.com/aio-libs/aiohttp/pull/3378>`_)
- Create a task per request handling. (`#3406
<https://github.com/aio-libs/aiohttp/pull/3406>`_)
Bugfixes
--------
- Enable passing ``access_log_class`` via ``handler_args`` (`#3158
<https://github.com/aio-libs/aiohttp/pull/3158>`_)
- Return empty bytes with end-of-chunk marker in empty stream reader. (`#3186
<https://github.com/aio-libs/aiohttp/pull/3186>`_)
- Accept ``CIMultiDictProxy`` instances for ``headers`` argument in ``web.Response``
constructor. (`#3207 <https://github.com/aio-libs/aiohttp/pull/3207>`_)
- Don't uppercase HTTP method in parser (`#3233
<https://github.com/aio-libs/aiohttp/pull/3233>`_)
- Make method match regexp RFC-7230 compliant (`#3235
<https://github.com/aio-libs/aiohttp/pull/3235>`_)
- Add ``app.pre_frozen`` state to properly handle startup signals in
sub-applications. (`#3237 <https://github.com/aio-libs/aiohttp/pull/3237>`_)
- Enhanced parsing and validation of helpers.BasicAuth.decode. (`#3239
<https://github.com/aio-libs/aiohttp/pull/3239>`_)
- Change imports from collections module in preparation for 3.8. (`#3258
<https://github.com/aio-libs/aiohttp/pull/3258>`_)
- Ensure Host header is added first to ClientRequest to better replicate browser (`#3265
<https://github.com/aio-libs/aiohttp/pull/3265>`_)
- Fix forward compatibility with Python 3.8: importing ABCs directly from the
collections module will not be supported anymore. (`#3273
<https://github.com/aio-libs/aiohttp/pull/3273>`_)
- Keep the query string by ``normalize_path_middleware``. (`#3278
<https://github.com/aio-libs/aiohttp/pull/3278>`_)
- Fix missing parameter ``raise_for_status`` for aiohttp.request() (`#3290
<https://github.com/aio-libs/aiohttp/pull/3290>`_)
- Bracket IPv6 addresses in the HOST header (`#3304
<https://github.com/aio-libs/aiohttp/pull/3304>`_)
- Fix default message for server ping and pong frames. (`#3308
<https://github.com/aio-libs/aiohttp/pull/3308>`_)
- Fix tests/test_connector.py typo and tests/autobahn/server.py duplicate loop
def. (`#3337 <https://github.com/aio-libs/aiohttp/pull/3337>`_)
- Fix false-negative indicator end_of_HTTP_chunk in StreamReader.readchunk function
(`#3361 <https://github.com/aio-libs/aiohttp/pull/3361>`_)
- Release HTTP response before raising status exception (`#3364
<https://github.com/aio-libs/aiohttp/pull/3364>`_)
- Fix task cancellation when ``sendfile()`` syscall is used by static file
handling. (`#3383 <https://github.com/aio-libs/aiohttp/pull/3383>`_)
- Fix stack trace for ``asyncio.TimeoutError`` which was not logged, when it is caught
in the handler. (`#3414 <https://github.com/aio-libs/aiohttp/pull/3414>`_)
Improved Documentation
----------------------
- Improve documentation of ``Application.make_handler`` parameters. (`#3152
<https://github.com/aio-libs/aiohttp/pull/3152>`_)
- Fix BaseRequest.raw_headers doc. (`#3215
<https://github.com/aio-libs/aiohttp/pull/3215>`_)
- Fix typo in TypeError exception reason in ``web.Application._handle`` (`#3229
<https://github.com/aio-libs/aiohttp/pull/3229>`_)
- Make server access log format placeholder %b documentation reflect
behavior and docstring. (`#3307 <https://github.com/aio-libs/aiohttp/pull/3307>`_)
Deprecations and Removals
-------------------------
- Deprecate modification of ``session.requote_redirect_url`` (`#2278
<https://github.com/aio-libs/aiohttp/pull/2278>`_)
- Deprecate ``stream.unread_data()`` (`#3260
<https://github.com/aio-libs/aiohttp/pull/3260>`_)
- Deprecated use of boolean in ``resp.enable_compression()`` (`#3318
<https://github.com/aio-libs/aiohttp/pull/3318>`_)
- Encourage creation of aiohttp public objects inside a coroutine (`#3331
<https://github.com/aio-libs/aiohttp/pull/3331>`_)
- Drop dead ``Connection.detach()`` and ``Connection.writer``. Both methods were broken
for more than 2 years. (`#3358 <https://github.com/aio-libs/aiohttp/pull/3358>`_)
- Deprecate ``app.loop``, ``request.loop``, ``client.loop`` and ``connector.loop``
properties. (`#3374 <https://github.com/aio-libs/aiohttp/pull/3374>`_)
- Deprecate explicit debug argument. Use asyncio debug mode instead. (`#3381
<https://github.com/aio-libs/aiohttp/pull/3381>`_)
- Deprecate body parameter in HTTPException (and derived classes) constructor. (`#3385
<https://github.com/aio-libs/aiohttp/pull/3385>`_)
- Deprecate bare connector close, use ``async with connector:`` and ``await
connector.close()`` instead. (`#3417
<https://github.com/aio-libs/aiohttp/pull/3417>`_)
- Deprecate obsolete ``read_timeout`` and ``conn_timeout`` in ``ClientSession``
constructor. (`#3438 <https://github.com/aio-libs/aiohttp/pull/3438>`_)
Misc
----
- #3341, #3351
Platform: UNKNOWN
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Development Status :: 5 - Production/Stable
Classifier: Operating System :: POSIX
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: Microsoft :: Windows
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Framework :: AsyncIO
Requires-Python: >=3.6
Provides-Extra: speedups

View File

@ -0,0 +1,246 @@
CHANGES.rst
CONTRIBUTORS.txt
LICENSE.txt
MANIFEST.in
Makefile
README.rst
pyproject.toml
setup.cfg
setup.py
aiohttp/__init__.py
aiohttp/_cparser.pxd
aiohttp/_find_header.c
aiohttp/_find_header.h
aiohttp/_find_header.pxd
aiohttp/_frozenlist.c
aiohttp/_frozenlist.pyx
aiohttp/_headers.pxi
aiohttp/_helpers.c
aiohttp/_helpers.pyi
aiohttp/_helpers.pyx
aiohttp/_http_parser.c
aiohttp/_http_parser.pyx
aiohttp/_http_writer.c
aiohttp/_http_writer.pyx
aiohttp/_websocket.c
aiohttp/_websocket.pyx
aiohttp/abc.py
aiohttp/base_protocol.py
aiohttp/client.py
aiohttp/client_exceptions.py
aiohttp/client_proto.py
aiohttp/client_reqrep.py
aiohttp/client_ws.py
aiohttp/connector.py
aiohttp/cookiejar.py
aiohttp/formdata.py
aiohttp/frozenlist.py
aiohttp/frozenlist.pyi
aiohttp/hdrs.py
aiohttp/helpers.py
aiohttp/http.py
aiohttp/http_exceptions.py
aiohttp/http_parser.py
aiohttp/http_websocket.py
aiohttp/http_writer.py
aiohttp/locks.py
aiohttp/log.py
aiohttp/multipart.py
aiohttp/payload.py
aiohttp/payload_streamer.py
aiohttp/py.typed
aiohttp/pytest_plugin.py
aiohttp/resolver.py
aiohttp/signals.py
aiohttp/signals.pyi
aiohttp/streams.py
aiohttp/tcp_helpers.py
aiohttp/test_utils.py
aiohttp/tracing.py
aiohttp/typedefs.py
aiohttp/web.py
aiohttp/web_app.py
aiohttp/web_exceptions.py
aiohttp/web_fileresponse.py
aiohttp/web_log.py
aiohttp/web_middlewares.py
aiohttp/web_protocol.py
aiohttp/web_request.py
aiohttp/web_response.py
aiohttp/web_routedef.py
aiohttp/web_runner.py
aiohttp/web_server.py
aiohttp/web_urldispatcher.py
aiohttp/web_ws.py
aiohttp/worker.py
aiohttp.egg-info/PKG-INFO
aiohttp.egg-info/SOURCES.txt
aiohttp.egg-info/dependency_links.txt
aiohttp.egg-info/requires.txt
aiohttp.egg-info/top_level.txt
aiohttp/.hash/_cparser.pxd.hash
aiohttp/.hash/_find_header.pxd.hash
aiohttp/.hash/_frozenlist.pyx.hash
aiohttp/.hash/_helpers.pyi.hash
aiohttp/.hash/_helpers.pyx.hash
aiohttp/.hash/_http_parser.pyx.hash
aiohttp/.hash/_http_writer.pyx.hash
aiohttp/.hash/_websocket.pyx.hash
aiohttp/.hash/frozenlist.pyi.hash
aiohttp/.hash/hdrs.py.hash
aiohttp/.hash/signals.pyi.hash
docs/Makefile
docs/abc.rst
docs/aiohttp-icon.svg
docs/aiohttp-plain.svg
docs/built_with.rst
docs/changes.rst
docs/client.rst
docs/client_advanced.rst
docs/client_quickstart.rst
docs/client_reference.rst
docs/conf.py
docs/contributing.rst
docs/deployment.rst
docs/essays.rst
docs/external.rst
docs/faq.rst
docs/favicon.ico
docs/glossary.rst
docs/http_request_lifecycle.rst
docs/index.rst
docs/logging.rst
docs/make.bat
docs/migration_to_2xx.rst
docs/misc.rst
docs/multipart.rst
docs/multipart_reference.rst
docs/new_router.rst
docs/old-logo.png
docs/old-logo.svg
docs/powered_by.rst
docs/signals.rst
docs/spelling_wordlist.txt
docs/streams.rst
docs/structures.rst
docs/testing.rst
docs/third_party.rst
docs/tracing_reference.rst
docs/utilities.rst
docs/web.rst
docs/web_advanced.rst
docs/web_lowlevel.rst
docs/web_quickstart.rst
docs/web_reference.rst
docs/websocket_utilities.rst
docs/whats_new_1_1.rst
docs/whats_new_3_0.rst
docs/_static/aiohttp-icon-128x128.png
examples/background_tasks.py
examples/cli_app.py
examples/client_auth.py
examples/client_json.py
examples/client_ws.py
examples/curl.py
examples/fake_server.py
examples/lowlevel_srv.py
examples/server.crt
examples/server.csr
examples/server.key
examples/server_simple.py
examples/static_files.py
examples/web_classview.py
examples/web_cookies.py
examples/web_rewrite_headers_middleware.py
examples/web_srv.py
examples/web_srv_route_deco.py
examples/web_srv_route_table.py
examples/web_ws.py
examples/websocket.html
examples/legacy/crawl.py
examples/legacy/srv.py
examples/legacy/tcp_protocol_parser.py
tests/aiohttp.jpg
tests/aiohttp.png
tests/conftest.py
tests/data.unknown_mime_type
tests/data.zero_bytes
tests/hello.txt.gz
tests/test_base_protocol.py
tests/test_classbasedview.py
tests/test_client_connection.py
tests/test_client_exceptions.py
tests/test_client_fingerprint.py
tests/test_client_functional.py
tests/test_client_proto.py
tests/test_client_request.py
tests/test_client_response.py
tests/test_client_session.py
tests/test_client_ws.py
tests/test_client_ws_functional.py
tests/test_connector.py
tests/test_cookiejar.py
tests/test_flowcontrol_streams.py
tests/test_formdata.py
tests/test_frozenlist.py
tests/test_helpers.py
tests/test_http_exceptions.py
tests/test_http_parser.py
tests/test_http_writer.py
tests/test_locks.py
tests/test_loop.py
tests/test_multipart.py
tests/test_multipart_helpers.py
tests/test_payload.py
tests/test_proxy.py
tests/test_proxy_functional.py
tests/test_pytest_plugin.py
tests/test_resolver.py
tests/test_route_def.py
tests/test_run_app.py
tests/test_signals.py
tests/test_streams.py
tests/test_tcp_helpers.py
tests/test_test_utils.py
tests/test_tracing.py
tests/test_urldispatch.py
tests/test_web_app.py
tests/test_web_cli.py
tests/test_web_exceptions.py
tests/test_web_functional.py
tests/test_web_log.py
tests/test_web_middleware.py
tests/test_web_protocol.py
tests/test_web_request.py
tests/test_web_request_handler.py
tests/test_web_response.py
tests/test_web_runner.py
tests/test_web_sendfile.py
tests/test_web_sendfile_functional.py
tests/test_web_server.py
tests/test_web_urldispatcher.py
tests/test_web_websocket.py
tests/test_web_websocket_functional.py
tests/test_websocket_handshake.py
tests/test_websocket_parser.py
tests/test_websocket_writer.py
tests/test_worker.py
tests/autobahn/client.py
tests/autobahn/fuzzingclient.json
tests/autobahn/fuzzingserver.json
tests/autobahn/server.py
vendor/http-parser/.git
vendor/http-parser/.gitignore
vendor/http-parser/.mailmap
vendor/http-parser/.travis.yml
vendor/http-parser/AUTHORS
vendor/http-parser/LICENSE-MIT
vendor/http-parser/Makefile
vendor/http-parser/README.md
vendor/http-parser/bench.c
vendor/http-parser/http_parser.c
vendor/http-parser/http_parser.gyp
vendor/http-parser/http_parser.h
vendor/http-parser/test.c
vendor/http-parser/contrib/parsertrace.c
vendor/http-parser/contrib/url_parser.c

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,14 @@
attrs>=17.3.0
chardet<5.0,>=2.0
multidict<7.0,>=4.5
async_timeout<4.0,>=3.0
yarl<2.0,>=1.0
typing_extensions>=3.6.5
[:python_version < "3.7"]
idna-ssl>=1.0
[speedups]
aiodns
brotlipy
cchardet

View File

@ -0,0 +1 @@
aiohttp

View File

@ -0,0 +1,187 @@
Metadata-Version: 2.1
Name: coverage
Version: 5.1
Summary: Code coverage measurement for Python
Home-page: https://github.com/nedbat/coveragepy
Author: Ned Batchelder and 131 others
Author-email: ned@nedbatchelder.com
License: Apache 2.0
Project-URL: Documentation, https://coverage.readthedocs.io
Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi
Project-URL: Issues, https://github.com/nedbat/coveragepy/issues
Description: .. Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
.. For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
===========
Coverage.py
===========
Code coverage testing for Python.
| |license| |versions| |status|
| |ci-status| |win-ci-status| |docs| |codecov|
| |kit| |format| |repos|
| |stars| |forks| |contributors|
| |tidelift| |twitter-coveragepy| |twitter-nedbat|
Coverage.py measures code coverage, typically during test execution. It uses
the code analysis tools and tracing hooks provided in the Python standard
library to determine which lines are executable, and which have been executed.
Coverage.py runs on many versions of Python:
* CPython 2.7.
* CPython 3.5 through 3.9 alpha 4.
* PyPy2 7.3.0 and PyPy3 7.3.0.
Documentation is on `Read the Docs`_. Code repository and issue tracker are on
`GitHub`_.
.. _Read the Docs: https://coverage.readthedocs.io/
.. _GitHub: https://github.com/nedbat/coveragepy
**New in 5.0:** SQLite data storage, JSON report, contexts, relative filenames,
dropped support for Python 2.6, 3.3 and 3.4.
For Enterprise
--------------
.. |tideliftlogo| image:: https://nedbatchelder.com/pix/Tidelift_Logo_small.png
:width: 75
:alt: Tidelift
:target: https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=readme
.. list-table::
:widths: 10 100
* - |tideliftlogo|
- `Available as part of the Tidelift Subscription. <https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=readme>`_
Coverage and thousands of other packages are working with
Tidelift to deliver one enterprise subscription that covers all of the open
source you use. If you want the flexibility of open source and the confidence
of commercial-grade software, this is for you.
`Learn more. <https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=readme>`_
Getting Started
---------------
See the `Quick Start section`_ of the docs.
.. _Quick Start section: https://coverage.readthedocs.io/#quick-start
Change history
--------------
The complete history of changes is on the `change history page`_.
.. _change history page: https://coverage.readthedocs.io/en/latest/changes.html
Contributing
------------
See the `Contributing section`_ of the docs.
.. _Contributing section: https://coverage.readthedocs.io/en/latest/contributing.html
Security
--------
To report a security vulnerability, please use the `Tidelift security
contact`_. Tidelift will coordinate the fix and disclosure.
.. _Tidelift security contact: https://tidelift.com/security
License
-------
Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
.. _Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0
.. _NOTICE.txt: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
.. |ci-status| image:: https://travis-ci.com/nedbat/coveragepy.svg?branch=master
:target: https://travis-ci.com/nedbat/coveragepy
:alt: Build status
.. |win-ci-status| image:: https://ci.appveyor.com/api/projects/status/kmeqpdje7h9r6vsf/branch/master?svg=true
:target: https://ci.appveyor.com/project/nedbat/coveragepy
:alt: Windows build status
.. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
:target: https://coverage.readthedocs.io/
:alt: Documentation
.. |reqs| image:: https://requires.io/github/nedbat/coveragepy/requirements.svg?branch=master
:target: https://requires.io/github/nedbat/coveragepy/requirements/?branch=master
:alt: Requirements status
.. |kit| image:: https://badge.fury.io/py/coverage.svg
:target: https://pypi.org/project/coverage/
:alt: PyPI status
.. |format| image:: https://img.shields.io/pypi/format/coverage.svg
:target: https://pypi.org/project/coverage/
:alt: Kit format
.. |downloads| image:: https://img.shields.io/pypi/dw/coverage.svg
:target: https://pypi.org/project/coverage/
:alt: Weekly PyPI downloads
.. |versions| image:: https://img.shields.io/pypi/pyversions/coverage.svg?logo=python&logoColor=FBE072
:target: https://pypi.org/project/coverage/
:alt: Python versions supported
.. |status| image:: https://img.shields.io/pypi/status/coverage.svg
:target: https://pypi.org/project/coverage/
:alt: Package stability
.. |license| image:: https://img.shields.io/pypi/l/coverage.svg
:target: https://pypi.org/project/coverage/
:alt: License
.. |codecov| image:: https://codecov.io/github/nedbat/coveragepy/coverage.svg?branch=master&precision=2
:target: https://codecov.io/github/nedbat/coveragepy?branch=master
:alt: Coverage!
.. |repos| image:: https://repology.org/badge/tiny-repos/python:coverage.svg
:target: https://repology.org/metapackage/python:coverage/versions
:alt: Packaging status
.. |tidelift| image:: https://tidelift.com/badges/package/pypi/coverage
:target: https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=readme
:alt: Tidelift
.. |stars| image:: https://img.shields.io/github/stars/nedbat/coveragepy.svg?logo=github
:target: https://github.com/nedbat/coveragepy/stargazers
:alt: Github stars
.. |forks| image:: https://img.shields.io/github/forks/nedbat/coveragepy.svg?logo=github
:target: https://github.com/nedbat/coveragepy/network/members
:alt: Github forks
.. |contributors| image:: https://img.shields.io/github/contributors/nedbat/coveragepy.svg?logo=github
:target: https://github.com/nedbat/coveragepy/graphs/contributors
:alt: Contributors
.. |twitter-coveragepy| image:: https://img.shields.io/twitter/follow/coveragepy.svg?label=coveragepy&style=flat&logo=twitter&logoColor=4FADFF
:target: https://twitter.com/coveragepy
:alt: coverage.py on Twitter
.. |twitter-nedbat| image:: https://img.shields.io/twitter/follow/nedbat.svg?label=nedbat&style=flat&logo=twitter&logoColor=4FADFF
:target: https://twitter.com/nedbat
:alt: nedbat on Twitter
Keywords: code coverage testing
Platform: UNKNOWN
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Quality Assurance
Classifier: Topic :: Software Development :: Testing
Classifier: Development Status :: 5 - Production/Stable
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4
Description-Content-Type: text/x-rst
Provides-Extra: toml

View File

@ -0,0 +1,287 @@
.editorconfig
.readthedocs.yml
.travis.yml
CHANGES.rst
CONTRIBUTORS.txt
LICENSE.txt
MANIFEST.in
Makefile
NOTICE.txt
README.rst
__main__.py
appveyor.yml
howto.txt
igor.py
metacov.ini
pylintrc
setup.cfg
setup.py
tox.ini
tox_wheels.ini
ci/README.txt
ci/download_appveyor.py
ci/install.ps1
ci/manylinux.sh
ci/run_with_env.cmd
ci/upload_relnotes.py
coverage/__init__.py
coverage/__main__.py
coverage/annotate.py
coverage/backunittest.py
coverage/backward.py
coverage/bytecode.py
coverage/cmdline.py
coverage/collector.py
coverage/config.py
coverage/context.py
coverage/control.py
coverage/data.py
coverage/debug.py
coverage/disposition.py
coverage/env.py
coverage/execfile.py
coverage/files.py
coverage/html.py
coverage/inorout.py
coverage/jsonreport.py
coverage/misc.py
coverage/multiproc.py
coverage/numbits.py
coverage/optional.py
coverage/parser.py
coverage/phystokens.py
coverage/plugin.py
coverage/plugin_support.py
coverage/python.py
coverage/pytracer.py
coverage/report.py
coverage/results.py
coverage/sqldata.py
coverage/summary.py
coverage/templite.py
coverage/tomlconfig.py
coverage/version.py
coverage/xmlreport.py
coverage.egg-info/PKG-INFO
coverage.egg-info/SOURCES.txt
coverage.egg-info/dependency_links.txt
coverage.egg-info/entry_points.txt
coverage.egg-info/not-zip-safe
coverage.egg-info/requires.txt
coverage.egg-info/top_level.txt
coverage/ctracer/datastack.c
coverage/ctracer/datastack.h
coverage/ctracer/filedisp.c
coverage/ctracer/filedisp.h
coverage/ctracer/module.c
coverage/ctracer/stats.h
coverage/ctracer/tracer.c
coverage/ctracer/tracer.h
coverage/ctracer/util.h
coverage/fullcoverage/encodings.py
coverage/htmlfiles/coverage_html.js
coverage/htmlfiles/index.html
coverage/htmlfiles/jquery.ba-throttle-debounce.min.js
coverage/htmlfiles/jquery.hotkeys.js
coverage/htmlfiles/jquery.isonscreen.js
coverage/htmlfiles/jquery.min.js
coverage/htmlfiles/jquery.tablesorter.min.js
coverage/htmlfiles/keybd_closed.png
coverage/htmlfiles/keybd_open.png
coverage/htmlfiles/pyfile.html
coverage/htmlfiles/style.css
coverage/htmlfiles/style.scss
doc/api.rst
doc/api_coverage.rst
doc/api_coveragedata.rst
doc/api_module.rst
doc/api_plugin.rst
doc/branch.rst
doc/changes.rst
doc/check_copied_from.py
doc/cmd.rst
doc/conf.py
doc/config.rst
doc/contexts.rst
doc/contributing.rst
doc/dbschema.rst
doc/dict.txt
doc/excluding.rst
doc/faq.rst
doc/howitworks.rst
doc/index.rst
doc/install.rst
doc/plugins.rst
doc/python-coverage.1.txt
doc/requirements.pip
doc/sleepy.rst
doc/source.rst
doc/subprocess.rst
doc/trouble.rst
doc/whatsnew5x.rst
doc/_static/coverage.css
doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png
doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png
doc/media/sleepy-snake-600.png
doc/media/sleepy-snake-circle-150.png
doc/sample_html/keybd_closed.png
doc/sample_html/keybd_open.png
requirements/ci.pip
requirements/dev.pip
requirements/pytest.pip
requirements/tox.pip
requirements/wheel.pip
tests/__init__.py
tests/conftest.py
tests/coveragetest.py
tests/covmodzip1.py
tests/goldtest.py
tests/helpers.py
tests/osinfo.py
tests/plugin1.py
tests/plugin2.py
tests/plugin_config.py
tests/stress_phystoken.tok
tests/stress_phystoken_dos.tok
tests/test_annotate.py
tests/test_api.py
tests/test_arcs.py
tests/test_backward.py
tests/test_cmdline.py
tests/test_collector.py
tests/test_concurrency.py
tests/test_config.py
tests/test_context.py
tests/test_coverage.py
tests/test_data.py
tests/test_debug.py
tests/test_execfile.py
tests/test_filereporter.py
tests/test_files.py
tests/test_html.py
tests/test_json.py
tests/test_misc.py
tests/test_numbits.py
tests/test_oddball.py
tests/test_parser.py
tests/test_phystokens.py
tests/test_plugins.py
tests/test_process.py
tests/test_python.py
tests/test_results.py
tests/test_setup.py
tests/test_summary.py
tests/test_templite.py
tests/test_testing.py
tests/test_version.py
tests/test_xml.py
tests/eggsrc/setup.py
tests/eggsrc/egg1/__init__.py
tests/eggsrc/egg1/egg1.py
tests/gold/README.rst
tests/gold/annotate/anno_dir/a___init__.py,cover
tests/gold/annotate/anno_dir/a_a.py,cover
tests/gold/annotate/anno_dir/b___init__.py,cover
tests/gold/annotate/anno_dir/b_b.py,cover
tests/gold/annotate/anno_dir/multi.py,cover
tests/gold/annotate/annotate/white.py,cover
tests/gold/annotate/encodings/utf8.py,cover
tests/gold/annotate/multi/multi.py,cover
tests/gold/annotate/multi/a/__init__.py,cover
tests/gold/annotate/multi/a/a.py,cover
tests/gold/annotate/multi/b/__init__.py,cover
tests/gold/annotate/multi/b/b.py,cover
tests/gold/html/Makefile
tests/gold/html/a/a_py.html
tests/gold/html/a/index.html
tests/gold/html/b_branch/b_py.html
tests/gold/html/b_branch/index.html
tests/gold/html/bom/bom_py.html
tests/gold/html/bom/index.html
tests/gold/html/bom/2/bom_py.html
tests/gold/html/bom/2/index.html
tests/gold/html/isolatin1/index.html
tests/gold/html/isolatin1/isolatin1_py.html
tests/gold/html/omit_1/index.html
tests/gold/html/omit_1/m1_py.html
tests/gold/html/omit_1/m2_py.html
tests/gold/html/omit_1/m3_py.html
tests/gold/html/omit_1/main_py.html
tests/gold/html/omit_2/index.html
tests/gold/html/omit_2/m2_py.html
tests/gold/html/omit_2/m3_py.html
tests/gold/html/omit_2/main_py.html
tests/gold/html/omit_3/index.html
tests/gold/html/omit_3/m3_py.html
tests/gold/html/omit_3/main_py.html
tests/gold/html/omit_4/index.html
tests/gold/html/omit_4/m1_py.html
tests/gold/html/omit_4/m3_py.html
tests/gold/html/omit_4/main_py.html
tests/gold/html/omit_5/index.html
tests/gold/html/omit_5/m1_py.html
tests/gold/html/omit_5/main_py.html
tests/gold/html/other/blah_blah_other_py.html
tests/gold/html/other/here_py.html
tests/gold/html/other/index.html
tests/gold/html/partial/index.html
tests/gold/html/partial/partial_py.html
tests/gold/html/styled/a_py.html
tests/gold/html/styled/extra.css
tests/gold/html/styled/index.html
tests/gold/html/styled/style.css
tests/gold/html/support/coverage_html.js
tests/gold/html/support/jquery.ba-throttle-debounce.min.js
tests/gold/html/support/jquery.hotkeys.js
tests/gold/html/support/jquery.isonscreen.js
tests/gold/html/support/jquery.min.js
tests/gold/html/support/jquery.tablesorter.min.js
tests/gold/html/support/keybd_closed.png
tests/gold/html/support/keybd_open.png
tests/gold/html/support/style.css
tests/gold/html/unicode/index.html
tests/gold/html/unicode/unicode_py.html
tests/gold/xml/x_xml/coverage.xml
tests/gold/xml/y_xml_branch/coverage.xml
tests/js/index.html
tests/js/tests.js
tests/modules/covmod1.py
tests/modules/runmod1.py
tests/modules/usepkgs.py
tests/modules/aa/__init__.py
tests/modules/aa/afile.odd.py
tests/modules/aa/afile.py
tests/modules/aa/zfile.py
tests/modules/aa/bb/__init__.py
tests/modules/aa/bb/bfile.odd.py
tests/modules/aa/bb/bfile.py
tests/modules/aa/bb.odd/bfile.py
tests/modules/aa/bb/cc/__init__.py
tests/modules/aa/bb/cc/cfile.py
tests/modules/namespace_420/sub1/__init__.py
tests/modules/pkg1/__init__.py
tests/modules/pkg1/__main__.py
tests/modules/pkg1/p1a.py
tests/modules/pkg1/p1b.py
tests/modules/pkg1/p1c.py
tests/modules/pkg1/runmod2.py
tests/modules/pkg1/sub/__init__.py
tests/modules/pkg1/sub/__main__.py
tests/modules/pkg1/sub/ps1a.py
tests/modules/pkg1/sub/runmod3.py
tests/modules/pkg2/__init__.py
tests/modules/pkg2/p2a.py
tests/modules/pkg2/p2b.py
tests/modules/plugins/__init__.py
tests/modules/plugins/a_plugin.py
tests/modules/plugins/another.py
tests/modules/process_test/__init__.py
tests/modules/process_test/try_execfile.py
tests/moremodules/namespace_420/sub2/__init__.py
tests/moremodules/othermods/__init__.py
tests/moremodules/othermods/othera.py
tests/moremodules/othermods/otherb.py
tests/moremodules/othermods/sub/__init__.py
tests/moremodules/othermods/sub/osa.py
tests/moremodules/othermods/sub/osb.py
tests/qunit/jquery.tmpl.min.js

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,5 @@
[console_scripts]
coverage = coverage.cmdline:main
coverage-3.8 = coverage.cmdline:main
coverage3 = coverage.cmdline:main

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,3 @@
[toml]
toml

View File

@ -0,0 +1 @@
coverage

View File

@ -0,0 +1,143 @@
Metadata-Version: 1.1
Name: esprima
Version: 4.0.1
Summary: ECMAScript parsing infrastructure for multipurpose analysis in Python
Home-page: https://github.com/Kronuz/esprima-python
Author: German M. Bravo (Kronuz)
Author-email: german.mb@gmail.com
License: BSD License
Description: |Donate| |PyPI Version| |PyPI License| |PyPI Format| |PyPI Status|
**Esprima** (`esprima.org <http://esprima.org>`__, BSD license) is a
high performance, standard-compliant
`ECMAScript <http://www.ecma-international.org/publications/standards/Ecma-262.htm>`__
parser officially written in ECMAScript (also popularly known as
`JavaScript <https://en.wikipedia.org/wiki/JavaScript>`__) and ported to
Python. Esprima is created and maintained by `Ariya
Hidayat <https://twitter.com/ariyahidayat>`__, with the help of `many
contributors <https://github.com/jquery/esprima/contributors>`__.
Python port is a line-by-line manual translation and was created and is
maintained by `German Mendez Bravo
(Kronuz) <https://twitter.com/germbravo>`__.
Features
~~~~~~~~
- Full support for ECMAScript 2017 (`ECMA-262 8th
Edition <http://www.ecma-international.org/publications/standards/Ecma-262.htm>`__)
- Sensible `syntax tree
format <https://github.com/estree/estree/blob/master/es5.md>`__ as
standardized by `ESTree project <https://github.com/estree/estree>`__
- Experimental support for `JSX <https://facebook.github.io/jsx/>`__, a
syntax extension for `React <https://facebook.github.io/react/>`__
- Optional tracking of syntax node location (index-based and
line-column)
- `Heavily tested <http://esprima.org/test/ci.html>`__ (~1500 `unit
tests <https://github.com/jquery/esprima/tree/master/test/fixtures>`__
with `full code
coverage <https://codecov.io/github/jquery/esprima>`__)
Installation
~~~~~~~~~~~~
.. code:: shell
pip install esprima
API
~~~
Esprima can be used to perform `lexical
analysis <https://en.wikipedia.org/wiki/Lexical_analysis>`__
(tokenization) or `syntactic
analysis <https://en.wikipedia.org/wiki/Parsing>`__ (parsing) of a
JavaScript program.
A simple example:
.. code:: javascript
>>> import esprima
>>> program = 'const answer = 42'
>>> esprima.tokenize(program)
[{
type: "Keyword",
value: "const"
}, {
type: "Identifier",
value: "answer"
}, {
type: "Punctuator",
value: "="
}, {
type: "Numeric",
value: "42"
}]
>>> esprima.parseScript(program)
{
body: [
{
kind: "const",
declarations: [
{
init: {
raw: "42",
type: "Literal",
value: 42
},
type: "VariableDeclarator",
id: {
type: "Identifier",
name: "answer"
}
}
],
type: "VariableDeclaration"
}
],
type: "Program",
sourceType: "script"
}
For more information, please read the `complete
documentation <http://esprima.org/doc>`__.
.. |Donate| image:: https://img.shields.io/badge/Donate-PayPal-green.svg
:target: https://www.paypal.me/Kronuz/25
.. |PyPI Version| image:: https://img.shields.io/pypi/v/esprima.svg
:target: https://pypi.python.org/pypi/esprima
.. |PyPI License| image:: https://img.shields.io/pypi/l/esprima.svg
:target: https://pypi.python.org/pypi/esprima
.. |PyPI Wheel| image:: https://img.shields.io/pypi/wheel/esprima.svg
:target: https://pypi.python.org/pypi/esprima
.. |PyPI Format| image:: https://img.shields.io/pypi/format/esprima.svg
:target: https://pypi.python.org/pypi/esprima
.. |PyPI Python Version| image:: https://img.shields.io/pypi/pyversions/esprima.svg
:target: https://pypi.python.org/pypi/esprima
.. |PyPI Implementation| image:: https://img.shields.io/pypi/implementation/esprima.svg
:target: https://pypi.python.org/pypi/esprima
.. |PyPI Status| image:: https://img.shields.io/pypi/status/esprima.svg
:target: https://pypi.python.org/pypi/esprima
.. |PyPI Downloads| image:: https://img.shields.io/pypi/dm/esprima.svg
:target: https://pypi.python.org/pypi/esprima
Keywords: esprima ecmascript javascript parser ast
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Code Generators
Classifier: Topic :: Software Development :: Compilers
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Text Processing :: General
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6

View File

@ -0,0 +1,29 @@
README
setup.py
esprima/__init__.py
esprima/__main__.py
esprima/character.py
esprima/comment_handler.py
esprima/compat.py
esprima/error_handler.py
esprima/esprima.py
esprima/jsx_nodes.py
esprima/jsx_parser.py
esprima/jsx_syntax.py
esprima/messages.py
esprima/nodes.py
esprima/objects.py
esprima/parser.py
esprima/scanner.py
esprima/syntax.py
esprima/token.py
esprima/tokenizer.py
esprima/utils.py
esprima/visitor.py
esprima/xhtml_entities.py
esprima.egg-info/PKG-INFO
esprima.egg-info/SOURCES.txt
esprima.egg-info/dependency_links.txt
esprima.egg-info/entry_points.txt
esprima.egg-info/pbr.json
esprima.egg-info/top_level.txt

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,3 @@
[console_scripts]
esprima = esprima.__main__:main

View File

@ -0,0 +1 @@
{"is_release": false, "git_version": "ac65290"}

View File

@ -0,0 +1 @@
esprima

View File

@ -0,0 +1,18 @@
Metadata-Version: 2.1
Name: fluent.migrate
Version: 0.11
Summary: Toolchain to migrate legacy translation to Fluent.
Home-page: https://hg.mozilla.org/l10n/fluent-migration/
Author: Mozilla
Author-email: l10n-drivers@mozilla.org
License: APL 2
Description: UNKNOWN
Keywords: fluent,localization,l10n
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.7
Description-Content-Type: text/markdown
Provides-Extra: hg

View File

@ -0,0 +1,23 @@
README.md
setup.cfg
setup.py
fluent/__init__.py
fluent.migrate.egg-info/PKG-INFO
fluent.migrate.egg-info/SOURCES.txt
fluent.migrate.egg-info/dependency_links.txt
fluent.migrate.egg-info/entry_points.txt
fluent.migrate.egg-info/requires.txt
fluent.migrate.egg-info/top_level.txt
fluent/migrate/__init__.py
fluent/migrate/_context.py
fluent/migrate/blame.py
fluent/migrate/changesets.py
fluent/migrate/context.py
fluent/migrate/errors.py
fluent/migrate/evaluator.py
fluent/migrate/helpers.py
fluent/migrate/merge.py
fluent/migrate/tool.py
fluent/migrate/transforms.py
fluent/migrate/util.py
fluent/migrate/validator.py

View File

@ -0,0 +1,4 @@
[console_scripts]
migrate-l10n = fluent.migrate.tool:cli
validate-l10n-recipe = fluent.migrate.validator:cli

View File

@ -0,0 +1,6 @@
compare-locales<9.0,>=8.1
fluent.syntax<0.19,>=0.18.0
six
[hg]
python-hglib

View File

@ -0,0 +1 @@
fluent

View File

@ -0,0 +1,81 @@
Metadata-Version: 1.1
Name: idna-ssl
Version: 1.1.0
Summary: Patch ssl.match_hostname for Unicode(idna) domains support
Home-page: https://github.com/aio-libs/idna-ssl
Author: Victor Kovtun
Author-email: hellysmile@gmail.com
License: UNKNOWN
Description: idna-ssl
========
:info: Patch ssl.match_hostname for Unicode(idna) domains support
.. image:: https://travis-ci.com/aio-libs/idna-ssl.svg?branch=master
:target: https://travis-ci.com/aio-libs/idna-ssl
.. image:: https://img.shields.io/pypi/v/idna_ssl.svg
:target: https://pypi.python.org/pypi/idna_ssl
.. image:: https://codecov.io/gh/aio-libs/idna-ssl/branch/master/graph/badge.svg
:target: https://codecov.io/gh/aio-libs/idna-ssl
Installation
------------
.. code-block:: shell
pip install idna-ssl
Usage
-----
.. code-block:: python
from idna_ssl import patch_match_hostname # noqa isort:skip
patch_match_hostname() # noqa isort:skip
import asyncio
import aiohttp
URL = 'https://цфоут.мвд.рф/news/item/8065038/'
async def main():
async with aiohttp.ClientSession() as session:
async with session.get(URL) as response:
print(response)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Motivation
----------
* Here is 100% backward capability
* Related aiohttp `issue <https://github.com/aio-libs/aiohttp/issues/949>`_
* Related Python `bug <https://bugs.python.org/issue31872>`_
* Related Python `pull request <https://github.com/python/cpython/pull/3462>`_
* It is fixed (by January 27 2018) in upcoming Python 3.7, but `IDNA2008 <https://tools.ietf.org/html/rfc5895>`_ is still broken
Thanks
------
The library was donated by `Ocean S.A. <https://ocean.io/>`_
Thanks to the company for contribution.
Keywords: ssl,Unicode,idna,match_hostname
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7

View File

@ -0,0 +1,12 @@
LICENSE
MANIFEST.in
README.rst
idna_ssl.py
setup.cfg
setup.py
idna_ssl.egg-info/PKG-INFO
idna_ssl.egg-info/SOURCES.txt
idna_ssl.egg-info/dependency_links.txt
idna_ssl.egg-info/not-zip-safe
idna_ssl.egg-info/requires.txt
idna_ssl.egg-info/top_level.txt

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
idna>=2.0

View File

@ -0,0 +1 @@
idna_ssl

View File

@ -0,0 +1,117 @@
Metadata-Version: 1.1
Name: jsmin
Version: 2.1.0
Summary: JavaScript minifier.
PLEASE UPDATE TO VERSION >= 2.0.6. Older versions have a serious bug related to comments.
Home-page: https://bitbucket.org/dcs/jsmin/
Author: Tikitu de Jager
Author-email: tikitu+jsmin@logophile.org
License: MIT License
Description: =====
jsmin
=====
JavaScript minifier.
Usage
=====
.. code:: python
from jsmin import jsmin
with open('myfile.js') as js_file:
minified = jsmin(js_file.read())
You can run it as a commandline tool also::
python -m jsmin myfile.js
As yet, ``jsmin`` makes no attempt to be compatible with
`ECMAScript 6 / ES.next / Harmony <http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts>`_.
If you're using it on Harmony code, though, you might find the ``quote_chars``
parameter useful:
.. code:: python
from jsmin import jsmin
with open('myfile.js') as js_file:
minified = jsmin(js_file.read(), quote_chars="'\"`")
Where to get it
===============
* install the package `from pypi <https://pypi.python.org/pypi/jsmin/>`_
* get the latest release `from the stable branch on bitbucket <https://bitbucket.org/dcs/jsmin/branch/stable>`_
* get the development version `from the default branch on bitbucket <https://bitbucket.org/dcs/jsmin/branch/default>`_
Contributing
============
`Issues <https://bitbucket.org/dcs/jsmin/issues>`_ and `Pull requests <https://bitbucket.org/dcs/jsmin/pull-requests>`_
will be gratefully received on Bitbucket. Pull requests on github are great too, but the issue tracker lives on
bitbucket.
If possible, please make separate pull requests for tests and for code: tests will be committed on the stable branch
(which tracks the latest released version) while code will go to default by, erm, default.
Unless you request otherwise, your Bitbucket identity will be added to the contributor's list below; if you prefer a
different name feel free to add it in your pull request instead. (If you prefer not to be mentioned you'll have to let
the maintainer know somehow.)
Build/test status
=================
Both default and stable branches are tested with Travis: https://travis-ci.org/tikitu/jsmin
Stable (latest released version plus any new tests) is tested against CPython 2.6, 2.7, 3.2, and 3.3.
Currently:
.. image:: https://travis-ci.org/tikitu/jsmin.png?branch=ghstable
If stable is failing that means there's a new test that fails on *the latest released version on pypi*, with no fix yet
released.
Default (development version, might be ahead of latest released version) is tested against CPython 2.6, 2.7, 3.2, and
3.3. Currently:
.. image:: https://travis-ci.org/tikitu/jsmin.png?branch=master
If default is failing don't use it, but as long as stable is passing the pypi release should be ok.
Contributors (chronological commit order)
=========================================
* `Dave St.Germain <https://bitbucket.org/dcs>`_ (original author)
* `Hans weltar <https://bitbucket.org/hansweltar>`_
* `Tikitu de Jager <mailto:tikitu+jsmin@logophile.org>`_ (current maintainer)
* https://bitbucket.org/rennat
* `Nick Alexander <https://bitbucket.org/ncalexan>`_
Changelog
=========
v2.1.0 (2014-12-24) Tikitu de Jager
-----------------------------------
* First changelog entries; see README.rst for prior contributors.
* Expose quote_chars parameter to provide just enough unofficial Harmony
support to be useful.
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Pre-processors
Classifier: Topic :: Text Processing :: Filters

View File

@ -0,0 +1,13 @@
CHANGELOG.txt
LICENSE.txt
MANIFEST.in
README.rst
setup.cfg
setup.py
jsmin/__init__.py
jsmin/__main__.py
jsmin/test.py
jsmin.egg-info/PKG-INFO
jsmin.egg-info/SOURCES.txt
jsmin.egg-info/dependency_links.txt
jsmin.egg-info/top_level.txt

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
jsmin

View File

@ -0,0 +1,11 @@
Metadata-Version: 2.1
Name: json-e
Version: 2.7.0
Summary: A data-structure parameterization system written for embedding context in JSON objects
Home-page: https://taskcluster.github.io/json-e/
Author: Dustin J. Mitchell
Author-email: dustin@mozilla.com
License: MPL2
Description: UNKNOWN
Platform: UNKNOWN
Provides-Extra: release

View File

@ -0,0 +1,17 @@
MANIFEST.in
README.md
package.json
setup.cfg
setup.py
json_e.egg-info/PKG-INFO
json_e.egg-info/SOURCES.txt
json_e.egg-info/dependency_links.txt
json_e.egg-info/requires.txt
json_e.egg-info/top_level.txt
jsone/__init__.py
jsone/builtins.py
jsone/interpreter.py
jsone/prattparser.py
jsone/render.py
jsone/shared.py
jsone/six.py

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,3 @@
[release]
towncrier

View File

@ -0,0 +1 @@
jsone

View File

@ -0,0 +1,19 @@
Metadata-Version: 1.1
Name: mohawk
Version: 0.3.4
Summary: Library for Hawk HTTP authorization
Home-page: https://github.com/kumar303/mohawk
Author: Kumar McMillan, Austin King
Author-email: kumar.mcmillan@gmail.com
License: MPL 2.0 (Mozilla Public License)
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.3
Classifier: Topic :: Internet :: WWW/HTTP

View File

@ -0,0 +1,15 @@
README.rst
setup.py
mohawk/__init__.py
mohawk/base.py
mohawk/bewit.py
mohawk/exc.py
mohawk/receiver.py
mohawk/sender.py
mohawk/tests.py
mohawk/util.py
mohawk.egg-info/PKG-INFO
mohawk.egg-info/SOURCES.txt
mohawk.egg-info/dependency_links.txt
mohawk.egg-info/requires.txt
mohawk.egg-info/top_level.txt

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
six

View File

@ -0,0 +1 @@
mohawk

View File

@ -0,0 +1,128 @@
Metadata-Version: 1.2
Name: multidict
Version: 5.1.0
Summary: multidict implementation
Home-page: https://github.com/aio-libs/multidict
Author: Andrew Svetlov
Author-email: andrew.svetlov@gmail.com
License: Apache 2
Project-URL: Chat: Gitter, https://gitter.im/aio-libs/Lobby
Project-URL: CI: Azure Pipelines, https://dev.azure.com/aio-libs/multidict/_build
Project-URL: Coverage: codecov, https://codecov.io/github/aio-libs/multidict
Project-URL: Docs: RTD, https://multidict.readthedocs.io
Project-URL: GitHub: issues, https://github.com/aio-libs/multidict/issues
Project-URL: GitHub: repo, https://github.com/aio-libs/multidict
Description: =========
multidict
=========
.. image:: https://github.com/aio-libs/multidict/workflows/CI/badge.svg
:target: https://github.com/aio-libs/multidict/actions?query=workflow%3ACI
:alt: GitHub status for master branch
.. image:: https://codecov.io/gh/aio-libs/multidict/branch/master/graph/badge.svg
:target: https://codecov.io/gh/aio-libs/multidict
:alt: Coverage metrics
.. image:: https://img.shields.io/pypi/v/multidict.svg
:target: https://pypi.org/project/multidict
:alt: PyPI
.. image:: https://readthedocs.org/projects/multidict/badge/?version=latest
:target: http://multidict.readthedocs.org/en/latest/?badge=latest
:alt: Documentationb
.. image:: https://img.shields.io/pypi/pyversions/multidict.svg
:target: https://pypi.org/project/multidict
:alt: Python versions
.. image:: https://badges.gitter.im/Join%20Chat.svg
:target: https://gitter.im/aio-libs/Lobby
:alt: Chat on Gitter
Multidict is dict-like collection of *key-value pairs* where key
might be occurred more than once in the container.
Introduction
------------
*HTTP Headers* and *URL query string* require specific data structure:
*multidict*. It behaves mostly like a regular ``dict`` but it may have
several *values* for the same *key* and *preserves insertion ordering*.
The *key* is ``str`` (or ``istr`` for case-insensitive dictionaries).
``multidict`` has four multidict classes:
``MultiDict``, ``MultiDictProxy``, ``CIMultiDict``
and ``CIMultiDictProxy``.
Immutable proxies (``MultiDictProxy`` and
``CIMultiDictProxy``) provide a dynamic view for the
proxied multidict, the view reflects underlying collection changes. They
implement the ``collections.abc.Mapping`` interface.
Regular mutable (``MultiDict`` and ``CIMultiDict``) classes
implement ``collections.abc.MutableMapping`` and allows to change
their own content.
*Case insensitive* (``CIMultiDict`` and
``CIMultiDictProxy``) ones assume the *keys* are case
insensitive, e.g.::
>>> dct = CIMultiDict(key='val')
>>> 'Key' in dct
True
>>> dct['Key']
'val'
*Keys* should be ``str`` or ``istr`` instances.
The library has optional C Extensions for sake of speed.
License
-------
Apache 2
Library Installation
--------------------
.. code-block:: bash
$ pip install multidict
The library is Python 3 only!
PyPI contains binary wheels for Linux, Windows and MacOS. If you want to install
``multidict`` on another operation system (or *Alpine Linux* inside a Docker) the
Tarball will be used to compile the library from sources. It requires C compiler and
Python headers installed.
To skip the compilation please use `MULTIDICT_NO_EXTENSIONS` environment variable,
e.g.:
.. code-block:: bash
$ MULTIDICT_NO_EXTENSIONS=1 pip install multidict
Please note, Pure Python (uncompiled) version is about 20-50 times slower depending on
the usage scenario!!!
Changelog
---------
See `RTD page <http://multidict.readthedocs.org/en/latest/changes.html>`_.
Platform: UNKNOWN
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Development Status :: 5 - Production/Stable
Requires-Python: >=3.6

View File

@ -0,0 +1,71 @@
CHANGES.rst
LICENSE
MANIFEST.in
Makefile
README.rst
pyproject.toml
setup.cfg
setup.py
docs/Makefile
docs/benchmark.rst
docs/changes.rst
docs/conf.py
docs/index.rst
docs/make.bat
docs/multidict.rst
docs/spelling_wordlist.txt
multidict/__init__.py
multidict/__init__.pyi
multidict/_abc.py
multidict/_compat.py
multidict/_multidict.c
multidict/_multidict_base.py
multidict/_multidict_py.py
multidict/py.typed
multidict.egg-info/PKG-INFO
multidict.egg-info/SOURCES.txt
multidict.egg-info/dependency_links.txt
multidict.egg-info/top_level.txt
multidict/_multilib/defs.h
multidict/_multilib/dict.h
multidict/_multilib/istr.h
multidict/_multilib/iter.h
multidict/_multilib/pair_list.h
multidict/_multilib/views.h
tests/cimultidict.pickle.0
tests/cimultidict.pickle.1
tests/cimultidict.pickle.2
tests/cimultidict.pickle.3
tests/cimultidict.pickle.4
tests/cimultidict.pickle.5
tests/conftest.py
tests/gen_pickles.py
tests/multidict.pickle.0
tests/multidict.pickle.1
tests/multidict.pickle.2
tests/multidict.pickle.3
tests/multidict.pickle.4
tests/multidict.pickle.5
tests/pycimultidict.pickle.0
tests/pycimultidict.pickle.1
tests/pycimultidict.pickle.2
tests/pycimultidict.pickle.3
tests/pycimultidict.pickle.4
tests/pycimultidict.pickle.5
tests/pymultidict.pickle.0
tests/pymultidict.pickle.1
tests/pymultidict.pickle.2
tests/pymultidict.pickle.3
tests/pymultidict.pickle.4
tests/pymultidict.pickle.5
tests/test_abc.py
tests/test_copy.py
tests/test_guard.py
tests/test_istr.py
tests/test_multidict.py
tests/test_mutable_multidict.py
tests/test_mypy.py
tests/test_pickle.py
tests/test_types.py
tests/test_update.py
tests/test_version.py

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
multidict

View File

@ -0,0 +1,22 @@
Metadata-Version: 1.1
Name: ply
Version: 3.10
Summary: Python Lex & Yacc
Home-page: http://www.dabeaz.com/ply/
Author: David Beazley
Author-email: dave@dabeaz.com
License: BSD
Description:
PLY is yet another implementation of lex and yacc for Python. Some notable
features include the fact that its implemented entirely in Python and it
uses LALR(1) parsing which is efficient and well suited for larger grammars.
PLY provides most of the standard lex/yacc features including support for empty
productions, precedence rules, error recovery, and support for ambiguous grammars.
PLY is extremely easy to use and provides very extensive error checking.
It is compatible with both Python 2 and Python 3.
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 2

View File

@ -0,0 +1,172 @@
ANNOUNCE
CHANGES
MANIFEST.in
README.md
TODO
setup.cfg
setup.py
doc/internal.html
doc/makedoc.py
doc/ply.html
example/README
example/cleanup.sh
example/BASIC/README
example/BASIC/basic.py
example/BASIC/basiclex.py
example/BASIC/basiclog.py
example/BASIC/basinterp.py
example/BASIC/basparse.py
example/BASIC/dim.bas
example/BASIC/func.bas
example/BASIC/gcd.bas
example/BASIC/gosub.bas
example/BASIC/hello.bas
example/BASIC/linear.bas
example/BASIC/maxsin.bas
example/BASIC/powers.bas
example/BASIC/rand.bas
example/BASIC/sales.bas
example/BASIC/sears.bas
example/BASIC/sqrt1.bas
example/BASIC/sqrt2.bas
example/GardenSnake/GardenSnake.py
example/GardenSnake/README
example/ansic/README
example/ansic/clex.py
example/ansic/cparse.py
example/calc/calc.py
example/calcdebug/calc.py
example/calceof/calc.py
example/classcalc/calc.py
example/closurecalc/calc.py
example/hedit/hedit.py
example/newclasscalc/calc.py
example/optcalc/README
example/optcalc/calc.py
example/unicalc/calc.py
example/yply/README
example/yply/ylex.py
example/yply/yparse.py
example/yply/yply.py
ply/__init__.py
ply/cpp.py
ply/ctokens.py
ply/lex.py
ply/yacc.py
ply/ygen.py
ply.egg-info/PKG-INFO
ply.egg-info/SOURCES.txt
ply.egg-info/dependency_links.txt
ply.egg-info/top_level.txt
test/README
test/calclex.py
test/cleanup.sh
test/lex_closure.py
test/lex_doc1.py
test/lex_dup1.py
test/lex_dup2.py
test/lex_dup3.py
test/lex_empty.py
test/lex_error1.py
test/lex_error2.py
test/lex_error3.py
test/lex_error4.py
test/lex_hedit.py
test/lex_ignore.py
test/lex_ignore2.py
test/lex_literal1.py
test/lex_literal2.py
test/lex_literal3.py
test/lex_many_tokens.py
test/lex_module.py
test/lex_module_import.py
test/lex_object.py
test/lex_opt_alias.py
test/lex_optimize.py
test/lex_optimize2.py
test/lex_optimize3.py
test/lex_re1.py
test/lex_re2.py
test/lex_re3.py
test/lex_rule1.py
test/lex_rule2.py
test/lex_rule3.py
test/lex_state1.py
test/lex_state2.py
test/lex_state3.py
test/lex_state4.py
test/lex_state5.py
test/lex_state_noerror.py
test/lex_state_norule.py
test/lex_state_try.py
test/lex_token1.py
test/lex_token2.py
test/lex_token3.py
test/lex_token4.py
test/lex_token5.py
test/lex_token_dup.py
test/testlex.py
test/testyacc.py
test/yacc_badargs.py
test/yacc_badid.py
test/yacc_badprec.py
test/yacc_badprec2.py
test/yacc_badprec3.py
test/yacc_badrule.py
test/yacc_badtok.py
test/yacc_dup.py
test/yacc_error1.py
test/yacc_error2.py
test/yacc_error3.py
test/yacc_error4.py
test/yacc_error5.py
test/yacc_error6.py
test/yacc_error7.py
test/yacc_inf.py
test/yacc_literal.py
test/yacc_misplaced.py
test/yacc_missing1.py
test/yacc_nested.py
test/yacc_nodoc.py
test/yacc_noerror.py
test/yacc_nop.py
test/yacc_notfunc.py
test/yacc_notok.py
test/yacc_prec1.py
test/yacc_rr.py
test/yacc_rr_unused.py
test/yacc_simple.py
test/yacc_sr.py
test/yacc_term1.py
test/yacc_unicode_literals.py
test/yacc_unused.py
test/yacc_unused_rule.py
test/yacc_uprec.py
test/yacc_uprec2.py
test/pkg_test1/__init__.py
test/pkg_test1/parsing/__init__.py
test/pkg_test1/parsing/calclex.py
test/pkg_test1/parsing/calcparse.py
test/pkg_test2/__init__.py
test/pkg_test2/parsing/__init__.py
test/pkg_test2/parsing/calclex.py
test/pkg_test2/parsing/calcparse.py
test/pkg_test3/__init__.py
test/pkg_test3/generated/__init__.py
test/pkg_test3/parsing/__init__.py
test/pkg_test3/parsing/calclex.py
test/pkg_test3/parsing/calcparse.py
test/pkg_test4/__init__.py
test/pkg_test4/parsing/__init__.py
test/pkg_test4/parsing/calclex.py
test/pkg_test4/parsing/calcparse.py
test/pkg_test5/__init__.py
test/pkg_test5/parsing/__init__.py
test/pkg_test5/parsing/calclex.py
test/pkg_test5/parsing/calcparse.py
test/pkg_test6/__init__.py
test/pkg_test6/parsing/__init__.py
test/pkg_test6/parsing/calclex.py
test/pkg_test6/parsing/calcparse.py
test/pkg_test6/parsing/expression.py
test/pkg_test6/parsing/statement.py

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
ply

View File

@ -0,0 +1,742 @@
Metadata-Version: 1.1
Name: pyrsistent
Version: 0.16.0
Summary: Persistent/Functional/Immutable data structures
Home-page: http://github.com/tobgu/pyrsistent/
Author: Tobias Gustafsson
Author-email: tobias.l.gustafsson@gmail.com
License: MIT
Description: Pyrsistent
==========
.. image:: https://travis-ci.org/tobgu/pyrsistent.png?branch=master
:target: https://travis-ci.org/tobgu/pyrsistent
.. image:: https://badge.fury.io/py/pyrsistent.svg
:target: https://badge.fury.io/py/pyrsistent
.. image:: https://coveralls.io/repos/tobgu/pyrsistent/badge.svg?branch=master&service=github
:target: https://coveralls.io/github/tobgu/pyrsistent?branch=master
.. _Pyrthon: https://www.github.com/tobgu/pyrthon/
Pyrsistent is a number of persistent collections (by some referred to as functional data structures). Persistent in
the sense that they are immutable.
All methods on a data structure that would normally mutate it instead return a new copy of the structure containing the
requested updates. The original structure is left untouched.
This will simplify the reasoning about what a program does since no hidden side effects ever can take place to these
data structures. You can rest assured that the object you hold a reference to will remain the same throughout its
lifetime and need not worry that somewhere five stack levels below you in the darkest corner of your application
someone has decided to remove that element that you expected to be there.
Pyrsistent is influenced by persistent data structures such as those found in the standard library of Clojure. The
data structures are designed to share common elements through path copying.
It aims at taking these concepts and make them as pythonic as possible so that they can be easily integrated into any python
program without hassle.
If you want to go all in on persistent data structures and use literal syntax to define them in your code rather
than function calls check out Pyrthon_.
Examples
--------
.. _Sequence: collections_
.. _Hashable: collections_
.. _Mapping: collections_
.. _Mappings: collections_
.. _Set: collections_
.. _collections: https://docs.python.org/3/library/collections.abc.html
.. _documentation: http://pyrsistent.readthedocs.org/
The collection types and key features currently implemented are:
* PVector_, similar to a python list
* PMap_, similar to dict
* PSet_, similar to set
* PRecord_, a PMap on steroids with fixed fields, optional type and invariant checking and much more
* PClass_, a Python class fixed fields, optional type and invariant checking and much more
* `Checked collections`_, PVector, PMap and PSet with optional type and invariance checks and more
* PBag, similar to collections.Counter
* PList, a classic singly linked list
* PDeque, similar to collections.deque
* Immutable object type (immutable) built on the named tuple
* freeze_ and thaw_ functions to convert between pythons standard collections and pyrsistent collections.
* Flexible transformations_ of arbitrarily complex structures built from PMaps and PVectors.
Below are examples of common usage patterns for some of the structures and features. More information and
full documentation for all data structures is available in the documentation_.
.. _PVector:
PVector
~~~~~~~
With full support for the Sequence_ protocol PVector is meant as a drop in replacement to the built in list from a readers
point of view. Write operations of course differ since no in place mutation is done but naming should be in line
with corresponding operations on the built in list.
Support for the Hashable_ protocol also means that it can be used as key in Mappings_.
Appends are amortized O(1). Random access and insert is log32(n) where n is the size of the vector.
.. code:: python
>>> from pyrsistent import v, pvector
# No mutation of vectors once created, instead they
# are "evolved" leaving the original untouched
>>> v1 = v(1, 2, 3)
>>> v2 = v1.append(4)
>>> v3 = v2.set(1, 5)
>>> v1
pvector([1, 2, 3])
>>> v2
pvector([1, 2, 3, 4])
>>> v3
pvector([1, 5, 3, 4])
# Random access and slicing
>>> v3[1]
5
>>> v3[1:3]
pvector([5, 3])
# Iteration
>>> list(x + 1 for x in v3)
[2, 6, 4, 5]
>>> pvector(2 * x for x in range(3))
pvector([0, 2, 4])
.. _PMap:
PMap
~~~~
With full support for the Mapping_ protocol PMap is meant as a drop in replacement to the built in dict from a readers point
of view. Support for the Hashable_ protocol also means that it can be used as key in other Mappings_.
Random access and insert is log32(n) where n is the size of the map.
.. code:: python
>>> from pyrsistent import m, pmap, v
# No mutation of maps once created, instead they are
# "evolved" leaving the original untouched
>>> m1 = m(a=1, b=2)
>>> m2 = m1.set('c', 3)
>>> m3 = m2.set('a', 5)
>>> m1
pmap({'a': 1, 'b': 2})
>>> m2
pmap({'a': 1, 'c': 3, 'b': 2})
>>> m3
pmap({'a': 5, 'c': 3, 'b': 2})
>>> m3['a']
5
# Evolution of nested persistent structures
>>> m4 = m(a=5, b=6, c=v(1, 2))
>>> m4.transform(('c', 1), 17)
pmap({'a': 5, 'c': pvector([1, 17]), 'b': 6})
>>> m5 = m(a=1, b=2)
# Evolve by merging with other mappings
>>> m5.update(m(a=2, c=3), {'a': 17, 'd': 35})
pmap({'a': 17, 'c': 3, 'b': 2, 'd': 35})
>>> pmap({'x': 1, 'y': 2}) + pmap({'y': 3, 'z': 4})
pmap({'y': 3, 'x': 1, 'z': 4})
# Dict-like methods to convert to list and iterate
>>> m3.items()
pvector([('a', 5), ('c', 3), ('b', 2)])
>>> list(m3)
['a', 'c', 'b']
.. _PSet:
PSet
~~~~
With full support for the Set_ protocol PSet is meant as a drop in replacement to the built in set from a readers point
of view. Support for the Hashable_ protocol also means that it can be used as key in Mappings_.
Random access and insert is log32(n) where n is the size of the set.
.. code:: python
>>> from pyrsistent import s
# No mutation of sets once created, you know the story...
>>> s1 = s(1, 2, 3, 2)
>>> s2 = s1.add(4)
>>> s3 = s1.remove(1)
>>> s1
pset([1, 2, 3])
>>> s2
pset([1, 2, 3, 4])
>>> s3
pset([2, 3])
# Full support for set operations
>>> s1 | s(3, 4, 5)
pset([1, 2, 3, 4, 5])
>>> s1 & s(3, 4, 5)
pset([3])
>>> s1 < s2
True
>>> s1 < s(3, 4, 5)
False
.. _PRecord:
PRecord
~~~~~~~
A PRecord is a PMap with a fixed set of specified fields. Records are declared as python classes inheriting
from PRecord. Because it is a PMap it has full support for all Mapping methods such as iteration and element
access using subscript notation.
.. code:: python
>>> from pyrsistent import PRecord, field
>>> class ARecord(PRecord):
... x = field()
...
>>> r = ARecord(x=3)
>>> r
ARecord(x=3)
>>> r.x
3
>>> r.set(x=2)
ARecord(x=2)
>>> r.set(y=2)
Traceback (most recent call last):
AttributeError: 'y' is not among the specified fields for ARecord
Type information
****************
It is possible to add type information to the record to enforce type checks. Multiple allowed types can be specified
by providing an iterable of types.
.. code:: python
>>> class BRecord(PRecord):
... x = field(type=int)
... y = field(type=(int, type(None)))
...
>>> BRecord(x=3, y=None)
BRecord(y=None, x=3)
>>> BRecord(x=3.0)
Traceback (most recent call last):
PTypeError: Invalid type for field BRecord.x, was float
Custom types (classes) that are iterable should be wrapped in a tuple to prevent their
members being added to the set of valid types. Although Enums in particular are now
supported without wrapping, see #83 for more information.
Mandatory fields
****************
Fields are not mandatory by default but can be specified as such. If fields are missing an
*InvariantException* will be thrown which contains information about the missing fields.
.. code:: python
>>> from pyrsistent import InvariantException
>>> class CRecord(PRecord):
... x = field(mandatory=True)
...
>>> r = CRecord(x=3)
>>> try:
... r.discard('x')
... except InvariantException as e:
... print(e.missing_fields)
...
('CRecord.x',)
Invariants
**********
It is possible to add invariants that must hold when evolving the record. Invariants can be
specified on both field and record level. If invariants fail an *InvariantException* will be
thrown which contains information about the failing invariants. An invariant function should
return a tuple consisting of a boolean that tells if the invariant holds or not and an object
describing the invariant. This object can later be used to identify which invariant that failed.
The global invariant function is only executed if all field invariants hold.
Global invariants are inherited to subclasses.
.. code:: python
>>> class RestrictedVector(PRecord):
... __invariant__ = lambda r: (r.y >= r.x, 'x larger than y')
... x = field(invariant=lambda x: (x > 0, 'x negative'))
... y = field(invariant=lambda y: (y > 0, 'y negative'))
...
>>> r = RestrictedVector(y=3, x=2)
>>> try:
... r.set(x=-1, y=-2)
... except InvariantException as e:
... print(e.invariant_errors)
...
('y negative', 'x negative')
>>> try:
... r.set(x=2, y=1)
... except InvariantException as e:
... print(e.invariant_errors)
...
('x larger than y',)
Invariants may also contain multiple assertions. For those cases the invariant function should
return a tuple of invariant tuples as described above. This structure is reflected in the
invariant_errors attribute of the exception which will contain tuples with data from all failed
invariants. Eg:
.. code:: python
>>> class EvenX(PRecord):
... x = field(invariant=lambda x: ((x > 0, 'x negative'), (x % 2 == 0, 'x odd')))
...
>>> try:
... EvenX(x=-1)
... except InvariantException as e:
... print(e.invariant_errors)
...
(('x negative', 'x odd'),)
Factories
*********
It's possible to specify factory functions for fields. The factory function receives whatever
is supplied as field value and the actual returned by the factory is assigned to the field
given that any type and invariant checks hold.
PRecords have a default factory specified as a static function on the class, create(). It takes
a *Mapping* as argument and returns an instance of the specific record.
If a record has fields of type PRecord the create() method of that record will
be called to create the "sub record" if no factory has explicitly been specified to override
this behaviour.
.. code:: python
>>> class DRecord(PRecord):
... x = field(factory=int)
...
>>> class ERecord(PRecord):
... d = field(type=DRecord)
...
>>> ERecord.create({'d': {'x': '1'}})
ERecord(d=DRecord(x=1))
Collection fields
*****************
It is also possible to have fields with ``pyrsistent`` collections.
.. code:: python
>>> from pyrsistent import pset_field, pmap_field, pvector_field
>>> class MultiRecord(PRecord):
... set_of_ints = pset_field(int)
... map_int_to_str = pmap_field(int, str)
... vector_of_strs = pvector_field(str)
...
Serialization
*************
PRecords support serialization back to dicts. Default serialization will take keys and values
"as is" and output them into a dict. It is possible to specify custom serialization functions
to take care of fields that require special treatment.
.. code:: python
>>> from datetime import date
>>> class Person(PRecord):
... name = field(type=unicode)
... birth_date = field(type=date,
... serializer=lambda format, d: d.strftime(format['date']))
...
>>> john = Person(name=u'John', birth_date=date(1985, 10, 21))
>>> john.serialize({'date': '%Y-%m-%d'})
{'birth_date': '1985-10-21', 'name': u'John'}
.. _instar: https://github.com/boxed/instar/
.. _PClass:
PClass
~~~~~~
A PClass is a python class with a fixed set of specified fields. PClasses are declared as python classes inheriting
from PClass. It is defined the same way that PRecords are and behaves like a PRecord in all aspects except that it
is not a PMap and hence not a collection but rather a plain Python object.
.. code:: python
>>> from pyrsistent import PClass, field
>>> class AClass(PClass):
... x = field()
...
>>> a = AClass(x=3)
>>> a
AClass(x=3)
>>> a.x
3
Checked collections
~~~~~~~~~~~~~~~~~~~
Checked collections currently come in three flavors: CheckedPVector, CheckedPMap and CheckedPSet.
.. code:: python
>>> from pyrsistent import CheckedPVector, CheckedPMap, CheckedPSet, thaw
>>> class Positives(CheckedPSet):
... __type__ = (long, int)
... __invariant__ = lambda n: (n >= 0, 'Negative')
...
>>> class Lottery(PRecord):
... name = field(type=str)
... numbers = field(type=Positives, invariant=lambda p: (len(p) > 0, 'No numbers'))
...
>>> class Lotteries(CheckedPVector):
... __type__ = Lottery
...
>>> class LotteriesByDate(CheckedPMap):
... __key_type__ = date
... __value_type__ = Lotteries
...
>>> lotteries = LotteriesByDate.create({date(2015, 2, 15): [{'name': 'SuperLotto', 'numbers': {1, 2, 3}},
... {'name': 'MegaLotto', 'numbers': {4, 5, 6}}],
... date(2015, 2, 16): [{'name': 'SuperLotto', 'numbers': {3, 2, 1}},
... {'name': 'MegaLotto', 'numbers': {6, 5, 4}}]})
>>> lotteries
LotteriesByDate({datetime.date(2015, 2, 15): Lotteries([Lottery(numbers=Positives([1, 2, 3]), name='SuperLotto'), Lottery(numbers=Positives([4, 5, 6]), name='MegaLotto')]), datetime.date(2015, 2, 16): Lotteries([Lottery(numbers=Positives([1, 2, 3]), name='SuperLotto'), Lottery(numbers=Positives([4, 5, 6]), name='MegaLotto')])})
# The checked versions support all operations that the corresponding
# unchecked types do
>>> lottery_0215 = lotteries[date(2015, 2, 15)]
>>> lottery_0215.transform([0, 'name'], 'SuperDuperLotto')
Lotteries([Lottery(numbers=Positives([1, 2, 3]), name='SuperDuperLotto'), Lottery(numbers=Positives([4, 5, 6]), name='MegaLotto')])
# But also makes asserts that types and invariants hold
>>> lottery_0215.transform([0, 'name'], 999)
Traceback (most recent call last):
PTypeError: Invalid type for field Lottery.name, was int
>>> lottery_0215.transform([0, 'numbers'], set())
Traceback (most recent call last):
InvariantException: Field invariant failed
# They can be converted back to python built ins with either thaw()
# or serialize() (which provides possibilities to customize serialization)
>>> thaw(lottery_0215)
[{'numbers': set([1, 2, 3]), 'name': 'SuperLotto'}, {'numbers': set([4, 5, 6]), 'name': 'MegaLotto'}]
>>> lottery_0215.serialize()
[{'numbers': set([1, 2, 3]), 'name': 'SuperLotto'}, {'numbers': set([4, 5, 6]), 'name': 'MegaLotto'}]
.. _transformations:
Transformations
~~~~~~~~~~~~~~~
Transformations are inspired by the cool library instar_ for Clojure. They let you evolve PMaps and PVectors
with arbitrarily deep/complex nesting using simple syntax and flexible matching syntax.
The first argument to transformation is the path that points out the value to transform. The
second is the transformation to perform. If the transformation is callable it will be applied
to the value(s) matching the path. The path may also contain callables. In that case they are
treated as matchers. If the matcher returns True for a specific key it is considered for transformation.
.. code:: python
# Basic examples
>>> from pyrsistent import inc, freeze, thaw, rex, ny, discard
>>> v1 = freeze([1, 2, 3, 4, 5])
>>> v1.transform([2], inc)
pvector([1, 2, 4, 4, 5])
>>> v1.transform([lambda ix: 0 < ix < 4], 8)
pvector([1, 8, 8, 8, 5])
>>> v1.transform([lambda ix, v: ix == 0 or v == 5], 0)
pvector([0, 2, 3, 4, 0])
# The (a)ny matcher can be used to match anything
>>> v1.transform([ny], 8)
pvector([8, 8, 8, 8, 8])
# Regular expressions can be used for matching
>>> scores = freeze({'John': 12, 'Joseph': 34, 'Sara': 23})
>>> scores.transform([rex('^Jo')], 0)
pmap({'Joseph': 0, 'Sara': 23, 'John': 0})
# Transformations can be done on arbitrarily deep structures
>>> news_paper = freeze({'articles': [{'author': 'Sara', 'content': 'A short article'},
... {'author': 'Steve', 'content': 'A slightly longer article'}],
... 'weather': {'temperature': '11C', 'wind': '5m/s'}})
>>> short_news = news_paper.transform(['articles', ny, 'content'], lambda c: c[:25] + '...' if len(c) > 25 else c)
>>> very_short_news = news_paper.transform(['articles', ny, 'content'], lambda c: c[:15] + '...' if len(c) > 15 else c)
>>> very_short_news.articles[0].content
'A short article'
>>> very_short_news.articles[1].content
'A slightly long...'
# When nothing has been transformed the original data structure is kept
>>> short_news is news_paper
True
>>> very_short_news is news_paper
False
>>> very_short_news.articles[0] is news_paper.articles[0]
True
# There is a special transformation that can be used to discard elements. Also
# multiple transformations can be applied in one call
>>> thaw(news_paper.transform(['weather'], discard, ['articles', ny, 'content'], discard))
{'articles': [{'author': 'Sara'}, {'author': 'Steve'}]}
Evolvers
~~~~~~~~
PVector, PMap and PSet all have support for a concept dubbed *evolvers*. An evolver acts like a mutable
view of the underlying persistent data structure with "transaction like" semantics. No updates of the original
data structure is ever performed, it is still fully immutable.
The evolvers have a very limited API by design to discourage excessive, and inappropriate, usage as that would
take us down the mutable road. In principle only basic mutation and element access functions are supported.
Check out the documentation_ of each data structure for specific examples.
Examples of when you may want to use an evolver instead of working directly with the data structure include:
* Multiple updates are done to the same data structure and the intermediate results are of no
interest. In this case using an evolver may be a more efficient and easier to work with.
* You need to pass a vector into a legacy function or a function that you have no control
over which performs in place mutations. In this case pass an evolver instance
instead and then create a new pvector from the evolver once the function returns.
.. code:: python
>>> from pyrsistent import v
# In place mutation as when working with the built in counterpart
>>> v1 = v(1, 2, 3)
>>> e = v1.evolver()
>>> e[1] = 22
>>> e = e.append(4)
>>> e = e.extend([5, 6])
>>> e[5] += 1
>>> len(e)
6
# The evolver is considered *dirty* when it contains changes compared to the underlying vector
>>> e.is_dirty()
True
# But the underlying pvector still remains untouched
>>> v1
pvector([1, 2, 3])
# Once satisfied with the updates you can produce a new pvector containing the updates.
# The new pvector will share data with the original pvector in the same way that would have
# been done if only using operations on the pvector.
>>> v2 = e.persistent()
>>> v2
pvector([1, 22, 3, 4, 5, 7])
# The evolver is now no longer considered *dirty* as it contains no differences compared to the
# pvector just produced.
>>> e.is_dirty()
False
# You may continue to work with the same evolver without affecting the content of v2
>>> e[0] = 11
# Or create a new evolver from v2. The two evolvers can be updated independently but will both
# share data with v2 where possible.
>>> e2 = v2.evolver()
>>> e2[0] = 1111
>>> e.persistent()
pvector([11, 22, 3, 4, 5, 7])
>>> e2.persistent()
pvector([1111, 22, 3, 4, 5, 7])
.. _freeze:
.. _thaw:
freeze and thaw
~~~~~~~~~~~~~~~
These functions are great when your cozy immutable world has to interact with the evil mutable world outside.
.. code:: python
>>> from pyrsistent import freeze, thaw, v, m
>>> freeze([1, {'a': 3}])
pvector([1, pmap({'a': 3})])
>>> thaw(v(1, m(a=3)))
[1, {'a': 3}]
Compatibility
-------------
Pyrsistent is developed and tested on Python 2.7, 3.5, 3.6, 3.7 and PyPy (Python 2 and 3 compatible). It will most
likely work on all other versions >= 3.4 but no guarantees are given. :)
Compatibility issues
~~~~~~~~~~~~~~~~~~~~
.. _27: https://github.com/tobgu/pyrsistent/issues/27
There is currently one known compatibility issue when comparing built in sets and frozensets to PSets as discussed in 27_.
It affects python 2 versions < 2.7.8 and python 3 versions < 3.4.0 and is due to a bug described in
http://bugs.python.org/issue8743.
Comparisons will fail or be incorrect when using the set/frozenset as left hand side of the comparison. As a workaround
you need to either upgrade Python to a more recent version, avoid comparing sets/frozensets with PSets or always make
sure to convert both sides of the comparison to the same type before performing the comparison.
Performance
-----------
Pyrsistent is developed with performance in mind. Still, while some operations are nearly on par with their built in,
mutable, counterparts in terms of speed, other operations are slower. In the cases where attempts at
optimizations have been done, speed has generally been valued over space.
Pyrsistent comes with two API compatible flavors of PVector (on which PMap and PSet are based), one pure Python
implementation and one implemented as a C extension. The latter generally being 2 - 20 times faster than the former.
The C extension will be used automatically when possible.
The pure python implementation is fully PyPy compatible. Running it under PyPy speeds operations up considerably if
the structures are used heavily (if JITed), for some cases the performance is almost on par with the built in counterparts.
Type hints
----------
PEP 561 style type hints for use with mypy and various editors are available for most types and functions in pyrsistent.
Type classes for annotating your own code with pyrsistent types are also available under pyrsistent.typing.
Installation
------------
pip install pyrsistent
Documentation
-------------
Available at http://pyrsistent.readthedocs.org/
Brief presentation available at http://slides.com/tobiasgustafsson/immutability-and-python/
Contributors
------------
Tobias Gustafsson https://github.com/tobgu
Christopher Armstrong https://github.com/radix
Anders Hovmöller https://github.com/boxed
Itamar Turner-Trauring https://github.com/itamarst
Jonathan Lange https://github.com/jml
Richard Futrell https://github.com/Futrell
Jakob Hollenstein https://github.com/jkbjh
David Honour https://github.com/foolswood
David R. MacIver https://github.com/DRMacIver
Marcus Ewert https://github.com/sarum90
Jean-Paul Calderone https://github.com/exarkun
Douglas Treadwell https://github.com/douglas-treadwell
Travis Parker https://github.com/teepark
Julian Berman https://github.com/Julian
Dennis Tomas https://github.com/dtomas
Neil Vyas https://github.com/neilvyas
doozr https://github.com/doozr
Kamil Galuszka https://github.com/galuszkak
Tsuyoshi Hombashi https://github.com/thombashi
nattofriends https://github.com/nattofriends
agberk https://github.com/agberk
Waleed Khan https://github.com/arxanas
Jean-Louis Fuchs https://github.com/ganwell
Carlos Corbacho https://github.com/ccorbacho
Felix Yan https://github.com/felixonmars
benrg https://github.com/benrg
Jere Lahelma https://github.com/je-l
Max Taggart https://github.com/MaxTaggart
Vincent Philippon https://github.com/vphilippon
Semen Zhydenko https://github.com/ss18
Till Varoquaux https://github.com/till-varoquaux
Michal Kowalik https://github.com/michalvi
ossdev07 https://github.com/ossdev07
Kerry Olesen https://github.com/qhesz
johnthagen https://github.com/johnthagen
Contributing
------------
Want to contribute? That's great! If you experience problems please log them on GitHub. If you want to contribute code,
please fork the repository and submit a pull request.
Run tests
~~~~~~~~~
.. _tox: https://tox.readthedocs.io/en/latest/
Tests can be executed using tox_.
Install tox: ``pip install tox``
Run test for Python 2.7: ``tox -epy27``
Release
~~~~~~~
* Update CHANGES.txt
* Update README with any new contributors and potential info needed.
* Update _pyrsistent_version.py
* python setup.py sdist upload
* Commit and tag with new version: git add -u . && git commit -m 'Prepare version vX.Y.Z' && git tag -a vX.Y.Z -m 'vX.Y.Z'
* Push commit and tags: git push && git push --tags
Project status
--------------
Pyrsistent can be considered stable and mature (who knows, there may even be a 1.0 some day :-)). The project is
maintained, bugs fixed, PRs reviewed and merged and new releases made. I currently do not have time for development
of new features or functionality which I don't have use for myself. I'm more than happy to take PRs for new
functionality though!
There are a bunch of issues marked with ``enhancement`` and ``help wanted`` that contain requests for new functionality
that would be nice to include. The level of difficulty and extend of the issues varies, please reach out to me if you're
interested in working on any of them.
If you feel that you have a grand master plan for where you would like Pyrsistent to go and have the time to put into
it please don't hesitate to discuss this with me and submit PRs for it. If all goes well I'd be more than happy to add
additional maintainers to the project!
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: PyPy

View File

@ -0,0 +1,53 @@
CHANGES.txt
LICENCE.mit
MANIFEST.in
README
README.rst
_pyrsistent_version.py
pvectorcmodule.c
setup.cfg
setup.py
pyrsistent/__init__.py
pyrsistent/__init__.pyi
pyrsistent/_checked_types.py
pyrsistent/_compat.py
pyrsistent/_field_common.py
pyrsistent/_helpers.py
pyrsistent/_immutable.py
pyrsistent/_pbag.py
pyrsistent/_pclass.py
pyrsistent/_pdeque.py
pyrsistent/_plist.py
pyrsistent/_pmap.py
pyrsistent/_precord.py
pyrsistent/_pset.py
pyrsistent/_pvector.py
pyrsistent/_toolz.py
pyrsistent/_transformations.py
pyrsistent/py.typed
pyrsistent/typing.py
pyrsistent/typing.pyi
pyrsistent.egg-info/PKG-INFO
pyrsistent.egg-info/SOURCES.txt
pyrsistent.egg-info/dependency_links.txt
pyrsistent.egg-info/requires.txt
pyrsistent.egg-info/top_level.txt
tests/bag_test.py
tests/checked_map_test.py
tests/checked_set_test.py
tests/checked_vector_test.py
tests/class_test.py
tests/deque_test.py
tests/field_test.py
tests/freeze_test.py
tests/hypothesis_vector_test.py
tests/immutable_object_test.py
tests/list_test.py
tests/map_test.py
tests/memory_profiling.py
tests/record_test.py
tests/regression_test.py
tests/set_test.py
tests/toolz_test.py
tests/transform_test.py
tests/vector_test.py

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
six

View File

@ -0,0 +1,3 @@
_pyrsistent_version
pvectorc
pyrsistent

View File

@ -0,0 +1,536 @@
Metadata-Version: 1.1
Name: pystache
Version: 0.5.4
Summary: Mustache for Python
Home-page: http://github.com/defunkt/pystache
Author: Chris Jerdonek
Author-email: chris.jerdonek@gmail.com
License: MIT
Description: .. Do not edit this file. This file is auto-generated for PyPI by setup.py
.. using pandoc, so edits should go in the source files rather than here.
Pystache
========
.. figure:: http://defunkt.github.com/pystache/images/logo_phillips.png
:alt: mustachioed, monocled snake by David Phillips
.. figure:: https://secure.travis-ci.org/defunkt/pystache.png
:alt: Travis CI current build status
`Pystache <http://defunkt.github.com/pystache>`__ is a Python
implementation of `Mustache <http://mustache.github.com/>`__. Mustache
is a framework-agnostic, logic-free templating system inspired by
`ctemplate <http://code.google.com/p/google-ctemplate/>`__ and
`et <http://www.ivan.fomichev.name/2008/05/erlang-template-engine-prototype.html>`__.
Like ctemplate, Mustache "emphasizes separating logic from presentation:
it is impossible to embed application logic in this template language."
The `mustache(5) <http://mustache.github.com/mustache.5.html>`__ man
page provides a good introduction to Mustache's syntax. For a more
complete (and more current) description of Mustache's behavior, see the
official `Mustache spec <https://github.com/mustache/spec>`__.
Pystache is `semantically versioned <http://semver.org>`__ and can be
found on `PyPI <http://pypi.python.org/pypi/pystache>`__. This version
of Pystache passes all tests in `version
1.1.2 <https://github.com/mustache/spec/tree/v1.1.2>`__ of the spec.
Requirements
------------
Pystache is tested with--
- Python 2.4 (requires simplejson `version
2.0.9 <http://pypi.python.org/pypi/simplejson/2.0.9>`__ or earlier)
- Python 2.5 (requires
`simplejson <http://pypi.python.org/pypi/simplejson/>`__)
- Python 2.6
- Python 2.7
- Python 3.1
- Python 3.2
- Python 3.3
- `PyPy <http://pypy.org/>`__
`Distribute <http://packages.python.org/distribute/>`__ (the setuptools
fork) is recommended over
`setuptools <http://pypi.python.org/pypi/setuptools>`__, and is required
in some cases (e.g. for Python 3 support). If you use
`pip <http://www.pip-installer.org/>`__, you probably already satisfy
this requirement.
JSON support is needed only for the command-line interface and to run
the spec tests. We require simplejson for earlier versions of Python
since Python's `json <http://docs.python.org/library/json.html>`__
module was added in Python 2.6.
For Python 2.4 we require an earlier version of simplejson since
simplejson stopped officially supporting Python 2.4 in simplejson
version 2.1.0. Earlier versions of simplejson can be installed manually,
as follows:
::
pip install 'simplejson<2.1.0'
Official support for Python 2.4 will end with Pystache version 0.6.0.
Install It
----------
::
pip install pystache
And test it--
::
pystache-test
To install and test from source (e.g. from GitHub), see the Develop
section.
Use It
------
::
>>> import pystache
>>> print pystache.render('Hi {{person}}!', {'person': 'Mom'})
Hi Mom!
You can also create dedicated view classes to hold your view logic.
Here's your view class (in .../examples/readme.py):
::
class SayHello(object):
def to(self):
return "Pizza"
Instantiating like so:
::
>>> from pystache.tests.examples.readme import SayHello
>>> hello = SayHello()
Then your template, say\_hello.mustache (by default in the same
directory as your class definition):
::
Hello, {{to}}!
Pull it together:
::
>>> renderer = pystache.Renderer()
>>> print renderer.render(hello)
Hello, Pizza!
For greater control over rendering (e.g. to specify a custom template
directory), use the ``Renderer`` class like above. One can pass
attributes to the Renderer class constructor or set them on a Renderer
instance. To customize template loading on a per-view basis, subclass
``TemplateSpec``. See the docstrings of the
`Renderer <https://github.com/defunkt/pystache/blob/master/pystache/renderer.py>`__
class and
`TemplateSpec <https://github.com/defunkt/pystache/blob/master/pystache/template_spec.py>`__
class for more information.
You can also pre-parse a template:
::
>>> parsed = pystache.parse(u"Hey {{#who}}{{.}}!{{/who}}")
>>> print parsed
[u'Hey ', _SectionNode(key=u'who', index_begin=12, index_end=18, parsed=[_EscapeNode(key=u'.'), u'!'])]
And then:
::
>>> print renderer.render(parsed, {'who': 'Pops'})
Hey Pops!
>>> print renderer.render(parsed, {'who': 'you'})
Hey you!
Python 3
--------
Pystache has supported Python 3 since version 0.5.1. Pystache behaves
slightly differently between Python 2 and 3, as follows:
- In Python 2, the default html-escape function ``cgi.escape()`` does
not escape single quotes. In Python 3, the default escape function
``html.escape()`` does escape single quotes.
- In both Python 2 and 3, the string and file encodings default to
``sys.getdefaultencoding()``. However, this function can return
different values under Python 2 and 3, even when run from the same
system. Check your own system for the behavior on your system, or do
not rely on the defaults by passing in the encodings explicitly (e.g.
to the ``Renderer`` class).
Unicode
-------
This section describes how Pystache handles unicode, strings, and
encodings.
Internally, Pystache uses `only unicode
strings <http://docs.python.org/howto/unicode.html#tips-for-writing-unicode-aware-programs>`__
(``str`` in Python 3 and ``unicode`` in Python 2). For input, Pystache
accepts both unicode strings and byte strings (``bytes`` in Python 3 and
``str`` in Python 2). For output, Pystache's template rendering methods
return only unicode.
Pystache's ``Renderer`` class supports a number of attributes to control
how Pystache converts byte strings to unicode on input. These include
the ``file_encoding``, ``string_encoding``, and ``decode_errors``
attributes.
The ``file_encoding`` attribute is the encoding the renderer uses to
convert to unicode any files read from the file system. Similarly,
``string_encoding`` is the encoding the renderer uses to convert any
other byte strings encountered during the rendering process into unicode
(e.g. context values that are encoded byte strings).
The ``decode_errors`` attribute is what the renderer passes as the
``errors`` argument to Python's built-in unicode-decoding function
(``str()`` in Python 3 and ``unicode()`` in Python 2). The valid values
for this argument are ``strict``, ``ignore``, and ``replace``.
Each of these attributes can be set via the ``Renderer`` class's
constructor using a keyword argument of the same name. See the Renderer
class's docstrings for further details. In addition, the
``file_encoding`` attribute can be controlled on a per-view basis by
subclassing the ``TemplateSpec`` class. When not specified explicitly,
these attributes default to values set in Pystache's ``defaults``
module.
Develop
-------
To test from a source distribution (without installing)--
::
python test_pystache.py
To test Pystache with multiple versions of Python (with a single
command!), you can use `tox <http://pypi.python.org/pypi/tox>`__:
::
pip install 'virtualenv<1.8' # Version 1.8 dropped support for Python 2.4.
pip install 'tox<1.4' # Version 1.4 dropped support for Python 2.4.
tox
If you do not have all Python versions listed in ``tox.ini``--
::
tox -e py26,py32 # for example
The source distribution tests also include doctests and tests from the
Mustache spec. To include tests from the Mustache spec in your test
runs:
::
git submodule init
git submodule update
The test harness parses the spec's (more human-readable) yaml files if
`PyYAML <http://pypi.python.org/pypi/PyYAML>`__ is present. Otherwise,
it parses the json files. To install PyYAML--
::
pip install pyyaml
To run a subset of the tests, you can use
`nose <http://somethingaboutorange.com/mrl/projects/nose/0.11.1/testing.html>`__:
::
pip install nose
nosetests --tests pystache/tests/test_context.py:GetValueTests.test_dictionary__key_present
Using Python 3 with Pystache from source
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Pystache is written in Python 2 and must be converted to Python 3 prior
to using it with Python 3. The installation process (and tox) do this
automatically.
To convert the code to Python 3 manually (while using Python 3)--
::
python setup.py build
This writes the converted code to a subdirectory called ``build``. By
design, Python 3 builds
`cannot <https://bitbucket.org/tarek/distribute/issue/292/allow-use_2to3-with-python-2>`__
be created from Python 2.
To convert the code without using setup.py, you can use
`2to3 <http://docs.python.org/library/2to3.html>`__ as follows (two
steps)--
::
2to3 --write --nobackups --no-diffs --doctests_only pystache
2to3 --write --nobackups --no-diffs pystache
This converts the code (and doctests) in place.
To ``import pystache`` from a source distribution while using Python 3,
be sure that you are importing from a directory containing a converted
version of the code (e.g. from the ``build`` directory after
converting), and not from the original (unconverted) source directory.
Otherwise, you will get a syntax error. You can help prevent this by not
running the Python IDE from the project directory when importing
Pystache while using Python 3.
Mailing List
------------
There is a `mailing list <http://librelist.com/browser/pystache/>`__.
Note that there is a bit of a delay between posting a message and seeing
it appear in the mailing list archive.
Credits
-------
::
>>> context = { 'author': 'Chris Wanstrath', 'maintainer': 'Chris Jerdonek' }
>>> print pystache.render("Author: {{author}}\nMaintainer: {{maintainer}}", context)
Author: Chris Wanstrath
Maintainer: Chris Jerdonek
Pystache logo by `David Phillips <http://davidphillips.us/>`__ is
licensed under a `Creative Commons Attribution-ShareAlike 3.0 Unported
License <http://creativecommons.org/licenses/by-sa/3.0/deed.en_US>`__.
|image0|
History
=======
**Note:** Official support for Python 2.4 will end with Pystache version
0.6.0.
0.5.4 (2014-07-11)
------------------
- Bugfix: made test with filenames OS agnostic (issue #162).
0.5.3 (2012-11-03)
------------------
- Added ability to customize string coercion (e.g. to have None render
as ``''``) (issue #130).
- Added Renderer.render\_name() to render a template by name (issue
#122).
- Added TemplateSpec.template\_path to specify an absolute path to a
template (issue #41).
- Added option of raising errors on missing tags/partials:
``Renderer(missing_tags='strict')`` (issue #110).
- Added support for finding and loading templates by file name in
addition to by template name (issue #127). [xgecko]
- Added a ``parse()`` function that yields a printable, pre-compiled
parse tree.
- Added support for rendering pre-compiled templates.
- Added Python 3.3 to the list of supported versions.
- Added support for `PyPy <http://pypy.org/>`__ (issue #125).
- Added support for `Travis CI <http://travis-ci.org>`__ (issue #124).
[msabramo]
- Bugfix: ``defaults.DELIMITERS`` can now be changed at runtime (issue
#135). [bennoleslie]
- Bugfix: exceptions raised from a property are no longer swallowed
when getting a key from a context stack (issue #110).
- Bugfix: lambda section values can now return non-ascii, non-unicode
strings (issue #118).
- Bugfix: allow ``test_pystache.py`` and ``tox`` to pass when run from
a downloaded sdist (i.e. without the spec test directory).
- Convert HISTORY and README files from reST to Markdown.
- More robust handling of byte strings in Python 3.
- Added Creative Commons license for David Phillips's logo.
0.5.2 (2012-05-03)
------------------
- Added support for dot notation and version 1.1.2 of the spec (issue
#99). [rbp]
- Missing partials now render as empty string per latest version of
spec (issue #115).
- Bugfix: falsey values now coerced to strings using str().
- Bugfix: lambda return values for sections no longer pushed onto
context stack (issue #113).
- Bugfix: lists of lambdas for sections were not rendered (issue #114).
0.5.1 (2012-04-24)
------------------
- Added support for Python 3.1 and 3.2.
- Added tox support to test multiple Python versions.
- Added test script entry point: pystache-test.
- Added \_\_version\_\_ package attribute.
- Test harness now supports both YAML and JSON forms of Mustache spec.
- Test harness no longer requires nose.
0.5.0 (2012-04-03)
------------------
This version represents a major rewrite and refactoring of the code base
that also adds features and fixes many bugs. All functionality and
nearly all unit tests have been preserved. However, some backwards
incompatible changes to the API have been made.
Below is a selection of some of the changes (not exhaustive).
Highlights:
- Pystache now passes all tests in version 1.0.3 of the `Mustache
spec <https://github.com/mustache/spec>`__. [pvande]
- Removed View class: it is no longer necessary to subclass from View
or from any other class to create a view.
- Replaced Template with Renderer class: template rendering behavior
can be modified via the Renderer constructor or by setting attributes
on a Renderer instance.
- Added TemplateSpec class: template rendering can be specified on a
per-view basis by subclassing from TemplateSpec.
- Introduced separation of concerns and removed circular dependencies
(e.g. between Template and View classes, cf. `issue
#13 <https://github.com/defunkt/pystache/issues/13>`__).
- Unicode now used consistently throughout the rendering process.
- Expanded test coverage: nosetests now runs doctests and ~105 test
cases from the Mustache spec (increasing the number of tests from 56
to ~315).
- Added a rudimentary benchmarking script to gauge performance while
refactoring.
- Extensive documentation added (e.g. docstrings).
Other changes:
- Added a command-line interface. [vrde]
- The main rendering class now accepts a custom partial loader (e.g. a
dictionary) and a custom escape function.
- Non-ascii characters in str strings are now supported while
rendering.
- Added string encoding, file encoding, and errors options for decoding
to unicode.
- Removed the output encoding option.
- Removed the use of markupsafe.
Bug fixes:
- Context values no longer processed as template strings.
[jakearchibald]
- Whitespace surrounding sections is no longer altered, per the spec.
[heliodor]
- Zeroes now render correctly when using PyPy. [alex]
- Multline comments now permitted. [fczuardi]
- Extensionless template files are now supported.
- Passing ``**kwargs`` to ``Template()`` no longer modifies the
context.
- Passing ``**kwargs`` to ``Template()`` with no context no longer
raises an exception.
0.4.1 (2012-03-25)
------------------
- Added support for Python 2.4. [wangtz, jvantuyl]
0.4.0 (2011-01-12)
------------------
- Add support for nested contexts (within template and view)
- Add support for inverted lists
- Decoupled template loading
0.3.1 (2010-05-07)
------------------
- Fix package
0.3.0 (2010-05-03)
------------------
- View.template\_path can now hold a list of path
- Add {{& blah}} as an alias for {{{ blah }}}
- Higher Order Sections
- Inverted sections
0.2.0 (2010-02-15)
------------------
- Bugfix: Methods returning False or None are not rendered
- Bugfix: Don't render an empty string when a tag's value is 0.
[enaeseth]
- Add support for using non-callables as View attributes.
[joshthecoder]
- Allow using View instances as attributes. [joshthecoder]
- Support for Unicode and non-ASCII-encoded bytestring output.
[enaeseth]
- Template file encoding awareness. [enaeseth]
0.1.1 (2009-11-13)
------------------
- Ensure we're dealing with strings, always
- Tests can be run by executing the test file directly
0.1.0 (2009-11-12)
------------------
- First release
License
=======
Copyright (C) 2012 Chris Jerdonek. All rights reserved.
Copyright (c) 2009 Chris Wanstrath
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
.. |image0| image:: http://i.creativecommons.org/l/by-sa/3.0/88x31.png
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.4
Classifier: Programming Language :: Python :: 2.5
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.1
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: Implementation :: PyPy

View File

@ -0,0 +1,97 @@
HISTORY.md
LICENSE
MANIFEST.in
README.md
TODO.md
setup.py
setup_description.rst
test_pystache.py
tox.ini
pystache/__init__.py
pystache/common.py
pystache/context.py
pystache/defaults.py
pystache/init.py
pystache/loader.py
pystache/locator.py
pystache/parsed.py
pystache/parser.py
pystache/renderengine.py
pystache/renderer.py
pystache/specloader.py
pystache/template_spec.py
pystache.egg-info/PKG-INFO
pystache.egg-info/SOURCES.txt
pystache.egg-info/dependency_links.txt
pystache.egg-info/entry_points.txt
pystache.egg-info/top_level.txt
pystache/commands/__init__.py
pystache/commands/render.py
pystache/commands/test.py
pystache/tests/__init__.py
pystache/tests/benchmark.py
pystache/tests/common.py
pystache/tests/doctesting.py
pystache/tests/main.py
pystache/tests/spectesting.py
pystache/tests/test___init__.py
pystache/tests/test_commands.py
pystache/tests/test_context.py
pystache/tests/test_defaults.py
pystache/tests/test_examples.py
pystache/tests/test_loader.py
pystache/tests/test_locator.py
pystache/tests/test_parser.py
pystache/tests/test_pystache.py
pystache/tests/test_renderengine.py
pystache/tests/test_renderer.py
pystache/tests/test_simple.py
pystache/tests/test_specloader.py
pystache/tests/data/__init__.py
pystache/tests/data/ascii.mustache
pystache/tests/data/duplicate.mustache
pystache/tests/data/non_ascii.mustache
pystache/tests/data/sample_view.mustache
pystache/tests/data/say_hello.mustache
pystache/tests/data/views.py
pystache/tests/data/locator/__init__.py
pystache/tests/data/locator/duplicate.mustache
pystache/tests/data/locator/template.txt
pystache/tests/examples/__init__.py
pystache/tests/examples/comments.mustache
pystache/tests/examples/comments.py
pystache/tests/examples/complex.mustache
pystache/tests/examples/complex.py
pystache/tests/examples/delimiters.mustache
pystache/tests/examples/delimiters.py
pystache/tests/examples/double_section.mustache
pystache/tests/examples/double_section.py
pystache/tests/examples/escaped.mustache
pystache/tests/examples/escaped.py
pystache/tests/examples/inner_partial.mustache
pystache/tests/examples/inner_partial.txt
pystache/tests/examples/inverted.mustache
pystache/tests/examples/inverted.py
pystache/tests/examples/lambdas.mustache
pystache/tests/examples/lambdas.py
pystache/tests/examples/looping_partial.mustache
pystache/tests/examples/nested_context.mustache
pystache/tests/examples/nested_context.py
pystache/tests/examples/partial_in_partial.mustache
pystache/tests/examples/partial_with_lambda.mustache
pystache/tests/examples/partial_with_partial_and_lambda.mustache
pystache/tests/examples/partials_with_lambdas.py
pystache/tests/examples/readme.py
pystache/tests/examples/say_hello.mustache
pystache/tests/examples/simple.mustache
pystache/tests/examples/simple.py
pystache/tests/examples/tagless.mustache
pystache/tests/examples/template_partial.mustache
pystache/tests/examples/template_partial.py
pystache/tests/examples/template_partial.txt
pystache/tests/examples/unescaped.mustache
pystache/tests/examples/unescaped.py
pystache/tests/examples/unicode_input.mustache
pystache/tests/examples/unicode_input.py
pystache/tests/examples/unicode_output.mustache
pystache/tests/examples/unicode_output.py

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,4 @@
[console_scripts]
pystache = pystache.commands.render:main
pystache-test = pystache.commands.test:main

View File

@ -0,0 +1 @@
pystache

View File

@ -0,0 +1,10 @@
Metadata-Version: 1.0
Name: pytoml
Version: 0.1.10
Summary: A parser for TOML-0.4.0
Home-page: https://github.com/avakar/pytoml
Author: Martin Vejnár
Author-email: avakar@ratatanek.cz
License: MIT
Description: UNKNOWN
Platform: UNKNOWN

View File

@ -0,0 +1,10 @@
setup.py
pytoml/__init__.py
pytoml/core.py
pytoml/parser.py
pytoml/writer.py
pytoml.egg-info/PKG-INFO
pytoml.egg-info/SOURCES.txt
pytoml.egg-info/dependency_links.txt
pytoml.egg-info/top_level.txt
test/test.py

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
pytoml

View File

@ -0,0 +1,14 @@
Metadata-Version: 1.1
Name: slugid
Version: 1.0.7
Summary: Base64 encoded uuid v4 slugs
Home-page: http://taskcluster.github.io/slugid.py
Author: Pete Moore
Author-email: pmoore@mozilla.com
License: MPL 2.0
Description: UNKNOWN
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.5

View File

@ -0,0 +1,8 @@
README.rst
setup.py
slugid/__init__.py
slugid/slugid.py
slugid.egg-info/PKG-INFO
slugid.egg-info/SOURCES.txt
slugid.egg-info/dependency_links.txt
slugid.egg-info/top_level.txt

View File

@ -0,0 +1 @@

View File

@ -0,0 +1 @@
slugid

View File

@ -0,0 +1,797 @@
Metadata-Version: 2.1
Name: yarl
Version: 1.6.3
Summary: Yet another URL library
Home-page: https://github.com/aio-libs/yarl/
Author: Andrew Svetlov
Author-email: andrew.svetlov@gmail.com
License: Apache 2
Description: yarl
====
.. image:: https://github.com/aio-libs/yarl/workflows/CI/badge.svg
:target: https://github.com/aio-libs/yarl/actions?query=workflow%3ACI
:align: right
.. image:: https://codecov.io/gh/aio-libs/yarl/branch/master/graph/badge.svg
:target: https://codecov.io/gh/aio-libs/yarl
.. image:: https://badge.fury.io/py/yarl.svg
:target: https://badge.fury.io/py/yarl
.. image:: https://readthedocs.org/projects/yarl/badge/?version=latest
:target: https://yarl.readthedocs.io
.. image:: https://img.shields.io/pypi/pyversions/yarl.svg
:target: https://pypi.python.org/pypi/yarl
.. image:: https://badges.gitter.im/Join%20Chat.svg
:target: https://gitter.im/aio-libs/Lobby
:alt: Chat on Gitter
Introduction
------------
Url is constructed from ``str``:
.. code-block:: pycon
>>> from yarl import URL
>>> url = URL('https://www.python.org/~guido?arg=1#frag')
>>> url
URL('https://www.python.org/~guido?arg=1#frag')
All url parts: *scheme*, *user*, *password*, *host*, *port*, *path*,
*query* and *fragment* are accessible by properties:
.. code-block:: pycon
>>> url.scheme
'https'
>>> url.host
'www.python.org'
>>> url.path
'/~guido'
>>> url.query_string
'arg=1'
>>> url.query
<MultiDictProxy('arg': '1')>
>>> url.fragment
'frag'
All url manipulations produce a new url object:
.. code-block:: pycon
>>> url = URL('https://www.python.org')
>>> url / 'foo' / 'bar'
URL('https://www.python.org/foo/bar')
>>> url / 'foo' % {'bar': 'baz'}
URL('https://www.python.org/foo?bar=baz')
Strings passed to constructor and modification methods are
automatically encoded giving canonical representation as result:
.. code-block:: pycon
>>> url = URL('https://www.python.org/путь')
>>> url
URL('https://www.python.org/%D0%BF%D1%83%D1%82%D1%8C')
Regular properties are *percent-decoded*, use ``raw_`` versions for
getting *encoded* strings:
.. code-block:: pycon
>>> url.path
'/путь'
>>> url.raw_path
'/%D0%BF%D1%83%D1%82%D1%8C'
Human readable representation of URL is available as ``.human_repr()``:
.. code-block:: pycon
>>> url.human_repr()
'https://www.python.org/путь'
For full documentation please read https://yarl.readthedocs.org.
Installation
------------
::
$ pip install yarl
The library is Python 3 only!
PyPI contains binary wheels for Linux, Windows and MacOS. If you want to install
``yarl`` on another operating system (like *Alpine Linux*, which is not
manylinux-compliant because of the missing glibc and therefore, cannot be
used with our wheels) the the tarball will be used to compile the library from
the source code. It requires a C compiler and and Python headers installed.
To skip the compilation you must explicitly opt-in by setting the `YARL_NO_EXTENSIONS`
environment variable to a non-empty value, e.g.:
.. code-block:: bash
$ YARL_NO_EXTENSIONS=1 pip install yarl
Please note that the pure-Python (uncompiled) version is much slower. However,
PyPy always uses a pure-Python implementation, and, as such, it is unaffected
by this variable.
Dependencies
------------
YARL requires multidict_ library.
API documentation
------------------
The documentation is located at https://yarl.readthedocs.org
Why isn't boolean supported by the URL query API?
-------------------------------------------------
There is no standard for boolean representation of boolean values.
Some systems prefer ``true``/``false``, others like ``yes``/``no``, ``on``/``off``,
``Y``/``N``, ``1``/``0``, etc.
``yarl`` cannot make an unambiguous decision on how to serialize ``bool`` values because
it is specific to how the end-user's application is built and would be different for
different apps. The library doesn't accept booleans in the API; a user should convert
bools into strings using own preferred translation protocol.
Comparison with other URL libraries
------------------------------------
* furl (https://pypi.python.org/pypi/furl)
The library has rich functionality but the ``furl`` object is mutable.
I'm afraid to pass this object into foreign code: who knows if the
code will modify my url in a terrible way while I just want to send URL
with handy helpers for accessing URL properties.
``furl`` has other non-obvious tricky things but the main objection
is mutability.
* URLObject (https://pypi.python.org/pypi/URLObject)
URLObject is immutable, that's pretty good.
Every URL change generates a new URL object.
But the library doesn't do any decode/encode transformations leaving the
end user to cope with these gory details.
Source code
-----------
The project is hosted on GitHub_
Please file an issue on the `bug tracker
<https://github.com/aio-libs/yarl/issues>`_ if you have found a bug
or have some suggestion in order to improve the library.
The library uses `Azure Pipelines <https://dev.azure.com/aio-libs/yarl>`_ for
Continuous Integration.
Discussion list
---------------
*aio-libs* google group: https://groups.google.com/forum/#!forum/aio-libs
Feel free to post your questions and ideas here.
Authors and License
-------------------
The ``yarl`` package is written by Andrew Svetlov.
It's *Apache 2* licensed and freely available.
.. _GitHub: https://github.com/aio-libs/yarl
.. _multidict: https://github.com/aio-libs/multidict
=========
Changelog
=========
..
You should *NOT* be adding new change log entries to this file, this
file is managed by towncrier. You *may* edit previous change logs to
fix problems like typo corrections or such.
To add a new change log entry, please see
https://pip.pypa.io/en/latest/development/#adding-a-news-entry
we named the news folder "changes".
WARNING: Don't drop the next directive!
.. towncrier release notes start
1.6.3 (2020-11-14)
==================
Bugfixes
--------
- No longer loose characters when decoding incorrect percent-sequences (like ``%e2%82%f8``). All non-decodable percent-sequences are now preserved.
`#517 <https://github.com/aio-libs/yarl/issues/517>`_
- Provide x86 Windows wheels.
`#535 <https://github.com/aio-libs/yarl/issues/535>`_
----
1.6.2 (2020-10-12)
==================
Bugfixes
--------
- Provide generated ``.c`` files in TarBall distribution.
`#530 <https://github.com/aio-libs/multidict/issues/530>`_
1.6.1 (2020-10-12)
==================
Features
--------
- Provide wheels for ``aarch64``, ``i686``, ``ppc64le``, ``s390x`` architectures on
Linux as well as ``x86_64``.
`#507 <https://github.com/aio-libs/yarl/issues/507>`_
- Provide wheels for Python 3.9.
`#526 <https://github.com/aio-libs/yarl/issues/526>`_
Bugfixes
--------
- ``human_repr()`` now always produces valid representation equivalent to the original URL (if the original URL is valid).
`#511 <https://github.com/aio-libs/yarl/issues/511>`_
- Fixed requoting a single percent followed by a percent-encoded character in the Cython implementation.
`#514 <https://github.com/aio-libs/yarl/issues/514>`_
- Fix ValueError when decoding ``%`` which is not followed by two hexadecimal digits.
`#516 <https://github.com/aio-libs/yarl/issues/516>`_
- Fix decoding ``%`` followed by a space and hexadecimal digit.
`#520 <https://github.com/aio-libs/yarl/issues/520>`_
- Fix annotation of ``with_query()``/``update_query()`` methods for ``key=[val1, val2]`` case.
`#528 <https://github.com/aio-libs/yarl/issues/528>`_
Removal
-------
- Drop Python 3.5 support; Python 3.6 is the minimal supported Python version.
----
1.6.0 (2020-09-23)
==================
Features
--------
- Allow for int and float subclasses in query, while still denying bool.
`#492 <https://github.com/aio-libs/yarl/issues/492>`_
Bugfixes
--------
- Do not requote arguments in ``URL.build()``, ``with_xxx()`` and in ``/`` operator.
`#502 <https://github.com/aio-libs/yarl/issues/502>`_
- Keep IPv6 brackets in ``origin()``.
`#504 <https://github.com/aio-libs/yarl/issues/504>`_
----
1.5.1 (2020-08-01)
==================
Bugfixes
--------
- Fix including relocated internal ``yarl._quoting_c`` C-extension into published PyPI dists.
`#485 <https://github.com/aio-libs/yarl/issues/485>`_
Misc
----
- `#484 <https://github.com/aio-libs/yarl/issues/484>`_
----
1.5.0 (2020-07-26)
==================
Features
--------
- Convert host to lowercase on URL building.
`#386 <https://github.com/aio-libs/yarl/issues/386>`_
- Allow using ``mod`` operator (`%`) for updating query string (an alias for ``update_query()`` method).
`#435 <https://github.com/aio-libs/yarl/issues/435>`_
- Allow use of sequences such as ``list`` and ``tuple`` in the values
of a mapping such as ``dict`` to represent that a key has many values::
url = URL("http://example.com")
assert url.with_query({"a": [1, 2]}) == URL("http://example.com/?a=1&a=2")
`#443 <https://github.com/aio-libs/yarl/issues/443>`_
- Support URL.build() with scheme and path (creates a relative URL).
`#464 <https://github.com/aio-libs/yarl/issues/464>`_
- Cache slow IDNA encode/decode calls.
`#476 <https://github.com/aio-libs/yarl/issues/476>`_
- Add ``@final`` / ``Final`` type hints
`#477 <https://github.com/aio-libs/yarl/issues/477>`_
- Support URL authority/raw_authority properties and authority argument of ``URL.build()`` method.
`#478 <https://github.com/aio-libs/yarl/issues/478>`_
- Hide the library implementation details, make the exposed public list very clean.
`#483 <https://github.com/aio-libs/yarl/issues/483>`_
Bugfixes
--------
- Fix tests with newer Python (3.7.6, 3.8.1 and 3.9.0+).
`#409 <https://github.com/aio-libs/yarl/issues/409>`_
- Fix a bug where query component, passed in a form of mapping or sequence, is unquoted in unexpected way.
`#426 <https://github.com/aio-libs/yarl/issues/426>`_
- Hide `Query` and `QueryVariable` type aliases in `__init__.pyi`, now they are prefixed with underscore.
`#431 <https://github.com/aio-libs/yarl/issues/431>`_
- Keep ipv6 brackets after updating port/user/password.
`#451 <https://github.com/aio-libs/yarl/issues/451>`_
----
1.4.2 (2019-12-05)
==================
Features
--------
- Workaround for missing `str.isascii()` in Python 3.6
`#389 <https://github.com/aio-libs/yarl/issues/389>`_
----
1.4.1 (2019-11-29)
==================
* Fix regression, make the library work on Python 3.5 and 3.6 again.
1.4.0 (2019-11-29)
==================
* Distinguish an empty password in URL from a password not provided at all (#262)
* Fixed annotations for optional parameters of ``URL.build`` (#309)
* Use None as default value of ``user`` parameter of ``URL.build`` (#309)
* Enforce building C Accelerated modules when installing from source tarball, use
``YARL_NO_EXTENSIONS`` environment variable for falling back to (slower) Pure Python
implementation (#329)
* Drop Python 3.5 support
* Fix quoting of plus in path by pure python version (#339)
* Don't create a new URL if fragment is unchanged (#292)
* Included in error msg the path that produces starting slash forbidden error (#376)
* Skip slow IDNA encoding for ASCII-only strings (#387)
1.3.0 (2018-12-11)
==================
* Fix annotations for ``query`` parameter (#207)
* An incoming query sequence can have int variables (the same as for
Mapping type) (#208)
* Add ``URL.explicit_port`` property (#218)
* Give a friendlier error when port cant be converted to int (#168)
* ``bool(URL())`` now returns ``False`` (#272)
1.2.6 (2018-06-14)
==================
* Drop Python 3.4 trove classifier (#205)
1.2.5 (2018-05-23)
==================
* Fix annotations for ``build`` (#199)
1.2.4 (2018-05-08)
==================
* Fix annotations for ``cached_property`` (#195)
1.2.3 (2018-05-03)
==================
* Accept ``str`` subclasses in ``URL`` constructor (#190)
1.2.2 (2018-05-01)
==================
* Fix build
1.2.1 (2018-04-30)
==================
* Pin minimal required Python to 3.5.3 (#189)
1.2.0 (2018-04-30)
==================
* Forbid inheritance, replace ``__init__`` with ``__new__`` (#171)
* Support PEP-561 (provide type hinting marker) (#182)
1.1.1 (2018-02-17)
==================
* Fix performance regression: don't encode enmpty netloc (#170)
1.1.0 (2018-01-21)
==================
* Make pure Python quoter consistent with Cython version (#162)
1.0.0 (2018-01-15)
==================
* Use fast path if quoted string does not need requoting (#154)
* Speed up quoting/unquoting by ``_Quoter`` and ``_Unquoter`` classes (#155)
* Drop ``yarl.quote`` and ``yarl.unquote`` public functions (#155)
* Add custom string writer, reuse static buffer if available (#157)
Code is 50-80 times faster than Pure Python version (was 4-5 times faster)
* Don't recode IP zone (#144)
* Support ``encoded=True`` in ``yarl.URL.build()`` (#158)
* Fix updating query with multiple keys (#160)
0.18.0 (2018-01-10)
===================
* Fallback to IDNA 2003 if domain name is not IDNA 2008 compatible (#152)
0.17.0 (2017-12-30)
===================
* Use IDNA 2008 for domain name processing (#149)
0.16.0 (2017-12-07)
===================
* Fix raising ``TypeError`` by ``url.query_string()`` after
``url.with_query({})`` (empty mapping) (#141)
0.15.0 (2017-11-23)
===================
* Add ``raw_path_qs`` attribute (#137)
0.14.2 (2017-11-14)
===================
* Restore ``strict`` parameter as no-op in ``quote`` / ``unquote``
0.14.1 (2017-11-13)
===================
* Restore ``strict`` parameter as no-op for sake of compatibility with
aiohttp 2.2
0.14.0 (2017-11-11)
===================
* Drop strict mode (#123)
* Fix ``"ValueError: Unallowed PCT %"`` when there's a ``"%"`` in the url (#124)
0.13.0 (2017-10-01)
===================
* Document ``encoded`` parameter (#102)
* Support relative urls like ``'?key=value'`` (#100)
* Unsafe encoding for QS fixed. Encode ``;`` char in value param (#104)
* Process passwords without user names (#95)
0.12.0 (2017-06-26)
===================
* Properly support paths without leading slash in ``URL.with_path()`` (#90)
* Enable type annotation checks
0.11.0 (2017-06-26)
===================
* Normalize path (#86)
* Clear query and fragment parts in ``.with_path()`` (#85)
0.10.3 (2017-06-13)
===================
* Prevent double URL args unquoting (#83)
0.10.2 (2017-05-05)
===================
* Unexpected hash behaviour (#75)
0.10.1 (2017-05-03)
===================
* Unexpected compare behaviour (#73)
* Do not quote or unquote + if not a query string. (#74)
0.10.0 (2017-03-14)
===================
* Added ``URL.build`` class method (#58)
* Added ``path_qs`` attribute (#42)
0.9.8 (2017-02-16)
==================
* Do not quote ``:`` in path
0.9.7 (2017-02-16)
==================
* Load from pickle without _cache (#56)
* Percent-encoded pluses in path variables become spaces (#59)
0.9.6 (2017-02-15)
==================
* Revert backward incompatible change (BaseURL)
0.9.5 (2017-02-14)
==================
* Fix BaseURL rich comparison support
0.9.4 (2017-02-14)
==================
* Use BaseURL
0.9.3 (2017-02-14)
==================
* Added BaseURL
0.9.2 (2017-02-08)
==================
* Remove debug print
0.9.1 (2017-02-07)
==================
* Do not lose tail chars (#45)
0.9.0 (2017-02-07)
==================
* Allow to quote ``%`` in non strict mode (#21)
* Incorrect parsing of query parameters with %3B (;) inside (#34)
* Fix core dumps (#41)
* tmpbuf - compiling error (#43)
* Added ``URL.update_path()`` method
* Added ``URL.update_query()`` method (#47)
0.8.1 (2016-12-03)
==================
* Fix broken aiohttp: revert back ``quote`` / ``unquote``.
0.8.0 (2016-12-03)
==================
* Support more verbose error messages in ``.with_query()`` (#24)
* Don't percent-encode ``@`` and ``:`` in path (#32)
* Don't expose ``yarl.quote`` and ``yarl.unquote``, these functions are
part of private API
0.7.1 (2016-11-18)
==================
* Accept not only ``str`` but all classes inherited from ``str`` also (#25)
0.7.0 (2016-11-07)
==================
* Accept ``int`` as value for ``.with_query()``
0.6.0 (2016-11-07)
==================
* Explicitly use UTF8 encoding in setup.py (#20)
* Properly unquote non-UTF8 strings (#19)
0.5.3 (2016-11-02)
==================
* Don't use namedtuple fields but indexes on URL construction
0.5.2 (2016-11-02)
==================
* Inline ``_encode`` class method
0.5.1 (2016-11-02)
==================
* Make URL construction faster by removing extra classmethod calls
0.5.0 (2016-11-02)
==================
* Add cython optimization for quoting/unquoting
* Provide binary wheels
0.4.3 (2016-09-29)
==================
* Fix typing stubs
0.4.2 (2016-09-29)
==================
* Expose ``quote()`` and ``unquote()`` as public API
0.4.1 (2016-09-28)
==================
* Support empty values in query (``'/path?arg'``)
0.4.0 (2016-09-27)
==================
* Introduce ``relative()`` (#16)
0.3.2 (2016-09-27)
==================
* Typo fixes #15
0.3.1 (2016-09-26)
==================
* Support sequence of pairs as ``with_query()`` parameter
0.3.0 (2016-09-26)
==================
* Introduce ``is_default_port()``
0.2.1 (2016-09-26)
==================
* Raise ValueError for URLs like 'http://:8080/'
0.2.0 (2016-09-18)
==================
* Avoid doubling slashes when joining paths (#13)
* Appending path starting from slash is forbidden (#12)
0.1.4 (2016-09-09)
==================
* Add kwargs support for ``with_query()`` (#10)
0.1.3 (2016-09-07)
==================
* Document ``with_query()``, ``with_fragment()`` and ``origin()``
* Allow ``None`` for ``with_query()`` and ``with_fragment()``
0.1.2 (2016-09-07)
==================
* Fix links, tune docs theme.
0.1.1 (2016-09-06)
==================
* Update README, old version used obsolete API
0.1.0 (2016-09-06)
==================
* The library was deeply refactored, bytes are gone away but all
accepted strings are encoded if needed.
0.0.1 (2016-08-30)
==================
* The first release.
Platform: UNKNOWN
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Topic :: Internet :: WWW/HTTP
Requires-Python: >=3.6
Description-Content-Type: text/x-rst

View File

@ -0,0 +1,42 @@
CHANGES.rst
LICENSE
MANIFEST.in
README.rst
pyproject.toml
setup.cfg
setup.py
docs/Makefile
docs/api.rst
docs/conf.py
docs/index.rst
docs/make.bat
docs/spelling_wordlist.txt
docs/yarl-icon-128x128.xcf
docs/_static/yarl-icon-128x128.png
docs/_templates/about.html
tests/test_cache.py
tests/test_cached_property.py
tests/test_normalize_path.py
tests/test_pickle.py
tests/test_quoting.py
tests/test_update_query.py
tests/test_url.py
tests/test_url_build.py
tests/test_url_cmp_and_hash.py
tests/test_url_parsing.py
tests/test_url_query.py
tests/test_url_update_netloc.py
yarl/__init__.py
yarl/__init__.pyi
yarl/_quoting.py
yarl/_quoting_c.c
yarl/_quoting_c.pyi
yarl/_quoting_c.pyx
yarl/_quoting_py.py
yarl/_url.py
yarl/py.typed
yarl.egg-info/PKG-INFO
yarl.egg-info/SOURCES.txt
yarl.egg-info/dependency_links.txt
yarl.egg-info/requires.txt
yarl.egg-info/top_level.txt

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,5 @@
multidict>=4.0
idna>=2.0
[:python_version < "3.8"]
typing_extensions>=3.7.4

View File

@ -0,0 +1 @@
yarl