profile
viewpoint
Ali-Akber Saifee alisaifee Burnaby, British Columbia https://ali.indydevs.org

alisaifee/flask-limiter 711

Rate Limiting extension for Flask

alisaifee/holmium.core 36

Page objects & Utilities for writing selenium test cases.

alisaifee/hiro 4

time manipulation utilities for testing in python

alisaifee/confligt 2

Command line utility to find conflicting branches in git repositories

alisaifee/djlimiter 2

Rate limiting middleware for django

alisaifee/fabric 1

Simple, Pythonic remote execution and deployment

alisaifee/ansible 0

Ansible is a radically simple IT orchestration engine that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems.

alisaifee/ansible-plugins 0

A set of custom plugins for ansible (https://github.com/ansible/ansible) configuration management: multi-node deployment/orchestration, and remote task execution system. This project is not affiliated with the ansible project.

alisaifee/ansible-shell 0

Interactive ansible shell

startedalisaifee/flask-limiter

started time in a day

startedalisaifee/limits

started time in a day

startedalisaifee/flask-limiter

started time in 3 days

startedalisaifee/flask-limiter

started time in 3 days

startedalisaifee/limits

started time in 11 days

startedalisaifee/flask-limiter

started time in 12 days

startedalisaifee/flask-limiter

started time in 14 days

startedalisaifee/flask-limiter

started time in 15 days

startedalisaifee/flask-limiter

started time in 22 days

startedalisaifee/flask-limiter

started time in 24 days

issue openedalisaifee/flask-limiter

How to get "Retry-After" value from error_message or errorhandler ?

Instead of default n per x error message, i want to show user something more precise, like "Retry After 2 minutes 34 seconds".

And for that i need the "Retry-After" delta-seconds value.

Please help. Thank You.

created time in 24 days

PR opened alisaifee/jira-cli

Pin keyring to latest version 21.8.0

This PR pins keyring to the latest release 21.8.0.

<details> <summary>Changelog</summary>

21.8.0

-------

* 438: For better interoperability with other
applications, ``Windows`` backend now attempts to
decode passwords using UTF-8 if UTF-16 decoding fails.
Passwords are still stored as UTF-16.

21.7.0

-------

* 437: Package now declares typing support.

21.6.0

-------

* 403: Keyring no longer eagerly initializes the backend
on import, but instead defers the backend initialization
until a keyring is accessed. Any callers reliant on this
early intialization behavior may need to call
``keyring.core.init_backend()`` to explicitly initialize
the detected backend.

21.5.0

-------

* 474: SecretService and KWallet backends are now
disabled if the relevant names are not available on
D-Bus. Keyring should now be much more responsive
in these environments.

* 463: Fixed regression in KWallet ``get_credential``
where a simple string was returned instead of a
SimpleCredential.

21.4.0

-------

* 431: KWallet backend now supports ``get_credential``.

21.3.1

-------

* 445: Suppress errors when ``sys.argv`` is not
a list of at least one element.

21.3.0

-------

* 440: Keyring now honors XDG_CONFIG_HOME as
``~/.config``.
* 452: SecretService ``get_credential`` now returns
``None`` for unmatched query.

21.2.1

-------

* 426: Restored lenience on startup when entry point
metadata is missing.
* 423: Avoid RecursionError when initializing backends
when a limit is supplied.

21.2.0

-------

* 372: Chainer now deterministically resolves at a lower
priority than the Fail keyring (when there are no backends
to chain).
* 372: Fail keyring now raises a ``NoKeyringError`` for
easier selectability.
* 405: Keyring now logs at DEBUG rather than INFO during
backend startup.

21.1.1

-------

* Refreshed package metadata.

21.1.0

-------

* 380: In SecretService backend, close connections after
using them.

21.0.0

-------

* Require Python 3.6 or later.

20.0.1

-------

* 417: Fix TypeError when backend fails to initialize.

20.0.0

-------

* Extracted ``keyring.testing`` package to contain supporting
functionality for plugin backends. ``keyring.tests`` has been
removed from the package.

19.3.0

-------

* Switch to `importlib.metadata
&lt;https://docs.python.org/3/library/importlib.metadata.html&gt;`_
for loading entry points. Removes one dependency on Python 3.8.

* Added new ``KeyringBackend.set_properties_from_env``.

* 382: Add support for alternate persistence scopes for Windows
backend. Set ``.persist`` to &quot;local machine&quot; or &quot;session&quot;
to enable the alternate scopes or &quot;enterprise&quot; to use the
default scope.

* 404: Improve import times when a backend is specifically
configured by lazily calling ``get_all_keyring``.

19.2.0

------

* Add support for get_credential() with the SecretService backend.

19.1.0

------

* 369: macOS Keyring now honors a ``KEYCHAIN_PATH``
environment variable. If set, Keyring will use that
keychain instead of the default.

19.0.2

------

* Refresh package skeleton.
* Adopt `black &lt;https://pypi.org/project/black&gt;`_ code style.

19.0.1

------

* Merge with 18.0.1.

19.0.0

------

* 383: Drop support for EOL Python 2.7 - 3.4.

18.0.1

------

* 386: ExceptionInfo no longer retains a reference to the
traceback.

18.0.0

------

* 375: On macOS, the backend now raises a ``KeyringLocked``
when access to the keyring is denied (on get or set) instead
of ``PasswordSetError`` or ``KeyringError``. Any API users
may need to account for this change, probably by catching
the parent ``KeyringError``.
Additionally, the error message from the underying error is
now included in any errors that occur.

17.1.1

------

* 368: Update packaging technique to avoid 0.0.0 releases.

17.1.0

------

* 366: When calling ``keyring.core.init_backend``, if any
limit function is supplied, it is saved and later honored by
the ``ChainerBackend`` as well.

17.0.0

------

* 345: Remove application attribute from stored passwords
using SecretService, addressing regression introduced in
10.5.0 (292). Impacted Linux keyrings will once again
prompt for a password for &quot;Python program&quot;.

16.1.1

------

* 362: Fix error on import due to circular imports
on Python 3.4.

16.1.0

------

* Refactor ChainerBackend, introduced in 16.0 to function
as any other backend, activating when relevant.

16.0.2

------

* 319: In Windows backend, trap all exceptions when
attempting to import pywin32.

16.0.1

------

* 357: Once again allow all positive, non-zero priority
keyrings to participate.

16.0.0

------

* 323: Fix race condition in delete_password on Windows.
* 352: All suitable backends (priority 1 and greater) are
allowed to participate.

15.2.0

------

* 350: Added new API for ``get_credentials``, for backends
that can resolve both a username and password for a service.

15.1.0

------

* 340: Add the Null keyring, disabled by default.
* 340: Added ``--disable`` option to command-line
interface.
* 340: Now honor a ``PYTHON_KEYRING_BACKEND``
environment variable to select a backend. Environments
may set to ``keyring.backends.null.Keyring`` to disable
keyring.

15.0.0

------

Removed deprecated ``keyring.util.escape`` module.

Fixed warning about using deprecated Abstract Base Classes
from collections module.

14.0.0

------

Removed ``getpassbackend`` module and alias in
``keyring.get_pass_get_password``. Instead, just use::

 keyring.get_password(getpass.getuser(), &#39;Python&#39;)

13.2.1

------

* 335: Fix regression in command line client.

13.2.0

------

* Keyring command-line interface now reads the password
directly from stdin if stdin is connected to a pipe.

13.1.0

------

* 329: Improve output of ``keyring --list-backends``.

13.0.0

------

* 327: In kwallet backend, if the collection or item is
locked, a ``KeyringLocked`` exception is raised. Clients
expecting a None response from ``get_password`` under
this condition will need to catch this exception.
Additionally, an ``InitError`` is now raised if the
connection cannot be established to the DBus.

* 298: In kwallet backend, when checking an existing
handle, verify that it is still valid or create a new
connection.

12.2.1

------

* Fixed issue in SecretService. Ref 226.

12.2.0

------

* 322: Fix AttributeError when ``escape.__builtins__``
is a dict.

* Deprecated ``keyring.util.escape`` module. If you use
this module or encounter the warning (on the latest
release of your packages), please `file a ticket
&lt;https://github.com/jaraco/keyring/issues/new&gt;`_.

12.1.0

------

* Unpin SecretStorage on Python 3.5+. Requires that
Setuptools 17.1 be used. Note that the special
handling will be unnecessary once Pip 9 can be
assumed (as it will exclude SecretStorage 3 in
non-viable environments).

12.0.2

------

* Pin SecretStorage to 2.x.

12.0.1

------

* 314: No changes except to rebuild.

12.0.0

------

* 310: Keyring now loads all backends through entry
points.

For most users, this release will be fully compatible. Some
users may experience compatibility issues if entrypoints is
not installed (as declared) or the metadata on which entrypoints
relies is unavailable. For that reason, the package is released
with a major version bump.

11.1.0

------

* 312: Use ``entrypoints`` instead of pkg_resources to
avoid performance hit loading pkg_resources. Adds
a dependency on ``entrypoints``.

11.0.0

------

* 294: No longer expose ``keyring.__version__`` (added
in 8.1) to avoid performance hit loading pkg_resources.

10.6.0

------

* 299: Keyring exceptions are now derived from a base
``keyring.errors.KeyringError``.

10.5.1

------

* 296: Prevent AttributeError on import when Debian has
created broken dbus installs.

10.5.0

------

* 287: Added ``--list-backends`` option to
command-line interface.

* Removed ``logger`` from ``keyring``. See 291 for related
request.

* 292: Set the appid for SecretService &amp; KWallet to
something meaningful.

10.4.0

------

* 279: In Kwallet, pass mainloop to SessionBus.

* 278: Unpin pywin32-ctypes, but blacklist known
incompatible versions.

10.3.3

------

* 278: Pin to pywin32-ctypes 0.0.1 to avoid apparent
breakage introduced in 0.1.0.

10.3.2

------

* 267: More leniently unescape lowercased characters as
they get re-cased by ConfigParser.

10.3.1

------

* 266: Use private compatibity model rather than six to
avoid the dependency.

10.3

----

* 264: Implement devpi hook for supplying a password when
logging in with `devpi &lt;https://pypi.org/project/devpi&gt;`_
client.

* 260: For macOS, added initial API support for internet
passwords.

10.2

----

* 259: Allow to set a custom application attribute for
SecretService backend.

10.1

----

* 253: Backends now expose a &#39;.name&#39; attribute suitable
for identifying each backend to users.

10.0.2

-----

* 247: Restored console script.

10.0.1

------

* Update readme to reflect test recommendations.

10.0

----

* Drop support for Python 3.2.
* Test suite now uses tox instead of pytest-runner.
Test requirements are now defined in tests/requirements.txt.

9.3.1

-----

* Link to the new Gitter chat room is now in the
readme.
* Issue 235: ``kwallet`` backend now returns
string objects instead of ``dbus.String`` objects,
for less surprising reprs.
* Minor doc fixes.

9.3

---

* Issue 161: In SecretService backend, unlock
individual entries.

9.2.1

-----

* Issue 230: Don&#39;t rely on dbus-python and instead
defer to SecretStorage to describe the installation
requirements.

9.2

---

* Issue 231 via 233: On Linux, ``secretstorage``
is now a declared dependency, allowing recommended
keyring to work simply after installation.

9.1

---

* Issue 83 via 229: ``kwallet`` backend now stores
the service name as a folder name in the backend rather
than storing all passwords in a Python folder.

9.0

---

* Issue 217: Once again, the OS X backend uses the
Framework API for invoking the Keychain service.
As a result, applications utilizing this API will be
authorized per application, rather than relying on the
authorization of the &#39;security&#39; application. Consequently,
users will be prompted to authorize the system Python
executable and also new Python executables, such as
those created by virtualenv.
260: No longer does the keyring honor the ``store``
attribute on the keyring. Only application passwords
are accessible.

8.7

---

* Changelog now links to issues and provides dates of
releases.

8.6

---

* Issue 217: Add warning in OS Keyring when &#39;store&#39;
is set to &#39;internet&#39; to determine if this feature is
used in the wild.

8.5.1

-----

* Pull Request 216: Kwallet backend now has lower
priority than the preferred SecretService backend,
now that the desktop check is no longer in place.

8.5

---

* Issue 168: Now prefer KF5 Kwallet to KF4. Users relying
on KF4 must use prior releases.

8.4

---

* Pull Request 209: Better error message when no backend is
available (indicating keyrings.alt as a quick workaround).
* Pull Request 208: Fix pywin32-ctypes package name in
requirements.

8.3

---

* Issue 207: Library now requires win32ctypes on Windows
systems, which will be installed automatically by
Setuptools 0.7 or Pip 6 (or later).
* Actually removed QtKwallet, which was meant to be dropped in
8.0 but somehow remained.

8.2

---

* Update readme to include how-to use with Linux
non-graphical environments.

8.1

---

* Issue 197: Add ``__version__`` attribute to keyring module.

8.0

---

* Issue 117: Removed all but the preferred keyring backends
for each of the major desktop platforms:

 - keyring.backends.kwallet.DBusKeyring
 - keyring.backends.OS_X.Keyring
 - keyring.backends.SecretService.Keyring
 - keyring.backends.Windows.WinVaultKeyring

All other keyrings
have been moved to a new package, `keyrings.alt
&lt;https://pypi.python.org/pypi/keyrings.alt&gt;`_ and
backward-compatibility aliases removed.
To retain
availability of these less preferred keyrings, include
that package in your installation (install both keyring
and keyrings.alt).

As these keyrings have moved, any keyrings indicated
explicitly in configuration will need to be updated to
replace &quot;keyring.backends.&quot; with &quot;keyrings.alt.&quot;. For
example, &quot;keyring.backends.file.PlaintextKeyring&quot;
becomes &quot;keyrings.alt.file.PlaintextKeyring&quot;.

7.3.1

-----

* Issue 194: Redirect away from docs until they have something
more than the changelog. Users seeking the changelog will
want to follow the `direct link
&lt;https://pythonhosted.org/keyring/history.html&gt;`_.

7.3

---

* Issue 117: Added support for filtering which
backends are acceptable. To limit to only loading recommended
keyrings (those with priority &gt;= 1), call::

 keyring.core.init_backend(limit=keyring.core.recommended)

7.2

---

* Pull Request 190: OS X backend now exposes a ``keychain``
attribute, which if set will be used by ``get_password`` when
retrieving passwords. Useful in environments such as when
running under cron where the default keychain is not the same
as the default keychain in a login session. Example usage::

 keyring.get_keyring().keychain = &#39;/path/to/login.keychain&#39;
 pw = keyring.get_password(...)

7.1

---

* Issue 186: Removed preference for keyrings based on
``XDG_CURRENT_DESKTOP`` as these values are to varied
to be a reliable indicator of which keyring implementation
might be preferable.

7.0.2

-----

* Issue 187: Restore ``Keyring`` name in ``kwallet`` backend.
Users of keyring 6.1 or later should prefer an explicit reference
to DBusKeyring or QtKeyring instead.

7.0.1

-----

* Issue 183 and Issue 185: Gnome keyring no longer relies
on environment variables, but instead relies on the GnomeKeyring
library to determine viability.

7.0

---

* Issue 99: Keyring now expects the config file to be located
in the XDG_CONFIG_HOME rather than XDG_DATA_HOME and will
fail to start if the config is found in the old location but not
the new. On systems where the two locations are distinct,
simply copy or symlink the config to remain compatible with
older versions or move the file to work only with 7.0 and later.

* Replaced Pull Request 182 with a conditional SessionBus
construction, based on subsequent discussion.

6.1.1

-----

* Pull Request 182: Prevent DBus from indicating as a viable
backend when no viable X DISPLAY variable is present.

6.1

---

* Pull Request 174: Add DBus backend for KWallet, preferred to Qt
backend. Theoretically, it should be auto-detected based on
available libraries and interchangeable with the Qt backend.

6.0

---

* Drop support for Python 2.6.

5.7.1

-----

* Updated project metadata to match Github hosting and
generally refreshed the metadata structure to match
practices with other projects.

5.7

---

* Issue 177: Resolve default keyring name on Gnome using the API.
* Issue 145: Add workaround for password exposure through
process status for most passwords containing simple
characters.

5.6

---

* Allow keyring to be invoked from command-line with
``python -m keyring``.

5.5.1

-----

* Issue 156: Fixed test failures in ``pyfs`` keyring related to
0.5 release.

5.5

---

* Pull Request 176: Use recommended mechanism for checking
GnomeKeyring version.

5.4

---

* Prefer setuptools_scm to hgtools.

5.3

---

* Prefer hgtools to setuptools_scm due to `setuptools_scm 21
&lt;https://bitbucket.org/pypa/setuptools_scm/issue/21&gt;`_.

5.2

---

* Prefer setuptools_scm to hgtools.

5.1

---

* Host project at Github (`repo &lt;https://github.com/jaraco/keyring&gt;`_).

5.0

---

* Version numbering is now derived from the code repository tags via `hgtools
&lt;https://pypi.python.org/pypi/hgtools&gt;`_.
* Build and install now requires setuptools.

4.1.1

-----

* The entry point group must look like a module name, so the group is now
&quot;keyring.backends&quot;.

4.1

---

* Added preliminary support for loading keyring backends through ``setuptools
entry points``, specifically &quot;keyring backends&quot;.

4.0.2

======

43: Tests are no longer included in the install.

4.0.1

======

Package refresh and minor cleanup.

4.0

---

* Removed ``keyring_path`` parameter from ``load_keyring``. See release notes
for 3.0.3 for more details.
* Issue 22: Removed support for loading the config from the current
directory. The config file must now be located in the platform-specific
config location.

4.0.0

======

41: Instead of PyCrypto or PyCryptodome, the encrypting backend
now relies on PyCryptodomex.

3.8

---

* Issue 22: Deprecated loading of config from current directory. Support for
loading the config in this manner will be removed in a future version.
* Issue 131: Keyring now will prefer `pywin32-ctypes
&lt;https://pypi.python.org/pypi/pywin32-ctypes&gt;`_ to pywin32 if available.

3.7

---

* Gnome keyring no longer relies on the GNOME_KEYRING_CONTROL environment
variable.
* Issue 140: Restore compatibility for older versions of PyWin32.

3.6

---

* `Pull Request 1 (github) &lt;https://github.com/jaraco/keyring/pull/1&gt;`_:
Add support for packages that wish to bundle keyring by using relative
imports throughout.

3.5.2

======

39: Replace use of deprecated ``base64.encode/decodestring``
with ``encode/decodebytes``.

3.5.1

======

38: Fixed test suite to work with pytest-based fixtures.

Refresh package metadata.

3.5

---

* Issue 49: Give the backend priorities a 1.5 multiplier bump when an
XDG_CURRENT_DESKTOP environment variable matches the keyring&#39;s target
environment.
* Issue 99: Clarified documentation on location of config and data files.
Prepared the code base to treat the two differently on Unix-based systems.
For now, the behavior is unchanged.

3.5.0

======

33: Rely on keyring.testing (keyring 20) for tests.

3.4

---

* Extracted FileBacked and Encrypted base classes.
* Add a pyinstaller hook to expose backend modules. Ref 124
* Pull request 41: Use errno module instead of hardcoding error codes.
* SecretService backend: correctly handle cases when user dismissed
the collection creation or unlock prompt.

3.4.0

======

In tests, pin keyring major version.

3.3

---

* Pull request 40: KWallet backend will now honor the ``KDE_FULL_SESSION``
environment variable as found on openSUSE.

3.3.0

======

Drop support for Python 3.5 and earlier.

3.2.1

-----

* SecretService backend: use a different function to check that the
backend is functional. The default collection may not exist, but
the collection will remain usable in that case.

Also, make the error message more verbose.

Resolves https://bugs.launchpad.net/bugs/1242412.

3.2

---

* Issue 120: Invoke KeyringBackend.priority during load_keyring to ensure
that any keyring loaded is actually viable (or raises an informative
exception).

* File keyring:

- Issue 123: fix removing items.
- Correctly escape item name when removing.
- Use with statement when working with files.

* Add a test for removing one item in group.

* Issue 81: Added experimental support for third-party backends. See
`keyring.core._load_library_extensions` for information on supplying
a third-party backend.

3.2.0

======

In tests, rely on pycryptodome instead of pycrypto for improved
compatibility.

In tests, rely on pytest instead of unittest.

3.1.1

=====

31: Trap AttributeError in Gnome backend as in some environments
it seems that will happen.

30: Fix issue where a backslash in the service name would cause
errors on Registry backend on Windows.

3.1

---

* All code now runs natively on both Python 2 and Python 3, no 2to3 conversion
is required.
* Testsuite: clean up, and make more use of unittest2 methods.

3.0.5

-----

* Issue 114: Fix logic in pyfs detection.

3.0.4

-----

* Issue 114: Fix detection of pyfs under Mercurial Demand Import.

3.0.3

-----

* Simplified the implementation of ``keyring.core.load_keyring``. It now uses
``__import__`` instead of loading modules explicitly. The ``keyring_path``
parameter to ``load_keyring`` is now deprecated. Callers should instead
ensure their module is available on ``sys.path`` before calling
``load_keyring``. Keyring still honors ``keyring-path``. This change fixes
Issue 113 in which the explicit module loading of keyring modules was
breaking package-relative imports.

3.0.2

-----

* Renamed ``keyring.util.platform`` to ``keyring.util.platform_``. As reported
in Issue 112 and `mercurial_keyring 31
&lt;https://bitbucket.org/Mekk/mercurial_keyring/issue/31&gt;`_ and in `Mercurial
itself &lt;http://bz.selenic.com/show_bug.cgi?id=4029&gt;`_, Mercurial&#39;s Demand
Import does not honor ``absolute_import`` directives, so it&#39;s not possible
to have a module with the same name as another top-level module. A patch is
in place to fix this issue upstream, but to support older Mercurial
versions, this patch will remain for some time.

3.0.1

-----

* Ensure that modules are actually imported even in Mercurial&#39;s Demand Import
environment.

3.0

---

* Removed support for Python 2.5.
* Removed names in ``keyring.backend`` moved in 1.1 and previously retained
for compatibility.

2.4

===

24: File based backends now reject non-string types for passwords.

2.3

===

21: Raise ValueError on blank username in plaintext
keyring, unsupported in the storage format.

2.2

===

17: Drop dependency on keyring.py27compat and use six
instead.

16: Minor tweaks to file-based backends.

2.1.1

-----

* Restored Python 2.5 compatibility (lost in 2.0).

2.1

---

*  Issue 10: Added a &#39;store&#39; attribute to the OS X Keyring, enabling custom
instances of the KeyringBackend to use another store, such as the
&#39;internet&#39; store. For example::

    keys = keyring.backends.OS_X.Keyring()
    keys.store = &#39;internet&#39;
    keys.set_password(system, user, password)
    keys.get_password(system, user)

The default for all instances can be set in the class::

    keyring.backends.OS_X.Keyring.store = &#39;internet&#39;

*  GnomeKeyring: fix availability checks, and make sure the warning
message from pygobject is not printed.

*  Fixes to GnomeKeyring and SecretService tests.

2.0.3

-----

*  Issue 112: Backend viability/priority checks now are more aggressive about
module presence checking, requesting ``__name__`` from imported modules to
force the demand importer to actually attempt the import.

2.0.2

-----

*  Issue 111: Windows backend isn&#39;t viable on non-Windows platforms.

2.0.1

-----

*  Issue 110: Fix issues with ``Windows.RegistryKeyring``.

2.0

---

*  Issue 80: Prioritized backend support. The primary interface for Keyring
backend classes has been refactored to now emit a &#39;priority&#39; based on the
current environment (operating system, libraries available, etc). These
priorities provide an indication of the applicability of that backend for
the current environment. Users are still welcome to specify a particular
backend in configuration, but the default behavior should now be to select
the most appropriate backend by default.

1.6.1

-----

* Only include pytest-runner in &#39;setup requirements&#39; when ptr invocation is
indicated in the command-line (Issue 105).

1.6

---

*  GNOME Keyring backend:

- Use the same attributes (``username`` / ``service``) as the SecretService
  backend uses, allow searching for old ones for compatibility.
- Also set ``application`` attribute.
- Correctly handle all types of errors, not only ``CANCELLED`` and ``NO_MATCH``.
- Avoid printing warnings to stderr when GnomeKeyring is not available.

* Secret Service backend:

- Use a better label for passwords, the same as GNOME Keyring backend uses.

1.5

---

*  SecretService: allow deleting items created using previous python-keyring
versions.

Before the switch to secretstorage, python-keyring didn&#39;t set &quot;application&quot;
attribute. Now in addition to supporting searching for items without that
attribute, python-keyring also supports deleting them.

*  Use ``secretstorage.get_default_collection`` if it&#39;s available.

On secretstorage 1.0 or later, python-keyring now tries to create the
default collection if it doesn&#39;t exist, instead of just raising the error.

*  Improvements for tests, including fix for Issue 102.

1.4

---

* Switch GnomeKeyring backend to use native libgnome-keyring via
GObject Introspection, not the obsolete python-gnomekeyring module.

1.3

---

* Use the `SecretStorage library &lt;https://pypi.python.org/pypi/SecretStorage&gt;`_
to implement the Secret Service backend (instead of using dbus directly).
Now the keyring supports prompting for and deleting passwords. Fixes 69,
77, and 93.
* Catch `gnomekeyring.IOError` per the issue `reported in Nova client
&lt;https://bugs.launchpad.net/python-novaclient/+bug/1116302&gt;`_.
* Issue 92 Added support for delete_password on Mac OS X Keychain.

1.2.3

-----

* Fix for Encrypted File backend on Python 3.
* Issue 97 Improved support for PyPy.

1.2.2

-----

* Fixed handling situations when user cancels kwallet dialog or denies access
for the app.

1.2.1

-----

* Fix for kwallet delete.
* Fix for OS X backend on Python 3.
* Issue 84: Fix for Google backend on Python 3 (use of raw_input not caught
by 2to3).

1.2

---

* Implemented delete_password on most keyrings. Keyring 2.0 will require
delete_password to implement a Keyring. Fixes 79.

1.1.2

-----

* Issue 78: pyfilesystem backend now works on Windows.

1.1.1

-----

* Fixed MANIFEST.in so .rst files are included.

1.1

---

This is the last build that will support installation in a pure-distutils
mode. Subsequent releases will require setuptools/distribute to install.
Python 3 installs have always had this requirement (for 2to3 install support),
but starting with the next minor release (1.2+), setuptools will be required.

Additionally, this release has made some substantial refactoring in an
attempt to modularize the backends. An attempt has been made to maintain 100%
backward-compatibility, although if your library does anything fancy with
module structure or clasess, some tweaking may be necessary. The
backward-compatible references will be removed in 2.0, so the 1.1+ releases
represent a transitional implementation which should work with both legacy
and updated module structure.

* Added a console-script &#39;keyring&#39; invoking the command-line interface.
* Deprecated _ExtensionKeyring.
* Moved PasswordSetError and InitError to an `errors` module (references kept
for backward-compatibility).
* Moved concrete backend implementations into their own modules (references
kept for backward compatibility):

- OSXKeychain -&gt; backends.OS_X.Keyring
- GnomeKeyring -&gt; backends.Gnome.Keyring
- SecretServiceKeyring -&gt; backends.SecretService.Keyring
- KDEKWallet -&gt; backends.kwallet.Keyring
- BasicFileKeyring -&gt; backends.file.BaseKeyring
- CryptedFileKeyring -&gt; backends.file.EncryptedKeyring
- UncryptedFileKeyring -&gt; backends.file.PlaintextKeyring
- Win32CryptoKeyring -&gt; backends.Windows.EncryptedKeyring
- WinVaultKeyring -&gt; backends.Windows.WinVaultKeyring
- Win32CryptoRegistry -&gt; backends.Windows.RegistryKeyring
- select_windows_backend -&gt; backends.Windows.select_windows_backend
- GoogleDocsKeyring -&gt; backends.Google.DocsKeyring
- Credential -&gt; keyring.credentials.Credential
- BaseCredential -&gt; keyring.credentials.SimpleCredential
- EnvironCredential -&gt; keyring.credentials.EnvironCredential
- GoogleEnvironCredential -&gt; backends.Google.EnvironCredential
- BaseKeyczarCrypter -&gt; backends.keyczar.BaseCrypter
- KeyczarCrypter -&gt; backends.keyczar.Crypter
- EnvironKeyczarCrypter -&gt; backends.keyczar.EnvironCrypter
- EnvironGoogleDocsKeyring -&gt; backends.Google.KeyczarDocsKeyring
- BasicPyfilesystemKeyring -&gt; backends.pyfs.BasicKeyring
- UnencryptedPyfilesystemKeyring -&gt; backends.pyfs.PlaintextKeyring
- EncryptedPyfilesystemKeyring -&gt; backends.pyfs.EncryptedKeyring
- EnvironEncryptedPyfilesystemKeyring -&gt; backends.pyfs.KeyczarKeyring
- MultipartKeyringWrapper -&gt; backends.multi.MultipartKeyringWrapper

* Officially require Python 2.5 or greater (although unofficially, this
requirement has been in place since 0.10).

1.0

---

This backward-incompatible release attempts to remove some cruft from the
codebase that&#39;s accumulated over the versions.

* Removed legacy file relocation support. `keyring` no longer supports loading
configuration or file-based backends from ~. If upgrading from 0.8 or later,
the files should already have been migrated to their new proper locations.
If upgrading from 0.7.x or earlier, the files will have to be migrated
manually.
* Removed CryptedFileKeyring migration support. To maintain an existing
CryptedFileKeyring, one must first upgrade to 0.9.2 or later and access the
keyring before upgrading to 1.0 to retain the existing keyring.
* File System backends now create files without group and world permissions.
Fixes 67.

0.10.1

------

* Merged 0.9.3 to include fix for 75.

0.10

----

* Add support for using `Keyczar &lt;http://www.keyczar.org/&gt;`_ to encrypt
keyrings. Keyczar is &quot;an open source cryptographic toolkit designed to make
it easier and safer for developers to use cryptography in their
applications.&quot;
* Added support for storing keyrings on Google Docs or any other filesystem
supported by pyfilesystem.
* Fixed issue in Gnome Keyring when unicode is passed as the service name,
username, or password.
* Tweaked SecretService code to pass unicode to DBus, as unicode is the
preferred format.
* Issue 71 - Fixed logic in CryptedFileKeyring.
* Unencrypted keyring file will be saved with user read/write (and not group
or world read/write).

0.9.3

-----

* Ensure migration is run when get_password is called. Fixes 75. Thanks to
Marc Deslauriers for reporting the bug and supplying the patch.

0.9.2

-----

* Keyring 0.9.1 introduced a whole different storage format for the
CryptedFileKeyring, but this introduced some potential compatibility issues.
This release incorporates the security updates but reverts to the INI file
format for storage, only encrypting the passwords and leaving the service
and usernames in plaintext. Subsequent releases may incorporate a new
keyring to implement a whole-file encrypted version. Fixes 64.
* The CryptedFileKeyring now requires simplejson for Python 2.5 clients.

0.9.1

-----

* Fix for issue where SecretServiceBackend.set_password would raise a
UnicodeError on Python 3 or when a unicode password was provided on Python
2.
* CryptedFileKeyring now uses PBKDF2 to derive the key from the user&#39;s
password and a random hash. The IV is chosen randomly as well. All the
stored passwords are encrypted at once. Any keyrings using the old format
will be automatically converted to the new format (but will no longer be
compatible with 0.9 and earlier). The user&#39;s password is no longer limited
to 32 characters. PyCrypto 2.5 or greater is now required for this keyring.

0.9

---

* Add support for GTK 3 and secret service D-Bus. Fixes 52.
* Issue 60 - Use correct method for decoding.

0.8.1

-----

* Fix regression in keyring lib on Windows XP where the LOCALAPPDATA
environment variable is not present.

0.8

---

* Mac OS X keyring backend now uses subprocess calls to the `security`
command instead of calling the API, which with the latest updates, no
longer allows Python to invoke from a virtualenv. Fixes issue 13.
* When using file-based storage, the keyring files are no longer stored
in the user&#39;s home directory, but are instead stored in platform-friendly
locations (`%localappdata%\Python Keyring` on Windows and according to
the freedesktop.org Base Dir Specification
(`$XDG_DATA_HOME/python_keyring` or `$HOME/.local/share/python_keyring`)
on other operating systems). This fixes 21.

*Backward Compatibility Notice*

Due to the new storage location for file-based keyrings, keyring 0.8
supports backward compatibility by automatically moving the password
files to the updated location. In general, users can upgrade to 0.8 and
continue to operate normally. Any applications that customize the storage
location or make assumptions about the storage location will need to take
this change into consideration. Additionally, after upgrading to 0.8,
it is not possible to downgrade to 0.7 without manually moving
configuration files. In 1.0, the backward compatibility
will be removed.

0.7.1

-----

* Removed non-ASCII characters from README and CHANGES docs (required by
distutils if we&#39;re to include them in the long_description). Fixes 55.

0.7

---

* Python 3 is now supported. All tests now pass under Python 3.2 on
Windows and Linux (although Linux backend support is limited). Fixes 28.
* Extension modules on Mac and Windows replaced by pure-Python ctypes
implementations. Thanks to Jerome Laheurte.
* WinVaultKeyring now supports multiple passwords for the same service. Fixes
47.
* Most of the tests don&#39;t require user interaction anymore.
* Entries stored in Gnome Keyring appears now with a meaningful name if you try
to browser your keyring (for ex. with Seahorse)
* Tests from Gnome Keyring no longer pollute the user own keyring.
* `keyring.util.escape` now accepts only unicode strings. Don&#39;t try to encode
strings passed to it.

0.6.2

-----

* fix compiling on OSX with XCode 4.0

0.6.1

-----

* Gnome keyring should not be used if there is no DISPLAY or if the dbus is
not around (https://bugs.launchpad.net/launchpadlib/+bug/752282).

* Added `keyring.http` for facilitating HTTP Auth using keyring.

* Add a utility to access the keyring from the command line.

0.5.1

-----

* Remove a spurious KDE debug message when using KWallet

* Fix a bug that caused an exception if the user canceled the KWallet dialog
(https://bitbucket.org/kang/python-keyring-lib/issue/37/user-canceling-of-kde-wallet-dialogs).

0.5

---

* Now using the existing Gnome and KDE python libs instead of custom C++
code.

* Using the getpass module instead of custom code

0.4

---

* Fixed the setup script (some subdirs were not included in the release.)

0.3

---

* Fixed keyring.core when the user doesn&#39;t have a cfg, or is not
properly configured.

* Fixed escaping issues for usernames with non-ascii characters

0.2

---

* Add support for Python 2.4+
http://bitbucket.org/kang/python-keyring-lib/issue/2

* Fix the bug in KDE Kwallet extension compiling
http://bitbucket.org/kang/python-keyring-lib/issue/3

</details>

<details> <summary>Links</summary>

  • PyPI: https://pypi.org/project/keyring
  • Changelog: https://pyup.io/changelogs/keyring/
  • Repo: https://github.com/jaraco/keyring </details>
+1 -1

0 comment

1 changed file

pr created time in 24 days

PR opened alisaifee/jira-cli

Pin twine to latest version 3.3.0

This PR pins twine to the latest release 3.3.0.

The bot wasn't able to find a changelog for this release. Got an idea?

<details> <summary>Links</summary>

  • PyPI: https://pypi.org/project/twine
  • Docs: https://twine.readthedocs.io/ </details>
+1 -1

0 comment

1 changed file

pr created time in a month

PR opened alisaifee/jira-cli

Pin keyring to latest version 21.7.0

This PR pins keyring to the latest release 21.7.0.

<details> <summary>Changelog</summary>

21.7.0

-------

* 437: Package now declares typing support.

21.6.0

-------

* 403: Keyring no longer eagerly initializes the backend
on import, but instead defers the backend initialization
until a keyring is accessed. Any callers reliant on this
early intialization behavior may need to call
``keyring.core.init_backend()`` to explicitly initialize
the detected backend.

21.5.0

-------

* 474: SecretService and KWallet backends are now
disabled if the relevant names are not available on
D-Bus. Keyring should now be much more responsive
in these environments.

* 463: Fixed regression in KWallet ``get_credential``
where a simple string was returned instead of a
SimpleCredential.

21.4.0

-------

* 431: KWallet backend now supports ``get_credential``.

21.3.1

-------

* 445: Suppress errors when ``sys.argv`` is not
a list of at least one element.

21.3.0

-------

* 440: Keyring now honors XDG_CONFIG_HOME as
``~/.config``.
* 452: SecretService ``get_credential`` now returns
``None`` for unmatched query.

21.2.1

-------

* 426: Restored lenience on startup when entry point
metadata is missing.
* 423: Avoid RecursionError when initializing backends
when a limit is supplied.

21.2.0

-------

* 372: Chainer now deterministically resolves at a lower
priority than the Fail keyring (when there are no backends
to chain).
* 372: Fail keyring now raises a ``NoKeyringError`` for
easier selectability.
* 405: Keyring now logs at DEBUG rather than INFO during
backend startup.

21.1.1

-------

* Refreshed package metadata.

21.1.0

-------

* 380: In SecretService backend, close connections after
using them.

21.0.0

-------

* Require Python 3.6 or later.

20.0.1

-------

* 417: Fix TypeError when backend fails to initialize.

20.0.0

-------

* Extracted ``keyring.testing`` package to contain supporting
functionality for plugin backends. ``keyring.tests`` has been
removed from the package.

19.3.0

-------

* Switch to `importlib.metadata
&lt;https://docs.python.org/3/library/importlib.metadata.html&gt;`_
for loading entry points. Removes one dependency on Python 3.8.

* Added new ``KeyringBackend.set_properties_from_env``.

* 382: Add support for alternate persistence scopes for Windows
backend. Set ``.persist`` to &quot;local machine&quot; or &quot;session&quot;
to enable the alternate scopes or &quot;enterprise&quot; to use the
default scope.

* 404: Improve import times when a backend is specifically
configured by lazily calling ``get_all_keyring``.

19.2.0

------

* Add support for get_credential() with the SecretService backend.

19.1.0

------

* 369: macOS Keyring now honors a ``KEYCHAIN_PATH``
environment variable. If set, Keyring will use that
keychain instead of the default.

19.0.2

------

* Refresh package skeleton.
* Adopt `black &lt;https://pypi.org/project/black&gt;`_ code style.

19.0.1

------

* Merge with 18.0.1.

19.0.0

------

* 383: Drop support for EOL Python 2.7 - 3.4.

18.0.1

------

* 386: ExceptionInfo no longer retains a reference to the
traceback.

18.0.0

------

* 375: On macOS, the backend now raises a ``KeyringLocked``
when access to the keyring is denied (on get or set) instead
of ``PasswordSetError`` or ``KeyringError``. Any API users
may need to account for this change, probably by catching
the parent ``KeyringError``.
Additionally, the error message from the underying error is
now included in any errors that occur.

17.1.1

------

* 368: Update packaging technique to avoid 0.0.0 releases.

17.1.0

------

* 366: When calling ``keyring.core.init_backend``, if any
limit function is supplied, it is saved and later honored by
the ``ChainerBackend`` as well.

17.0.0

------

* 345: Remove application attribute from stored passwords
using SecretService, addressing regression introduced in
10.5.0 (292). Impacted Linux keyrings will once again
prompt for a password for &quot;Python program&quot;.

16.1.1

------

* 362: Fix error on import due to circular imports
on Python 3.4.

16.1.0

------

* Refactor ChainerBackend, introduced in 16.0 to function
as any other backend, activating when relevant.

16.0.2

------

* 319: In Windows backend, trap all exceptions when
attempting to import pywin32.

16.0.1

------

* 357: Once again allow all positive, non-zero priority
keyrings to participate.

16.0.0

------

* 323: Fix race condition in delete_password on Windows.
* 352: All suitable backends (priority 1 and greater) are
allowed to participate.

15.2.0

------

* 350: Added new API for ``get_credentials``, for backends
that can resolve both a username and password for a service.

15.1.0

------

* 340: Add the Null keyring, disabled by default.
* 340: Added ``--disable`` option to command-line
interface.
* 340: Now honor a ``PYTHON_KEYRING_BACKEND``
environment variable to select a backend. Environments
may set to ``keyring.backends.null.Keyring`` to disable
keyring.

15.0.0

------

Removed deprecated ``keyring.util.escape`` module.

Fixed warning about using deprecated Abstract Base Classes
from collections module.

14.0.0

------

Removed ``getpassbackend`` module and alias in
``keyring.get_pass_get_password``. Instead, just use::

 keyring.get_password(getpass.getuser(), &#39;Python&#39;)

13.2.1

------

* 335: Fix regression in command line client.

13.2.0

------

* Keyring command-line interface now reads the password
directly from stdin if stdin is connected to a pipe.

13.1.0

------

* 329: Improve output of ``keyring --list-backends``.

13.0.0

------

* 327: In kwallet backend, if the collection or item is
locked, a ``KeyringLocked`` exception is raised. Clients
expecting a None response from ``get_password`` under
this condition will need to catch this exception.
Additionally, an ``InitError`` is now raised if the
connection cannot be established to the DBus.

* 298: In kwallet backend, when checking an existing
handle, verify that it is still valid or create a new
connection.

12.2.1

------

* Fixed issue in SecretService. Ref 226.

12.2.0

------

* 322: Fix AttributeError when ``escape.__builtins__``
is a dict.

* Deprecated ``keyring.util.escape`` module. If you use
this module or encounter the warning (on the latest
release of your packages), please `file a ticket
&lt;https://github.com/jaraco/keyring/issues/new&gt;`_.

12.1.0

------

* Unpin SecretStorage on Python 3.5+. Requires that
Setuptools 17.1 be used. Note that the special
handling will be unnecessary once Pip 9 can be
assumed (as it will exclude SecretStorage 3 in
non-viable environments).

12.0.2

------

* Pin SecretStorage to 2.x.

12.0.1

------

* 314: No changes except to rebuild.

12.0.0

------

* 310: Keyring now loads all backends through entry
points.

For most users, this release will be fully compatible. Some
users may experience compatibility issues if entrypoints is
not installed (as declared) or the metadata on which entrypoints
relies is unavailable. For that reason, the package is released
with a major version bump.

11.1.0

------

* 312: Use ``entrypoints`` instead of pkg_resources to
avoid performance hit loading pkg_resources. Adds
a dependency on ``entrypoints``.

11.0.0

------

* 294: No longer expose ``keyring.__version__`` (added
in 8.1) to avoid performance hit loading pkg_resources.

10.6.0

------

* 299: Keyring exceptions are now derived from a base
``keyring.errors.KeyringError``.

10.5.1

------

* 296: Prevent AttributeError on import when Debian has
created broken dbus installs.

10.5.0

------

* 287: Added ``--list-backends`` option to
command-line interface.

* Removed ``logger`` from ``keyring``. See 291 for related
request.

* 292: Set the appid for SecretService &amp; KWallet to
something meaningful.

10.4.0

------

* 279: In Kwallet, pass mainloop to SessionBus.

* 278: Unpin pywin32-ctypes, but blacklist known
incompatible versions.

10.3.3

------

* 278: Pin to pywin32-ctypes 0.0.1 to avoid apparent
breakage introduced in 0.1.0.

10.3.2

------

* 267: More leniently unescape lowercased characters as
they get re-cased by ConfigParser.

10.3.1

------

* 266: Use private compatibity model rather than six to
avoid the dependency.

10.3

----

* 264: Implement devpi hook for supplying a password when
logging in with `devpi &lt;https://pypi.org/project/devpi&gt;`_
client.

* 260: For macOS, added initial API support for internet
passwords.

10.2

----

* 259: Allow to set a custom application attribute for
SecretService backend.

10.1

----

* 253: Backends now expose a &#39;.name&#39; attribute suitable
for identifying each backend to users.

10.0.2

-----

* 247: Restored console script.

10.0.1

------

* Update readme to reflect test recommendations.

10.0

----

* Drop support for Python 3.2.
* Test suite now uses tox instead of pytest-runner.
Test requirements are now defined in tests/requirements.txt.

9.3.1

-----

* Link to the new Gitter chat room is now in the
readme.
* Issue 235: ``kwallet`` backend now returns
string objects instead of ``dbus.String`` objects,
for less surprising reprs.
* Minor doc fixes.

9.3

---

* Issue 161: In SecretService backend, unlock
individual entries.

9.2.1

-----

* Issue 230: Don&#39;t rely on dbus-python and instead
defer to SecretStorage to describe the installation
requirements.

9.2

---

* Issue 231 via 233: On Linux, ``secretstorage``
is now a declared dependency, allowing recommended
keyring to work simply after installation.

9.1

---

* Issue 83 via 229: ``kwallet`` backend now stores
the service name as a folder name in the backend rather
than storing all passwords in a Python folder.

9.0

---

* Issue 217: Once again, the OS X backend uses the
Framework API for invoking the Keychain service.
As a result, applications utilizing this API will be
authorized per application, rather than relying on the
authorization of the &#39;security&#39; application. Consequently,
users will be prompted to authorize the system Python
executable and also new Python executables, such as
those created by virtualenv.
260: No longer does the keyring honor the ``store``
attribute on the keyring. Only application passwords
are accessible.

8.7

---

* Changelog now links to issues and provides dates of
releases.

8.6

---

* Issue 217: Add warning in OS Keyring when &#39;store&#39;
is set to &#39;internet&#39; to determine if this feature is
used in the wild.

8.5.1

-----

* Pull Request 216: Kwallet backend now has lower
priority than the preferred SecretService backend,
now that the desktop check is no longer in place.

8.5

---

* Issue 168: Now prefer KF5 Kwallet to KF4. Users relying
on KF4 must use prior releases.

8.4

---

* Pull Request 209: Better error message when no backend is
available (indicating keyrings.alt as a quick workaround).
* Pull Request 208: Fix pywin32-ctypes package name in
requirements.

8.3

---

* Issue 207: Library now requires win32ctypes on Windows
systems, which will be installed automatically by
Setuptools 0.7 or Pip 6 (or later).
* Actually removed QtKwallet, which was meant to be dropped in
8.0 but somehow remained.

8.2

---

* Update readme to include how-to use with Linux
non-graphical environments.

8.1

---

* Issue 197: Add ``__version__`` attribute to keyring module.

8.0

---

* Issue 117: Removed all but the preferred keyring backends
for each of the major desktop platforms:

 - keyring.backends.kwallet.DBusKeyring
 - keyring.backends.OS_X.Keyring
 - keyring.backends.SecretService.Keyring
 - keyring.backends.Windows.WinVaultKeyring

All other keyrings
have been moved to a new package, `keyrings.alt
&lt;https://pypi.python.org/pypi/keyrings.alt&gt;`_ and
backward-compatibility aliases removed.
To retain
availability of these less preferred keyrings, include
that package in your installation (install both keyring
and keyrings.alt).

As these keyrings have moved, any keyrings indicated
explicitly in configuration will need to be updated to
replace &quot;keyring.backends.&quot; with &quot;keyrings.alt.&quot;. For
example, &quot;keyring.backends.file.PlaintextKeyring&quot;
becomes &quot;keyrings.alt.file.PlaintextKeyring&quot;.

7.3.1

-----

* Issue 194: Redirect away from docs until they have something
more than the changelog. Users seeking the changelog will
want to follow the `direct link
&lt;https://pythonhosted.org/keyring/history.html&gt;`_.

7.3

---

* Issue 117: Added support for filtering which
backends are acceptable. To limit to only loading recommended
keyrings (those with priority &gt;= 1), call::

 keyring.core.init_backend(limit=keyring.core.recommended)

7.2

---

* Pull Request 190: OS X backend now exposes a ``keychain``
attribute, which if set will be used by ``get_password`` when
retrieving passwords. Useful in environments such as when
running under cron where the default keychain is not the same
as the default keychain in a login session. Example usage::

 keyring.get_keyring().keychain = &#39;/path/to/login.keychain&#39;
 pw = keyring.get_password(...)

7.1

---

* Issue 186: Removed preference for keyrings based on
``XDG_CURRENT_DESKTOP`` as these values are to varied
to be a reliable indicator of which keyring implementation
might be preferable.

7.0.2

-----

* Issue 187: Restore ``Keyring`` name in ``kwallet`` backend.
Users of keyring 6.1 or later should prefer an explicit reference
to DBusKeyring or QtKeyring instead.

7.0.1

-----

* Issue 183 and Issue 185: Gnome keyring no longer relies
on environment variables, but instead relies on the GnomeKeyring
library to determine viability.

7.0

---

* Issue 99: Keyring now expects the config file to be located
in the XDG_CONFIG_HOME rather than XDG_DATA_HOME and will
fail to start if the config is found in the old location but not
the new. On systems where the two locations are distinct,
simply copy or symlink the config to remain compatible with
older versions or move the file to work only with 7.0 and later.

* Replaced Pull Request 182 with a conditional SessionBus
construction, based on subsequent discussion.

6.1.1

-----

* Pull Request 182: Prevent DBus from indicating as a viable
backend when no viable X DISPLAY variable is present.

6.1

---

* Pull Request 174: Add DBus backend for KWallet, preferred to Qt
backend. Theoretically, it should be auto-detected based on
available libraries and interchangeable with the Qt backend.

6.0

---

* Drop support for Python 2.6.

5.7.1

-----

* Updated project metadata to match Github hosting and
generally refreshed the metadata structure to match
practices with other projects.

5.7

---

* Issue 177: Resolve default keyring name on Gnome using the API.
* Issue 145: Add workaround for password exposure through
process status for most passwords containing simple
characters.

5.6

---

* Allow keyring to be invoked from command-line with
``python -m keyring``.

5.5.1

-----

* Issue 156: Fixed test failures in ``pyfs`` keyring related to
0.5 release.

5.5

---

* Pull Request 176: Use recommended mechanism for checking
GnomeKeyring version.

5.4

---

* Prefer setuptools_scm to hgtools.

5.3

---

* Prefer hgtools to setuptools_scm due to `setuptools_scm 21
&lt;https://bitbucket.org/pypa/setuptools_scm/issue/21&gt;`_.

5.2

---

* Prefer setuptools_scm to hgtools.

5.1

---

* Host project at Github (`repo &lt;https://github.com/jaraco/keyring&gt;`_).

5.0

---

* Version numbering is now derived from the code repository tags via `hgtools
&lt;https://pypi.python.org/pypi/hgtools&gt;`_.
* Build and install now requires setuptools.

4.1.1

-----

* The entry point group must look like a module name, so the group is now
&quot;keyring.backends&quot;.

4.1

---

* Added preliminary support for loading keyring backends through ``setuptools
entry points``, specifically &quot;keyring backends&quot;.

4.0.2

======

43: Tests are no longer included in the install.

4.0.1

======

Package refresh and minor cleanup.

4.0

---

* Removed ``keyring_path`` parameter from ``load_keyring``. See release notes
for 3.0.3 for more details.
* Issue 22: Removed support for loading the config from the current
directory. The config file must now be located in the platform-specific
config location.

4.0.0

======

41: Instead of PyCrypto or PyCryptodome, the encrypting backend
now relies on PyCryptodomex.

3.8

---

* Issue 22: Deprecated loading of config from current directory. Support for
loading the config in this manner will be removed in a future version.
* Issue 131: Keyring now will prefer `pywin32-ctypes
&lt;https://pypi.python.org/pypi/pywin32-ctypes&gt;`_ to pywin32 if available.

3.7

---

* Gnome keyring no longer relies on the GNOME_KEYRING_CONTROL environment
variable.
* Issue 140: Restore compatibility for older versions of PyWin32.

3.6

---

* `Pull Request 1 (github) &lt;https://github.com/jaraco/keyring/pull/1&gt;`_:
Add support for packages that wish to bundle keyring by using relative
imports throughout.

3.5.2

======

39: Replace use of deprecated ``base64.encode/decodestring``
with ``encode/decodebytes``.

3.5.1

======

38: Fixed test suite to work with pytest-based fixtures.

Refresh package metadata.

3.5

---

* Issue 49: Give the backend priorities a 1.5 multiplier bump when an
XDG_CURRENT_DESKTOP environment variable matches the keyring&#39;s target
environment.
* Issue 99: Clarified documentation on location of config and data files.
Prepared the code base to treat the two differently on Unix-based systems.
For now, the behavior is unchanged.

3.5.0

======

33: Rely on keyring.testing (keyring 20) for tests.

3.4

---

* Extracted FileBacked and Encrypted base classes.
* Add a pyinstaller hook to expose backend modules. Ref 124
* Pull request 41: Use errno module instead of hardcoding error codes.
* SecretService backend: correctly handle cases when user dismissed
the collection creation or unlock prompt.

3.4.0

======

In tests, pin keyring major version.

3.3

---

* Pull request 40: KWallet backend will now honor the ``KDE_FULL_SESSION``
environment variable as found on openSUSE.

3.3.0

======

Drop support for Python 3.5 and earlier.

3.2.1

-----

* SecretService backend: use a different function to check that the
backend is functional. The default collection may not exist, but
the collection will remain usable in that case.

Also, make the error message more verbose.

Resolves https://bugs.launchpad.net/bugs/1242412.

3.2

---

* Issue 120: Invoke KeyringBackend.priority during load_keyring to ensure
that any keyring loaded is actually viable (or raises an informative
exception).

* File keyring:

- Issue 123: fix removing items.
- Correctly escape item name when removing.
- Use with statement when working with files.

* Add a test for removing one item in group.

* Issue 81: Added experimental support for third-party backends. See
`keyring.core._load_library_extensions` for information on supplying
a third-party backend.

3.2.0

======

In tests, rely on pycryptodome instead of pycrypto for improved
compatibility.

In tests, rely on pytest instead of unittest.

3.1.1

=====

31: Trap AttributeError in Gnome backend as in some environments
it seems that will happen.

30: Fix issue where a backslash in the service name would cause
errors on Registry backend on Windows.

3.1

---

* All code now runs natively on both Python 2 and Python 3, no 2to3 conversion
is required.
* Testsuite: clean up, and make more use of unittest2 methods.

3.0.5

-----

* Issue 114: Fix logic in pyfs detection.

3.0.4

-----

* Issue 114: Fix detection of pyfs under Mercurial Demand Import.

3.0.3

-----

* Simplified the implementation of ``keyring.core.load_keyring``. It now uses
``__import__`` instead of loading modules explicitly. The ``keyring_path``
parameter to ``load_keyring`` is now deprecated. Callers should instead
ensure their module is available on ``sys.path`` before calling
``load_keyring``. Keyring still honors ``keyring-path``. This change fixes
Issue 113 in which the explicit module loading of keyring modules was
breaking package-relative imports.

3.0.2

-----

* Renamed ``keyring.util.platform`` to ``keyring.util.platform_``. As reported
in Issue 112 and `mercurial_keyring 31
&lt;https://bitbucket.org/Mekk/mercurial_keyring/issue/31&gt;`_ and in `Mercurial
itself &lt;http://bz.selenic.com/show_bug.cgi?id=4029&gt;`_, Mercurial&#39;s Demand
Import does not honor ``absolute_import`` directives, so it&#39;s not possible
to have a module with the same name as another top-level module. A patch is
in place to fix this issue upstream, but to support older Mercurial
versions, this patch will remain for some time.

3.0.1

-----

* Ensure that modules are actually imported even in Mercurial&#39;s Demand Import
environment.

3.0

---

* Removed support for Python 2.5.
* Removed names in ``keyring.backend`` moved in 1.1 and previously retained
for compatibility.

2.4

===

24: File based backends now reject non-string types for passwords.

2.3

===

21: Raise ValueError on blank username in plaintext
keyring, unsupported in the storage format.

2.2

===

17: Drop dependency on keyring.py27compat and use six
instead.

16: Minor tweaks to file-based backends.

2.1.1

-----

* Restored Python 2.5 compatibility (lost in 2.0).

2.1

---

*  Issue 10: Added a &#39;store&#39; attribute to the OS X Keyring, enabling custom
instances of the KeyringBackend to use another store, such as the
&#39;internet&#39; store. For example::

    keys = keyring.backends.OS_X.Keyring()
    keys.store = &#39;internet&#39;
    keys.set_password(system, user, password)
    keys.get_password(system, user)

The default for all instances can be set in the class::

    keyring.backends.OS_X.Keyring.store = &#39;internet&#39;

*  GnomeKeyring: fix availability checks, and make sure the warning
message from pygobject is not printed.

*  Fixes to GnomeKeyring and SecretService tests.

2.0.3

-----

*  Issue 112: Backend viability/priority checks now are more aggressive about
module presence checking, requesting ``__name__`` from imported modules to
force the demand importer to actually attempt the import.

2.0.2

-----

*  Issue 111: Windows backend isn&#39;t viable on non-Windows platforms.

2.0.1

-----

*  Issue 110: Fix issues with ``Windows.RegistryKeyring``.

2.0

---

*  Issue 80: Prioritized backend support. The primary interface for Keyring
backend classes has been refactored to now emit a &#39;priority&#39; based on the
current environment (operating system, libraries available, etc). These
priorities provide an indication of the applicability of that backend for
the current environment. Users are still welcome to specify a particular
backend in configuration, but the default behavior should now be to select
the most appropriate backend by default.

1.6.1

-----

* Only include pytest-runner in &#39;setup requirements&#39; when ptr invocation is
indicated in the command-line (Issue 105).

1.6

---

*  GNOME Keyring backend:

- Use the same attributes (``username`` / ``service``) as the SecretService
  backend uses, allow searching for old ones for compatibility.
- Also set ``application`` attribute.
- Correctly handle all types of errors, not only ``CANCELLED`` and ``NO_MATCH``.
- Avoid printing warnings to stderr when GnomeKeyring is not available.

* Secret Service backend:

- Use a better label for passwords, the same as GNOME Keyring backend uses.

1.5

---

*  SecretService: allow deleting items created using previous python-keyring
versions.

Before the switch to secretstorage, python-keyring didn&#39;t set &quot;application&quot;
attribute. Now in addition to supporting searching for items without that
attribute, python-keyring also supports deleting them.

*  Use ``secretstorage.get_default_collection`` if it&#39;s available.

On secretstorage 1.0 or later, python-keyring now tries to create the
default collection if it doesn&#39;t exist, instead of just raising the error.

*  Improvements for tests, including fix for Issue 102.

1.4

---

* Switch GnomeKeyring backend to use native libgnome-keyring via
GObject Introspection, not the obsolete python-gnomekeyring module.

1.3

---

* Use the `SecretStorage library &lt;https://pypi.python.org/pypi/SecretStorage&gt;`_
to implement the Secret Service backend (instead of using dbus directly).
Now the keyring supports prompting for and deleting passwords. Fixes 69,
77, and 93.
* Catch `gnomekeyring.IOError` per the issue `reported in Nova client
&lt;https://bugs.launchpad.net/python-novaclient/+bug/1116302&gt;`_.
* Issue 92 Added support for delete_password on Mac OS X Keychain.

1.2.3

-----

* Fix for Encrypted File backend on Python 3.
* Issue 97 Improved support for PyPy.

1.2.2

-----

* Fixed handling situations when user cancels kwallet dialog or denies access
for the app.

1.2.1

-----

* Fix for kwallet delete.
* Fix for OS X backend on Python 3.
* Issue 84: Fix for Google backend on Python 3 (use of raw_input not caught
by 2to3).

1.2

---

* Implemented delete_password on most keyrings. Keyring 2.0 will require
delete_password to implement a Keyring. Fixes 79.

1.1.2

-----

* Issue 78: pyfilesystem backend now works on Windows.

1.1.1

-----

* Fixed MANIFEST.in so .rst files are included.

1.1

---

This is the last build that will support installation in a pure-distutils
mode. Subsequent releases will require setuptools/distribute to install.
Python 3 installs have always had this requirement (for 2to3 install support),
but starting with the next minor release (1.2+), setuptools will be required.

Additionally, this release has made some substantial refactoring in an
attempt to modularize the backends. An attempt has been made to maintain 100%
backward-compatibility, although if your library does anything fancy with
module structure or clasess, some tweaking may be necessary. The
backward-compatible references will be removed in 2.0, so the 1.1+ releases
represent a transitional implementation which should work with both legacy
and updated module structure.

* Added a console-script &#39;keyring&#39; invoking the command-line interface.
* Deprecated _ExtensionKeyring.
* Moved PasswordSetError and InitError to an `errors` module (references kept
for backward-compatibility).
* Moved concrete backend implementations into their own modules (references
kept for backward compatibility):

- OSXKeychain -&gt; backends.OS_X.Keyring
- GnomeKeyring -&gt; backends.Gnome.Keyring
- SecretServiceKeyring -&gt; backends.SecretService.Keyring
- KDEKWallet -&gt; backends.kwallet.Keyring
- BasicFileKeyring -&gt; backends.file.BaseKeyring
- CryptedFileKeyring -&gt; backends.file.EncryptedKeyring
- UncryptedFileKeyring -&gt; backends.file.PlaintextKeyring
- Win32CryptoKeyring -&gt; backends.Windows.EncryptedKeyring
- WinVaultKeyring -&gt; backends.Windows.WinVaultKeyring
- Win32CryptoRegistry -&gt; backends.Windows.RegistryKeyring
- select_windows_backend -&gt; backends.Windows.select_windows_backend
- GoogleDocsKeyring -&gt; backends.Google.DocsKeyring
- Credential -&gt; keyring.credentials.Credential
- BaseCredential -&gt; keyring.credentials.SimpleCredential
- EnvironCredential -&gt; keyring.credentials.EnvironCredential
- GoogleEnvironCredential -&gt; backends.Google.EnvironCredential
- BaseKeyczarCrypter -&gt; backends.keyczar.BaseCrypter
- KeyczarCrypter -&gt; backends.keyczar.Crypter
- EnvironKeyczarCrypter -&gt; backends.keyczar.EnvironCrypter
- EnvironGoogleDocsKeyring -&gt; backends.Google.KeyczarDocsKeyring
- BasicPyfilesystemKeyring -&gt; backends.pyfs.BasicKeyring
- UnencryptedPyfilesystemKeyring -&gt; backends.pyfs.PlaintextKeyring
- EncryptedPyfilesystemKeyring -&gt; backends.pyfs.EncryptedKeyring
- EnvironEncryptedPyfilesystemKeyring -&gt; backends.pyfs.KeyczarKeyring
- MultipartKeyringWrapper -&gt; backends.multi.MultipartKeyringWrapper

* Officially require Python 2.5 or greater (although unofficially, this
requirement has been in place since 0.10).

1.0

---

This backward-incompatible release attempts to remove some cruft from the
codebase that&#39;s accumulated over the versions.

* Removed legacy file relocation support. `keyring` no longer supports loading
configuration or file-based backends from ~. If upgrading from 0.8 or later,
the files should already have been migrated to their new proper locations.
If upgrading from 0.7.x or earlier, the files will have to be migrated
manually.
* Removed CryptedFileKeyring migration support. To maintain an existing
CryptedFileKeyring, one must first upgrade to 0.9.2 or later and access the
keyring before upgrading to 1.0 to retain the existing keyring.
* File System backends now create files without group and world permissions.
Fixes 67.

0.10.1

------

* Merged 0.9.3 to include fix for 75.

0.10

----

* Add support for using `Keyczar &lt;http://www.keyczar.org/&gt;`_ to encrypt
keyrings. Keyczar is &quot;an open source cryptographic toolkit designed to make
it easier and safer for developers to use cryptography in their
applications.&quot;
* Added support for storing keyrings on Google Docs or any other filesystem
supported by pyfilesystem.
* Fixed issue in Gnome Keyring when unicode is passed as the service name,
username, or password.
* Tweaked SecretService code to pass unicode to DBus, as unicode is the
preferred format.
* Issue 71 - Fixed logic in CryptedFileKeyring.
* Unencrypted keyring file will be saved with user read/write (and not group
or world read/write).

0.9.3

-----

* Ensure migration is run when get_password is called. Fixes 75. Thanks to
Marc Deslauriers for reporting the bug and supplying the patch.

0.9.2

-----

* Keyring 0.9.1 introduced a whole different storage format for the
CryptedFileKeyring, but this introduced some potential compatibility issues.
This release incorporates the security updates but reverts to the INI file
format for storage, only encrypting the passwords and leaving the service
and usernames in plaintext. Subsequent releases may incorporate a new
keyring to implement a whole-file encrypted version. Fixes 64.
* The CryptedFileKeyring now requires simplejson for Python 2.5 clients.

0.9.1

-----

* Fix for issue where SecretServiceBackend.set_password would raise a
UnicodeError on Python 3 or when a unicode password was provided on Python
2.
* CryptedFileKeyring now uses PBKDF2 to derive the key from the user&#39;s
password and a random hash. The IV is chosen randomly as well. All the
stored passwords are encrypted at once. Any keyrings using the old format
will be automatically converted to the new format (but will no longer be
compatible with 0.9 and earlier). The user&#39;s password is no longer limited
to 32 characters. PyCrypto 2.5 or greater is now required for this keyring.

0.9

---

* Add support for GTK 3 and secret service D-Bus. Fixes 52.
* Issue 60 - Use correct method for decoding.

0.8.1

-----

* Fix regression in keyring lib on Windows XP where the LOCALAPPDATA
environment variable is not present.

0.8

---

* Mac OS X keyring backend now uses subprocess calls to the `security`
command instead of calling the API, which with the latest updates, no
longer allows Python to invoke from a virtualenv. Fixes issue 13.
* When using file-based storage, the keyring files are no longer stored
in the user&#39;s home directory, but are instead stored in platform-friendly
locations (`%localappdata%\Python Keyring` on Windows and according to
the freedesktop.org Base Dir Specification
(`$XDG_DATA_HOME/python_keyring` or `$HOME/.local/share/python_keyring`)
on other operating systems). This fixes 21.

*Backward Compatibility Notice*

Due to the new storage location for file-based keyrings, keyring 0.8
supports backward compatibility by automatically moving the password
files to the updated location. In general, users can upgrade to 0.8 and
continue to operate normally. Any applications that customize the storage
location or make assumptions about the storage location will need to take
this change into consideration. Additionally, after upgrading to 0.8,
it is not possible to downgrade to 0.7 without manually moving
configuration files. In 1.0, the backward compatibility
will be removed.

0.7.1

-----

* Removed non-ASCII characters from README and CHANGES docs (required by
distutils if we&#39;re to include them in the long_description). Fixes 55.

0.7

---

* Python 3 is now supported. All tests now pass under Python 3.2 on
Windows and Linux (although Linux backend support is limited). Fixes 28.
* Extension modules on Mac and Windows replaced by pure-Python ctypes
implementations. Thanks to Jerome Laheurte.
* WinVaultKeyring now supports multiple passwords for the same service. Fixes
47.
* Most of the tests don&#39;t require user interaction anymore.
* Entries stored in Gnome Keyring appears now with a meaningful name if you try
to browser your keyring (for ex. with Seahorse)
* Tests from Gnome Keyring no longer pollute the user own keyring.
* `keyring.util.escape` now accepts only unicode strings. Don&#39;t try to encode
strings passed to it.

0.6.2

-----

* fix compiling on OSX with XCode 4.0

0.6.1

-----

* Gnome keyring should not be used if there is no DISPLAY or if the dbus is
not around (https://bugs.launchpad.net/launchpadlib/+bug/752282).

* Added `keyring.http` for facilitating HTTP Auth using keyring.

* Add a utility to access the keyring from the command line.

0.5.1

-----

* Remove a spurious KDE debug message when using KWallet

* Fix a bug that caused an exception if the user canceled the KWallet dialog
(https://bitbucket.org/kang/python-keyring-lib/issue/37/user-canceling-of-kde-wallet-dialogs).

0.5

---

* Now using the existing Gnome and KDE python libs instead of custom C++
code.

* Using the getpass module instead of custom code

0.4

---

* Fixed the setup script (some subdirs were not included in the release.)

0.3

---

* Fixed keyring.core when the user doesn&#39;t have a cfg, or is not
properly configured.

* Fixed escaping issues for usernames with non-ascii characters

0.2

---

* Add support for Python 2.4+
http://bitbucket.org/kang/python-keyring-lib/issue/2

* Fix the bug in KDE Kwallet extension compiling
http://bitbucket.org/kang/python-keyring-lib/issue/3

</details>

<details> <summary>Links</summary>

  • PyPI: https://pypi.org/project/keyring
  • Changelog: https://pyup.io/changelogs/keyring/
  • Repo: https://github.com/jaraco/keyring </details>
+1 -1

0 comment

1 changed file

pr created time in a month

PR opened alisaifee/jira-cli

Pin keyring to latest version 21.6.0

This PR pins keyring to the latest release 21.6.0.

<details> <summary>Changelog</summary>

21.6.0

-------

* 403: Keyring no longer eagerly initializes the backend
on import, but instead defers the backend initialization
until a keyring is accessed. Any callers reliant on this
early intialization behavior may need to call
``keyring.core.init_backend()`` to explicitly initialize
the detected backend.

21.5.0

-------

* 474: SecretService and KWallet backends are now
disabled if the relevant names are not available on
D-Bus. Keyring should now be much more responsive
in these environments.

* 463: Fixed regression in KWallet ``get_credential``
where a simple string was returned instead of a
SimpleCredential.

21.4.0

-------

* 431: KWallet backend now supports ``get_credential``.

21.3.1

-------

* 445: Suppress errors when ``sys.argv`` is not
a list of at least one element.

21.3.0

-------

* 440: Keyring now honors XDG_CONFIG_HOME as
``~/.config``.
* 452: SecretService ``get_credential`` now returns
``None`` for unmatched query.

21.2.1

-------

* 426: Restored lenience on startup when entry point
metadata is missing.
* 423: Avoid RecursionError when initializing backends
when a limit is supplied.

21.2.0

-------

* 372: Chainer now deterministically resolves at a lower
priority than the Fail keyring (when there are no backends
to chain).
* 372: Fail keyring now raises a ``NoKeyringError`` for
easier selectability.
* 405: Keyring now logs at DEBUG rather than INFO during
backend startup.

21.1.1

-------

* Refreshed package metadata.

21.1.0

-------

* 380: In SecretService backend, close connections after
using them.

21.0.0

-------

* Require Python 3.6 or later.

20.0.1

-------

* 417: Fix TypeError when backend fails to initialize.

20.0.0

-------

* Extracted ``keyring.testing`` package to contain supporting
functionality for plugin backends. ``keyring.tests`` has been
removed from the package.

19.3.0

-------

* Switch to `importlib.metadata
&lt;https://docs.python.org/3/library/importlib.metadata.html&gt;`_
for loading entry points. Removes one dependency on Python 3.8.

* Added new ``KeyringBackend.set_properties_from_env``.

* 382: Add support for alternate persistence scopes for Windows
backend. Set ``.persist`` to &quot;local machine&quot; or &quot;session&quot;
to enable the alternate scopes or &quot;enterprise&quot; to use the
default scope.

* 404: Improve import times when a backend is specifically
configured by lazily calling ``get_all_keyring``.

19.2.0

------

* Add support for get_credential() with the SecretService backend.

19.1.0

------

* 369: macOS Keyring now honors a ``KEYCHAIN_PATH``
environment variable. If set, Keyring will use that
keychain instead of the default.

19.0.2

------

* Refresh package skeleton.
* Adopt `black &lt;https://pypi.org/project/black&gt;`_ code style.

19.0.1

------

* Merge with 18.0.1.

19.0.0

------

* 383: Drop support for EOL Python 2.7 - 3.4.

18.0.1

------

* 386: ExceptionInfo no longer retains a reference to the
traceback.

18.0.0

------

* 375: On macOS, the backend now raises a ``KeyringLocked``
when access to the keyring is denied (on get or set) instead
of ``PasswordSetError`` or ``KeyringError``. Any API users
may need to account for this change, probably by catching
the parent ``KeyringError``.
Additionally, the error message from the underying error is
now included in any errors that occur.

17.1.1

------

* 368: Update packaging technique to avoid 0.0.0 releases.

17.1.0

------

* 366: When calling ``keyring.core.init_backend``, if any
limit function is supplied, it is saved and later honored by
the ``ChainerBackend`` as well.

17.0.0

------

* 345: Remove application attribute from stored passwords
using SecretService, addressing regression introduced in
10.5.0 (292). Impacted Linux keyrings will once again
prompt for a password for &quot;Python program&quot;.

16.1.1

------

* 362: Fix error on import due to circular imports
on Python 3.4.

16.1.0

------

* Refactor ChainerBackend, introduced in 16.0 to function
as any other backend, activating when relevant.

16.0.2

------

* 319: In Windows backend, trap all exceptions when
attempting to import pywin32.

16.0.1

------

* 357: Once again allow all positive, non-zero priority
keyrings to participate.

16.0.0

------

* 323: Fix race condition in delete_password on Windows.
* 352: All suitable backends (priority 1 and greater) are
allowed to participate.

15.2.0

------

* 350: Added new API for ``get_credentials``, for backends
that can resolve both a username and password for a service.

15.1.0

------

* 340: Add the Null keyring, disabled by default.
* 340: Added ``--disable`` option to command-line
interface.
* 340: Now honor a ``PYTHON_KEYRING_BACKEND``
environment variable to select a backend. Environments
may set to ``keyring.backends.null.Keyring`` to disable
keyring.

15.0.0

------

Removed deprecated ``keyring.util.escape`` module.

Fixed warning about using deprecated Abstract Base Classes
from collections module.

14.0.0

------

Removed ``getpassbackend`` module and alias in
``keyring.get_pass_get_password``. Instead, just use::

 keyring.get_password(getpass.getuser(), &#39;Python&#39;)

13.2.1

------

* 335: Fix regression in command line client.

13.2.0

------

* Keyring command-line interface now reads the password
directly from stdin if stdin is connected to a pipe.

13.1.0

------

* 329: Improve output of ``keyring --list-backends``.

13.0.0

------

* 327: In kwallet backend, if the collection or item is
locked, a ``KeyringLocked`` exception is raised. Clients
expecting a None response from ``get_password`` under
this condition will need to catch this exception.
Additionally, an ``InitError`` is now raised if the
connection cannot be established to the DBus.

* 298: In kwallet backend, when checking an existing
handle, verify that it is still valid or create a new
connection.

12.2.1

------

* Fixed issue in SecretService. Ref 226.

12.2.0

------

* 322: Fix AttributeError when ``escape.__builtins__``
is a dict.

* Deprecated ``keyring.util.escape`` module. If you use
this module or encounter the warning (on the latest
release of your packages), please `file a ticket
&lt;https://github.com/jaraco/keyring/issues/new&gt;`_.

12.1.0

------

* Unpin SecretStorage on Python 3.5+. Requires that
Setuptools 17.1 be used. Note that the special
handling will be unnecessary once Pip 9 can be
assumed (as it will exclude SecretStorage 3 in
non-viable environments).

12.0.2

------

* Pin SecretStorage to 2.x.

12.0.1

------

* 314: No changes except to rebuild.

12.0.0

------

* 310: Keyring now loads all backends through entry
points.

For most users, this release will be fully compatible. Some
users may experience compatibility issues if entrypoints is
not installed (as declared) or the metadata on which entrypoints
relies is unavailable. For that reason, the package is released
with a major version bump.

11.1.0

------

* 312: Use ``entrypoints`` instead of pkg_resources to
avoid performance hit loading pkg_resources. Adds
a dependency on ``entrypoints``.

11.0.0

------

* 294: No longer expose ``keyring.__version__`` (added
in 8.1) to avoid performance hit loading pkg_resources.

10.6.0

------

* 299: Keyring exceptions are now derived from a base
``keyring.errors.KeyringError``.

10.5.1

------

* 296: Prevent AttributeError on import when Debian has
created broken dbus installs.

10.5.0

------

* 287: Added ``--list-backends`` option to
command-line interface.

* Removed ``logger`` from ``keyring``. See 291 for related
request.

* 292: Set the appid for SecretService &amp; KWallet to
something meaningful.

10.4.0

------

* 279: In Kwallet, pass mainloop to SessionBus.

* 278: Unpin pywin32-ctypes, but blacklist known
incompatible versions.

10.3.3

------

* 278: Pin to pywin32-ctypes 0.0.1 to avoid apparent
breakage introduced in 0.1.0.

10.3.2

------

* 267: More leniently unescape lowercased characters as
they get re-cased by ConfigParser.

10.3.1

------

* 266: Use private compatibity model rather than six to
avoid the dependency.

10.3

----

* 264: Implement devpi hook for supplying a password when
logging in with `devpi &lt;https://pypi.org/project/devpi&gt;`_
client.

* 260: For macOS, added initial API support for internet
passwords.

10.2

----

* 259: Allow to set a custom application attribute for
SecretService backend.

10.1

----

* 253: Backends now expose a &#39;.name&#39; attribute suitable
for identifying each backend to users.

10.0.2

-----

* 247: Restored console script.

10.0.1

------

* Update readme to reflect test recommendations.

10.0

----

* Drop support for Python 3.2.
* Test suite now uses tox instead of pytest-runner.
Test requirements are now defined in tests/requirements.txt.

9.3.1

-----

* Link to the new Gitter chat room is now in the
readme.
* Issue 235: ``kwallet`` backend now returns
string objects instead of ``dbus.String`` objects,
for less surprising reprs.
* Minor doc fixes.

9.3

---

* Issue 161: In SecretService backend, unlock
individual entries.

9.2.1

-----

* Issue 230: Don&#39;t rely on dbus-python and instead
defer to SecretStorage to describe the installation
requirements.

9.2

---

* Issue 231 via 233: On Linux, ``secretstorage``
is now a declared dependency, allowing recommended
keyring to work simply after installation.

9.1

---

* Issue 83 via 229: ``kwallet`` backend now stores
the service name as a folder name in the backend rather
than storing all passwords in a Python folder.

9.0

---

* Issue 217: Once again, the OS X backend uses the
Framework API for invoking the Keychain service.
As a result, applications utilizing this API will be
authorized per application, rather than relying on the
authorization of the &#39;security&#39; application. Consequently,
users will be prompted to authorize the system Python
executable and also new Python executables, such as
those created by virtualenv.
260: No longer does the keyring honor the ``store``
attribute on the keyring. Only application passwords
are accessible.

8.7

---

* Changelog now links to issues and provides dates of
releases.

8.6

---

* Issue 217: Add warning in OS Keyring when &#39;store&#39;
is set to &#39;internet&#39; to determine if this feature is
used in the wild.

8.5.1

-----

* Pull Request 216: Kwallet backend now has lower
priority than the preferred SecretService backend,
now that the desktop check is no longer in place.

8.5

---

* Issue 168: Now prefer KF5 Kwallet to KF4. Users relying
on KF4 must use prior releases.

8.4

---

* Pull Request 209: Better error message when no backend is
available (indicating keyrings.alt as a quick workaround).
* Pull Request 208: Fix pywin32-ctypes package name in
requirements.

8.3

---

* Issue 207: Library now requires win32ctypes on Windows
systems, which will be installed automatically by
Setuptools 0.7 or Pip 6 (or later).
* Actually removed QtKwallet, which was meant to be dropped in
8.0 but somehow remained.

8.2

---

* Update readme to include how-to use with Linux
non-graphical environments.

8.1

---

* Issue 197: Add ``__version__`` attribute to keyring module.

8.0

---

* Issue 117: Removed all but the preferred keyring backends
for each of the major desktop platforms:

 - keyring.backends.kwallet.DBusKeyring
 - keyring.backends.OS_X.Keyring
 - keyring.backends.SecretService.Keyring
 - keyring.backends.Windows.WinVaultKeyring

All other keyrings
have been moved to a new package, `keyrings.alt
&lt;https://pypi.python.org/pypi/keyrings.alt&gt;`_ and
backward-compatibility aliases removed.
To retain
availability of these less preferred keyrings, include
that package in your installation (install both keyring
and keyrings.alt).

As these keyrings have moved, any keyrings indicated
explicitly in configuration will need to be updated to
replace &quot;keyring.backends.&quot; with &quot;keyrings.alt.&quot;. For
example, &quot;keyring.backends.file.PlaintextKeyring&quot;
becomes &quot;keyrings.alt.file.PlaintextKeyring&quot;.

7.3.1

-----

* Issue 194: Redirect away from docs until they have something
more than the changelog. Users seeking the changelog will
want to follow the `direct link
&lt;https://pythonhosted.org/keyring/history.html&gt;`_.

7.3

---

* Issue 117: Added support for filtering which
backends are acceptable. To limit to only loading recommended
keyrings (those with priority &gt;= 1), call::

 keyring.core.init_backend(limit=keyring.core.recommended)

7.2

---

* Pull Request 190: OS X backend now exposes a ``keychain``
attribute, which if set will be used by ``get_password`` when
retrieving passwords. Useful in environments such as when
running under cron where the default keychain is not the same
as the default keychain in a login session. Example usage::

 keyring.get_keyring().keychain = &#39;/path/to/login.keychain&#39;
 pw = keyring.get_password(...)

7.1

---

* Issue 186: Removed preference for keyrings based on
``XDG_CURRENT_DESKTOP`` as these values are to varied
to be a reliable indicator of which keyring implementation
might be preferable.

7.0.2

-----

* Issue 187: Restore ``Keyring`` name in ``kwallet`` backend.
Users of keyring 6.1 or later should prefer an explicit reference
to DBusKeyring or QtKeyring instead.

7.0.1

-----

* Issue 183 and Issue 185: Gnome keyring no longer relies
on environment variables, but instead relies on the GnomeKeyring
library to determine viability.

7.0

---

* Issue 99: Keyring now expects the config file to be located
in the XDG_CONFIG_HOME rather than XDG_DATA_HOME and will
fail to start if the config is found in the old location but not
the new. On systems where the two locations are distinct,
simply copy or symlink the config to remain compatible with
older versions or move the file to work only with 7.0 and later.

* Replaced Pull Request 182 with a conditional SessionBus
construction, based on subsequent discussion.

6.1.1

-----

* Pull Request 182: Prevent DBus from indicating as a viable
backend when no viable X DISPLAY variable is present.

6.1

---

* Pull Request 174: Add DBus backend for KWallet, preferred to Qt
backend. Theoretically, it should be auto-detected based on
available libraries and interchangeable with the Qt backend.

6.0

---

* Drop support for Python 2.6.

5.7.1

-----

* Updated project metadata to match Github hosting and
generally refreshed the metadata structure to match
practices with other projects.

5.7

---

* Issue 177: Resolve default keyring name on Gnome using the API.
* Issue 145: Add workaround for password exposure through
process status for most passwords containing simple
characters.

5.6

---

* Allow keyring to be invoked from command-line with
``python -m keyring``.

5.5.1

-----

* Issue 156: Fixed test failures in ``pyfs`` keyring related to
0.5 release.

5.5

---

* Pull Request 176: Use recommended mechanism for checking
GnomeKeyring version.

5.4

---

* Prefer setuptools_scm to hgtools.

5.3

---

* Prefer hgtools to setuptools_scm due to `setuptools_scm 21
&lt;https://bitbucket.org/pypa/setuptools_scm/issue/21&gt;`_.

5.2

---

* Prefer setuptools_scm to hgtools.

5.1

---

* Host project at Github (`repo &lt;https://github.com/jaraco/keyring&gt;`_).

5.0

---

* Version numbering is now derived from the code repository tags via `hgtools
&lt;https://pypi.python.org/pypi/hgtools&gt;`_.
* Build and install now requires setuptools.

4.1.1

-----

* The entry point group must look like a module name, so the group is now
&quot;keyring.backends&quot;.

4.1

---

* Added preliminary support for loading keyring backends through ``setuptools
entry points``, specifically &quot;keyring backends&quot;.

4.0.2

======

43: Tests are no longer included in the install.

4.0.1

======

Package refresh and minor cleanup.

4.0

---

* Removed ``keyring_path`` parameter from ``load_keyring``. See release notes
for 3.0.3 for more details.
* Issue 22: Removed support for loading the config from the current
directory. The config file must now be located in the platform-specific
config location.

4.0.0

======

41: Instead of PyCrypto or PyCryptodome, the encrypting backend
now relies on PyCryptodomex.

3.8

---

* Issue 22: Deprecated loading of config from current directory. Support for
loading the config in this manner will be removed in a future version.
* Issue 131: Keyring now will prefer `pywin32-ctypes
&lt;https://pypi.python.org/pypi/pywin32-ctypes&gt;`_ to pywin32 if available.

3.7

---

* Gnome keyring no longer relies on the GNOME_KEYRING_CONTROL environment
variable.
* Issue 140: Restore compatibility for older versions of PyWin32.

3.6

---

* `Pull Request 1 (github) &lt;https://github.com/jaraco/keyring/pull/1&gt;`_:
Add support for packages that wish to bundle keyring by using relative
imports throughout.

3.5.2

======

39: Replace use of deprecated ``base64.encode/decodestring``
with ``encode/decodebytes``.

3.5.1

======

38: Fixed test suite to work with pytest-based fixtures.

Refresh package metadata.

3.5

---

* Issue 49: Give the backend priorities a 1.5 multiplier bump when an
XDG_CURRENT_DESKTOP environment variable matches the keyring&#39;s target
environment.
* Issue 99: Clarified documentation on location of config and data files.
Prepared the code base to treat the two differently on Unix-based systems.
For now, the behavior is unchanged.

3.5.0

======

33: Rely on keyring.testing (keyring 20) for tests.

3.4

---

* Extracted FileBacked and Encrypted base classes.
* Add a pyinstaller hook to expose backend modules. Ref 124
* Pull request 41: Use errno module instead of hardcoding error codes.
* SecretService backend: correctly handle cases when user dismissed
the collection creation or unlock prompt.

3.4.0

======

In tests, pin keyring major version.

3.3

---

* Pull request 40: KWallet backend will now honor the ``KDE_FULL_SESSION``
environment variable as found on openSUSE.

3.3.0

======

Drop support for Python 3.5 and earlier.

3.2.1

-----

* SecretService backend: use a different function to check that the
backend is functional. The default collection may not exist, but
the collection will remain usable in that case.

Also, make the error message more verbose.

Resolves https://bugs.launchpad.net/bugs/1242412.

3.2

---

* Issue 120: Invoke KeyringBackend.priority during load_keyring to ensure
that any keyring loaded is actually viable (or raises an informative
exception).

* File keyring:

- Issue 123: fix removing items.
- Correctly escape item name when removing.
- Use with statement when working with files.

* Add a test for removing one item in group.

* Issue 81: Added experimental support for third-party backends. See
`keyring.core._load_library_extensions` for information on supplying
a third-party backend.

3.2.0

======

In tests, rely on pycryptodome instead of pycrypto for improved
compatibility.

In tests, rely on pytest instead of unittest.

3.1.1

=====

31: Trap AttributeError in Gnome backend as in some environments
it seems that will happen.

30: Fix issue where a backslash in the service name would cause
errors on Registry backend on Windows.

3.1

---

* All code now runs natively on both Python 2 and Python 3, no 2to3 conversion
is required.
* Testsuite: clean up, and make more use of unittest2 methods.

3.0.5

-----

* Issue 114: Fix logic in pyfs detection.

3.0.4

-----

* Issue 114: Fix detection of pyfs under Mercurial Demand Import.

3.0.3

-----

* Simplified the implementation of ``keyring.core.load_keyring``. It now uses
``__import__`` instead of loading modules explicitly. The ``keyring_path``
parameter to ``load_keyring`` is now deprecated. Callers should instead
ensure their module is available on ``sys.path`` before calling
``load_keyring``. Keyring still honors ``keyring-path``. This change fixes
Issue 113 in which the explicit module loading of keyring modules was
breaking package-relative imports.

3.0.2

-----

* Renamed ``keyring.util.platform`` to ``keyring.util.platform_``. As reported
in Issue 112 and `mercurial_keyring 31
&lt;https://bitbucket.org/Mekk/mercurial_keyring/issue/31&gt;`_ and in `Mercurial
itself &lt;http://bz.selenic.com/show_bug.cgi?id=4029&gt;`_, Mercurial&#39;s Demand
Import does not honor ``absolute_import`` directives, so it&#39;s not possible
to have a module with the same name as another top-level module. A patch is
in place to fix this issue upstream, but to support older Mercurial
versions, this patch will remain for some time.

3.0.1

-----

* Ensure that modules are actually imported even in Mercurial&#39;s Demand Import
environment.

3.0

---

* Removed support for Python 2.5.
* Removed names in ``keyring.backend`` moved in 1.1 and previously retained
for compatibility.

2.4

===

24: File based backends now reject non-string types for passwords.

2.3

===

21: Raise ValueError on blank username in plaintext
keyring, unsupported in the storage format.

2.2

===

17: Drop dependency on keyring.py27compat and use six
instead.

16: Minor tweaks to file-based backends.

2.1.1

-----

* Restored Python 2.5 compatibility (lost in 2.0).

2.1

---

*  Issue 10: Added a &#39;store&#39; attribute to the OS X Keyring, enabling custom
instances of the KeyringBackend to use another store, such as the
&#39;internet&#39; store. For example::

    keys = keyring.backends.OS_X.Keyring()
    keys.store = &#39;internet&#39;
    keys.set_password(system, user, password)
    keys.get_password(system, user)

The default for all instances can be set in the class::

    keyring.backends.OS_X.Keyring.store = &#39;internet&#39;

*  GnomeKeyring: fix availability checks, and make sure the warning
message from pygobject is not printed.

*  Fixes to GnomeKeyring and SecretService tests.

2.0.3

-----

*  Issue 112: Backend viability/priority checks now are more aggressive about
module presence checking, requesting ``__name__`` from imported modules to
force the demand importer to actually attempt the import.

2.0.2

-----

*  Issue 111: Windows backend isn&#39;t viable on non-Windows platforms.

2.0.1

-----

*  Issue 110: Fix issues with ``Windows.RegistryKeyring``.

2.0

---

*  Issue 80: Prioritized backend support. The primary interface for Keyring
backend classes has been refactored to now emit a &#39;priority&#39; based on the
current environment (operating system, libraries available, etc). These
priorities provide an indication of the applicability of that backend for
the current environment. Users are still welcome to specify a particular
backend in configuration, but the default behavior should now be to select
the most appropriate backend by default.

1.6.1

-----

* Only include pytest-runner in &#39;setup requirements&#39; when ptr invocation is
indicated in the command-line (Issue 105).

1.6

---

*  GNOME Keyring backend:

- Use the same attributes (``username`` / ``service``) as the SecretService
  backend uses, allow searching for old ones for compatibility.
- Also set ``application`` attribute.
- Correctly handle all types of errors, not only ``CANCELLED`` and ``NO_MATCH``.
- Avoid printing warnings to stderr when GnomeKeyring is not available.

* Secret Service backend:

- Use a better label for passwords, the same as GNOME Keyring backend uses.

1.5

---

*  SecretService: allow deleting items created using previous python-keyring
versions.

Before the switch to secretstorage, python-keyring didn&#39;t set &quot;application&quot;
attribute. Now in addition to supporting searching for items without that
attribute, python-keyring also supports deleting them.

*  Use ``secretstorage.get_default_collection`` if it&#39;s available.

On secretstorage 1.0 or later, python-keyring now tries to create the
default collection if it doesn&#39;t exist, instead of just raising the error.

*  Improvements for tests, including fix for Issue 102.

1.4

---

* Switch GnomeKeyring backend to use native libgnome-keyring via
GObject Introspection, not the obsolete python-gnomekeyring module.

1.3

---

* Use the `SecretStorage library &lt;https://pypi.python.org/pypi/SecretStorage&gt;`_
to implement the Secret Service backend (instead of using dbus directly).
Now the keyring supports prompting for and deleting passwords. Fixes 69,
77, and 93.
* Catch `gnomekeyring.IOError` per the issue `reported in Nova client
&lt;https://bugs.launchpad.net/python-novaclient/+bug/1116302&gt;`_.
* Issue 92 Added support for delete_password on Mac OS X Keychain.

1.2.3

-----

* Fix for Encrypted File backend on Python 3.
* Issue 97 Improved support for PyPy.

1.2.2

-----

* Fixed handling situations when user cancels kwallet dialog or denies access
for the app.

1.2.1

-----

* Fix for kwallet delete.
* Fix for OS X backend on Python 3.
* Issue 84: Fix for Google backend on Python 3 (use of raw_input not caught
by 2to3).

1.2

---

* Implemented delete_password on most keyrings. Keyring 2.0 will require
delete_password to implement a Keyring. Fixes 79.

1.1.2

-----

* Issue 78: pyfilesystem backend now works on Windows.

1.1.1

-----

* Fixed MANIFEST.in so .rst files are included.

1.1

---

This is the last build that will support installation in a pure-distutils
mode. Subsequent releases will require setuptools/distribute to install.
Python 3 installs have always had this requirement (for 2to3 install support),
but starting with the next minor release (1.2+), setuptools will be required.

Additionally, this release has made some substantial refactoring in an
attempt to modularize the backends. An attempt has been made to maintain 100%
backward-compatibility, although if your library does anything fancy with
module structure or clasess, some tweaking may be necessary. The
backward-compatible references will be removed in 2.0, so the 1.1+ releases
represent a transitional implementation which should work with both legacy
and updated module structure.

* Added a console-script &#39;keyring&#39; invoking the command-line interface.
* Deprecated _ExtensionKeyring.
* Moved PasswordSetError and InitError to an `errors` module (references kept
for backward-compatibility).
* Moved concrete backend implementations into their own modules (references
kept for backward compatibility):

- OSXKeychain -&gt; backends.OS_X.Keyring
- GnomeKeyring -&gt; backends.Gnome.Keyring
- SecretServiceKeyring -&gt; backends.SecretService.Keyring
- KDEKWallet -&gt; backends.kwallet.Keyring
- BasicFileKeyring -&gt; backends.file.BaseKeyring
- CryptedFileKeyring -&gt; backends.file.EncryptedKeyring
- UncryptedFileKeyring -&gt; backends.file.PlaintextKeyring
- Win32CryptoKeyring -&gt; backends.Windows.EncryptedKeyring
- WinVaultKeyring -&gt; backends.Windows.WinVaultKeyring
- Win32CryptoRegistry -&gt; backends.Windows.RegistryKeyring
- select_windows_backend -&gt; backends.Windows.select_windows_backend
- GoogleDocsKeyring -&gt; backends.Google.DocsKeyring
- Credential -&gt; keyring.credentials.Credential
- BaseCredential -&gt; keyring.credentials.SimpleCredential
- EnvironCredential -&gt; keyring.credentials.EnvironCredential
- GoogleEnvironCredential -&gt; backends.Google.EnvironCredential
- BaseKeyczarCrypter -&gt; backends.keyczar.BaseCrypter
- KeyczarCrypter -&gt; backends.keyczar.Crypter
- EnvironKeyczarCrypter -&gt; backends.keyczar.EnvironCrypter
- EnvironGoogleDocsKeyring -&gt; backends.Google.KeyczarDocsKeyring
- BasicPyfilesystemKeyring -&gt; backends.pyfs.BasicKeyring
- UnencryptedPyfilesystemKeyring -&gt; backends.pyfs.PlaintextKeyring
- EncryptedPyfilesystemKeyring -&gt; backends.pyfs.EncryptedKeyring
- EnvironEncryptedPyfilesystemKeyring -&gt; backends.pyfs.KeyczarKeyring
- MultipartKeyringWrapper -&gt; backends.multi.MultipartKeyringWrapper

* Officially require Python 2.5 or greater (although unofficially, this
requirement has been in place since 0.10).

1.0

---

This backward-incompatible release attempts to remove some cruft from the
codebase that&#39;s accumulated over the versions.

* Removed legacy file relocation support. `keyring` no longer supports loading
configuration or file-based backends from ~. If upgrading from 0.8 or later,
the files should already have been migrated to their new proper locations.
If upgrading from 0.7.x or earlier, the files will have to be migrated
manually.
* Removed CryptedFileKeyring migration support. To maintain an existing
CryptedFileKeyring, one must first upgrade to 0.9.2 or later and access the
keyring before upgrading to 1.0 to retain the existing keyring.
* File System backends now create files without group and world permissions.
Fixes 67.

0.10.1

------

* Merged 0.9.3 to include fix for 75.

0.10

----

* Add support for using `Keyczar &lt;http://www.keyczar.org/&gt;`_ to encrypt
keyrings. Keyczar is &quot;an open source cryptographic toolkit designed to make
it easier and safer for developers to use cryptography in their
applications.&quot;
* Added support for storing keyrings on Google Docs or any other filesystem
supported by pyfilesystem.
* Fixed issue in Gnome Keyring when unicode is passed as the service name,
username, or password.
* Tweaked SecretService code to pass unicode to DBus, as unicode is the
preferred format.
* Issue 71 - Fixed logic in CryptedFileKeyring.
* Unencrypted keyring file will be saved with user read/write (and not group
or world read/write).

0.9.3

-----

* Ensure migration is run when get_password is called. Fixes 75. Thanks to
Marc Deslauriers for reporting the bug and supplying the patch.

0.9.2

-----

* Keyring 0.9.1 introduced a whole different storage format for the
CryptedFileKeyring, but this introduced some potential compatibility issues.
This release incorporates the security updates but reverts to the INI file
format for storage, only encrypting the passwords and leaving the service
and usernames in plaintext. Subsequent releases may incorporate a new
keyring to implement a whole-file encrypted version. Fixes 64.
* The CryptedFileKeyring now requires simplejson for Python 2.5 clients.

0.9.1

-----

* Fix for issue where SecretServiceBackend.set_password would raise a
UnicodeError on Python 3 or when a unicode password was provided on Python
2.
* CryptedFileKeyring now uses PBKDF2 to derive the key from the user&#39;s
password and a random hash. The IV is chosen randomly as well. All the
stored passwords are encrypted at once. Any keyrings using the old format
will be automatically converted to the new format (but will no longer be
compatible with 0.9 and earlier). The user&#39;s password is no longer limited
to 32 characters. PyCrypto 2.5 or greater is now required for this keyring.

0.9

---

* Add support for GTK 3 and secret service D-Bus. Fixes 52.
* Issue 60 - Use correct method for decoding.

0.8.1

-----

* Fix regression in keyring lib on Windows XP where the LOCALAPPDATA
environment variable is not present.

0.8

---

* Mac OS X keyring backend now uses subprocess calls to the `security`
command instead of calling the API, which with the latest updates, no
longer allows Python to invoke from a virtualenv. Fixes issue 13.
* When using file-based storage, the keyring files are no longer stored
in the user&#39;s home directory, but are instead stored in platform-friendly
locations (`%localappdata%\Python Keyring` on Windows and according to
the freedesktop.org Base Dir Specification
(`$XDG_DATA_HOME/python_keyring` or `$HOME/.local/share/python_keyring`)
on other operating systems). This fixes 21.

*Backward Compatibility Notice*

Due to the new storage location for file-based keyrings, keyring 0.8
supports backward compatibility by automatically moving the password
files to the updated location. In general, users can upgrade to 0.8 and
continue to operate normally. Any applications that customize the storage
location or make assumptions about the storage location will need to take
this change into consideration. Additionally, after upgrading to 0.8,
it is not possible to downgrade to 0.7 without manually moving
configuration files. In 1.0, the backward compatibility
will be removed.

0.7.1

-----

* Removed non-ASCII characters from README and CHANGES docs (required by
distutils if we&#39;re to include them in the long_description). Fixes 55.

0.7

---

* Python 3 is now supported. All tests now pass under Python 3.2 on
Windows and Linux (although Linux backend support is limited). Fixes 28.
* Extension modules on Mac and Windows replaced by pure-Python ctypes
implementations. Thanks to Jerome Laheurte.
* WinVaultKeyring now supports multiple passwords for the same service. Fixes
47.
* Most of the tests don&#39;t require user interaction anymore.
* Entries stored in Gnome Keyring appears now with a meaningful name if you try
to browser your keyring (for ex. with Seahorse)
* Tests from Gnome Keyring no longer pollute the user own keyring.
* `keyring.util.escape` now accepts only unicode strings. Don&#39;t try to encode
strings passed to it.

0.6.2

-----

* fix compiling on OSX with XCode 4.0

0.6.1

-----

* Gnome keyring should not be used if there is no DISPLAY or if the dbus is
not around (https://bugs.launchpad.net/launchpadlib/+bug/752282).

* Added `keyring.http` for facilitating HTTP Auth using keyring.

* Add a utility to access the keyring from the command line.

0.5.1

-----

* Remove a spurious KDE debug message when using KWallet

* Fix a bug that caused an exception if the user canceled the KWallet dialog
(https://bitbucket.org/kang/python-keyring-lib/issue/37/user-canceling-of-kde-wallet-dialogs).

0.5

---

* Now using the existing Gnome and KDE python libs instead of custom C++
code.

* Using the getpass module instead of custom code

0.4

---

* Fixed the setup script (some subdirs were not included in the release.)

0.3

---

* Fixed keyring.core when the user doesn&#39;t have a cfg, or is not
properly configured.

* Fixed escaping issues for usernames with non-ascii characters

0.2

---

* Add support for Python 2.4+
http://bitbucket.org/kang/python-keyring-lib/issue/2

* Fix the bug in KDE Kwallet extension compiling
http://bitbucket.org/kang/python-keyring-lib/issue/3

</details>

<details> <summary>Links</summary>

  • PyPI: https://pypi.org/project/keyring
  • Changelog: https://pyup.io/changelogs/keyring/
  • Repo: https://github.com/jaraco/keyring </details>
+1 -1

0 comment

1 changed file

pr created time in a month

PR opened alisaifee/limits

Avoid TypeError with fixed window strategies

The MemcachedStorage.incr method should always return positive number.

Fixes: #68

+1 -1

0 comment

1 changed file

pr created time in a month

issue openedalisaifee/limits

TypeError: '<=' not supported between instances of 'NoneType' and 'int'

I am not sure where this bug should be reported. But I think it may be fixed in the limits package, so I leave the bug description here.

The following error occurs with Sanic-Limiter on edge between limited and permitted timespans when too many requests run.

[2020-12-21 14:08:55 +0300] [96980] [ERROR] Exception occurred while handling uri: 'http://localhost:8000/'
Traceback (most recent call last):
  File "/tmp/tmp.Rziuc8Wg8e/.venv/lib/python3.9/site-packages/sanic/app.py", line 908, in handle_request
    response = await self._run_request_middleware(
  File "/tmp/tmp.Rziuc8Wg8e/.venv/lib/python3.9/site-packages/sanic/app.py", line 1265, in _run_request_middleware
    response = middleware(request)
  File "/tmp/tmp.Rziuc8Wg8e/.venv/lib/python3.9/site-packages/sanic_limiter/extension.py", line 243, in __check_request_limit
    six.reraise(*sys.exc_info())
  File "/usr/lib/python3/dist-packages/six.py", line 703, in reraise
    raise value
  File "/tmp/tmp.Rziuc8Wg8e/.venv/lib/python3.9/site-packages/sanic_limiter/extension.py", line 220, in __check_request_limit
    if not self.limiter.hit(lim.limit, key, limit_scope):
  File "/tmp/tmp.Rziuc8Wg8e/.venv/lib/python3.9/site-packages/limits/strategies.py", line 133, in hit
    self.storage().incr(item.key_for(*identifiers), item.get_expiry())
TypeError: '<=' not supported between instances of 'NoneType' and 'int'

Prerequisite:

  1. Use Memcached backend.

Steps to reproduce:

  1. Install needed dependencies:
pip install sanic pymemcache \
    'limits @ git+https://github.com/alisaifee/limits' \
    'sanic-limiter @ git+https://github.com/bohea/sanic-limiter'
  1. Start a test Sanic app with Sanic-Limiter applied.
from sanic import Sanic
from sanic.response import text
from sanic_limiter import Limiter, RateLimitExceeded, get_remote_address

app = Sanic("hello_example")
app.error_handler.add(RateLimitExceeded,
                      lambda _req, err: text("", err.status_code))
limiter = Limiter(app, get_remote_address,
                  storage_uri="memcached://localhost:11211")

@app.route("/")
@limiter.limit("1 per second")
async def test(request):
    return text("Hello world!\n")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000, access_log=False)
  1. Perform many, many requests to the app. I use ApacheBench, docs available at ab(1).
ab -t30 -k http://localhost:8000/
  1. The error does not always occur, you may need to rerun the previous benchmark to see it.

created time in a month

fork mymedia2/limits

utilities to implement rate limiting using various strategies and storage backends such as redis & memcached.

https://limits.readthedocs.org

fork in a month

startedalisaifee/flask-limiter

started time in a month

PR closed alisaifee/jira-cli

Update coverage to 5.3

This PR updates coverage from 4.0.3 to 5.3.

<details> <summary>Changelog</summary>

5.3

--------------------------

- The ``source`` setting has always been interpreted as either a file path or a
module, depending on which existed.  If both interpretations were valid, it
was assumed to be a file path.  The new ``source_pkgs`` setting can be used
to name a package to disambiguate this case.  Thanks, Thomas Grainger. Fixes
`issue 268`_.

- If a plugin was disabled due to an exception, we used to still try to record
its information, causing an exception, as reported in `issue 1011`_.  This is
now fixed.

.. _issue 268: https://github.com/nedbat/coveragepy/issues/268
.. _issue 1011: https://github.com/nedbat/coveragepy/issues/1011


.. _changes_521:

5.2.1

----------------------------

- The dark mode HTML report still used light colors for the context listing,
making them unreadable (`issue 1009`_).  This is now fixed.

- The time stamp on the HTML report now includes the time zone. Thanks, Xie
Yanbo (`pull request 960`_).

.. _pull request 960: https://github.com/nedbat/coveragepy/pull/960
.. _issue 1009: https://github.com/nedbat/coveragepy/issues/1009


.. _changes_52:

5.2

--------------------------

- The HTML report has been redesigned by Vince Salvino.  There is now a dark
mode, the code text is larger, and system sans serif fonts are used, in
addition to other small changes (`issue 858`_ and `pull request 931`_).

- The ``coverage report`` and ``coverage html`` commands now accept a
``--precision`` option to control the number of decimal points displayed.
Thanks, Teake Nutma (`pull request 982`_).

- The ``coverage report`` and ``coverage html`` commands now accept a
``--no-skip-covered`` option to negate ``--skip-covered``.  Thanks, Anthony
Sottile (`issue 779`_ and `pull request 932`_).

- The ``--skip-empty`` option is now available for the XML report, closing
`issue 976`_.

- The ``coverage report`` command now accepts a ``--sort`` option to specify
how to sort the results.  Thanks, Jerin Peter George (`pull request 1005`_).

- If coverage fails due to the coverage total not reaching the ``--fail-under``
value, it will now print a message making the condition clear.  Thanks,
Naveen Yadav (`pull request 977`_).

- TOML configuration files with non-ASCII characters would cause errors on
Windows (`issue 990`_).  This is now fixed.

- The output of ``--debug=trace`` now includes information about how the
``--source`` option is being interpreted, and the module names being
considered.

.. _pull request 931: https://github.com/nedbat/coveragepy/pull/931
.. _pull request 932: https://github.com/nedbat/coveragepy/pull/932
.. _pull request 977: https://github.com/nedbat/coveragepy/pull/977
.. _pull request 982: https://github.com/nedbat/coveragepy/pull/982
.. _pull request 1005: https://github.com/nedbat/coveragepy/pull/1005
.. _issue 779: https://github.com/nedbat/coveragepy/issues/779
.. _issue 858: https://github.com/nedbat/coveragepy/issues/858
.. _issue 976: https://github.com/nedbat/coveragepy/issues/976
.. _issue 990: https://github.com/nedbat/coveragepy/issues/990


.. _changes_51:

5.1

--------------------------

- The JSON report now includes counts of covered and missing branches. Thanks,
Salvatore Zagaria.

- On Python 3.8, try-finally-return reported wrong branch coverage with
decorated async functions (`issue 964`_).  This is now fixed. Thanks, Kjell
Braden.

- The :meth:`~coverage.Coverage.get_option` and
:meth:`~coverage.Coverage.set_option` methods can now manipulate the
``[paths]`` configuration setting.  Thanks to Bernát Gábor for the fix for
`issue 967`_.

.. _issue 964: https://github.com/nedbat/coveragepy/issues/964
.. _issue 967: https://github.com/nedbat/coveragepy/issues/967


.. _changes_504:

5.0.4

----------------------------

- If using the ``[run] relative_files`` setting, the XML report will use
relative files in the ``&lt;source&gt;`` elements indicating the location of source
code.  Closes `issue 948`_.

- The textual summary report could report missing lines with negative line
numbers on PyPy3 7.1 (`issue 943`_).  This is now fixed.

- Windows wheels for Python 3.8 were incorrectly built, but are now fixed.
(`issue 949`_)

- Updated Python 3.9 support to 3.9a4.

- HTML reports couldn&#39;t be sorted if localStorage wasn&#39;t available. This is now
fixed: sorting works even though the sorting setting isn&#39;t retained. (`issue
944`_ and `pull request 945`_). Thanks, Abdeali Kothari.

.. _issue 943: https://github.com/nedbat/coveragepy/issues/943
.. _issue 944: https://github.com/nedbat/coveragepy/issues/944
.. _pull request 945: https://github.com/nedbat/coveragepy/pull/945
.. _issue 948: https://github.com/nedbat/coveragepy/issues/948
.. _issue 949: https://github.com/nedbat/coveragepy/issues/949


.. _changes_503:

5.0.3

----------------------------

- A performance improvement in 5.0.2 didn&#39;t work for test suites that changed
directory before combining data, causing &quot;Couldn&#39;t use data file: no such
table: meta&quot; errors (`issue 916`_).  This is now fixed.

- Coverage could fail to run your program with some form of &quot;ModuleNotFound&quot; or
&quot;ImportError&quot; trying to import from the current directory. This would happen
if coverage had been packaged into a zip file (for example, on Windows), or
was found indirectly (for example, by pyenv-virtualenv).  A number of
different scenarios were described in `issue 862`_ which is now fixed.  Huge
thanks to Agbonze O. Jeremiah for reporting it, and Alexander Waters and
George-Cristian Bîrzan for protracted debugging sessions.

- Added the &quot;premain&quot; debug option.

- Added SQLite compile-time options to the &quot;debug sys&quot; output.

.. _issue 862: https://github.com/nedbat/coveragepy/issues/862
.. _issue 916: https://github.com/nedbat/coveragepy/issues/916


.. _changes_502:

5.0.2

----------------------------

- Programs that used multiprocessing and changed directories would fail under
coverage.  This is now fixed (`issue 890`_).  A side effect is that debug
information about the config files read now shows absolute paths to the
files.

- When running programs as modules (``coverage run -m``) with ``--source``,
some measured modules were imported before coverage starts.  This resulted in
unwanted warnings (&quot;Already imported a file that will be measured&quot;) and a
reduction in coverage totals (`issue 909`_).  This is now fixed.

- If no data was collected, an exception about &quot;No data to report&quot; could happen
instead of a 0% report being created (`issue 884`_).  This is now fixed.

- The handling of source files with non-encodable file names has changed.
Previously, if a file name could not be encoded as UTF-8, an error occurred,
as described in `issue 891`_.  Now, those files will not be measured, since
their data would not be recordable.

- A new warning (&quot;dynamic-conflict&quot;) is issued if two mechanisms are trying to
change the dynamic context.  Closes `issue 901`_.

- ``coverage run --debug=sys`` would fail with an AttributeError. This is now
fixed (`issue 907`_).

.. _issue 884: https://github.com/nedbat/coveragepy/issues/884
.. _issue 890: https://github.com/nedbat/coveragepy/issues/890
.. _issue 891: https://github.com/nedbat/coveragepy/issues/891
.. _issue 901: https://github.com/nedbat/coveragepy/issues/901
.. _issue 907: https://github.com/nedbat/coveragepy/issues/907
.. _issue 909: https://github.com/nedbat/coveragepy/issues/909


.. _changes_501:

5.0.1

----------------------------

- If a 4.x data file is the cause of a &quot;file is not a database&quot; error, then use
a more specific error message, &quot;Looks like a coverage 4.x data file, are you
mixing versions of coverage?&quot;  Helps diagnose the problems described in
`issue 886`_.

- Measurement contexts and relative file names didn&#39;t work together, as
reported in `issue 899`_ and `issue 900`_.  This is now fixed, thanks to
David Szotten.

- When using ``coverage run --concurrency=multiprocessing``, all data files
should be named with parallel-ready suffixes.  5.0 mistakenly named the main
process&#39; file with no suffix when using ``--append``.  This is now fixed,
closing `issue 880`_.

- Fixed a problem on Windows when the current directory is changed to a
different drive (`issue 895`_).  Thanks, Olivier Grisel.

- Updated Python 3.9 support to 3.9a2.

.. _issue 880: https://github.com/nedbat/coveragepy/issues/880
.. _issue 886: https://github.com/nedbat/coveragepy/issues/886
.. _issue 895: https://github.com/nedbat/coveragepy/issues/895
.. _issue 899: https://github.com/nedbat/coveragepy/issues/899
.. _issue 900: https://github.com/nedbat/coveragepy/issues/900


.. _changes_50:

5.0

--------------------------

Nothing new beyond 5.0b2.


.. _changes_50b2:

5.0b2

----------------------------

- An experimental ``[run] relative_files`` setting tells coverage to store
relative file names in the data file. This makes it easier to run tests in
one (or many) environments, and then report in another.  It has not had much
real-world testing, so it may change in incompatible ways in the future.

- When constructing a :class:`coverage.Coverage` object, `data_file` can be
specified as None to prevent writing any data file at all.  In previous
versions, an explicit `data_file=None` argument would use the default of
&quot;.coverage&quot;. Fixes `issue 871`_.

- Python files run with ``-m`` now have ``__spec__`` defined properly.  This
fixes `issue 745`_ (about not being able to run unittest tests that spawn
subprocesses), and `issue 838`_, which described the problem directly.

- The ``[paths]`` configuration section is now ordered. If you specify more
than one list of patterns, the first one that matches will be used.  Fixes
`issue 649`_.

- The :func:`.coverage.numbits.register_sqlite_functions` function now also
registers `numbits_to_nums` for use in SQLite queries.  Thanks, Simon
Willison.

- Python 3.9a1 is supported.

- Coverage.py has a mascot: :ref:`Sleepy Snake &lt;sleepy&gt;`.

.. _issue 649: https://github.com/nedbat/coveragepy/issues/649
.. _issue 745: https://github.com/nedbat/coveragepy/issues/745
.. _issue 838: https://github.com/nedbat/coveragepy/issues/838
.. _issue 871: https://github.com/nedbat/coveragepy/issues/871


.. _changes_50b1:

5.0b1

----------------------------

- The HTML and textual reports now have a ``--skip-empty`` option that skips
files with no statements, notably ``__init__.py`` files.  Thanks, Reya B.

- Configuration can now be read from `TOML`_ files.  This requires installing
coverage.py with the ``[toml]`` extra.  The standard &quot;pyproject.toml&quot; file
will be read automatically if no other configuration file is found, with
settings in the ``[tool.coverage.]`` namespace.  Thanks to Frazer McLean for
implementation and persistence.  Finishes `issue 664`_.

- The ``[run] note`` setting has been deprecated. Using it will result in a
warning, and the note will not be written to the data file.  The
corresponding :class:`.CoverageData` methods have been removed.

- The HTML report has been reimplemented (no more table around the source
code). This allowed for a better presentation of the context information,
hopefully resolving `issue 855`_.

- Added sqlite3 module version information to ``coverage debug sys`` output.

- Asking the HTML report to show contexts (``[html] show_contexts=True`` or
``coverage html --show-contexts``) will issue a warning if there were no
contexts measured (`issue 851`_).

.. _TOML: https://github.com/toml-lang/tomlreadme
.. _issue 664: https://github.com/nedbat/coveragepy/issues/664
.. _issue 851: https://github.com/nedbat/coveragepy/issues/851
.. _issue 855: https://github.com/nedbat/coveragepy/issues/855


.. _changes_50a8:

5.0a8

----------------------------

- The :class:`.CoverageData` API has changed how queries are limited to
specific contexts.  Now you use :meth:`.CoverageData.set_query_context` to
set a single exact-match string, or :meth:`.CoverageData.set_query_contexts`
to set a list of regular expressions to match contexts.  This changes the
command-line ``--contexts`` option to use regular expressions instead of
filename-style wildcards.


.. _changes_50a7:

5.0a7

----------------------------

- Data can now be &quot;reported&quot; in JSON format, for programmatic use, as requested
in `issue 720`_.  The new ``coverage json`` command writes raw and summarized
data to a JSON file.  Thanks, Matt Bachmann.

- Dynamic contexts are now supported in the Python tracer, which is important
for PyPy users.  Closes `issue 846`_.

- The compact line number representation introduced in 5.0a6 is called a
&quot;numbits.&quot;  The :mod:`coverage.numbits` module provides functions for working
with them.

- The reporting methods used to permanently apply their arguments to the
configuration of the Coverage object.  Now they no longer do.  The arguments
affect the operation of the method, but do not persist.

- A class named &quot;test_something&quot; no longer confuses the ``test_function``
dynamic context setting.  Fixes `issue 829`_.

- Fixed an unusual tokenizing issue with backslashes in comments.  Fixes
`issue 822`_.

- ``debug=plugin`` didn&#39;t properly support configuration or dynamic context
plugins, but now it does, closing `issue 834`_.

.. _issue 720: https://github.com/nedbat/coveragepy/issues/720
.. _issue 822: https://github.com/nedbat/coveragepy/issues/822
.. _issue 834: https://github.com/nedbat/coveragepy/issues/834
.. _issue 829: https://github.com/nedbat/coveragepy/issues/829
.. _issue 846: https://github.com/nedbat/coveragepy/issues/846


.. _changes_50a6:

5.0a6

----------------------------

- Reporting on contexts. Big thanks to Stephan Richter and Albertas Agejevas
for the contribution.

- The ``--contexts`` option is available on the ``report`` and ``html``
 commands.  It&#39;s a comma-separated list of shell-style wildcards, selecting
 the contexts to report on.  Only contexts matching one of the wildcards
 will be included in the report.

- The ``--show-contexts`` option for the ``html`` command adds context
 information to each covered line.  Hovering over the &quot;ctx&quot; marker at the
 end of the line reveals a list of the contexts that covered the line.

- Database changes:

- Line numbers are now stored in a much more compact way.  For each file and
 context, a single binary string is stored with a bit per line number.  This
 greatly improves memory use, but makes ad-hoc use difficult.

- Dynamic contexts with no data are no longer written to the database.

- SQLite data storage is now faster.  There&#39;s no longer a reason to keep the
 JSON data file code, so it has been removed.

- Changes to the :class:`.CoverageData` interface:

- The new :meth:`.CoverageData.dumps` method serializes the data to a string,
 and a corresponding :meth:`.CoverageData.loads` method reconstitutes this
 data.  The format of the data string is subject to change at any time, and
 so should only be used between two installations of the same version of
 coverage.py.

- The :meth:`CoverageData constructor&lt;.CoverageData.__init__&gt;` has a new
 argument, `no_disk` (default: False).  Setting it to True prevents writing
 any data to the disk.  This is useful for transient data objects.

- Added the classmethod :meth:`.Coverage.current` to get the latest started
Coverage instance.

- Multiprocessing support in Python 3.8 was broken, but is now fixed.  Closes
`issue 828`_.

- Error handling during reporting has changed slightly.  All reporting methods
now behave the same.  The ``--ignore-errors`` option keeps errors from
stopping the reporting, but files that couldn&#39;t parse as Python will always
be reported as warnings.  As with other warnings, you can suppress them with
the ``[run] disable_warnings`` configuration setting.

- Coverage.py no longer fails if the user program deletes its current
directory. Fixes `issue 806`_.  Thanks, Dan Hemberger.

- The scrollbar markers in the HTML report now accurately show the highlighted
lines, regardless of what categories of line are highlighted.

- The hack to accommodate ShiningPanda_ looking for an obsolete internal data
file has been removed, since ShiningPanda 0.22 fixed it four years ago.

- The deprecated `Reporter.file_reporters` property has been removed.

.. _ShiningPanda: https://wiki.jenkins.io/display/JENKINS/ShiningPanda+Plugin
.. _issue 806: https://github.com/nedbat/coveragepy/pull/806
.. _issue 828: https://github.com/nedbat/coveragepy/issues/828


.. _changes_50a5:

5.0a5

----------------------------

- Drop support for Python 3.4

- Dynamic contexts can now be set two new ways, both thanks to Justas
Sadzevičius.

- A plugin can implement a ``dynamic_context`` method to check frames for
 whether a new context should be started.  See
 :ref:`dynamic_context_plugins` for more details.

- Another tool (such as a test runner) can use the new
 :meth:`.Coverage.switch_context` method to explicitly change the context.

- The ``dynamic_context = test_function`` setting now works with Python 2
old-style classes, though it only reports the method name, not the class it
was defined on.  Closes `issue 797`_.

- ``fail_under`` values more than 100 are reported as errors.  Thanks to Mike
Fiedler for closing `issue 746`_.

- The &quot;missing&quot; values in the text output are now sorted by line number, so
that missing branches are reported near the other lines they affect. The
values used to show all missing lines, and then all missing branches.

- Access to the SQLite database used for data storage is now thread-safe.
Thanks, Stephan Richter. This closes `issue 702`_.

- Combining data stored in SQLite is now about twice as fast, fixing `issue
761`_.  Thanks, Stephan Richter.

- The ``filename`` attribute on :class:`.CoverageData` objects has been made
private.  You can use the ``data_filename`` method to get the actual file
name being used to store data, and the ``base_filename`` method to get the
original filename before parallelizing suffixes were added.  This is part of
fixing `issue 708`_.

- Line numbers in the HTML report now align properly with source lines, even
when Chrome&#39;s minimum font size is set, fixing `issue 748`_.  Thanks Wen Ye.

.. _issue 702: https://github.com/nedbat/coveragepy/issues/702
.. _issue 708: https://github.com/nedbat/coveragepy/issues/708
.. _issue 746: https://github.com/nedbat/coveragepy/issues/746
.. _issue 748: https://github.com/nedbat/coveragepy/issues/748
.. _issue 761: https://github.com/nedbat/coveragepy/issues/761
.. _issue 797: https://github.com/nedbat/coveragepy/issues/797


.. _changes_50a4:

5.0a4

----------------------------

- You can specify the command line to run your program with the ``[run]
command_line`` configuration setting, as requested in `issue 695`_.

- Coverage will create directories as needed for the data file if they don&#39;t
exist, closing `issue 721`_.

- The ``coverage run`` command has always adjusted the first entry in sys.path,
to properly emulate how Python runs your program.  Now this adjustment is
skipped if sys.path[0] is already different than Python&#39;s default.  This
fixes `issue 715`_.

- Improvements to context support:

- The &quot;no such table: meta&quot; error is fixed.: `issue 716`_.

- Combining data files is now much faster.

- Python 3.8 (as of today!) passes all tests.

.. _issue 695: https://github.com/nedbat/coveragepy/issues/695
.. _issue 715: https://github.com/nedbat/coveragepy/issues/715
.. _issue 716: https://github.com/nedbat/coveragepy/issues/716
.. _issue 721: https://github.com/nedbat/coveragepy/issues/721


.. _changes_50a3:

5.0a3

----------------------------

- Context support: static contexts let you specify a label for a coverage run,
which is recorded in the data, and retained when you combine files.  See
:ref:`contexts` for more information.

- Dynamic contexts: specifying ``[run] dynamic_context = test_function`` in the
config file will record the test function name as a dynamic context during
execution.  This is the core of &quot;Who Tests What&quot; (`issue 170`_).  Things to
note:

- There is no reporting support yet.  Use SQLite to query the .coverage file
 for information.  Ideas are welcome about how reporting could be extended
 to use this data.

- There&#39;s a noticeable slow-down before any test is run.

- Data files will now be roughly N times larger, where N is the number of
 tests you have.  Combining data files is therefore also N times slower.

- No other values for ``dynamic_context`` are recognized yet.  Let me know
 what else would be useful.  I&#39;d like to use a pytest plugin to get better
 information directly from pytest, for example.

.. _issue 170: https://github.com/nedbat/coveragepy/issues/170

- Environment variable substitution in configuration files now supports two
syntaxes for controlling the behavior of undefined variables: if ``VARNAME``
is not defined, ``${VARNAME?}`` will raise an error, and ``${VARNAME-default
value}`` will use &quot;default value&quot;.

- Partial support for Python 3.8, which has not yet released an alpha. Fixes
`issue 707`_ and `issue 714`_.

.. _issue 707: https://github.com/nedbat/coveragepy/issues/707
.. _issue 714: https://github.com/nedbat/coveragepy/issues/714


.. _changes_50a2:

5.0a2

----------------------------

- Coverage&#39;s data storage has changed.  In version 4.x, .coverage files were
basically JSON.  Now, they are SQLite databases.  This means the data file
can be created earlier than it used to.  A large amount of code was
refactored to support this change.

- Because the data file is created differently than previous releases, you
 may need ``parallel=true`` where you didn&#39;t before.

- The old data format is still available (for now) by setting the environment
 variable COVERAGE_STORAGE=json. Please tell me if you think you need to
 keep the JSON format.

- The database schema is guaranteed to change in the future, to support new
 features.  I&#39;m looking for opinions about making the schema part of the
 public API to coverage.py or not.

- Development moved from `Bitbucket`_ to `GitHub`_.

- HTML files no longer have trailing and extra whitespace.

- The sort order in the HTML report is stored in local storage rather than
cookies, closing `issue 611`_.  Thanks, Federico Bond.

- pickle2json, for converting v3 data files to v4 data files, has been removed.

.. _Bitbucket: https://bitbucket.org
.. _GitHub: https://github.com/nedbat/coveragepy

.. _issue 611: https://github.com/nedbat/coveragepy/issues/611


.. _changes_50a1:

5.0a1

----------------------------

- Coverage.py no longer supports Python 2.6 or 3.3.

- The location of the configuration file can now be specified with a
``COVERAGE_RCFILE`` environment variable, as requested in `issue 650`_.

- Namespace packages are supported on Python 3.7, where they used to cause
TypeErrors about path being None. Fixes `issue 700`_.

- A new warning (``already-imported``) is issued if measurable files have
already been imported before coverage.py started measurement.  See
:ref:`cmd_warnings` for more information.

- Running coverage many times for small runs in a single process should be
faster, closing `issue 625`_.  Thanks, David MacIver.

- Large HTML report pages load faster.  Thanks, Pankaj Pandey.

.. _issue 625: https://github.com/nedbat/coveragepy/issues/625
.. _issue 650: https://github.com/nedbat/coveragepy/issues/650
.. _issue 700: https://github.com/nedbat/coveragepy/issues/700


.. _changes_454:

4.5.4

----------------------------

- Multiprocessing support in Python 3.8 was broken, but is now fixed.  Closes
`issue 828`_.

.. _issue 828: https://github.com/nedbat/coveragepy/issues/828


.. _changes_453:

4.5.3

----------------------------

- Only packaging metadata changes.


.. _changes_452:

4.5.2

----------------------------

- Namespace packages are supported on Python 3.7, where they used to cause
TypeErrors about path being None. Fixes `issue 700`_.

- Python 3.8 (as of today!) passes all tests.  Fixes `issue 707`_ and
`issue 714`_.

- Development moved from `Bitbucket`_ to `GitHub`_.

.. _issue 700: https://github.com/nedbat/coveragepy/issues/700
.. _issue 707: https://github.com/nedbat/coveragepy/issues/707
.. _issue 714: https://github.com/nedbat/coveragepy/issues/714

.. _Bitbucket: https://bitbucket.org
.. _GitHub: https://github.com/nedbat/coveragepy


.. _changes_451:

4.5.1

----------------------------

- Now that 4.5 properly separated the ``[run] omit`` and ``[report] omit``
settings, an old bug has become apparent.  If you specified a package name
for ``[run] source``, then omit patterns weren&#39;t matched inside that package.
This bug (`issue 638`_) is now fixed.

- On Python 3.7, reporting about a decorated function with no body other than a
docstring would crash coverage.py with an IndexError (`issue 640`_).  This is
now fixed.

- Configurer plugins are now reported in the output of ``--debug=sys``.

.. _issue 638: https://github.com/nedbat/coveragepy/issues/638
.. _issue 640: https://github.com/nedbat/coveragepy/issues/640


.. _changes_45:

4.5

--------------------------

- A new kind of plugin is supported: configurers are invoked at start-up to
allow more complex configuration than the .coveragerc file can easily do.
See :ref:`api_plugin` for details.  This solves the complex configuration
problem described in `issue 563`_.

- The ``fail_under`` option can now be a float.  Note that you must specify the
``[report] precision`` configuration option for the fractional part to be
used.  Thanks to Lars Hupfeldt Nielsen for help with the implementation.
Fixes `issue 631`_.

- The ``include`` and ``omit`` options can be specified for both the ``[run]``
and ``[report]`` phases of execution.  4.4.2 introduced some incorrect
interactions between those phases, where the options for one were confused
for the other.  This is now corrected, fixing `issue 621`_ and `issue 622`_.
Thanks to Daniel Hahler for seeing more clearly than I could.

- The ``coverage combine`` command used to always overwrite the data file, even
when no data had been read from apparently combinable files.  Now, an error
is raised if we thought there were files to combine, but in fact none of them
could be used.  Fixes `issue 629`_.

- The ``coverage combine`` command could get confused about path separators
when combining data collected on Windows with data collected on Linux, as
described in `issue 618`_.  This is now fixed: the result path always uses
the path separator specified in the ``[paths]`` result.

- On Windows, the HTML report could fail when source trees are deeply nested,
due to attempting to create HTML filenames longer than the 250-character
maximum.  Now filenames will never get much larger than 200 characters,
fixing `issue 627`_.  Thanks to Alex Sandro for helping with the fix.

.. _issue 563: https://github.com/nedbat/coveragepy/issues/563
.. _issue 618: https://github.com/nedbat/coveragepy/issues/618
.. _issue 621: https://github.com/nedbat/coveragepy/issues/621
.. _issue 622: https://github.com/nedbat/coveragepy/issues/622
.. _issue 627: https://github.com/nedbat/coveragepy/issues/627
.. _issue 629: https://github.com/nedbat/coveragepy/issues/629
.. _issue 631: https://github.com/nedbat/coveragepy/issues/631


.. _changes_442:

4.4.2

----------------------------

- Support for Python 3.7.  In some cases, class and module docstrings are no
longer counted in statement totals, which could slightly change your total
results.

- Specifying both ``--source`` and ``--include`` no longer silently ignores the
include setting, instead it displays a warning. Thanks, Loïc Dachary.  Closes
`issue 265`_ and `issue 101`_.

- Fixed a race condition when saving data and multiple threads are tracing
(`issue 581`_). It could produce a &quot;dictionary changed size during iteration&quot;
RuntimeError.  I believe this mostly but not entirely fixes the race
condition.  A true fix would likely be too expensive.  Thanks, Peter Baughman
for the debugging, and Olivier Grisel for the fix with tests.

- Configuration values which are file paths will now apply tilde-expansion,
closing `issue 589`_.

- Now secondary config files like tox.ini and setup.cfg can be specified
explicitly, and prefixed sections like `[coverage:run]` will be read. Fixes
`issue 588`_.

- Be more flexible about the command name displayed by help, fixing
`issue 600`_. Thanks, Ben Finney.

.. _issue 101: https://github.com/nedbat/coveragepy/issues/101
.. _issue 581: https://github.com/nedbat/coveragepy/issues/581
.. _issue 588: https://github.com/nedbat/coveragepy/issues/588
.. _issue 589: https://github.com/nedbat/coveragepy/issues/589
.. _issue 600: https://github.com/nedbat/coveragepy/issues/600


.. _changes_441:

4.4.1

----------------------------

- No code changes: just corrected packaging for Python 2.7 Linux wheels.


.. _changes_44:

4.4

--------------------------

- Reports could produce the wrong file names for packages, reporting ``pkg.py``
instead of the correct ``pkg/__init__.py``.  This is now fixed.  Thanks, Dirk
Thomas.

- XML reports could produce ``&lt;source&gt;`` and ``&lt;class&gt;`` lines that together
didn&#39;t specify a valid source file path.  This is now fixed. (`issue 526`_)

- Namespace packages are no longer warned as having no code. (`issue 572`_)

- Code that uses ``sys.settrace(sys.gettrace())`` in a file that wasn&#39;t being
coverage-measured would prevent correct coverage measurement in following
code. An example of this was running doctests programmatically. This is now
fixed. (`issue 575`_)

- Errors printed by the ``coverage`` command now go to stderr instead of
stdout.

- Running ``coverage xml`` in a directory named with non-ASCII characters would
fail under Python 2. This is now fixed. (`issue 573`_)

.. _issue 526: https://github.com/nedbat/coveragepy/issues/526
.. _issue 572: https://github.com/nedbat/coveragepy/issues/572
.. _issue 573: https://github.com/nedbat/coveragepy/issues/573
.. _issue 575: https://github.com/nedbat/coveragepy/issues/575

4.4b1

----------------------------

- Some warnings can now be individually disabled.  Warnings that can be
disabled have a short name appended.  The ``[run] disable_warnings`` setting
takes a list of these warning names to disable. Closes both `issue 96`_ and
`issue 355`_.

- The XML report now includes attributes from version 4 of the Cobertura XML
format, fixing `issue 570`_.

- In previous versions, calling a method that used collected data would prevent
further collection.  For example, `save()`, `report()`, `html_report()`, and
others would all stop collection.  An explicit `start()` was needed to get it
going again.  This is no longer true.  Now you can use the collected data and
also continue measurement. Both `issue 79`_ and `issue 448`_ described this
problem, and have been fixed.

- Plugins can now find unexecuted files if they choose, by implementing the
`find_executable_files` method.  Thanks, Emil Madsen.

- Minimal IronPython support. You should be able to run IronPython programs
under ``coverage run``, though you will still have to do the reporting phase
with CPython.

- Coverage.py has long had a special hack to support CPython&#39;s need to measure
the coverage of the standard library tests. This code was not installed by
kitted versions of coverage.py.  Now it is.

.. _issue 79: https://github.com/nedbat/coveragepy/issues/79
.. _issue 96: https://github.com/nedbat/coveragepy/issues/96
.. _issue 355: https://github.com/nedbat/coveragepy/issues/355
.. _issue 448: https://github.com/nedbat/coveragepy/issues/448
.. _issue 570: https://github.com/nedbat/coveragepy/issues/570


.. _changes_434:

4.3.4

----------------------------

- Fixing 2.6 in version 4.3.3 broke other things, because the too-tricky
exception wasn&#39;t properly derived from Exception, described in `issue 556`_.
A newb mistake; it hasn&#39;t been a good few days.

.. _issue 556: https://github.com/nedbat/coveragepy/issues/556


.. _changes_433:

4.3.3

----------------------------

- Python 2.6 support was broken due to a testing exception imported for the
benefit of the coverage.py test suite.  Properly conditionalizing it fixed
`issue 554`_ so that Python 2.6 works again.

.. _issue 554: https://github.com/nedbat/coveragepy/issues/554


.. _changes_432:

4.3.2

----------------------------

- Using the ``--skip-covered`` option on an HTML report with 100% coverage
would cause a &quot;No data to report&quot; error, as reported in `issue 549`_. This is
now fixed; thanks, Loïc Dachary.

- If-statements can be optimized away during compilation, for example, `if 0:`
or `if __debug__:`.  Coverage.py had problems properly understanding these
statements which existed in the source, but not in the compiled bytecode.
This problem, reported in `issue 522`_, is now fixed.

- If you specified ``--source`` as a directory, then coverage.py would look for
importable Python files in that directory, and could identify ones that had
never been executed at all.  But if you specified it as a package name, that
detection wasn&#39;t performed.  Now it is, closing `issue 426`_. Thanks to Loïc
Dachary for the fix.

- If you started and stopped coverage measurement thousands of times in your
process, you could crash Python with a &quot;Fatal Python error: deallocating
None&quot; error.  This is now fixed.  Thanks to Alex Groce for the bug report.

- On PyPy, measuring coverage in subprocesses could produce a warning: &quot;Trace
function changed, measurement is likely wrong: None&quot;.  This was spurious, and
has been suppressed.

- Previously, coverage.py couldn&#39;t start on Jython, due to that implementation
missing the multiprocessing module (`issue 551`_). This problem has now been
fixed. Also, `issue 322`_ about not being able to invoke coverage
conveniently, seems much better: ``jython -m coverage run myprog.py`` works
properly.

- Let&#39;s say you ran the HTML report over and over again in the same output
directory, with ``--skip-covered``. And imagine due to your heroic
test-writing efforts, a file just achieved the goal of 100% coverage. With
coverage.py 4.3, the old HTML file with the less-than-100% coverage would be
left behind.  This file is now properly deleted.

.. _issue 322: https://github.com/nedbat/coveragepy/issues/322
.. _issue 426: https://github.com/nedbat/coveragepy/issues/426
.. _issue 522: https://github.com/nedbat/coveragepy/issues/522
.. _issue 549: https://github.com/nedbat/coveragepy/issues/549
.. _issue 551: https://github.com/nedbat/coveragepy/issues/551


.. _changes_431:

4.3.1

----------------------------

- Some environments couldn&#39;t install 4.3, as described in `issue 540`_. This is
now fixed.

- The check for conflicting ``--source`` and ``--include`` was too simple in a
few different ways, breaking a few perfectly reasonable use cases, described
in `issue 541`_.  The check has been reverted while we re-think the fix for
`issue 265`_.

.. _issue 540: https://github.com/nedbat/coveragepy/issues/540
.. _issue 541: https://github.com/nedbat/coveragepy/issues/541


.. _changes_43:

4.3

--------------------------

Special thanks to **Loïc Dachary**, who took an extraordinary interest in
coverage.py and contributed a number of improvements in this release.

- Subprocesses that are measured with `automatic subprocess measurement`_ used
to read in any pre-existing data file.  This meant data would be incorrectly
carried forward from run to run.  Now those files are not read, so each
subprocess only writes its own data. Fixes `issue 510`_.

- The ``coverage combine`` command will now fail if there are no data files to
combine. The combine changes in 4.2 meant that multiple combines could lose
data, leaving you with an empty .coverage data file. Fixes
`issue 525`_, `issue 412`_, `issue 516`_, and probably `issue 511`_.

- Coverage.py wouldn&#39;t execute `sys.excepthook`_ when an exception happened in
your program.  Now it does, thanks to Andrew Hoos.  Closes `issue 535`_.

- Branch coverage fixes:

- Branch coverage could misunderstand a finally clause on a try block that
 never continued on to the following statement, as described in `issue
 493`_.  This is now fixed. Thanks to Joe Doherty for the report and Loïc
 Dachary for the fix.

- A while loop with a constant condition (while True) and a continue
 statement would be mis-analyzed, as described in `issue 496`_. This is now
 fixed, thanks to a bug report by Eli Skeggs and a fix by Loïc Dachary.

- While loops with constant conditions that were never executed could result
 in a non-zero coverage report.  Artem Dayneko reported this in `issue
 502`_, and Loïc Dachary provided the fix.

- The HTML report now supports a ``--skip-covered`` option like the other
reporting commands.  Thanks, Loïc Dachary for the implementation, closing
`issue 433`_.

- Options can now be read from a tox.ini file, if any. Like setup.cfg, sections
are prefixed with &quot;coverage:&quot;, so ``[run]`` options will be read from the
``[coverage:run]`` section of tox.ini. Implements part of `issue 519`_.
Thanks, Stephen Finucane.

- Specifying both ``--source`` and ``--include`` no longer silently ignores the
include setting, instead it fails with a message. Thanks, Nathan Land and
Loïc Dachary. Closes `issue 265`_.

- The ``Coverage.combine`` method has a new parameter, ``strict=False``, to
support failing if there are no data files to combine.

- When forking subprocesses, the coverage data files would have the same random
number appended to the file name. This didn&#39;t cause problems, because the
file names had the process id also, making collisions (nearly) impossible.
But it was disconcerting.  This is now fixed.

- The text report now properly sizes headers when skipping some files, fixing
`issue 524`_. Thanks, Anthony Sottile and Loïc Dachary.

- Coverage.py can now search .pex files for source, just as it can .zip and
.egg.  Thanks, Peter Ebden.

- Data files are now about 15% smaller.

- Improvements in the ``[run] debug`` setting:

- The &quot;dataio&quot; debug setting now also logs when data files are deleted during
 combining or erasing.

- A new debug option, &quot;multiproc&quot;, for logging the behavior of
 ``concurrency=multiprocessing``.

- If you used the debug options &quot;config&quot; and &quot;callers&quot; together, you&#39;d get a
 call stack printed for every line in the multi-line config output. This is
 now fixed.

- Fixed an unusual bug involving multiple coding declarations affecting code
containing code in multi-line strings: `issue 529`_.

- Coverage.py will no longer be misled into thinking that a plain file is a
package when interpreting ``--source`` options.  Thanks, Cosimo Lupo.

- If you try to run a non-Python file with coverage.py, you will now get a more
useful error message. `Issue 514`_.

- The default pragma regex changed slightly, but this will only matter to you
if you are deranged and use mixed-case pragmas.

- Deal properly with non-ASCII file names in an ASCII-only world, `issue 533`_.

- Programs that set Unicode configuration values could cause UnicodeErrors when
generating HTML reports.  Pytest-cov is one example.  This is now fixed.

- Prevented deprecation warnings from configparser that happened in some
circumstances, closing `issue 530`_.

- Corrected the name of the jquery.ba-throttle-debounce.js library. Thanks,
Ben Finney.  Closes `issue 505`_.

- Testing against PyPy 5.6 and PyPy3 5.5.

- Switched to pytest from nose for running the coverage.py tests.

- Renamed AUTHORS.txt to CONTRIBUTORS.txt, since there are other ways to
contribute than by writing code. Also put the count of contributors into the
author string in setup.py, though this might be too cute.

.. _sys.excepthook: https://docs.python.org/3/library/sys.htmlsys.excepthook
.. _issue 265: https://github.com/nedbat/coveragepy/issues/265
.. _issue 412: https://github.com/nedbat/coveragepy/issues/412
.. _issue 433: https://github.com/nedbat/coveragepy/issues/433
.. _issue 493: https://github.com/nedbat/coveragepy/issues/493
.. _issue 496: https://github.com/nedbat/coveragepy/issues/496
.. _issue 502: https://github.com/nedbat/coveragepy/issues/502
.. _issue 505: https://github.com/nedbat/coveragepy/issues/505
.. _issue 514: https://github.com/nedbat/coveragepy/issues/514
.. _issue 510: https://github.com/nedbat/coveragepy/issues/510
.. _issue 511: https://github.com/nedbat/coveragepy/issues/511
.. _issue 516: https://github.com/nedbat/coveragepy/issues/516
.. _issue 519: https://github.com/nedbat/coveragepy/issues/519
.. _issue 524: https://github.com/nedbat/coveragepy/issues/524
.. _issue 525: https://github.com/nedbat/coveragepy/issues/525
.. _issue 529: https://github.com/nedbat/coveragepy/issues/529
.. _issue 530: https://github.com/nedbat/coveragepy/issues/530
.. _issue 533: https://github.com/nedbat/coveragepy/issues/533
.. _issue 535: https://github.com/nedbat/coveragepy/issues/535


.. _changes_42:

4.2

--------------------------

- Since ``concurrency=multiprocessing`` uses subprocesses, options specified on
the coverage.py command line will not be communicated down to them.  Only
options in the configuration file will apply to the subprocesses.
Previously, the options didn&#39;t apply to the subprocesses, but there was no
indication.  Now it is an error to use ``--concurrency=multiprocessing`` and
other run-affecting options on the command line.  This prevents
failures like those reported in `issue 495`_.

- Filtering the HTML report is now faster, thanks to Ville Skyttä.

.. _issue 495: https://github.com/nedbat/coveragepy/issues/495

4.2b1

----------------------------

Work from the PyCon 2016 Sprints!

- BACKWARD INCOMPATIBILITY: the ``coverage combine`` command now ignores an
existing ``.coverage`` data file.  It used to include that file in its
combining.  This caused confusing results, and extra tox &quot;clean&quot; steps.  If
you want the old behavior, use the new ``coverage combine --append`` option.

- The ``concurrency`` option can now take multiple values, to support programs
using multiprocessing and another library such as eventlet.  This is only
possible in the configuration file, not from the command line. The
configuration file is the only way for sub-processes to all run with the same
options.  Fixes `issue 484`_.  Thanks to Josh Williams for prototyping.

- Using a ``concurrency`` setting of ``multiprocessing`` now implies
``--parallel`` so that the main program is measured similarly to the
sub-processes.

- When using `automatic subprocess measurement`_, running coverage commands
would create spurious data files.  This is now fixed, thanks to diagnosis and
testing by Dan Riti.  Closes `issue 492`_.

- A new configuration option, ``report:sort``, controls what column of the
text report is used to sort the rows.  Thanks to Dan Wandschneider, this
closes `issue 199`_.

- The HTML report has a more-visible indicator for which column is being
sorted.  Closes `issue 298`_, thanks to Josh Williams.

- If the HTML report cannot find the source for a file, the message now
suggests using the ``-i`` flag to allow the report to continue. Closes
`issue 231`_, thanks, Nathan Land.

- When reports are ignoring errors, there&#39;s now a warning if a file cannot be
parsed, rather than being silently ignored.  Closes `issue 396`_. Thanks,
Matthew Boehm.

- A new option for ``coverage debug`` is available: ``coverage debug config``
shows the current configuration.  Closes `issue 454`_, thanks to Matthew
Boehm.

- Running coverage as a module (``python -m coverage``) no longer shows the
program name as ``__main__.py``.  Fixes `issue 478`_.  Thanks, Scott Belden.

- The `test_helpers` module has been moved into a separate pip-installable
package: `unittest-mixins`_.

.. _automatic subprocess measurement: https://coverage.readthedocs.io/en/latest/subprocess.html
.. _issue 199: https://github.com/nedbat/coveragepy/issues/199
.. _issue 231: https://github.com/nedbat/coveragepy/issues/231
.. _issue 298: https://github.com/nedbat/coveragepy/issues/298
.. _issue 396: https://github.com/nedbat/coveragepy/issues/396
.. _issue 454: https://github.com/nedbat/coveragepy/issues/454
.. _issue 478: https://github.com/nedbat/coveragepy/issues/478
.. _issue 484: https://github.com/nedbat/coveragepy/issues/484
.. _issue 492: https://github.com/nedbat/coveragepy/issues/492
.. _unittest-mixins: https://pypi.org/project/unittest-mixins/


.. _changes_41:

4.1

--------------------------

- The internal attribute `Reporter.file_reporters` was removed in 4.1b3.  It
should have come has no surprise that there were third-party tools out there
using that attribute.  It has been restored, but with a deprecation warning.

4.1b3

----------------------------

- When running your program, execution can jump from an ``except X:`` line to
some other line when an exception other than ``X`` happens.  This jump is no
longer considered a branch when measuring branch coverage.

- When measuring branch coverage, ``yield`` statements that were never resumed
were incorrectly marked as missing, as reported in `issue 440`_.  This is now
fixed.

- During branch coverage of single-line callables like lambdas and generator
expressions, coverage.py can now distinguish between them never being called,
or being called but not completed.  Fixes `issue 90`_, `issue 460`_ and
`issue 475`_.

- The HTML report now has a map of the file along the rightmost edge of the
page, giving an overview of where the missed lines are.  Thanks, Dmitry
Shishov.

- The HTML report now uses different monospaced fonts, favoring Consolas over
Courier.  Along the way, `issue 472`_ about not properly handling one-space
indents was fixed.  The index page also has slightly different styling, to
try to make the clickable detail pages more apparent.

- Missing branches reported with ``coverage report -m`` will now say ``-&gt;exit``
for missed branches to the exit of a function, rather than a negative number.
Fixes `issue 469`_.

- ``coverage --help`` and ``coverage --version`` now mention which tracer is
installed, to help diagnose problems. The docs mention which features need
the C extension. (`issue 479`_)

- Officially support PyPy 5.1, which required no changes, just updates to the
docs.

- The `Coverage.report` function had two parameters with non-None defaults,
which have been changed.  `show_missing` used to default to True, but now
defaults to None.  If you had been calling `Coverage.report` without
specifying `show_missing`, you&#39;ll need to explicitly set it to True to keep
the same behavior.  `skip_covered` used to default to False. It is now None,
which doesn&#39;t change the behavior.  This fixes `issue 485`_.

- It&#39;s never been possible to pass a namespace module to one of the analysis
functions, but now at least we raise a more specific error message, rather
than getting confused. (`issue 456`_)

- The `coverage.process_startup` function now returns the `Coverage` instance
it creates, as suggested in `issue 481`_.

- Make a small tweak to how we compare threads, to avoid buggy custom
comparison code in thread classes. (`issue 245`_)

.. _issue 90: https://github.com/nedbat/coveragepy/issues/90
.. _issue 245: https://github.com/nedbat/coveragepy/issues/245
.. _issue 440: https://github.com/nedbat/coveragepy/issues/440
.. _issue 456: https://github.com/nedbat/coveragepy/issues/456
.. _issue 460: https://github.com/nedbat/coveragepy/issues/460
.. _issue 469: https://github.com/nedbat/coveragepy/issues/469
.. _issue 472: https://github.com/nedbat/coveragepy/issues/472
.. _issue 475: https://github.com/nedbat/coveragepy/issues/475
.. _issue 479: https://github.com/nedbat/coveragepy/issues/479
.. _issue 481: https://github.com/nedbat/coveragepy/issues/481
.. _issue 485: https://github.com/nedbat/coveragepy/issues/485

4.1b2

----------------------------

- Problems with the new branch measurement in 4.1 beta 1 were fixed:

- Class docstrings were considered executable.  Now they no longer are.

- ``yield from`` and ``await`` were considered returns from functions, since
 they could transfer control to the caller.  This produced unhelpful
 &quot;missing branch&quot; reports in a number of circumstances.  Now they no longer
 are considered returns.

- In unusual situations, a missing branch to a negative number was reported.
 This has been fixed, closing `issue 466`_.

- The XML report now produces correct package names for modules found in
directories specified with ``source=``.  Fixes `issue 465`_.

- ``coverage report`` won&#39;t produce trailing whitespace.

.. _issue 465: https://github.com/nedbat/coveragepy/issues/465
.. _issue 466: https://github.com/nedbat/coveragepy/issues/466

4.1b1

----------------------------

- Branch analysis has been rewritten: it used to be based on bytecode, but now
uses AST analysis.  This has changed a number of things:

- More code paths are now considered runnable, especially in
 ``try``/``except`` structures.  This may mean that coverage.py will
 identify more code paths as uncovered.  This could either raise or lower
 your overall coverage number.

- Python 3.5&#39;s ``async`` and ``await`` keywords are properly supported,
 fixing `issue 434`_.

- Some long-standing branch coverage bugs were fixed:

 - `issue 129`_: functions with only a docstring for a body would
   incorrectly report a missing branch on the ``def`` line.

 - `issue 212`_: code in an ``except`` block could be incorrectly marked as
   a missing branch.

 - `issue 146`_: context managers (``with`` statements) in a loop or ``try``
   block could confuse the branch measurement, reporting incorrect partial
   branches.

 - `issue 422`_: in Python 3.5, an actual partial branch could be marked as
   complete.

- Pragmas to disable coverage measurement can now be used on decorator lines,
and they will apply to the entire function or class being decorated.  This
implements the feature requested in `issue 131`_.

- Multiprocessing support is now available on Windows.  Thanks, Rodrigue
Cloutier.

- Files with two encoding declarations are properly supported, fixing
`issue 453`_. Thanks, Max Linke.

- Non-ascii characters in regexes in the configuration file worked in 3.7, but
stopped working in 4.0.  Now they work again, closing `issue 455`_.

- Form-feed characters would prevent accurate determination of the beginning of
statements in the rest of the file.  This is now fixed, closing `issue 461`_.

.. _issue 129: https://github.com/nedbat/coveragepy/issues/129
.. _issue 131: https://github.com/nedbat/coveragepy/issues/131
.. _issue 146: https://github.com/nedbat/coveragepy/issues/146
.. _issue 212: https://github.com/nedbat/coveragepy/issues/212
.. _issue 422: https://github.com/nedbat/coveragepy/issues/422
.. _issue 434: https://github.com/nedbat/coveragepy/issues/434
.. _issue 453: https://github.com/nedbat/coveragepy/issues/453
.. _issue 455: https://github.com/nedbat/coveragepy/issues/455
.. _issue 461: https://github.com/nedbat/coveragepy/issues/461


.. _changes_403:

</details>

<details> <summary>Links</summary>

  • PyPI: https://pypi.org/project/coverage
  • Changelog: https://pyup.io/changelogs/coverage/
  • Repo: https://github.com/nedbat/coveragepy </details>
+1 -1

1 comment

1 changed file

pyup-bot

pr closed time in a month

pull request commentalisaifee/jira-cli

Update coverage to 5.3

Closing this in favor of #120

pyup-bot

comment created time in a month

PR opened alisaifee/jira-cli

Update coverage to 5.3.1

This PR updates coverage from 4.0.3 to 5.3.1.

<details> <summary>Changelog</summary>

5.3.1

----------------------------

- When using ``--source`` on a large source tree, v5.x was slower than previous
versions.  This performance regression is now fixed, closing `issue 1037`_.

- Mysterious SQLite errors can happen on PyPy, as reported in `issue 1010`_. An
immediate retry seems to fix the problem, although it is an unsatisfying
solution.

- The HTML report now saves the sort order in a more widely supported way,
fixing `issue 986`_.  Thanks, Sebastián Ramírez (`pull request 1066`_).

- The HTML report pages now have a :ref:`Sleepy Snake &lt;sleepy&gt;` favicon.

- Wheels are now provided for manylinux2010, and for PyPy3 (pp36 and pp37).

- Continuous integration has moved from Travis and AppVeyor to GitHub Actions.

.. _issue 986: https://github.com/nedbat/coveragepy/issues/986
.. _issue 1037: https://github.com/nedbat/coveragepy/issues/1037
.. _issue 1010: https://github.com/nedbat/coveragepy/issues/1010
.. _pull request 1066: https://github.com/nedbat/coveragepy/pull/1066

.. _changes_53:

5.3

--------------------------

- The ``source`` setting has always been interpreted as either a file path or a
module, depending on which existed.  If both interpretations were valid, it
was assumed to be a file path.  The new ``source_pkgs`` setting can be used
to name a package to disambiguate this case.  Thanks, Thomas Grainger. Fixes
`issue 268`_.

- If a plugin was disabled due to an exception, we used to still try to record
its information, causing an exception, as reported in `issue 1011`_.  This is
now fixed.

.. _issue 268: https://github.com/nedbat/coveragepy/issues/268
.. _issue 1011: https://github.com/nedbat/coveragepy/issues/1011


.. _changes_521:

5.2.1

----------------------------

- The dark mode HTML report still used light colors for the context listing,
making them unreadable (`issue 1009`_).  This is now fixed.

- The time stamp on the HTML report now includes the time zone. Thanks, Xie
Yanbo (`pull request 960`_).

.. _pull request 960: https://github.com/nedbat/coveragepy/pull/960
.. _issue 1009: https://github.com/nedbat/coveragepy/issues/1009


.. _changes_52:

5.2

--------------------------

- The HTML report has been redesigned by Vince Salvino.  There is now a dark
mode, the code text is larger, and system sans serif fonts are used, in
addition to other small changes (`issue 858`_ and `pull request 931`_).

- The ``coverage report`` and ``coverage html`` commands now accept a
``--precision`` option to control the number of decimal points displayed.
Thanks, Teake Nutma (`pull request 982`_).

- The ``coverage report`` and ``coverage html`` commands now accept a
``--no-skip-covered`` option to negate ``--skip-covered``.  Thanks, Anthony
Sottile (`issue 779`_ and `pull request 932`_).

- The ``--skip-empty`` option is now available for the XML report, closing
`issue 976`_.

- The ``coverage report`` command now accepts a ``--sort`` option to specify
how to sort the results.  Thanks, Jerin Peter George (`pull request 1005`_).

- If coverage fails due to the coverage total not reaching the ``--fail-under``
value, it will now print a message making the condition clear.  Thanks,
Naveen Yadav (`pull request 977`_).

- TOML configuration files with non-ASCII characters would cause errors on
Windows (`issue 990`_).  This is now fixed.

- The output of ``--debug=trace`` now includes information about how the
``--source`` option is being interpreted, and the module names being
considered.

.. _pull request 931: https://github.com/nedbat/coveragepy/pull/931
.. _pull request 932: https://github.com/nedbat/coveragepy/pull/932
.. _pull request 977: https://github.com/nedbat/coveragepy/pull/977
.. _pull request 982: https://github.com/nedbat/coveragepy/pull/982
.. _pull request 1005: https://github.com/nedbat/coveragepy/pull/1005
.. _issue 779: https://github.com/nedbat/coveragepy/issues/779
.. _issue 858: https://github.com/nedbat/coveragepy/issues/858
.. _issue 976: https://github.com/nedbat/coveragepy/issues/976
.. _issue 990: https://github.com/nedbat/coveragepy/issues/990


.. _changes_51:

5.1

--------------------------

- The JSON report now includes counts of covered and missing branches. Thanks,
Salvatore Zagaria.

- On Python 3.8, try-finally-return reported wrong branch coverage with
decorated async functions (`issue 964`_).  This is now fixed. Thanks, Kjell
Braden.

- The :meth:`~coverage.Coverage.get_option` and
:meth:`~coverage.Coverage.set_option` methods can now manipulate the
``[paths]`` configuration setting.  Thanks to Bernát Gábor for the fix for
`issue 967`_.

.. _issue 964: https://github.com/nedbat/coveragepy/issues/964
.. _issue 967: https://github.com/nedbat/coveragepy/issues/967


.. _changes_504:

5.0.4

----------------------------

- If using the ``[run] relative_files`` setting, the XML report will use
relative files in the ``&lt;source&gt;`` elements indicating the location of source
code.  Closes `issue 948`_.

- The textual summary report could report missing lines with negative line
numbers on PyPy3 7.1 (`issue 943`_).  This is now fixed.

- Windows wheels for Python 3.8 were incorrectly built, but are now fixed.
(`issue 949`_)

- Updated Python 3.9 support to 3.9a4.

- HTML reports couldn&#39;t be sorted if localStorage wasn&#39;t available. This is now
fixed: sorting works even though the sorting setting isn&#39;t retained. (`issue
944`_ and `pull request 945`_). Thanks, Abdeali Kothari.

.. _issue 943: https://github.com/nedbat/coveragepy/issues/943
.. _issue 944: https://github.com/nedbat/coveragepy/issues/944
.. _pull request 945: https://github.com/nedbat/coveragepy/pull/945
.. _issue 948: https://github.com/nedbat/coveragepy/issues/948
.. _issue 949: https://github.com/nedbat/coveragepy/issues/949


.. _changes_503:

5.0.3

----------------------------

- A performance improvement in 5.0.2 didn&#39;t work for test suites that changed
directory before combining data, causing &quot;Couldn&#39;t use data file: no such
table: meta&quot; errors (`issue 916`_).  This is now fixed.

- Coverage could fail to run your program with some form of &quot;ModuleNotFound&quot; or
&quot;ImportError&quot; trying to import from the current directory. This would happen
if coverage had been packaged into a zip file (for example, on Windows), or
was found indirectly (for example, by pyenv-virtualenv).  A number of
different scenarios were described in `issue 862`_ which is now fixed.  Huge
thanks to Agbonze O. Jeremiah for reporting it, and Alexander Waters and
George-Cristian Bîrzan for protracted debugging sessions.

- Added the &quot;premain&quot; debug option.

- Added SQLite compile-time options to the &quot;debug sys&quot; output.

.. _issue 862: https://github.com/nedbat/coveragepy/issues/862
.. _issue 916: https://github.com/nedbat/coveragepy/issues/916


.. _changes_502:

5.0.2

----------------------------

- Programs that used multiprocessing and changed directories would fail under
coverage.  This is now fixed (`issue 890`_).  A side effect is that debug
information about the config files read now shows absolute paths to the
files.

- When running programs as modules (``coverage run -m``) with ``--source``,
some measured modules were imported before coverage starts.  This resulted in
unwanted warnings (&quot;Already imported a file that will be measured&quot;) and a
reduction in coverage totals (`issue 909`_).  This is now fixed.

- If no data was collected, an exception about &quot;No data to report&quot; could happen
instead of a 0% report being created (`issue 884`_).  This is now fixed.

- The handling of source files with non-encodable file names has changed.
Previously, if a file name could not be encoded as UTF-8, an error occurred,
as described in `issue 891`_.  Now, those files will not be measured, since
their data would not be recordable.

- A new warning (&quot;dynamic-conflict&quot;) is issued if two mechanisms are trying to
change the dynamic context.  Closes `issue 901`_.

- ``coverage run --debug=sys`` would fail with an AttributeError. This is now
fixed (`issue 907`_).

.. _issue 884: https://github.com/nedbat/coveragepy/issues/884
.. _issue 890: https://github.com/nedbat/coveragepy/issues/890
.. _issue 891: https://github.com/nedbat/coveragepy/issues/891
.. _issue 901: https://github.com/nedbat/coveragepy/issues/901
.. _issue 907: https://github.com/nedbat/coveragepy/issues/907
.. _issue 909: https://github.com/nedbat/coveragepy/issues/909


.. _changes_501:

5.0.1

----------------------------

- If a 4.x data file is the cause of a &quot;file is not a database&quot; error, then use
a more specific error message, &quot;Looks like a coverage 4.x data file, are you
mixing versions of coverage?&quot;  Helps diagnose the problems described in
`issue 886`_.

- Measurement contexts and relative file names didn&#39;t work together, as
reported in `issue 899`_ and `issue 900`_.  This is now fixed, thanks to
David Szotten.

- When using ``coverage run --concurrency=multiprocessing``, all data files
should be named with parallel-ready suffixes.  5.0 mistakenly named the main
process&#39; file with no suffix when using ``--append``.  This is now fixed,
closing `issue 880`_.

- Fixed a problem on Windows when the current directory is changed to a
different drive (`issue 895`_).  Thanks, Olivier Grisel.

- Updated Python 3.9 support to 3.9a2.

.. _issue 880: https://github.com/nedbat/coveragepy/issues/880
.. _issue 886: https://github.com/nedbat/coveragepy/issues/886
.. _issue 895: https://github.com/nedbat/coveragepy/issues/895
.. _issue 899: https://github.com/nedbat/coveragepy/issues/899
.. _issue 900: https://github.com/nedbat/coveragepy/issues/900


.. _changes_50:

5.0

--------------------------

Nothing new beyond 5.0b2.


.. _changes_50b2:

5.0b2

----------------------------

- An experimental ``[run] relative_files`` setting tells coverage to store
relative file names in the data file. This makes it easier to run tests in
one (or many) environments, and then report in another.  It has not had much
real-world testing, so it may change in incompatible ways in the future.

- When constructing a :class:`coverage.Coverage` object, `data_file` can be
specified as None to prevent writing any data file at all.  In previous
versions, an explicit `data_file=None` argument would use the default of
&quot;.coverage&quot;. Fixes `issue 871`_.

- Python files run with ``-m`` now have ``__spec__`` defined properly.  This
fixes `issue 745`_ (about not being able to run unittest tests that spawn
subprocesses), and `issue 838`_, which described the problem directly.

- The ``[paths]`` configuration section is now ordered. If you specify more
than one list of patterns, the first one that matches will be used.  Fixes
`issue 649`_.

- The :func:`.coverage.numbits.register_sqlite_functions` function now also
registers `numbits_to_nums` for use in SQLite queries.  Thanks, Simon
Willison.

- Python 3.9a1 is supported.

- Coverage.py has a mascot: :ref:`Sleepy Snake &lt;sleepy&gt;`.

.. _issue 649: https://github.com/nedbat/coveragepy/issues/649
.. _issue 745: https://github.com/nedbat/coveragepy/issues/745
.. _issue 838: https://github.com/nedbat/coveragepy/issues/838
.. _issue 871: https://github.com/nedbat/coveragepy/issues/871


.. _changes_50b1:

5.0b1

----------------------------

- The HTML and textual reports now have a ``--skip-empty`` option that skips
files with no statements, notably ``__init__.py`` files.  Thanks, Reya B.

- Configuration can now be read from `TOML`_ files.  This requires installing
coverage.py with the ``[toml]`` extra.  The standard &quot;pyproject.toml&quot; file
will be read automatically if no other configuration file is found, with
settings in the ``[tool.coverage.]`` namespace.  Thanks to Frazer McLean for
implementation and persistence.  Finishes `issue 664`_.

- The ``[run] note`` setting has been deprecated. Using it will result in a
warning, and the note will not be written to the data file.  The
corresponding :class:`.CoverageData` methods have been removed.

- The HTML report has been reimplemented (no more table around the source
code). This allowed for a better presentation of the context information,
hopefully resolving `issue 855`_.

- Added sqlite3 module version information to ``coverage debug sys`` output.

- Asking the HTML report to show contexts (``[html] show_contexts=True`` or
``coverage html --show-contexts``) will issue a warning if there were no
contexts measured (`issue 851`_).

.. _TOML: https://github.com/toml-lang/tomlreadme
.. _issue 664: https://github.com/nedbat/coveragepy/issues/664
.. _issue 851: https://github.com/nedbat/coveragepy/issues/851
.. _issue 855: https://github.com/nedbat/coveragepy/issues/855


.. _changes_50a8:

5.0a8

----------------------------

- The :class:`.CoverageData` API has changed how queries are limited to
specific contexts.  Now you use :meth:`.CoverageData.set_query_context` to
set a single exact-match string, or :meth:`.CoverageData.set_query_contexts`
to set a list of regular expressions to match contexts.  This changes the
command-line ``--contexts`` option to use regular expressions instead of
filename-style wildcards.


.. _changes_50a7:

5.0a7

----------------------------

- Data can now be &quot;reported&quot; in JSON format, for programmatic use, as requested
in `issue 720`_.  The new ``coverage json`` command writes raw and summarized
data to a JSON file.  Thanks, Matt Bachmann.

- Dynamic contexts are now supported in the Python tracer, which is important
for PyPy users.  Closes `issue 846`_.

- The compact line number representation introduced in 5.0a6 is called a
&quot;numbits.&quot;  The :mod:`coverage.numbits` module provides functions for working
with them.

- The reporting methods used to permanently apply their arguments to the
configuration of the Coverage object.  Now they no longer do.  The arguments
affect the operation of the method, but do not persist.

- A class named &quot;test_something&quot; no longer confuses the ``test_function``
dynamic context setting.  Fixes `issue 829`_.

- Fixed an unusual tokenizing issue with backslashes in comments.  Fixes
`issue 822`_.

- ``debug=plugin`` didn&#39;t properly support configuration or dynamic context
plugins, but now it does, closing `issue 834`_.

.. _issue 720: https://github.com/nedbat/coveragepy/issues/720
.. _issue 822: https://github.com/nedbat/coveragepy/issues/822
.. _issue 834: https://github.com/nedbat/coveragepy/issues/834
.. _issue 829: https://github.com/nedbat/coveragepy/issues/829
.. _issue 846: https://github.com/nedbat/coveragepy/issues/846


.. _changes_50a6:

5.0a6

----------------------------

- Reporting on contexts. Big thanks to Stephan Richter and Albertas Agejevas
for the contribution.

- The ``--contexts`` option is available on the ``report`` and ``html``
 commands.  It&#39;s a comma-separated list of shell-style wildcards, selecting
 the contexts to report on.  Only contexts matching one of the wildcards
 will be included in the report.

- The ``--show-contexts`` option for the ``html`` command adds context
 information to each covered line.  Hovering over the &quot;ctx&quot; marker at the
 end of the line reveals a list of the contexts that covered the line.

- Database changes:

- Line numbers are now stored in a much more compact way.  For each file and
 context, a single binary string is stored with a bit per line number.  This
 greatly improves memory use, but makes ad-hoc use difficult.

- Dynamic contexts with no data are no longer written to the database.

- SQLite data storage is now faster.  There&#39;s no longer a reason to keep the
 JSON data file code, so it has been removed.

- Changes to the :class:`.CoverageData` interface:

- The new :meth:`.CoverageData.dumps` method serializes the data to a string,
 and a corresponding :meth:`.CoverageData.loads` method reconstitutes this
 data.  The format of the data string is subject to change at any time, and
 so should only be used between two installations of the same version of
 coverage.py.

- The :meth:`CoverageData constructor&lt;.CoverageData.__init__&gt;` has a new
 argument, `no_disk` (default: False).  Setting it to True prevents writing
 any data to the disk.  This is useful for transient data objects.

- Added the classmethod :meth:`.Coverage.current` to get the latest started
Coverage instance.

- Multiprocessing support in Python 3.8 was broken, but is now fixed.  Closes
`issue 828`_.

- Error handling during reporting has changed slightly.  All reporting methods
now behave the same.  The ``--ignore-errors`` option keeps errors from
stopping the reporting, but files that couldn&#39;t parse as Python will always
be reported as warnings.  As with other warnings, you can suppress them with
the ``[run] disable_warnings`` configuration setting.

- Coverage.py no longer fails if the user program deletes its current
directory. Fixes `issue 806`_.  Thanks, Dan Hemberger.

- The scrollbar markers in the HTML report now accurately show the highlighted
lines, regardless of what categories of line are highlighted.

- The hack to accommodate ShiningPanda_ looking for an obsolete internal data
file has been removed, since ShiningPanda 0.22 fixed it four years ago.

- The deprecated `Reporter.file_reporters` property has been removed.

.. _ShiningPanda: https://wiki.jenkins.io/display/JENKINS/ShiningPanda+Plugin
.. _issue 806: https://github.com/nedbat/coveragepy/pull/806
.. _issue 828: https://github.com/nedbat/coveragepy/issues/828


.. _changes_50a5:

5.0a5

----------------------------

- Drop support for Python 3.4

- Dynamic contexts can now be set two new ways, both thanks to Justas
Sadzevičius.

- A plugin can implement a ``dynamic_context`` method to check frames for
 whether a new context should be started.  See
 :ref:`dynamic_context_plugins` for more details.

- Another tool (such as a test runner) can use the new
 :meth:`.Coverage.switch_context` method to explicitly change the context.

- The ``dynamic_context = test_function`` setting now works with Python 2
old-style classes, though it only reports the method name, not the class it
was defined on.  Closes `issue 797`_.

- ``fail_under`` values more than 100 are reported as errors.  Thanks to Mike
Fiedler for closing `issue 746`_.

- The &quot;missing&quot; values in the text output are now sorted by line number, so
that missing branches are reported near the other lines they affect. The
values used to show all missing lines, and then all missing branches.

- Access to the SQLite database used for data storage is now thread-safe.
Thanks, Stephan Richter. This closes `issue 702`_.

- Combining data stored in SQLite is now about twice as fast, fixing `issue
761`_.  Thanks, Stephan Richter.

- The ``filename`` attribute on :class:`.CoverageData` objects has been made
private.  You can use the ``data_filename`` method to get the actual file
name being used to store data, and the ``base_filename`` method to get the
original filename before parallelizing suffixes were added.  This is part of
fixing `issue 708`_.

- Line numbers in the HTML report now align properly with source lines, even
when Chrome&#39;s minimum font size is set, fixing `issue 748`_.  Thanks Wen Ye.

.. _issue 702: https://github.com/nedbat/coveragepy/issues/702
.. _issue 708: https://github.com/nedbat/coveragepy/issues/708
.. _issue 746: https://github.com/nedbat/coveragepy/issues/746
.. _issue 748: https://github.com/nedbat/coveragepy/issues/748
.. _issue 761: https://github.com/nedbat/coveragepy/issues/761
.. _issue 797: https://github.com/nedbat/coveragepy/issues/797


.. _changes_50a4:

5.0a4

----------------------------

- You can specify the command line to run your program with the ``[run]
command_line`` configuration setting, as requested in `issue 695`_.

- Coverage will create directories as needed for the data file if they don&#39;t
exist, closing `issue 721`_.

- The ``coverage run`` command has always adjusted the first entry in sys.path,
to properly emulate how Python runs your program.  Now this adjustment is
skipped if sys.path[0] is already different than Python&#39;s default.  This
fixes `issue 715`_.

- Improvements to context support:

- The &quot;no such table: meta&quot; error is fixed.: `issue 716`_.

- Combining data files is now much faster.

- Python 3.8 (as of today!) passes all tests.

.. _issue 695: https://github.com/nedbat/coveragepy/issues/695
.. _issue 715: https://github.com/nedbat/coveragepy/issues/715
.. _issue 716: https://github.com/nedbat/coveragepy/issues/716
.. _issue 721: https://github.com/nedbat/coveragepy/issues/721


.. _changes_50a3:

5.0a3

----------------------------

- Context support: static contexts let you specify a label for a coverage run,
which is recorded in the data, and retained when you combine files.  See
:ref:`contexts` for more information.

- Dynamic contexts: specifying ``[run] dynamic_context = test_function`` in the
config file will record the test function name as a dynamic context during
execution.  This is the core of &quot;Who Tests What&quot; (`issue 170`_).  Things to
note:

- There is no reporting support yet.  Use SQLite to query the .coverage file
 for information.  Ideas are welcome about how reporting could be extended
 to use this data.

- There&#39;s a noticeable slow-down before any test is run.

- Data files will now be roughly N times larger, where N is the number of
 tests you have.  Combining data files is therefore also N times slower.

- No other values for ``dynamic_context`` are recognized yet.  Let me know
 what else would be useful.  I&#39;d like to use a pytest plugin to get better
 information directly from pytest, for example.

.. _issue 170: https://github.com/nedbat/coveragepy/issues/170

- Environment variable substitution in configuration files now supports two
syntaxes for controlling the behavior of undefined variables: if ``VARNAME``
is not defined, ``${VARNAME?}`` will raise an error, and ``${VARNAME-default
value}`` will use &quot;default value&quot;.

- Partial support for Python 3.8, which has not yet released an alpha. Fixes
`issue 707`_ and `issue 714`_.

.. _issue 707: https://github.com/nedbat/coveragepy/issues/707
.. _issue 714: https://github.com/nedbat/coveragepy/issues/714


.. _changes_50a2:

5.0a2

----------------------------

- Coverage&#39;s data storage has changed.  In version 4.x, .coverage files were
basically JSON.  Now, they are SQLite databases.  This means the data file
can be created earlier than it used to.  A large amount of code was
refactored to support this change.

- Because the data file is created differently than previous releases, you
 may need ``parallel=true`` where you didn&#39;t before.

- The old data format is still available (for now) by setting the environment
 variable COVERAGE_STORAGE=json. Please tell me if you think you need to
 keep the JSON format.

- The database schema is guaranteed to change in the future, to support new
 features.  I&#39;m looking for opinions about making the schema part of the
 public API to coverage.py or not.

- Development moved from `Bitbucket`_ to `GitHub`_.

- HTML files no longer have trailing and extra whitespace.

- The sort order in the HTML report is stored in local storage rather than
cookies, closing `issue 611`_.  Thanks, Federico Bond.

- pickle2json, for converting v3 data files to v4 data files, has been removed.

.. _Bitbucket: https://bitbucket.org
.. _GitHub: https://github.com/nedbat/coveragepy

.. _issue 611: https://github.com/nedbat/coveragepy/issues/611


.. _changes_50a1:

5.0a1

----------------------------

- Coverage.py no longer supports Python 2.6 or 3.3.

- The location of the configuration file can now be specified with a
``COVERAGE_RCFILE`` environment variable, as requested in `issue 650`_.

- Namespace packages are supported on Python 3.7, where they used to cause
TypeErrors about path being None. Fixes `issue 700`_.

- A new warning (``already-imported``) is issued if measurable files have
already been imported before coverage.py started measurement.  See
:ref:`cmd_warnings` for more information.

- Running coverage many times for small runs in a single process should be
faster, closing `issue 625`_.  Thanks, David MacIver.

- Large HTML report pages load faster.  Thanks, Pankaj Pandey.

.. _issue 625: https://github.com/nedbat/coveragepy/issues/625
.. _issue 650: https://github.com/nedbat/coveragepy/issues/650
.. _issue 700: https://github.com/nedbat/coveragepy/issues/700


.. _changes_454:

4.5.4

----------------------------

- Multiprocessing support in Python 3.8 was broken, but is now fixed.  Closes
`issue 828`_.

.. _issue 828: https://github.com/nedbat/coveragepy/issues/828


.. _changes_453:

4.5.3

----------------------------

- Only packaging metadata changes.


.. _changes_452:

4.5.2

----------------------------

- Namespace packages are supported on Python 3.7, where they used to cause
TypeErrors about path being None. Fixes `issue 700`_.

- Python 3.8 (as of today!) passes all tests.  Fixes `issue 707`_ and
`issue 714`_.

- Development moved from `Bitbucket`_ to `GitHub`_.

.. _issue 700: https://github.com/nedbat/coveragepy/issues/700
.. _issue 707: https://github.com/nedbat/coveragepy/issues/707
.. _issue 714: https://github.com/nedbat/coveragepy/issues/714

.. _Bitbucket: https://bitbucket.org
.. _GitHub: https://github.com/nedbat/coveragepy


.. _changes_451:

4.5.1

----------------------------

- Now that 4.5 properly separated the ``[run] omit`` and ``[report] omit``
settings, an old bug has become apparent.  If you specified a package name
for ``[run] source``, then omit patterns weren&#39;t matched inside that package.
This bug (`issue 638`_) is now fixed.

- On Python 3.7, reporting about a decorated function with no body other than a
docstring would crash coverage.py with an IndexError (`issue 640`_).  This is
now fixed.

- Configurer plugins are now reported in the output of ``--debug=sys``.

.. _issue 638: https://github.com/nedbat/coveragepy/issues/638
.. _issue 640: https://github.com/nedbat/coveragepy/issues/640


.. _changes_45:

4.5

--------------------------

- A new kind of plugin is supported: configurers are invoked at start-up to
allow more complex configuration than the .coveragerc file can easily do.
See :ref:`api_plugin` for details.  This solves the complex configuration
problem described in `issue 563`_.

- The ``fail_under`` option can now be a float.  Note that you must specify the
``[report] precision`` configuration option for the fractional part to be
used.  Thanks to Lars Hupfeldt Nielsen for help with the implementation.
Fixes `issue 631`_.

- The ``include`` and ``omit`` options can be specified for both the ``[run]``
and ``[report]`` phases of execution.  4.4.2 introduced some incorrect
interactions between those phases, where the options for one were confused
for the other.  This is now corrected, fixing `issue 621`_ and `issue 622`_.
Thanks to Daniel Hahler for seeing more clearly than I could.

- The ``coverage combine`` command used to always overwrite the data file, even
when no data had been read from apparently combinable files.  Now, an error
is raised if we thought there were files to combine, but in fact none of them
could be used.  Fixes `issue 629`_.

- The ``coverage combine`` command could get confused about path separators
when combining data collected on Windows with data collected on Linux, as
described in `issue 618`_.  This is now fixed: the result path always uses
the path separator specified in the ``[paths]`` result.

- On Windows, the HTML report could fail when source trees are deeply nested,
due to attempting to create HTML filenames longer than the 250-character
maximum.  Now filenames will never get much larger than 200 characters,
fixing `issue 627`_.  Thanks to Alex Sandro for helping with the fix.

.. _issue 563: https://github.com/nedbat/coveragepy/issues/563
.. _issue 618: https://github.com/nedbat/coveragepy/issues/618
.. _issue 621: https://github.com/nedbat/coveragepy/issues/621
.. _issue 622: https://github.com/nedbat/coveragepy/issues/622
.. _issue 627: https://github.com/nedbat/coveragepy/issues/627
.. _issue 629: https://github.com/nedbat/coveragepy/issues/629
.. _issue 631: https://github.com/nedbat/coveragepy/issues/631


.. _changes_442:

4.4.2

----------------------------

- Support for Python 3.7.  In some cases, class and module docstrings are no
longer counted in statement totals, which could slightly change your total
results.

- Specifying both ``--source`` and ``--include`` no longer silently ignores the
include setting, instead it displays a warning. Thanks, Loïc Dachary.  Closes
`issue 265`_ and `issue 101`_.

- Fixed a race condition when saving data and multiple threads are tracing
(`issue 581`_). It could produce a &quot;dictionary changed size during iteration&quot;
RuntimeError.  I believe this mostly but not entirely fixes the race
condition.  A true fix would likely be too expensive.  Thanks, Peter Baughman
for the debugging, and Olivier Grisel for the fix with tests.

- Configuration values which are file paths will now apply tilde-expansion,
closing `issue 589`_.

- Now secondary config files like tox.ini and setup.cfg can be specified
explicitly, and prefixed sections like `[coverage:run]` will be read. Fixes
`issue 588`_.

- Be more flexible about the command name displayed by help, fixing
`issue 600`_. Thanks, Ben Finney.

.. _issue 101: https://github.com/nedbat/coveragepy/issues/101
.. _issue 581: https://github.com/nedbat/coveragepy/issues/581
.. _issue 588: https://github.com/nedbat/coveragepy/issues/588
.. _issue 589: https://github.com/nedbat/coveragepy/issues/589
.. _issue 600: https://github.com/nedbat/coveragepy/issues/600


.. _changes_441:

4.4.1

----------------------------

- No code changes: just corrected packaging for Python 2.7 Linux wheels.


.. _changes_44:

4.4

--------------------------

- Reports could produce the wrong file names for packages, reporting ``pkg.py``
instead of the correct ``pkg/__init__.py``.  This is now fixed.  Thanks, Dirk
Thomas.

- XML reports could produce ``&lt;source&gt;`` and ``&lt;class&gt;`` lines that together
didn&#39;t specify a valid source file path.  This is now fixed. (`issue 526`_)

- Namespace packages are no longer warned as having no code. (`issue 572`_)

- Code that uses ``sys.settrace(sys.gettrace())`` in a file that wasn&#39;t being
coverage-measured would prevent correct coverage measurement in following
code. An example of this was running doctests programmatically. This is now
fixed. (`issue 575`_)

- Errors printed by the ``coverage`` command now go to stderr instead of
stdout.

- Running ``coverage xml`` in a directory named with non-ASCII characters would
fail under Python 2. This is now fixed. (`issue 573`_)

.. _issue 526: https://github.com/nedbat/coveragepy/issues/526
.. _issue 572: https://github.com/nedbat/coveragepy/issues/572
.. _issue 573: https://github.com/nedbat/coveragepy/issues/573
.. _issue 575: https://github.com/nedbat/coveragepy/issues/575

4.4b1

----------------------------

- Some warnings can now be individually disabled.  Warnings that can be
disabled have a short name appended.  The ``[run] disable_warnings`` setting
takes a list of these warning names to disable. Closes both `issue 96`_ and
`issue 355`_.

- The XML report now includes attributes from version 4 of the Cobertura XML
format, fixing `issue 570`_.

- In previous versions, calling a method that used collected data would prevent
further collection.  For example, `save()`, `report()`, `html_report()`, and
others would all stop collection.  An explicit `start()` was needed to get it
going again.  This is no longer true.  Now you can use the collected data and
also continue measurement. Both `issue 79`_ and `issue 448`_ described this
problem, and have been fixed.

- Plugins can now find unexecuted files if they choose, by implementing the
`find_executable_files` method.  Thanks, Emil Madsen.

- Minimal IronPython support. You should be able to run IronPython programs
under ``coverage run``, though you will still have to do the reporting phase
with CPython.

- Coverage.py has long had a special hack to support CPython&#39;s need to measure
the coverage of the standard library tests. This code was not installed by
kitted versions of coverage.py.  Now it is.

.. _issue 79: https://github.com/nedbat/coveragepy/issues/79
.. _issue 96: https://github.com/nedbat/coveragepy/issues/96
.. _issue 355: https://github.com/nedbat/coveragepy/issues/355
.. _issue 448: https://github.com/nedbat/coveragepy/issues/448
.. _issue 570: https://github.com/nedbat/coveragepy/issues/570


.. _changes_434:

4.3.4

----------------------------

- Fixing 2.6 in version 4.3.3 broke other things, because the too-tricky
exception wasn&#39;t properly derived from Exception, described in `issue 556`_.
A newb mistake; it hasn&#39;t been a good few days.

.. _issue 556: https://github.com/nedbat/coveragepy/issues/556


.. _changes_433:

4.3.3

----------------------------

- Python 2.6 support was broken due to a testing exception imported for the
benefit of the coverage.py test suite.  Properly conditionalizing it fixed
`issue 554`_ so that Python 2.6 works again.

.. _issue 554: https://github.com/nedbat/coveragepy/issues/554


.. _changes_432:

4.3.2

----------------------------

- Using the ``--skip-covered`` option on an HTML report with 100% coverage
would cause a &quot;No data to report&quot; error, as reported in `issue 549`_. This is
now fixed; thanks, Loïc Dachary.

- If-statements can be optimized away during compilation, for example, `if 0:`
or `if __debug__:`.  Coverage.py had problems properly understanding these
statements which existed in the source, but not in the compiled bytecode.
This problem, reported in `issue 522`_, is now fixed.

- If you specified ``--source`` as a directory, then coverage.py would look for
importable Python files in that directory, and could identify ones that had
never been executed at all.  But if you specified it as a package name, that
detection wasn&#39;t performed.  Now it is, closing `issue 426`_. Thanks to Loïc
Dachary for the fix.

- If you started and stopped coverage measurement thousands of times in your
process, you could crash Python with a &quot;Fatal Python error: deallocating
None&quot; error.  This is now fixed.  Thanks to Alex Groce for the bug report.

- On PyPy, measuring coverage in subprocesses could produce a warning: &quot;Trace
function changed, measurement is likely wrong: None&quot;.  This was spurious, and
has been suppressed.

- Previously, coverage.py couldn&#39;t start on Jython, due to that implementation
missing the multiprocessing module (`issue 551`_). This problem has now been
fixed. Also, `issue 322`_ about not being able to invoke coverage
conveniently, seems much better: ``jython -m coverage run myprog.py`` works
properly.

- Let&#39;s say you ran the HTML report over and over again in the same output
directory, with ``--skip-covered``. And imagine due to your heroic
test-writing efforts, a file just achieved the goal of 100% coverage. With
coverage.py 4.3, the old HTML file with the less-than-100% coverage would be
left behind.  This file is now properly deleted.

.. _issue 322: https://github.com/nedbat/coveragepy/issues/322
.. _issue 426: https://github.com/nedbat/coveragepy/issues/426
.. _issue 522: https://github.com/nedbat/coveragepy/issues/522
.. _issue 549: https://github.com/nedbat/coveragepy/issues/549
.. _issue 551: https://github.com/nedbat/coveragepy/issues/551


.. _changes_431:

4.3.1

----------------------------

- Some environments couldn&#39;t install 4.3, as described in `issue 540`_. This is
now fixed.

- The check for conflicting ``--source`` and ``--include`` was too simple in a
few different ways, breaking a few perfectly reasonable use cases, described
in `issue 541`_.  The check has been reverted while we re-think the fix for
`issue 265`_.

.. _issue 540: https://github.com/nedbat/coveragepy/issues/540
.. _issue 541: https://github.com/nedbat/coveragepy/issues/541


.. _changes_43:

4.3

--------------------------

Special thanks to **Loïc Dachary**, who took an extraordinary interest in
coverage.py and contributed a number of improvements in this release.

- Subprocesses that are measured with `automatic subprocess measurement`_ used
to read in any pre-existing data file.  This meant data would be incorrectly
carried forward from run to run.  Now those files are not read, so each
subprocess only writes its own data. Fixes `issue 510`_.

- The ``coverage combine`` command will now fail if there are no data files to
combine. The combine changes in 4.2 meant that multiple combines could lose
data, leaving you with an empty .coverage data file. Fixes
`issue 525`_, `issue 412`_, `issue 516`_, and probably `issue 511`_.

- Coverage.py wouldn&#39;t execute `sys.excepthook`_ when an exception happened in
your program.  Now it does, thanks to Andrew Hoos.  Closes `issue 535`_.

- Branch coverage fixes:

- Branch coverage could misunderstand a finally clause on a try block that
 never continued on to the following statement, as described in `issue
 493`_.  This is now fixed. Thanks to Joe Doherty for the report and Loïc
 Dachary for the fix.

- A while loop with a constant condition (while True) and a continue
 statement would be mis-analyzed, as described in `issue 496`_. This is now
 fixed, thanks to a bug report by Eli Skeggs and a fix by Loïc Dachary.

- While loops with constant conditions that were never executed could result
 in a non-zero coverage report.  Artem Dayneko reported this in `issue
 502`_, and Loïc Dachary provided the fix.

- The HTML report now supports a ``--skip-covered`` option like the other
reporting commands.  Thanks, Loïc Dachary for the implementation, closing
`issue 433`_.

- Options can now be read from a tox.ini file, if any. Like setup.cfg, sections
are prefixed with &quot;coverage:&quot;, so ``[run]`` options will be read from the
``[coverage:run]`` section of tox.ini. Implements part of `issue 519`_.
Thanks, Stephen Finucane.

- Specifying both ``--source`` and ``--include`` no longer silently ignores the
include setting, instead it fails with a message. Thanks, Nathan Land and
Loïc Dachary. Closes `issue 265`_.

- The ``Coverage.combine`` method has a new parameter, ``strict=False``, to
support failing if there are no data files to combine.

- When forking subprocesses, the coverage data files would have the same random
number appended to the file name. This didn&#39;t cause problems, because the
file names had the process id also, making collisions (nearly) impossible.
But it was disconcerting.  This is now fixed.

- The text report now properly sizes headers when skipping some files, fixing
`issue 524`_. Thanks, Anthony Sottile and Loïc Dachary.

- Coverage.py can now search .pex files for source, just as it can .zip and
.egg.  Thanks, Peter Ebden.

- Data files are now about 15% smaller.

- Improvements in the ``[run] debug`` setting:

- The &quot;dataio&quot; debug setting now also logs when data files are deleted during
 combining or erasing.

- A new debug option, &quot;multiproc&quot;, for logging the behavior of
 ``concurrency=multiprocessing``.

- If you used the debug options &quot;config&quot; and &quot;callers&quot; together, you&#39;d get a
 call stack printed for every line in the multi-line config output. This is
 now fixed.

- Fixed an unusual bug involving multiple coding declarations affecting code
containing code in multi-line strings: `issue 529`_.

- Coverage.py will no longer be misled into thinking that a plain file is a
package when interpreting ``--source`` options.  Thanks, Cosimo Lupo.

- If you try to run a non-Python file with coverage.py, you will now get a more
useful error message. `Issue 514`_.

- The default pragma regex changed slightly, but this will only matter to you
if you are deranged and use mixed-case pragmas.

- Deal properly with non-ASCII file names in an ASCII-only world, `issue 533`_.

- Programs that set Unicode configuration values could cause UnicodeErrors when
generating HTML reports.  Pytest-cov is one example.  This is now fixed.

- Prevented deprecation warnings from configparser that happened in some
circumstances, closing `issue 530`_.

- Corrected the name of the jquery.ba-throttle-debounce.js library. Thanks,
Ben Finney.  Closes `issue 505`_.

- Testing against PyPy 5.6 and PyPy3 5.5.

- Switched to pytest from nose for running the coverage.py tests.

- Renamed AUTHORS.txt to CONTRIBUTORS.txt, since there are other ways to
contribute than by writing code. Also put the count of contributors into the
author string in setup.py, though this might be too cute.

.. _sys.excepthook: https://docs.python.org/3/library/sys.htmlsys.excepthook
.. _issue 265: https://github.com/nedbat/coveragepy/issues/265
.. _issue 412: https://github.com/nedbat/coveragepy/issues/412
.. _issue 433: https://github.com/nedbat/coveragepy/issues/433
.. _issue 493: https://github.com/nedbat/coveragepy/issues/493
.. _issue 496: https://github.com/nedbat/coveragepy/issues/496
.. _issue 502: https://github.com/nedbat/coveragepy/issues/502
.. _issue 505: https://github.com/nedbat/coveragepy/issues/505
.. _issue 514: https://github.com/nedbat/coveragepy/issues/514
.. _issue 510: https://github.com/nedbat/coveragepy/issues/510
.. _issue 511: https://github.com/nedbat/coveragepy/issues/511
.. _issue 516: https://github.com/nedbat/coveragepy/issues/516
.. _issue 519: https://github.com/nedbat/coveragepy/issues/519
.. _issue 524: https://github.com/nedbat/coveragepy/issues/524
.. _issue 525: https://github.com/nedbat/coveragepy/issues/525
.. _issue 529: https://github.com/nedbat/coveragepy/issues/529
.. _issue 530: https://github.com/nedbat/coveragepy/issues/530
.. _issue 533: https://github.com/nedbat/coveragepy/issues/533
.. _issue 535: https://github.com/nedbat/coveragepy/issues/535


.. _changes_42:

4.2

--------------------------

- Since ``concurrency=multiprocessing`` uses subprocesses, options specified on
the coverage.py command line will not be communicated down to them.  Only
options in the configuration file will apply to the subprocesses.
Previously, the options didn&#39;t apply to the subprocesses, but there was no
indication.  Now it is an error to use ``--concurrency=multiprocessing`` and
other run-affecting options on the command line.  This prevents
failures like those reported in `issue 495`_.

- Filtering the HTML report is now faster, thanks to Ville Skyttä.

.. _issue 495: https://github.com/nedbat/coveragepy/issues/495

4.2b1

----------------------------

Work from the PyCon 2016 Sprints!

- BACKWARD INCOMPATIBILITY: the ``coverage combine`` command now ignores an
existing ``.coverage`` data file.  It used to include that file in its
combining.  This caused confusing results, and extra tox &quot;clean&quot; steps.  If
you want the old behavior, use the new ``coverage combine --append`` option.

- The ``concurrency`` option can now take multiple values, to support programs
using multiprocessing and another library such as eventlet.  This is only
possible in the configuration file, not from the command line. The
configuration file is the only way for sub-processes to all run with the same
options.  Fixes `issue 484`_.  Thanks to Josh Williams for prototyping.

- Using a ``concurrency`` setting of ``multiprocessing`` now implies
``--parallel`` so that the main program is measured similarly to the
sub-processes.

- When using `automatic subprocess measurement`_, running coverage commands
would create spurious data files.  This is now fixed, thanks to diagnosis and
testing by Dan Riti.  Closes `issue 492`_.

- A new configuration option, ``report:sort``, controls what column of the
text report is used to sort the rows.  Thanks to Dan Wandschneider, this
closes `issue 199`_.

- The HTML report has a more-visible indicator for which column is being
sorted.  Closes `issue 298`_, thanks to Josh Williams.

- If the HTML report cannot find the source for a file, the message now
suggests using the ``-i`` flag to allow the report to continue. Closes
`issue 231`_, thanks, Nathan Land.

- When reports are ignoring errors, there&#39;s now a warning if a file cannot be
parsed, rather than being silently ignored.  Closes `issue 396`_. Thanks,
Matthew Boehm.

- A new option for ``coverage debug`` is available: ``coverage debug config``
shows the current configuration.  Closes `issue 454`_, thanks to Matthew
Boehm.

- Running coverage as a module (``python -m coverage``) no longer shows the
program name as ``__main__.py``.  Fixes `issue 478`_.  Thanks, Scott Belden.

- The `test_helpers` module has been moved into a separate pip-installable
package: `unittest-mixins`_.

.. _automatic subprocess measurement: https://coverage.readthedocs.io/en/latest/subprocess.html
.. _issue 199: https://github.com/nedbat/coveragepy/issues/199
.. _issue 231: https://github.com/nedbat/coveragepy/issues/231
.. _issue 298: https://github.com/nedbat/coveragepy/issues/298
.. _issue 396: https://github.com/nedbat/coveragepy/issues/396
.. _issue 454: https://github.com/nedbat/coveragepy/issues/454
.. _issue 478: https://github.com/nedbat/coveragepy/issues/478
.. _issue 484: https://github.com/nedbat/coveragepy/issues/484
.. _issue 492: https://github.com/nedbat/coveragepy/issues/492
.. _unittest-mixins: https://pypi.org/project/unittest-mixins/


.. _changes_41:

4.1

--------------------------

- The internal attribute `Reporter.file_reporters` was removed in 4.1b3.  It
should have come has no surprise that there were third-party tools out there
using that attribute.  It has been restored, but with a deprecation warning.

4.1b3

----------------------------

- When running your program, execution can jump from an ``except X:`` line to
some other line when an exception other than ``X`` happens.  This jump is no
longer considered a branch when measuring branch coverage.

- When measuring branch coverage, ``yield`` statements that were never resumed
were incorrectly marked as missing, as reported in `issue 440`_.  This is now
fixed.

- During branch coverage of single-line callables like lambdas and generator
expressions, coverage.py can now distinguish between them never being called,
or being called but not completed.  Fixes `issue 90`_, `issue 460`_ and
`issue 475`_.

- The HTML report now has a map of the file along the rightmost edge of the
page, giving an overview of where the missed lines are.  Thanks, Dmitry
Shishov.

- The HTML report now uses different monospaced fonts, favoring Consolas over
Courier.  Along the way, `issue 472`_ about not properly handling one-space
indents was fixed.  The index page also has slightly different styling, to
try to make the clickable detail pages more apparent.

- Missing branches reported with ``coverage report -m`` will now say ``-&gt;exit``
for missed branches to the exit of a function, rather than a negative number.
Fixes `issue 469`_.

- ``coverage --help`` and ``coverage --version`` now mention which tracer is
installed, to help diagnose problems. The docs mention which features need
the C extension. (`issue 479`_)

- Officially support PyPy 5.1, which required no changes, just updates to the
docs.

- The `Coverage.report` function had two parameters with non-None defaults,
which have been changed.  `show_missing` used to default to True, but now
defaults to None.  If you had been calling `Coverage.report` without
specifying `show_missing`, you&#39;ll need to explicitly set it to True to keep
the same behavior.  `skip_covered` used to default to False. It is now None,
which doesn&#39;t change the behavior.  This fixes `issue 485`_.

- It&#39;s never been possible to pass a namespace module to one of the analysis
functions, but now at least we raise a more specific error message, rather
than getting confused. (`issue 456`_)

- The `coverage.process_startup` function now returns the `Coverage` instance
it creates, as suggested in `issue 481`_.

- Make a small tweak to how we compare threads, to avoid buggy custom
comparison code in thread classes. (`issue 245`_)

.. _issue 90: https://github.com/nedbat/coveragepy/issues/90
.. _issue 245: https://github.com/nedbat/coveragepy/issues/245
.. _issue 440: https://github.com/nedbat/coveragepy/issues/440
.. _issue 456: https://github.com/nedbat/coveragepy/issues/456
.. _issue 460: https://github.com/nedbat/coveragepy/issues/460
.. _issue 469: https://github.com/nedbat/coveragepy/issues/469
.. _issue 472: https://github.com/nedbat/coveragepy/issues/472
.. _issue 475: https://github.com/nedbat/coveragepy/issues/475
.. _issue 479: https://github.com/nedbat/coveragepy/issues/479
.. _issue 481: https://github.com/nedbat/coveragepy/issues/481
.. _issue 485: https://github.com/nedbat/coveragepy/issues/485

4.1b2

----------------------------

- Problems with the new branch measurement in 4.1 beta 1 were fixed:

- Class docstrings were considered executable.  Now they no longer are.

- ``yield from`` and ``await`` were considered returns from functions, since
 they could transfer control to the caller.  This produced unhelpful
 &quot;missing branch&quot; reports in a number of circumstances.  Now they no longer
 are considered returns.

- In unusual situations, a missing branch to a negative number was reported.
 This has been fixed, closing `issue 466`_.

- The XML report now produces correct package names for modules found in
directories specified with ``source=``.  Fixes `issue 465`_.

- ``coverage report`` won&#39;t produce trailing whitespace.

.. _issue 465: https://github.com/nedbat/coveragepy/issues/465
.. _issue 466: https://github.com/nedbat/coveragepy/issues/466

4.1b1

----------------------------

- Branch analysis has been rewritten: it used to be based on bytecode, but now
uses AST analysis.  This has changed a number of things:

- More code paths are now considered runnable, especially in
 ``try``/``except`` structures.  This may mean that coverage.py will
 identify more code paths as uncovered.  This could either raise or lower
 your overall coverage number.

- Python 3.5&#39;s ``async`` and ``await`` keywords are properly supported,
 fixing `issue 434`_.

- Some long-standing branch coverage bugs were fixed:

 - `issue 129`_: functions with only a docstring for a body would
   incorrectly report a missing branch on the ``def`` line.

 - `issue 212`_: code in an ``except`` block could be incorrectly marked as
   a missing branch.

 - `issue 146`_: context managers (``with`` statements) in a loop or ``try``
   block could confuse the branch measurement, reporting incorrect partial
   branches.

 - `issue 422`_: in Python 3.5, an actual partial branch could be marked as
   complete.

- Pragmas to disable coverage measurement can now be used on decorator lines,
and they will apply to the entire function or class being decorated.  This
implements the feature requested in `issue 131`_.

- Multiprocessing support is now available on Windows.  Thanks, Rodrigue
Cloutier.

- Files with two encoding declarations are properly supported, fixing
`issue 453`_. Thanks, Max Linke.

- Non-ascii characters in regexes in the configuration file worked in 3.7, but
stopped working in 4.0.  Now they work again, closing `issue 455`_.

- Form-feed characters would prevent accurate determination of the beginning of
statements in the rest of the file.  This is now fixed, closing `issue 461`_.

.. _issue 129: https://github.com/nedbat/coveragepy/issues/129
.. _issue 131: https://github.com/nedbat/coveragepy/issues/131
.. _issue 146: https://github.com/nedbat/coveragepy/issues/146
.. _issue 212: https://github.com/nedbat/coveragepy/issues/212
.. _issue 422: https://github.com/nedbat/coveragepy/issues/422
.. _issue 434: https://github.com/nedbat/coveragepy/issues/434
.. _issue 453: https://github.com/nedbat/coveragepy/issues/453
.. _issue 455: https://github.com/nedbat/coveragepy/issues/455
.. _issue 461: https://github.com/nedbat/coveragepy/issues/461


.. _changes_403:

</details>

<details> <summary>Links</summary>

  • PyPI: https://pypi.org/project/coverage
  • Changelog: https://pyup.io/changelogs/coverage/
  • Repo: https://github.com/nedbat/coveragepy </details>
+1 -1

0 comment

1 changed file

pr created time in a month

PR opened alisaifee/jira-cli

Pin keyrings.alt to latest version 4.0.2

This PR pins keyrings.alt to the latest release 4.0.2.

<details> <summary>Changelog</summary>

4.0.2

======

43: Tests are no longer included in the install.

4.0.1

======

Package refresh and minor cleanup.

4.0.0

======

41: Instead of PyCrypto or PyCryptodome, the encrypting backend
now relies on PyCryptodomex.

3.5.2

======

39: Replace use of deprecated ``base64.encode/decodestring``
with ``encode/decodebytes``.

3.5.1

======

38: Fixed test suite to work with pytest-based fixtures.

Refresh package metadata.

3.5.0

======

33: Rely on keyring.testing (keyring 20) for tests.

3.4.0

======

In tests, pin keyring major version.

3.3.0

======

Drop support for Python 3.5 and earlier.

3.2.0

======

In tests, rely on pycryptodome instead of pycrypto for improved
compatibility.

In tests, rely on pytest instead of unittest.

3.1.1

=====

31: Trap AttributeError in Gnome backend as in some environments
it seems that will happen.

30: Fix issue where a backslash in the service name would cause
errors on Registry backend on Windows.

3.1

===

``keyrings.alt`` no longer depends on the ``keyring.util.escape``
module.

3.0

===

``keyrings`` namespace should now use the pkgutil native technique
rather than relying on pkg_resources.

2.4

===

24: File based backends now reject non-string types for passwords.

2.3

===

21: Raise ValueError on blank username in plaintext
keyring, unsupported in the storage format.

2.2

===

17: Drop dependency on keyring.py27compat and use six
instead.

16: Minor tweaks to file-based backends.

2.1

===

Add persistent scheme and version tags for file based backends.
Prepare for associated data handling in file based schemes.

2.0

===

12: Drop kwallet support, now superseded by the dual kwallet
support in keyring.

1.3

===

9: Moved base file backend functionality from &#39;keyrings.alt.file&#39;
to &#39;keyrings.alt.base_file&#39;. This allows the &#39;Windows&#39; module to
no longer trigger a circular import with the &#39;file&#39; module.

1.2

===

Updated project skeleton. Tests now run under tox. Tagged
commits are automatically released to PyPI.

6: Added license file.

1.1.1

=====

Test cleanup.

Exclude tests during install.

1.1

===

FileBacked backends now have a ``repr`` that includes the file path.

1.0

===

Initial release based on Keyring 7.3.

</details>

<details> <summary>Links</summary>

  • PyPI: https://pypi.org/project/keyrings.alt
  • Changelog: https://pyup.io/changelogs/keyrings.alt/
  • Repo: https://github.com/jaraco/keyrings.alt </details>
+1 -1

0 comment

1 changed file

pr created time in a month

PR opened alisaifee/jira-cli

Pin codecov to latest version 2.1.11

This PR pins codecov to the latest release 2.1.11.

<details> <summary>Changelog</summary>

2.1.11

Fixes
- 305 Added option to disable printing of gcov-out
- 308 Handle exceptions that don&#39;t have a returncode

Dependencies and Misc
- 301 Update to Python 3.9

2.1.10

Fixes
- [148](https://github.com/codecov/codecov-python/pull/148) Output elapsed time with S3 upload
- [153](https://github.com/codecov/codecov-python/pull/153) Improve error reporting in the &quot;try_run&quot; function and correctly include original command output in the error message
- [295](https://github.com/codecov/codecov-python/pull/295) Added sleep between upload retries.
- [297](https://github.com/codecov/codecov-python/pull/297) Ignore emacs lisp files
- [298](https://github.com/codecov/codecov-python/pull/298) Fix error try_to_run using | without shell=True (fix 284)

Dependencies and Misc
- [290](https://github.com/codecov/codecov-python/pull/290) Bump coverage from 4.5.4 to 5.2.1
- [291](https://github.com/codecov/codecov-python/pull/291) Update python versions
- [292](https://github.com/codecov/codecov-python/pull/292) Add license scan report and status
- [294](https://github.com/codecov/codecov-python/pull/294) Update README with accurate links
- [296](https://github.com/codecov/codecov-python/pull/296) Bump coverage from 5.2.1 to 5.3

2.1.9

- [289](https://github.com/codecov/codecov-python/pull/289)Remove token restriction as it is changed server-side

2.1.8

- [285](https://github.com/codecov/codecov-python/pull/285)Add support for CODECOV_FLAGS
- [276](https://github.com/codecov/codecov-python/pull/276)Add ability to specify number of upload retries

2.1.7

- [279](https://github.com/codecov/codecov-python/pull/279) Fix pinned coverage version

2.1.6

- [275](https://github.com/codecov/codecov-python/pull/275) Fix GitHub Actions implementation

2.1.5

- [273](https://github.com/codecov/codecov-python/pull/273) Implement retries on Codecov API calls
- [265](https://github.com/codecov/codecov-python/pull/265) Add GitHub Actions CI detection
- [267](https://github.com/codecov/codecov-python/pull/267) Add CODECOV_NAME as default for name

2.1.4

- [260](https://github.com/codecov/codecov-python/pull/260) Enforce black formatting
- [169](https://github.com/codecov/codecov-python/pull/169) Fix command line quoting on Windows
- [216](https://github.com/codecov/codecov-python/pull/216) Fix GitLab CI project directory detection on Windows
- [264](https://github.com/codecov/codecov-python/pull/264) Fix GitLab CI post version 9
- [262](https://github.com/codecov/codecov-python/pull/262) Check text for NoneType on writes
- [266](https://github.com/codecov/codecov-python/pull/266) Include the cacert in the PUT call when uploading to S3
- [263](https://github.com/codecov/codecov-python/pull/263) Fixed gcov not being found in certain instances

2.1.3

- Fix find command not working on Windows
- Add support for gzipping reports
- Dynamic syncing of version

2.1.1

- Fix command when neither hg or git are not available

2.1.0

- Remove x-amz-acl header
- Reformat with Black

2.0.22

- Cleaning TOC generation

2.0.21

- fixed string issues

2.0.20

- fixed broken subprocess handling

2.0.19

- fixed broken subprocess handling

2.0.18

- fixed broken subprocess handling

2.0.17

- fixed reported command injection vulnerability.

2.0.16

- fixed reported command injection vulnerability.

2.0.15

- add `-X s3` to disable direct to S3 uploading

2.0.14

- fixed coverage combine

2.0.13

- fix encoding issues

2.0.12

- revert merge commit fix, back to old way

2.0.11

- fix merge commit when it&#39;s a pull request
- remove snapci, business closed
- skip vendor directories for gcov parsing
- run coverage combine not merge
- fix report encoding

2.0.10

- fix uploading when reports contain characters outside of latin-1
- remove reduced_redundancy header from

2.0.7

- Add `--name/-n` to cli
- Add support for Jenkins Blue
- Fix environment variable joining
- Add Greenhouse CI detection
- Fix GitLab detection
- Add default `VCS_*` environment
- Auto-merge py-coverage
- Remove Xcode processing support, please use bash uploader.
- Support yaml:token and yaml:slug

2.0.5

- Use `%20` for encoding spaces [appveyor] https://github.com/codecov/codecov-python/pull/66

2.0.4

- fix detecting merge commits on all CI, not just Travis

2.0.3

- add `-F` to flagging uploads [new feature]
- fixed some reports ascii chars
- added `--pr` flag for manually specifing pulls
- added `--tag` flag for manually git tags
- added env detection for Travis
- added buildkite detection
- added teamcity detection
- added more snapci detection
- detect `codecov.yml` file detection
- depreciating xcode support, use [bash uploader](https://github.com/codecov/codecov-bash)
- hide token from stdout

1.6.4

- fix gitlab project directory
- fallback on git branch/commit
- fix using gcov_exec

1.6.0

- depreciate `--no-fail` now a default
- add `--required` to fail the build if Codecov fails
- added `--cacerts` for enterprise customers
- added fix reports http://bit.ly/1O4eBpt

1.5.0

- fix retreiving mercurial commit
- add support for swift/xcode7 profdata
- now uploading direct-to-s3 to improve product performance
- not require branch, will default to `master` (the default branch)
- fix drone.io commit number, which is not a full 40 sha.

1.4.1

- added `--no-fail` to prevent failing builds when missing configuration or Codecov errors

1.4.0

- Ignore other known bad files/paths
- Added test suite to test against example repositories
- Using `coverage xml -i` to ignore No source for code errors
- Cleaned up command output with help and colors
- Added `gcov` processing, see `codecov --help` for more info.

1.3.1

- Ignore other known bad files/paths
- Fix issue with decoding files in py3+

1.3.0

- Refactor project to be a global uploader for more reports

1.2.3

- Remove `test-results.xml`, not a coverage file
- Add CircleCI container numbers

1.2.2

- bring back client-side pre-processing for jacoco (they can crush)

1.2.1

- accept any file ending in `coverge.xml`

1.2.0

- accept `nosetests.xml` and `test-results.xml` files
- no longer do client side pre-processing, upload raw
- capture SEMAPHORE_CURRENT_THREAD

1.1.13

- added --build arg for advanced usage

1.1.10

- fix package for 2.6 on windows
- fix showing `--help` when called in non-git backed repo
- fix AppVeyor public repos

1.1.8

- support GitLab CI Runner
- added rollbar to help bugs if presented
- added more filepath matching
- pep8 cleanup
- added Shippable ci

1.1.7

- support for D lang added, special thanks to ColdenCullen
- Wercker CI supported by Robpol86
- fixed Drone build number

1.1.6

- fix semaphore commit revision number
- preprocess reports from xml

1.1.5

- search for all `lcov|gcov` files
- depreciate `--min-coverage`, use GitHub Status Update feature
- pre-process xml =&gt; json

1.1.4

- added support for pyhton 2.6 by Robpol86
- added AppVeyor support by Robpol86

1.1.3

- added more ignore paths

1.1.2

- search for `lcov.info` files
- pause for `.1` before checking for min-coverage
- accept `--env` variables which are stored in front-end for build specs

1.1.1

- build python coverage xml only when no reports found to fix overriding reports
- now defaulting output to **plain text**. Use `--json` to return json results
- added `jacocoTestReport.xml` to search list
- changed `--min-coverage` waiting methods to, `5 tries  15s` each
- added `Sites/www/bower` and `node_modules` to ignored table of contents

</details>

<details> <summary>Links</summary>

  • PyPI: https://pypi.org/project/codecov
  • Changelog: https://pyup.io/changelogs/codecov/
  • Repo: https://github.com/codecov/codecov-python </details>
+1 -1

0 comment

1 changed file

pr created time in a month

startedalisaifee/flask-limiter

started time in a month

issue closedalisaifee/flask-limiter

Custom cost per route

I'm writing an app with some routes that cost more computationally. Therefore I would like some routes to deduct more than 1 from from quota every time the route is requested. For example the limit decorator could take a cost parameter that by default is equal to 1, but could be set to someting like 5 if a request to that route costs 5 times as much as a standard request.

Expanding on this idea a bit, it would be interesting if the cost could be calculated from the Response rather than static per route. This could enable the limiter to track "true" cost where the cost is something like CPU time. So a request that costs a lot of CPU time would be fulfilled, and the Response made, but then before passing the result onto the end user, a certain amount is deducted from their quota. I guess this could be implemented by having the cost parameter on the limiter accept a callable (which gets called with the flask response).

closed time in a month

bkanuka

PR opened alisaifee/jira-cli

Pin requests to latest version 2.25.1

This PR pins requests to the latest release 2.25.1.

<details> <summary>Changelog</summary>

2.25.1

-------------------

**Bugfixes**

- Requests now treats `application/json` as `utf8` by default. Resolving
inconsistencies between `r.text` and `r.json` output. (5673)

**Dependencies**

- Requests now supports chardet v4.x.

2.25.0

------------------

**Improvements**

- Added support for NETRC environment variable. (5643)

**Dependencies**

- Requests now supports urllib3 v1.26.

**Deprecations**

- Requests v2.25.x will be the last release series with support for Python 3.5.
- The `requests[security]` extra is officially deprecated and will be removed
in Requests v2.26.0.

2.24.0

-------------------

**Improvements**

- pyOpenSSL TLS implementation is now only used if Python
either doesn&#39;t have an `ssl` module or doesn&#39;t support
SNI. Previously pyOpenSSL was unconditionally used if available.
This applies even if pyOpenSSL is installed via the
`requests[security]` extra (5443)

- Redirect resolution should now only occur when
`allow_redirects` is True. (5492)

- No longer perform unnecessary Content-Length calculation for
requests that won&#39;t use it. (5496)

2.23.0

-------------------

**Improvements**

- Remove defunct reference to `prefetch` in Session `__attrs__` (5110)

**Bugfixes**

- Requests no longer outputs password in basic auth usage warning. (5099)

**Dependencies**

- Pinning for `chardet` and `idna` now uses major version instead of minor.
This hopefully reduces the need for releases everytime a dependency is updated.

2.22.0

-------------------

**Dependencies**

- Requests now supports urllib3 v1.25.2.
(note: 1.25.0 and 1.25.1 are incompatible)

**Deprecations**

- Requests has officially stopped support for Python 3.4.

2.21.0

-------------------

**Dependencies**

- Requests now supports idna v2.8.

2.20.1

-------------------

**Bugfixes**

- Fixed bug with unintended Authorization header stripping for
redirects using default ports (http/80, https/443).

2.20.0

-------------------

**Bugfixes**

-   Content-Type header parsing is now case-insensitive (e.g.
 charset=utf8 v Charset=utf8).
-   Fixed exception leak where certain redirect urls would raise
 uncaught urllib3 exceptions.
-   Requests removes Authorization header from requests redirected
 from https to http on the same hostname. (CVE-2018-18074)
-   `should_bypass_proxies` now handles URIs without hostnames (e.g.
 files).

**Dependencies**

- Requests now supports urllib3 v1.24.

**Deprecations**

- Requests has officially stopped support for Python 2.6.

2.19.1

-------------------

**Bugfixes**

-   Fixed issue where status\_codes.py&#39;s `init` function failed trying
 to append to a `__doc__` value of `None`.

2.19.0

-------------------

**Improvements**

-   Warn user about possible slowdown when using cryptography version
 &amp;lt; 1.3.4
-   Check for invalid host in proxy URL, before forwarding request to
 adapter.
-   Fragments are now properly maintained across redirects. (RFC7231
 7.1.2)
-   Removed use of cgi module to expedite library load time.
-   Added support for SHA-256 and SHA-512 digest auth algorithms.
-   Minor performance improvement to `Request.content`.
-   Migrate to using collections.abc for 3.7 compatibility.

**Bugfixes**

-   Parsing empty `Link` headers with `parse_header_links()` no longer
 return one bogus entry.
-   Fixed issue where loading the default certificate bundle from a zip
 archive would raise an `IOError`.
-   Fixed issue with unexpected `ImportError` on windows system which do
 not support `winreg` module.
-   DNS resolution in proxy bypass no longer includes the username and
 password in the request. This also fixes the issue of DNS queries
 failing on macOS.
-   Properly normalize adapter prefixes for url comparison.
-   Passing `None` as a file pointer to the `files` param no longer
 raises an exception.
-   Calling `copy` on a `RequestsCookieJar` will now preserve the cookie
 policy correctly.

**Dependencies**

-   We now support idna v2.7.
-   We now support urllib3 v1.23.

2.18.4

-------------------

**Improvements**

-   Error messages for invalid headers now include the header name for
 easier debugging

**Dependencies**

-   We now support idna v2.6.

2.18.3

-------------------

**Improvements**

-   Running `$ python -m requests.help` now includes the installed
 version of idna.

**Bugfixes**

-   Fixed issue where Requests would raise `ConnectionError` instead of
 `SSLError` when encountering SSL problems when using urllib3 v1.22.

2.18.2

-------------------

**Bugfixes**

-   `requests.help` no longer fails on Python 2.6 due to the absence of
 `ssl.OPENSSL_VERSION_NUMBER`.

**Dependencies**

-   We now support urllib3 v1.22.

2.18.1

-------------------

**Bugfixes**

-   Fix an error in the packaging whereby the `*.whl` contained
 incorrect data that regressed the fix in v2.17.3.

2.18.0

-------------------

**Improvements**

-   `Response` is now a context manager, so can be used directly in a
 `with` statement without first having to be wrapped by
 `contextlib.closing()`.

**Bugfixes**

-   Resolve installation failure if multiprocessing is not available
-   Resolve tests crash if multiprocessing is not able to determine the
 number of CPU cores
-   Resolve error swallowing in utils set\_environ generator

2.17.3

-------------------

**Improvements**

-   Improved `packages` namespace identity support, for monkeypatching
 libraries.

2.17.2

-------------------

**Improvements**

-   Improved `packages` namespace identity support, for monkeypatching
 libraries.

2.17.1

-------------------

**Improvements**

-   Improved `packages` namespace identity support, for monkeypatching
 libraries.

2.17.0

-------------------

**Improvements**

-   Removal of the 301 redirect cache. This improves thread-safety.

2.16.5

-------------------

-   Improvements to `$ python -m requests.help`.

2.16.4

-------------------

-   Introduction of the `$ python -m requests.help` command, for
 debugging with maintainers!

2.16.3

-------------------

-   Further restored the `requests.packages` namespace for compatibility
 reasons.

2.16.2

-------------------

-   Further restored the `requests.packages` namespace for compatibility
 reasons.

No code modification (noted below) should be necessary any longer.

2.16.1

-------------------

-   Restored the `requests.packages` namespace for compatibility
 reasons.
-   Bugfix for `urllib3` version parsing.

**Note**: code that was written to import against the
`requests.packages` namespace previously will have to import code that
rests at this module-level now.

For example:

 from requests.packages.urllib3.poolmanager import PoolManager

Will need to be re-written to be:

 from requests.packages import urllib3
 urllib3.poolmanager.PoolManager

Or, even better:

 from urllib3.poolmanager import PoolManager

2.16.0

-------------------

-   Unvendor ALL the things!

2.15.1

-------------------

-   Everyone makes mistakes.

2.15.0

-------------------

**Improvements**

-   Introduction of the `Response.next` property, for getting the next
 `PreparedResponse` from a redirect chain (when
 `allow_redirects=False`).
-   Internal refactoring of `__version__` module.

**Bugfixes**

-   Restored once-optional parameter for
 `requests.utils.get_environ_proxies()`.

2.14.2

-------------------

**Bugfixes**

-   Changed a less-than to an equal-to and an or in the dependency
 markers to widen compatibility with older setuptools releases.

2.14.1

-------------------

**Bugfixes**

-   Changed the dependency markers to widen compatibility with older pip
 releases.

2.14.0

-------------------

**Improvements**

-   It is now possible to pass `no_proxy` as a key to the `proxies`
 dictionary to provide handling similar to the `NO_PROXY` environment
 variable.
-   When users provide invalid paths to certificate bundle files or
 directories Requests now raises `IOError`, rather than failing at
 the time of the HTTPS request with a fairly inscrutable certificate
 validation error.
-   The behavior of `SessionRedirectMixin` was slightly altered.
 `resolve_redirects` will now detect a redirect by calling
 `get_redirect_target(response)` instead of directly querying
 `Response.is_redirect` and `Response.headers[&#39;location&#39;]`. Advanced
 users will be able to process malformed redirects more easily.
-   Changed the internal calculation of elapsed request time to have
 higher resolution on Windows.
-   Added `win_inet_pton` as conditional dependency for the `[socks]`
 extra on Windows with Python 2.7.
-   Changed the proxy bypass implementation on Windows: the proxy bypass
 check doesn&#39;t use forward and reverse DNS requests anymore
-   URLs with schemes that begin with `http` but are not `http` or
 `https` no longer have their host parts forced to lowercase.

**Bugfixes**

-   Much improved handling of non-ASCII `Location` header values in
 redirects. Fewer `UnicodeDecodeErrors` are encountered on Python 2,
 and Python 3 now correctly understands that Latin-1 is unlikely to
 be the correct encoding.
-   If an attempt to `seek` file to find out its length fails, we now
 appropriately handle that by aborting our content-length
 calculations.
-   Restricted `HTTPDigestAuth` to only respond to auth challenges made
 on 4XX responses, rather than to all auth challenges.
-   Fixed some code that was firing `DeprecationWarning` on Python 3.6.
-   The dismayed person emoticon (`/o\\`) no longer has a big head. I&#39;m
 sure this is what you were all worrying about most.

**Miscellaneous**

-   Updated bundled urllib3 to v1.21.1.
-   Updated bundled chardet to v3.0.2.
-   Updated bundled idna to v2.5.
-   Updated bundled certifi to 2017.4.17.

2.13.0

-------------------

**Features**

-   Only load the `idna` library when we&#39;ve determined we need it. This
 will save some memory for users.

**Miscellaneous**

-   Updated bundled urllib3 to 1.20.
-   Updated bundled idna to 2.2.

2.12.5

-------------------

**Bugfixes**

-   Fixed an issue with JSON encoding detection, specifically detecting
 big-endian UTF-32 with BOM.

2.12.4

-------------------

**Bugfixes**

-   Fixed regression from 2.12.2 where non-string types were rejected in
 the basic auth parameters. While support for this behaviour has been
 readded, the behaviour is deprecated and will be removed in the
 future.

2.12.3

-------------------

**Bugfixes**

-   Fixed regression from v2.12.1 for URLs with schemes that begin with
 &quot;http&quot;. These URLs have historically been processed as though they
 were HTTP-schemed URLs, and so have had parameters added. This was
 removed in v2.12.2 in an overzealous attempt to resolve problems
 with IDNA-encoding those URLs. This change was reverted: the other
 fixes for IDNA-encoding have been judged to be sufficient to return
 to the behaviour Requests had before v2.12.0.

2.12.2

-------------------

**Bugfixes**

-   Fixed several issues with IDNA-encoding URLs that are technically
 invalid but which are widely accepted. Requests will now attempt to
 IDNA-encode a URL if it can but, if it fails, and the host contains
 only ASCII characters, it will be passed through optimistically.
 This will allow users to opt-in to using IDNA2003 themselves if they
 want to, and will also allow technically invalid but still common
 hostnames.
-   Fixed an issue where URLs with leading whitespace would raise
 `InvalidSchema` errors.
-   Fixed an issue where some URLs without the HTTP or HTTPS schemes
 would still have HTTP URL preparation applied to them.
-   Fixed an issue where Unicode strings could not be used in basic
 auth.
-   Fixed an issue encountered by some Requests plugins where
 constructing a Response object would cause `Response.content` to
 raise an `AttributeError`.

2.12.1

-------------------

**Bugfixes**

-   Updated setuptools &#39;security&#39; extra for the new PyOpenSSL backend in
 urllib3.

**Miscellaneous**

-   Updated bundled urllib3 to 1.19.1.

2.12.0

-------------------

**Improvements**

-   Updated support for internationalized domain names from IDNA2003 to
 IDNA2008. This updated support is required for several forms of IDNs
 and is mandatory for .de domains.
-   Much improved heuristics for guessing content lengths: Requests will
 no longer read an entire `StringIO` into memory.
-   Much improved logic for recalculating `Content-Length` headers for
 `PreparedRequest` objects.
-   Improved tolerance for file-like objects that have no `tell` method
 but do have a `seek` method.
-   Anything that is a subclass of `Mapping` is now treated like a
 dictionary by the `data=` keyword argument.
-   Requests now tolerates empty passwords in proxy credentials, rather
 than stripping the credentials.
-   If a request is made with a file-like object as the body and that
 request is redirected with a 307 or 308 status code, Requests will
 now attempt to rewind the body object so it can be replayed.

**Bugfixes**

-   When calling `response.close`, the call to `close` will be
 propagated through to non-urllib3 backends.
-   Fixed issue where the `ALL_PROXY` environment variable would be
 preferred over scheme-specific variables like `HTTP_PROXY`.
-   Fixed issue where non-UTF8 reason phrases got severely mangled by
 falling back to decoding using ISO 8859-1 instead.
-   Fixed a bug where Requests would not correctly correlate cookies set
 when using custom Host headers if those Host headers did not use the
 native string type for the platform.

**Miscellaneous**

-   Updated bundled urllib3 to 1.19.
-   Updated bundled certifi certs to 2016.09.26.

2.11.1

-------------------

**Bugfixes**

-   Fixed a bug when using `iter_content` with `decode_unicode=True` for
 streamed bodies would raise `AttributeError`. This bug was
 introduced in 2.11.
-   Strip Content-Type and Transfer-Encoding headers from the header
 block when following a redirect that transforms the verb from
 POST/PUT to GET.

2.11.0

-------------------

**Improvements**

-   Added support for the `ALL_PROXY` environment variable.
-   Reject header values that contain leading whitespace or newline
 characters to reduce risk of header smuggling.

**Bugfixes**

-   Fixed occasional `TypeError` when attempting to decode a JSON
 response that occurred in an error case. Now correctly returns a
 `ValueError`.
-   Requests would incorrectly ignore a non-CIDR IP address in the
 `NO_PROXY` environment variables: Requests now treats it as a
 specific IP.
-   Fixed a bug when sending JSON data that could cause us to encounter
 obscure OpenSSL errors in certain network conditions (yes, really).
-   Added type checks to ensure that `iter_content` only accepts
 integers and `None` for chunk sizes.
-   Fixed issue where responses whose body had not been fully consumed
 would have the underlying connection closed but not returned to the
 connection pool, which could cause Requests to hang in situations
 where the `HTTPAdapter` had been configured to use a blocking
 connection pool.

**Miscellaneous**

-   Updated bundled urllib3 to 1.16.
-   Some previous releases accidentally accepted non-strings as
 acceptable header values. This release does not.

2.10.0

-------------------

**New Features**

-   SOCKS Proxy Support! (requires PySocks;
 `$ pip install requests[socks]`)

**Miscellaneous**

-   Updated bundled urllib3 to 1.15.1.

2.9.2

------------------

**Improvements**

-   Change built-in CaseInsensitiveDict (used for headers) to use
 OrderedDict as its underlying datastore.

**Bugfixes**

-   Don&#39;t use redirect\_cache if allow\_redirects=False
-   When passed objects that throw exceptions from `tell()`, send them
 via chunked transfer encoding instead of failing.
-   Raise a ProxyError for proxy related connection issues.

2.9.1

------------------

**Bugfixes**

-   Resolve regression introduced in 2.9.0 that made it impossible to
 send binary strings as bodies in Python 3.
-   Fixed errors when calculating cookie expiration dates in certain
 locales.

**Miscellaneous**

-   Updated bundled urllib3 to 1.13.1.

2.9.0

------------------

**Minor Improvements** (Backwards compatible)

-   The `verify` keyword argument now supports being passed a path to a
 directory of CA certificates, not just a single-file bundle.
-   Warnings are now emitted when sending files opened in text mode.
-   Added the 511 Network Authentication Required status code to the
 status code registry.

**Bugfixes**

-   For file-like objects that are not sought to the very beginning, we
 now send the content length for the number of bytes we will actually
 read, rather than the total size of the file, allowing partial file
 uploads.
-   When uploading file-like objects, if they are empty or have no
 obvious content length we set `Transfer-Encoding: chunked` rather
 than `Content-Length: 0`.
-   We correctly receive the response in buffered mode when uploading
 chunked bodies.
-   We now handle being passed a query string as a bytestring on Python
 3, by decoding it as UTF-8.
-   Sessions are now closed in all cases (exceptional and not) when
 using the functional API rather than leaking and waiting for the
 garbage collector to clean them up.
-   Correctly handle digest auth headers with a malformed `qop`
 directive that contains no token, by treating it the same as if no
 `qop` directive was provided at all.
-   Minor performance improvements when removing specific cookies by
 name.

**Miscellaneous**

-   Updated urllib3 to 1.13.

2.8.1

------------------

**Bugfixes**

-   Update certificate bundle to match `certifi` 2015.9.6.2&#39;s weak
 certificate bundle.
-   Fix a bug in 2.8.0 where requests would raise `ConnectTimeout`
 instead of `ConnectionError`
-   When using the PreparedRequest flow, requests will now correctly
 respect the `json` parameter. Broken in 2.8.0.
-   When using the PreparedRequest flow, requests will now correctly
 handle a Unicode-string method name on Python 2. Broken in 2.8.0.

2.8.0

------------------

**Minor Improvements** (Backwards Compatible)

-   Requests now supports per-host proxies. This allows the `proxies`
 dictionary to have entries of the form
 `{&#39;&lt;scheme&gt;://&lt;hostname&gt;&#39;: &#39;&lt;proxy&gt;&#39;}`. Host-specific proxies will
 be used in preference to the previously-supported scheme-specific
 ones, but the previous syntax will continue to work.
-   `Response.raise_for_status` now prints the URL that failed as part
 of the exception message.
-   `requests.utils.get_netrc_auth` now takes an `raise_errors` kwarg,
 defaulting to `False`. When `True`, errors parsing `.netrc` files
 cause exceptions to be thrown.
-   Change to bundled projects import logic to make it easier to
 unbundle requests downstream.
-   Changed the default User-Agent string to avoid leaking data on
 Linux: now contains only the requests version.

**Bugfixes**

-   The `json` parameter to `post()` and friends will now only be used
 if neither `data` nor `files` are present, consistent with the
 documentation.
-   We now ignore empty fields in the `NO_PROXY` environment variable.
-   Fixed problem where `httplib.BadStatusLine` would get raised if
 combining `stream=True` with `contextlib.closing`.
-   Prevented bugs where we would attempt to return the same connection
 back to the connection pool twice when sending a Chunked body.
-   Miscellaneous minor internal changes.
-   Digest Auth support is now thread safe.

**Updates**

-   Updated urllib3 to 1.12.

2.7.0

------------------

This is the first release that follows our new release process. For
more, see [our
documentation](https://requests.readthedocs.io/en/latest/community/release-process/).

**Bugfixes**

-   Updated urllib3 to 1.10.4, resolving several bugs involving chunked
 transfer encoding and response framing.

2.6.2

------------------

**Bugfixes**

-   Fix regression where compressed data that was sent as chunked data
 was not properly decompressed. (\2561)

2.6.1

------------------

**Bugfixes**

-   Remove VendorAlias import machinery introduced in v2.5.2.
-   Simplify the PreparedRequest.prepare API: We no longer require the
 user to pass an empty list to the hooks keyword argument. (c.f.
 \2552)
-   Resolve redirects now receives and forwards all of the original
 arguments to the adapter. (\2503)
-   Handle UnicodeDecodeErrors when trying to deal with a unicode URL
 that cannot be encoded in ASCII. (\2540)
-   Populate the parsed path of the URI field when performing Digest
 Authentication. (\2426)
-   Copy a PreparedRequest&#39;s CookieJar more reliably when it is not an
 instance of RequestsCookieJar. (\2527)

2.6.0

------------------

**Bugfixes**

-   CVE-2015-2296: Fix handling of cookies on redirect. Previously a
 cookie without a host value set would use the hostname for the
 redirected URL exposing requests users to session fixation attacks
 and potentially cookie stealing. This was disclosed privately by
 Matthew Daley of [BugFuzz](https://bugfuzz.com). This affects all
 versions of requests from v2.1.0 to v2.5.3 (inclusive on both ends).
-   Fix error when requests is an `install_requires` dependency and
 `python setup.py test` is run. (\2462)
-   Fix error when urllib3 is unbundled and requests continues to use
 the vendored import location.
-   Include fixes to `urllib3`&#39;s header handling.
-   Requests&#39; handling of unvendored dependencies is now more
 restrictive.

**Features and Improvements**

-   Support bytearrays when passed as parameters in the `files`
 argument. (\2468)
-   Avoid data duplication when creating a request with `str`, `bytes`,
 or `bytearray` input to the `files` argument.

2.5.3

------------------

**Bugfixes**

-   Revert changes to our vendored certificate bundle. For more context
 see (\2455, \2456, and &lt;https://bugs.python.org/issue23476&gt;)

2.5.2

------------------

**Features and Improvements**

-   Add sha256 fingerprint support.
 ([shazow/urllib3\540](https://github.com/shazow/urllib3/pull/540))
-   Improve the performance of headers.
 ([shazow/urllib3\544](https://github.com/shazow/urllib3/pull/544))

**Bugfixes**

-   Copy pip&#39;s import machinery. When downstream redistributors remove
 requests.packages.urllib3 the import machinery will continue to let
 those same symbols work. Example usage in requests&#39; documentation
 and 3rd-party libraries relying on the vendored copies of urllib3
 will work without having to fallback to the system urllib3.
-   Attempt to quote parts of the URL on redirect if unquoting and then
 quoting fails. (\2356)
-   Fix filename type check for multipart form-data uploads. (\2411)
-   Properly handle the case where a server issuing digest
 authentication challenges provides both auth and auth-int
 qop-values. (\2408)
-   Fix a socket leak.
 ([shazow/urllib3\549](https://github.com/shazow/urllib3/pull/549))
-   Fix multiple `Set-Cookie` headers properly.
 ([shazow/urllib3\534](https://github.com/shazow/urllib3/pull/534))
-   Disable the built-in hostname verification.
 ([shazow/urllib3\526](https://github.com/shazow/urllib3/pull/526))
-   Fix the behaviour of decoding an exhausted stream.
 ([shazow/urllib3\535](https://github.com/shazow/urllib3/pull/535))

**Security**

-   Pulled in an updated `cacert.pem`.
-   Drop RC4 from the default cipher list.
 ([shazow/urllib3\551](https://github.com/shazow/urllib3/pull/551))

2.5.1

------------------

**Behavioural Changes**

-   Only catch HTTPErrors in raise\_for\_status (\2382)

**Bugfixes**

-   Handle LocationParseError from urllib3 (\2344)
-   Handle file-like object filenames that are not strings (\2379)
-   Unbreak HTTPDigestAuth handler. Allow new nonces to be negotiated
 (\2389)

2.5.0

------------------

**Improvements**

-   Allow usage of urllib3&#39;s Retry object with HTTPAdapters (\2216)
-   The `iter_lines` method on a response now accepts a delimiter with
 which to split the content (\2295)

**Behavioural Changes**

-   Add deprecation warnings to functions in requests.utils that will be
 removed in 3.0 (\2309)
-   Sessions used by the functional API are always closed (\2326)
-   Restrict requests to HTTP/1.1 and HTTP/1.0 (stop accepting HTTP/0.9)
 (\2323)

**Bugfixes**

-   Only parse the URL once (\2353)
-   Allow Content-Length header to always be overridden (\2332)
-   Properly handle files in HTTPDigestAuth (\2333)
-   Cap redirect\_cache size to prevent memory abuse (\2299)
-   Fix HTTPDigestAuth handling of redirects after authenticating
 successfully (\2253)
-   Fix crash with custom method parameter to Session.request (\2317)
-   Fix how Link headers are parsed using the regular expression library
 (\2271)

**Documentation**

-   Add more references for interlinking (\2348)
-   Update CSS for theme (\2290)
-   Update width of buttons and sidebar (\2289)
-   Replace references of Gittip with Gratipay (\2282)
-   Add link to changelog in sidebar (\2273)

2.4.3

------------------

**Bugfixes**

-   Unicode URL improvements for Python 2.
-   Re-order JSON param for backwards compat.
-   Automatically defrag authentication schemes from host/pass URIs.
 ([\2249](https://github.com/psf/requests/issues/2249))

2.4.2

------------------

**Improvements**

-   FINALLY! Add json parameter for uploads!
 ([\2258](https://github.com/psf/requests/pull/2258))
-   Support for bytestring URLs on Python 3.x
 ([\2238](https://github.com/psf/requests/pull/2238))

**Bugfixes**

-   Avoid getting stuck in a loop
 ([\2244](https://github.com/psf/requests/pull/2244))
-   Multiple calls to iter\* fail with unhelpful error.
 ([\2240](https://github.com/psf/requests/issues/2240),
 [\2241](https://github.com/psf/requests/issues/2241))

**Documentation**

-   Correct redirection introduction
 ([\2245](https://github.com/psf/requests/pull/2245/))
-   Added example of how to send multiple files in one request.
 ([\2227](https://github.com/psf/requests/pull/2227/))
-   Clarify how to pass a custom set of CAs
 ([\2248](https://github.com/psf/requests/pull/2248/))

2.4.1

------------------

-   Now has a &quot;security&quot; package extras set,
 `$ pip install requests[security]`
-   Requests will now use Certifi if it is available.
-   Capture and re-raise urllib3 ProtocolError
-   Bugfix for responses that attempt to redirect to themselves forever
 (wtf?).

2.4.0

------------------

**Behavioral Changes**

-   `Connection: keep-alive` header is now sent automatically.

**Improvements**

-   Support for connect timeouts! Timeout now accepts a tuple (connect,
 read) which is used to set individual connect and read timeouts.
-   Allow copying of PreparedRequests without headers/cookies.
-   Updated bundled urllib3 version.
-   Refactored settings loading from environment -- new
 Session.merge\_environment\_settings.
-   Handle socket errors in iter\_content.

2.3.0

------------------

**API Changes**

-   New `Response` property `is_redirect`, which is true when the
 library could have processed this response as a redirection (whether
 or not it actually did).
-   The `timeout` parameter now affects requests with both `stream=True`
 and `stream=False` equally.
-   The change in v2.0.0 to mandate explicit proxy schemes has been
 reverted. Proxy schemes now default to `http://`.
-   The `CaseInsensitiveDict` used for HTTP headers now behaves like a
 normal dictionary when references as string or viewed in the
 interpreter.

**Bugfixes**

-   No longer expose Authorization or Proxy-Authorization headers on
 redirect. Fix CVE-2014-1829 and CVE-2014-1830 respectively.
-   Authorization is re-evaluated each redirect.
-   On redirect, pass url as native strings.
-   Fall-back to autodetected encoding for JSON when Unicode detection
 fails.
-   Headers set to `None` on the `Session` are now correctly not sent.
-   Correctly honor `decode_unicode` even if it wasn&#39;t used earlier in
 the same response.
-   Stop advertising `compress` as a supported Content-Encoding.
-   The `Response.history` parameter is now always a list.
-   Many, many `urllib3` bugfixes.

2.2.1

------------------

**Bugfixes**

-   Fixes incorrect parsing of proxy credentials that contain a literal
 or encoded &#39;\&#39; character.
-   Assorted urllib3 fixes.

2.2.0

------------------

**API Changes**

-   New exception: `ContentDecodingError`. Raised instead of `urllib3`
 `DecodeError` exceptions.

**Bugfixes**

-   Avoid many many exceptions from the buggy implementation of
 `proxy_bypass` on OS X in Python 2.6.
-   Avoid crashing when attempting to get authentication credentials
 from \~/.netrc when running as a user without a home directory.
-   Use the correct pool size for pools of connections to proxies.
-   Fix iteration of `CookieJar` objects.
-   Ensure that cookies are persisted over redirect.
-   Switch back to using chardet, since it has merged with charade.

2.1.0

------------------

-   Updated CA Bundle, of course.
-   Cookies set on individual Requests through a `Session` (e.g. via
 `Session.get()`) are no longer persisted to the `Session`.
-   Clean up connections when we hit problems during chunked upload,
 rather than leaking them.
-   Return connections to the pool when a chunked upload is successful,
 rather than leaking it.
-   Match the HTTPbis recommendation for HTTP 301 redirects.
-   Prevent hanging when using streaming uploads and Digest Auth when a
 401 is received.
-   Values of headers set by Requests are now always the native string
 type.
-   Fix previously broken SNI support.
-   Fix accessing HTTP proxies using proxy authentication.
-   Unencode HTTP Basic usernames and passwords extracted from URLs.
-   Support for IP address ranges for no\_proxy environment variable
-   Parse headers correctly when users override the default `Host:`
 header.
-   Avoid munging the URL in case of case-sensitive servers.
-   Looser URL handling for non-HTTP/HTTPS urls.
-   Accept unicode methods in Python 2.6 and 2.7.
-   More resilient cookie handling.
-   Make `Response` objects pickleable.
-   Actually added MD5-sess to Digest Auth instead of pretending to like
 last time.
-   Updated internal urllib3.
-   Fixed Lukasa&#39;s lack of taste.

2.0.1

------------------

-   Updated included CA Bundle with new mistrusts and automated process
 for the future
-   Added MD5-sess to Digest Auth
-   Accept per-file headers in multipart file POST messages.
-   Fixed: Don&#39;t send the full URL on CONNECT messages.
-   Fixed: Correctly lowercase a redirect scheme.
-   Fixed: Cookies not persisted when set via functional API.
-   Fixed: Translate urllib3 ProxyError into a requests ProxyError
 derived from ConnectionError.
-   Updated internal urllib3 and chardet.

2.0.0

------------------

**API Changes:**

-   Keys in the Headers dictionary are now native strings on all Python
 versions, i.e. bytestrings on Python 2, unicode on Python 3.
-   Proxy URLs now *must* have an explicit scheme. A `MissingSchema`
 exception will be raised if they don&#39;t.
-   Timeouts now apply to read time if `Stream=False`.
-   `RequestException` is now a subclass of `IOError`, not
 `RuntimeError`.
-   Added new method to `PreparedRequest` objects:
 `PreparedRequest.copy()`.
-   Added new method to `Session` objects: `Session.update_request()`.
 This method updates a `Request` object with the data (e.g. cookies)
 stored on the `Session`.
-   Added new method to `Session` objects: `Session.prepare_request()`.
 This method updates and prepares a `Request` object, and returns the
 corresponding `PreparedRequest` object.
-   Added new method to `HTTPAdapter` objects:
 `HTTPAdapter.proxy_headers()`. This should not be called directly,
 but improves the subclass interface.
-   `httplib.IncompleteRead` exceptions caused by incorrect chunked
 encoding will now raise a Requests `ChunkedEncodingError` instead.
-   Invalid percent-escape sequences now cause a Requests `InvalidURL`
 exception to be raised.
-   HTTP 208 no longer uses reason phrase `&quot;im_used&quot;`. Correctly uses
 `&quot;already_reported&quot;`.
-   HTTP 226 reason added (`&quot;im_used&quot;`).

**Bugfixes:**

-   Vastly improved proxy support, including the CONNECT verb. Special
 thanks to the many contributors who worked towards this improvement.
-   Cookies are now properly managed when 401 authentication responses
 are received.
-   Chunked encoding fixes.
-   Support for mixed case schemes.
-   Better handling of streaming downloads.
-   Retrieve environment proxies from more locations.
-   Minor cookies fixes.
-   Improved redirect behaviour.
-   Improved streaming behaviour, particularly for compressed data.
-   Miscellaneous small Python 3 text encoding bugs.
-   `.netrc` no longer overrides explicit auth.
-   Cookies set by hooks are now correctly persisted on Sessions.
-   Fix problem with cookies that specify port numbers in their host
 field.
-   `BytesIO` can be used to perform streaming uploads.
-   More generous parsing of the `no_proxy` environment variable.
-   Non-string objects can be passed in data values alongside files.

1.2.3

------------------

-   Simple packaging fix

1.2.2

------------------

-   Simple packaging fix

1.2.1

------------------

-   301 and 302 redirects now change the verb to GET for all verbs, not
 just POST, improving browser compatibility.
-   Python 3.3.2 compatibility
-   Always percent-encode location headers
-   Fix connection adapter matching to be most-specific first
-   new argument to the default connection adapter for passing a block
 argument
-   prevent a KeyError when there&#39;s no link headers

1.2.0

------------------

-   Fixed cookies on sessions and on requests
-   Significantly change how hooks are dispatched - hooks now receive
 all the arguments specified by the user when making a request so
 hooks can make a secondary request with the same parameters. This is
 especially necessary for authentication handler authors
-   certifi support was removed
-   Fixed bug where using OAuth 1 with body `signature_type` sent no
 data
-   Major proxy work thanks to Lukasa including parsing of proxy
 authentication from the proxy url
-   Fix DigestAuth handling too many 401s
-   Update vendored urllib3 to include SSL bug fixes
-   Allow keyword arguments to be passed to `json.loads()` via the
 `Response.json()` method
-   Don&#39;t send `Content-Length` header by default on `GET` or `HEAD`
 requests
-   Add `elapsed` attribute to `Response` objects to time how long a
 request took.
-   Fix `RequestsCookieJar`
-   Sessions and Adapters are now picklable, i.e., can be used with the
 multiprocessing library
-   Update charade to version 1.0.3

The change in how hooks are dispatched will likely cause a great deal of
issues.

1.1.0

------------------

-   CHUNKED REQUESTS
-   Support for iterable response bodies
-   Assume servers persist redirect params
-   Allow explicit content types to be specified for file data
-   Make merge\_kwargs case-insensitive when looking up keys

1.0.3

------------------

-   Fix file upload encoding bug
-   Fix cookie behavior

1.0.2

------------------

-   Proxy fix for HTTPAdapter.

1.0.1

------------------

-   Cert verification exception bug.
-   Proxy fix for HTTPAdapter.

1.0.0

------------------

-   Massive Refactor and Simplification
-   Switch to Apache 2.0 license
-   Swappable Connection Adapters
-   Mountable Connection Adapters
-   Mutable ProcessedRequest chain
-   /s/prefetch/stream
-   Removal of all configuration
-   Standard library logging
-   Make Response.json() callable, not property.
-   Usage of new charade project, which provides python 2 and 3
 simultaneous chardet.
-   Removal of all hooks except &#39;response&#39;
-   Removal of all authentication helpers (OAuth, Kerberos)

This is not a backwards compatible change.

0.14.2

-------------------

-   Improved mime-compatible JSON handling
-   Proxy fixes
-   Path hack fixes
-   Case-Insensitive Content-Encoding headers
-   Support for CJK parameters in form posts

0.14.1

-------------------

-   Python 3.3 Compatibility
-   Simply default accept-encoding
-   Bugfixes

0.14.0

-------------------

-   No more iter\_content errors if already downloaded.

0.13.9

-------------------

-   Fix for OAuth + POSTs
-   Remove exception eating from dispatch\_hook
-   General bugfixes

0.13.8

-------------------

-   Incredible Link header support :)

0.13.7

-------------------

-   Support for (key, value) lists everywhere.
-   Digest Authentication improvements.
-   Ensure proxy exclusions work properly.
-   Clearer UnicodeError exceptions.
-   Automatic casting of URLs to strings (fURL and such)
-   Bugfixes.

0.13.6

-------------------

-   Long awaited fix for hanging connections!

0.13.5

-------------------

-   Packaging fix

0.13.4

-------------------

-   GSSAPI/Kerberos authentication!
-   App Engine 2.7 Fixes!
-   Fix leaking connections (from urllib3 update)
-   OAuthlib path hack fix
-   OAuthlib URL parameters fix.

0.13.3

-------------------

-   Use simplejson if available.
-   Do not hide SSLErrors behind Timeouts.
-   Fixed param handling with urls containing fragments.
-   Significantly improved information in User Agent.
-   client certificates are ignored when verify=False

0.13.2

-------------------

-   Zero dependencies (once again)!
-   New: Response.reason
-   Sign querystring parameters in OAuth 1.0
-   Client certificates no longer ignored when verify=False
-   Add openSUSE certificate support

0.13.1

-------------------

-   Allow passing a file or file-like object as data.
-   Allow hooks to return responses that indicate errors.
-   Fix Response.text and Response.json for body-less responses.

0.13.0

-------------------

-   Removal of Requests.async in favor of
 [grequests](https://github.com/kennethreitz/grequests)
-   Allow disabling of cookie persistence.
-   New implementation of safe\_mode
-   cookies.get now supports default argument
-   Session cookies not saved when Session.request is called with
 return\_response=False
-   Env: no\_proxy support.
-   RequestsCookieJar improvements.
-   Various bug fixes.

0.12.1

-------------------

-   New `Response.json` property.
-   Ability to add string file uploads.
-   Fix out-of-range issue with iter\_lines.
-   Fix iter\_content default size.
-   Fix POST redirects containing files.

0.12.0

-------------------

-   EXPERIMENTAL OAUTH SUPPORT!
-   Proper CookieJar-backed cookies interface with awesome dict-like
 interface.
-   Speed fix for non-iterated content chunks.
-   Move `pre_request` to a more usable place.
-   New `pre_send` hook.
-   Lazily encode data, params, files.
-   Load system Certificate Bundle if `certify` isn&#39;t available.
-   Cleanups, fixes.

0.11.2

-------------------

-   Attempt to use the OS&#39;s certificate bundle if `certifi` isn&#39;t
 available.
-   Infinite digest auth redirect fix.
-   Multi-part file upload improvements.
-   Fix decoding of invalid %encodings in URLs.
-   If there is no content in a response don&#39;t throw an error the second
 time that content is attempted to be read.
-   Upload data on redirects.

0.11.1

-------------------

-   POST redirects now break RFC to do what browsers do: Follow up with
 a GET.
-   New `strict_mode` configuration to disable new redirect behavior.

0.11.0

-------------------

-   Private SSL Certificate support
-   Remove select.poll from Gevent monkeypatching
-   Remove redundant generator for chunked transfer encoding
-   Fix: Response.ok raises Timeout Exception in safe\_mode

0.10.8

-------------------

-   Generate chunked ValueError fix
-   Proxy configuration by environment variables
-   Simplification of iter\_lines.
-   New trust\_env configuration for disabling system/environment hints.
-   Suppress cookie errors.

0.10.7

-------------------

-   encode\_uri = False

0.10.6

-------------------

-   Allow &#39;=&#39; in cookies.

0.10.5

-------------------

-   Response body with 0 content-length fix.
-   New async.imap.
-   Don&#39;t fail on netrc.

0.10.4

-------------------

-   Honor netrc.

0.10.3

-------------------

-   HEAD requests don&#39;t follow redirects anymore.
-   raise\_for\_status() doesn&#39;t raise for 3xx anymore.
-   Make Session objects picklable.
-   ValueError for invalid schema URLs.

0.10.2

-------------------

-   Vastly improved URL quoting.
-   Additional allowed cookie key values.
-   Attempted fix for &quot;Too many open files&quot; Error
-   Replace unicode errors on first pass, no need for second pass.
-   Append &#39;/&#39; to bare-domain urls before query insertion.
-   Exceptions now inherit from RuntimeError.
-   Binary uploads + auth fix.
-   Bugfixes.

0.10.1

-------------------

-   PYTHON 3 SUPPORT!
-   Dropped 2.5 Support. (*Backwards Incompatible*)

0.10.0

-------------------

-   `Response.content` is now bytes-only. (*Backwards Incompatible*)
-   New `Response.text` is unicode-only.
-   If no `Response.encoding` is specified and `chardet` is available,
 `Response.text` will guess an encoding.
-   Default to ISO-8859-1 (Western) encoding for &quot;text&quot; subtypes.
-   Removal of decode\_unicode. (*Backwards Incompatible*)
-   New multiple-hooks system.
-   New `Response.register_hook` for registering hooks within the
 pipeline.
-   `Response.url` is now Unicode.

0.9.3

------------------

-   SSL verify=False bugfix (apparent on windows machines).

0.9.2

------------------

-   Asynchronous async.send method.
-   Support for proper chunk streams with boundaries.
-   session argument for Session classes.
-   Print entire hook tracebacks, not just exception instance.
-   Fix response.iter\_lines from pending next line.
-   Fix but in HTTP-digest auth w/ URI having query strings.
-   Fix in Event Hooks section.
-   Urllib3 update.

0.9.1

------------------

-   danger\_mode for automatic Response.raise\_for\_status()
-   Response.iter\_lines refactor

0.9.0

------------------

-   verify ssl is default.

0.8.9

------------------

-   Packaging fix.

0.8.8

------------------

-   SSL CERT VERIFICATION!
-   Release of Cerifi: Mozilla&#39;s cert list.
-   New &#39;verify&#39; argument for SSL requests.
-   Urllib3 update.

0.8.7

------------------

-   iter\_lines last-line truncation fix
-   Force safe\_mode for async requests
-   Handle safe\_mode exceptions more consistently
-   Fix iteration on null responses in safe\_mode

0.8.6

------------------

-   Socket timeout fixes.
-   Proxy Authorization support.

0.8.5

------------------

-   Response.iter\_lines!

0.8.4

------------------

-   Prefetch bugfix.
-   Added license to installed version.

0.8.3

------------------

-   Converted auth system to use simpler callable objects.
-   New session parameter to API methods.
-   Display full URL while logging.

0.8.2

------------------

-   New Unicode decoding system, based on over-ridable
 Response.encoding.
-   Proper URL slash-quote handling.
-   Cookies with `[`, `]`, and `_` allowed.

0.8.1

------------------

-   URL Request path fix
-   Proxy fix.
-   Timeouts fix.

0.8.0

------------------

-   Keep-alive support!
-   Complete removal of Urllib2
-   Complete removal of Poster
-   Complete removal of CookieJars
-   New ConnectionError raising
-   Safe\_mode for error catching
-   prefetch parameter for request methods
-   OPTION method
-   Async pool size throttling
-   File uploads send real names
-   Vendored in urllib3

0.7.6

------------------

-   Digest authentication bugfix (attach query data to path)

0.7.5

------------------

-   Response.content = None if there was an invalid response.
-   Redirection auth handling.

0.7.4

------------------

-   Session Hooks fix.

0.7.3

------------------

-   Digest Auth fix.

0.7.2

------------------

-   PATCH Fix.

0.7.1

------------------

-   Move away from urllib2 authentication handling.
-   Fully Remove AuthManager, AuthObject, &amp;c.
-   New tuple-based auth system with handler callbacks.

0.7.0

------------------

-   Sessions are now the primary interface.
-   Deprecated InvalidMethodException.
-   PATCH fix.
-   New config system (no more global settings).

0.6.6

------------------

-   Session parameter bugfix (params merging).

0.6.5

------------------

-   Offline (fast) test suite.
-   Session dictionary argument merging.

0.6.4

------------------

-   Automatic decoding of unicode, based on HTTP Headers.
-   New `decode_unicode` setting.
-   Removal of `r.read/close` methods.
-   New `r.faw` interface for advanced response usage.\*
-   Automatic expansion of parameterized headers.

0.6.3

------------------

-   Beautiful `requests.async` module, for making async requests w/
 gevent.

0.6.2

------------------

-   GET/HEAD obeys allow\_redirects=False.

0.6.1

------------------

-   Enhanced status codes experience `\o/`
-   Set a maximum number of redirects (`settings.max_redirects`)
-   Full Unicode URL support
-   Support for protocol-less redirects.
-   Allow for arbitrary request types.
-   Bugfixes

0.6.0

------------------

-   New callback hook system
-   New persistent sessions object and context manager
-   Transparent Dict-cookie handling
-   Status code reference object
-   Removed Response.cached
-   Added Response.request
-   All args are kwargs
-   Relative redirect support
-   HTTPError handling improvements
-   Improved https testing
-   Bugfixes

0.5.1

------------------

-   International Domain Name Support!
-   Access headers without fetching entire body (`read()`)
-   Use lists as dicts for parameters
-   Add Forced Basic Authentication
-   Forced Basic is default authentication type
-   `python-requests.org` default User-Agent header
-   CaseInsensitiveDict lower-case caching
-   Response.history bugfix

0.5.0

------------------

-   PATCH Support
-   Support for Proxies
-   HTTPBin Test Suite
-   Redirect Fixes
-   settings.verbose stream writing
-   Querystrings for all methods
-   URLErrors (Connection Refused, Timeout, Invalid URLs) are treated as
 explicitly raised
 `r.requests.get(&#39;hwe://blah&#39;); r.raise_for_status()`

0.4.1

------------------

-   Improved Redirection Handling
-   New &#39;allow\_redirects&#39; param for following non-GET/HEAD Redirects
-   Settings module refactoring

0.4.0

------------------

-   Response.history: list of redirected responses
-   Case-Insensitive Header Dictionaries!
-   Unicode URLs

0.3.4

------------------

-   Urllib2 HTTPAuthentication Recursion fix (Basic/Digest)
-   Internal Refactor
-   Bytes data upload Bugfix

0.3.3

------------------

-   Request timeouts
-   Unicode url-encoded data
-   Settings context manager and module

0.3.2

------------------

-   Automatic Decompression of GZip Encoded Content
-   AutoAuth Support for Tupled HTTP Auth

0.3.1

------------------

-   Cookie Changes
-   Response.read()
-   Poster fix

0.3.0

------------------

-   Automatic Authentication API Change
-   Smarter Query URL Parameterization
-   Allow file uploads and POST data together
-   

 New Authentication Manager System

 :   -   Simpler Basic HTTP System
     -   Supports all build-in urllib2 Auths
     -   Allows for custom Auth Handlers

0.2.4

------------------

-   Python 2.5 Support
-   PyPy-c v1.4 Support
-   Auto-Authentication tests
-   Improved Request object constructor

0.2.3

------------------

-   

 New HTTPHandling Methods

 :   -   Response.\_\_nonzero\_\_ (false if bad HTTP Status)
     -   Response.ok (True if expected HTTP Status)
     -   Response.error (Logged HTTPError if bad HTTP Status)
     -   Response.raise\_for\_status() (Raises stored HTTPError)

0.2.2

------------------

-   Still handles request in the event of an HTTPError. (Issue \2)
-   Eventlet and Gevent Monkeypatch support.
-   Cookie Support (Issue \1)

0.2.1

------------------

-   Added file attribute to POST and PUT requests for multipart-encode
 file uploads.
-   Added Request.url attribute for context and redirects

0.2.0

------------------

-   Birth!

0.0.1

------------------

-   Frustration
-   Conception

</details>

<details> <summary>Links</summary>

  • PyPI: https://pypi.org/project/requests
  • Changelog: https://pyup.io/changelogs/requests/
  • Docs: https://requests.readthedocs.io </details>
+1 -1

0 comment

1 changed file

pr created time in a month

more