Robust and effective logging for Python 2 and 3.

Overview

logzero

Build status for master branch Documentation Status Latest version on PyPi Anaconda-Server Badge Downloads

Robust and effective logging for Python 2 and 3.

Logo

Features

  • Easy logging to console and/or (rotating) file.
  • Provides a fully configured standard Python logger object.
  • JSON logging (with integrated python-json-logger)
  • Pretty formatting, including level-specific colors in the console.
  • No dependencies
  • Windows color output supported by colorama
  • Robust against str/bytes encoding problems, works with all kinds of character encodings and special characters.
  • Multiple loggers can write to the same logfile (also across multiple Python files and processes).
  • Global default logger with logzero.logger and custom loggers with logzero.setup_logger(..).
  • Compatible with Python 2 and 3.
  • All contained in a single file.
  • Licensed under the MIT license.
  • Heavily inspired by the Tornado web framework.

Installation:

python -m pip install logzero

Example Usage

from logzero import logger

logger.debug("hello")
logger.info("info")
logger.warning("warn")
logger.error("error")

# This is how you'd log an exception
try:
    raise Exception("this is a demo exception")
except Exception as e:
    logger.exception(e)

# JSON logging
import logzero
logzero.json()

logger.info("JSON test")

# Start writing into a logfile
logzero.logfile("/tmp/logzero-demo.log")

# Set a minimum loglevel
logzero.loglevel(logzero.WARNING)

This is the output:

demo-output

Note: You can find more examples in the documentation: https://logzero.readthedocs.io

JSON logging

JSON logging can be enabled for the default logger with logzero.json(), or with setup_logger(json=True) for custom loggers:

", "funcName": " ", "levelname": "INFO", "levelno": 20, "lineno": 1, "module": " ", "message": "test", "name": "logzero_default", "pathname": " ", "process": 76179, "processName": "MainProcess", "threadName": "MainThread"} >>> my_logger = setup_logger(json=True) >>> my_logger.info("test") {"asctime": "2020-10-21 10:42:45,808", "filename": " ", "funcName": " ", "levelname": "INFO", "levelno": 20, "lineno": 1, "module": " ", "message": "test", "name": "logzero_default", "pathname": " ", "process": 76179, "processName": "MainProcess", "threadName": "MainThread"} ">
>>> logzero.json()
>>> logger.info("test")
{"asctime": "2020-10-21 10:42:45,808", "filename": "
          
           "
          , "funcName": "
          
           "
          , "levelname": "INFO", "levelno": 20, "lineno": 1, "module": "
          
           "
          , "message": "test", "name": "logzero_default", "pathname": "
          
           "
          , "process": 76179, "processName": "MainProcess", "threadName": "MainThread"}

>>> my_logger = setup_logger(json=True)
>>> my_logger.info("test")
{"asctime": "2020-10-21 10:42:45,808", "filename": "
          
           "
          , "funcName": "
          
           "
          , "levelname": "INFO", "levelno": 20, "lineno": 1, "module": "
          
           "
          , "message": "test", "name": "logzero_default", "pathname": "
          
           "
          , "process": 76179, "processName": "MainProcess", "threadName": "MainThread"}

The logged JSON object has these fields:

{
  "asctime": "2020-10-21 10:43:40,765",
  "filename": "test.py",
  "funcName": "test_this",
  "levelname": "INFO",
  "levelno": 20,
  "lineno": 9,
  "module": "test",
  "message": "info",
  "name": "logzero",
  "pathname": "_tests/test.py",
  "process": 76204,
  "processName": "MainProcess",
  "threadName": "MainThread"
}

Exceptions logged with logger.exception(e) have these additional JSON fields:

{
  "levelname": "ERROR",
  "levelno": 40,
  "message": "this is a demo exception",
  "exc_info": "Traceback (most recent call last):\n  File \"_tests/test.py\", line 15, in test_this\n    raise Exception(\"this is a demo exception\")\nException: this is a demo exception"
}

Take a look at the documentation for more information and examples:

Installation

Install logzero with pip:

python -m pip install logzero

Here's how you setup a virtualenv and download and run the demo:

# Create and activate a virtualenv in ./venv/
python3 -m venv venv
. venv/bin/activate

# Install logzero
python -m pip install logzero

# Download and run demo.py
wget https://raw.githubusercontent.com/metachris/logzero/master/examples/demo.py
python demo.py

If you don't have pip installed, this Python installation guide can guide you through the process.

Alternatively, if you use the Anaconda distribution:

$ conda config --add channels conda-forge
$ conda install logzero

You can also install logzero from the public Github repo:

$ git clone https://github.com/metachris/logzero.git
$ cd logzero
$ python setup.py install

Contributors


Development

Getting started

$ git clone https://github.com/metachris/logzero.git
$ cd logzero

# Activate virtualenv
$ python3 -m venv venv
$ . venv/bin/activate

# Install main and dev dependencies
$ pip install -e .
$ pip install -r requirements_dev.txt

# Run the tests
$ make test

# Run the linter
$ make lint

# Generate the docs (will auto-open in Chrome)
$ make docs

# You can enable watching mode to automatically rebuild on changes:
$ make servedocs

To test with Python 2.7, you can use Docker:

docker run --rm -it -v /Users/chris/stream/logzero:/mnt python:2.7 /bin/bash

Now you have a shell with the current directory mounted into /mnt/ inside the container.

Notes


Changelog

See the changelog here: https://github.com/metachris/logzero/blob/master/HISTORY.md

Feedback

All kinds of feedback and contributions are welcome.

logo

Comments
  • Setting a loglevel for logfiles

    Setting a loglevel for logfiles

    Hi,

    I would like to set the logging level for a logfile to DEBUG but leave the logging level for the console log at INFO, to log debug information to the logfile without cluttering the console. For example by defining a custom logger via

    logzero.setup_logger(logfile="custom_logfile.log", level=logging.INFO, fileLoglevel=logging.DEBUG).

    This does not work as I expected. After some testing I came to the conclusion that the loglevel set via fileLoglevel can not be lower (only higher) than the loglevel set via level. If a lower level is set via fileLoglevel it gets overwritten by level.

    Is there a specific reason for this behavior?

    opened by LuckyJosh 16
  • upload on conda-forge

    upload on conda-forge

    Hi @metachris, I was wondering if you were interested in uploading the package on conda-forge, which, as you probably know, is a widespread package managing system. If you agree, I can prepare the feedstock recipe.

    opened by carlodri 10
  • Color support for Windows

    Color support for Windows

    I assume you're aware due to the try/except on the import, Windows versions of Python do not ship with the curses module. While there are ways to get a Windows-compatible curses module, it's not a reasonable proposition when there are tried-and-trued alternatives to colored output for Python.

    Most apps and packages use colorama for colored output, including some colored logging packages that exist.

    It's nice that logzero still works fine on Windows. But, colored output is certainly an attractive feature, so I hope you'll consider changing the method by which output is colorized to be cross-platform out-of-the-box.

    Thanks for your time and effort.

    opened by thebigmunch 9
  • Colors for extra levels

    Colors for extra levels

    Hi, it is nice. And yes, it is really important to say, that logging is behind. My questions:

    1/ how is it possible to have green color for all INFO levels (11-20)?

    2/ Colors are also in a logfile, would it be possible to have colors on the screen but not in the file (for later parsing)?

    opened by jarogames 6
  • Usage with multiprocessing and single rotated logfile

    Usage with multiprocessing and single rotated logfile

    • logzero version: 1.5.0
    • Python version: 3.6.5
    • Operating System: Ubuntu 16.04

    Description

    I'm trying to use logzero in a multiprocessing context using a single rotated logfile. I obtain errors from the Python logging module that moving files fails.

    What I Did

    I created a MWE here including all instructions to set up and run it.

    If my approach is valid, I see a clash with logzero's claim to feature 'Multiple loggers can write to the same logfile (also across multiple Python files)'. I'm not entirely sure whether this is not actually a limitation of Python's internal logging module, please point out if so :)

    opened by pylipp 4
  • Add syslog support

    Add syslog support

    • Adding syslog setup utility method so that you can easily use logzero to log directly to the syslog facility of your choice.

    Still more to come for testing, adding documentation, and perhaps streamlining the implementation a bit.

    opened by brianlenz 4
  • logzero is listed in the openSUSE packages but can't seem to install them

    logzero is listed in the openSUSE packages but can't seem to install them

    As noted in #21, logzero is listed in the openSUSE packages:

    • https://software.opensuse.org/package/python2-logzero
    • https://software.opensuse.org/package/python3-logzero

    I tried in Docker with openSUSE 42.2, but can't seem to install the packages:

    # zypper install python2-logzero
    Loading repository data...
    Reading installed packages...
    'python2-logzero' not found in package names. Trying capabilities.
    No provider of 'python2-logzero' found.
    

    @sebix any idea?

    opened by metachris 4
  • virtualenv and/or OSX unable to load module

    virtualenv and/or OSX unable to load module

    • logzero version: 1.2.0
    • Python version: 2.7.10
    • Operating System: Mac Sierra 10.12.5

    $ system_profiler SPSoftwareDataType Software:

    System Software Overview:
    
      System Version: macOS 10.12.5 (16F73)
      Kernel Version: Darwin 16.6.0
      Boot Volume: Macintosh HD
      Boot Mode: Normal
      Computer Name: REMOVED
      User Name: REMOVED
      Secure Virtual Memory: Enabled
      System Integrity Protection: Enabled
      Time since boot: 3 days 7:22
    

    Description

    Using virtualenvwrapper I can't seem to load logzero. Unsure of direct issue

    $ mkvirtualenv foo
    New python executable in /Users/REMOVED/.virtualenvs/foo/bin/python
    Installing setuptools, pip, wheel...done.
    virtualenvwrapper.user_scripts creating /Users/REMOVED/.virtualenvs/foo/bin/predeactivate
    virtualenvwrapper.user_scripts creating /Users/REMOVED/.virtualenvs/foo/bin/postdeactivate
    virtualenvwrapper.user_scripts creating /Users/REMOVED/.virtualenvs/foo/bin/preactivate
    virtualenvwrapper.user_scripts creating /Users/REMOVED/.virtualenvs/foo/bin/postactivate
    virtualenvwrapper.user_scripts creating /Users/REMOVED/.virtualenvs/foo/bin/get_env_details
    
    
    (foo)$ pip install logzero
    Collecting logzero
      Using cached logzero-1.2.0-py2.py3-none-any.whl
    Installing collected packages: logzero
    Successfully installed logzero-1.2.0
    
    $ ls -ld /Users/REMOVED/.virtualenvs/foo/lib/python2.7/site-packages/logzero
    drwxr-xr-x  4 REMOVED  group  136 Jul  7 15:20 /Users/gmerrall/.virtualenvs/foo/lib/python2.7/site-packages/logzero
    
    (foo)$ python
    Python 2.7.10 (default, Feb  7 2017, 00:08:15)
    [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    
    >>> import sys
    >>> import pprint
    >>> pprint.pprint(sys.path)
    ['',
     '/Users/REMOVED/.virtualenvs/foo/lib/python27.zip',
     '/Users/REMOVED/.virtualenvs/foo/lib/python2.7',
     '/Users/REMOVED/.virtualenvs/foo/lib/python2.7/plat-darwin',
     '/Users/REMOVED/.virtualenvs/foo/lib/python2.7/plat-mac',
     '/Users/REMOVED/.virtualenvs/foo/lib/python2.7/plat-mac/lib-scriptpackages',
     '/Users/REMOVED/.virtualenvs/foo/lib/python2.7/lib-tk',
     '/Users/REMOVED/.virtualenvs/foo/lib/python2.7/lib-old',
     '/Users/REMOVED/.virtualenvs/foo/lib/python2.7/lib-dynload',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
     '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
     '/Users/REMOVED/.virtualenvs/foo/lib/python2.7/site-packages']
    
    >>> from logzero import logger
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "logzero.py", line 1, in <module>
        from logzero import logger
    ImportError: cannot import name logger
    
    opened by gmerrall 4
  • To do & Feature ideas 💡

    To do & Feature ideas 💡

    To do:

    • Documentation strategy - currently the detail docs are in RST format and hosted on readthedocs. The docs would need a refreshing, to make sure it's all up to date and everything is working as intended. Thought: maybe better as markdown docs on GitHub, so we can more easily copy code between the README and other places?

    This is an incomplete (and growing) list of possible features to implement:

    • Better way to define StreamHandler output (stdout, stderr, nothing)
    • When using logfile with non-existent path, create it (see #129)
    • Typings
    • More built-in handlers (not sure if wanted)
      • mail - see #71
      • TimedRotatingFileHandler(https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler) (see #99)

    Please comment to add more, as well as to indicate interest.

    opened by metachris 3
  • Use logzero as root_logger.

    Use logzero as root_logger.

    • logzero version:1.5
    • Python version:3.6
    • Operating System:Linux

    Description

    As I wanted to use parent logger of each setup_logger instance, I tried to find the way to do it.

    Buf default logzero setting is not what I intend to use for. The default is not inherited any instance of 'setup_logger'.

    What I Did

    import logzero
    logzero.__name__ = ''
    logzero.setup_logger()
    

    When I executed the code above, I've used it as root_logger. And stopped using setup_logger. I used logger.get_logger('name') instead. Then, finally I got it work as I supposed to do.

    Suggestion

    I think it's not bad idea to describe how to use logzero as rootlogger in README or make a method to do this. I just would like to leave it in case someone else try to do the same thing.

    opened by fx-kirin 3
  • Drop Python 3.3 support to allow dependency updates

    Drop Python 3.3 support to allow dependency updates

    • Py-Up reports security vulnerabilities for cryptography - https://pyup.io/repos/github/metachris/logzero/
    • This py-up PR wants to update it: https://github.com/metachris/logzero/pull/122
    • The related Travis build reports that tox requires Python 3.4+ as well as all other py-up PRs. https://travis-ci.org/metachris/logzero/jobs/416120355

    Could we drop Python 3.3 support? It has reached end-of-life. This would also lead to the possibility to update other packages if required and better security.

    opened by davidhuser 3
  • Update cryptography to 38.0.4

    Update cryptography to 38.0.4

    This PR updates cryptography from 3.4.6 to 38.0.4.

    Changelog

    38.0.4

    ~~~~~~~~~~~~~~~~~~~
    
    * Fixed compilation when using LibreSSL 3.6.0.
    * Fixed error when using ``py2app`` to build an application with a
    ``cryptography`` dependency.
    
    .. _v38-0-3:
    

    38.0.3

    ~~~~~~~~~~~~~~~~~~~
    
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.0.7,
    which resolves *CVE-2022-3602* and *CVE-2022-3786*.
    
    .. _v38-0-2:
    

    38.0.2

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    .. attention::
    
     This release was subsequently yanked from PyPI due to a regression in OpenSSL.
    
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.0.6.
    
    
    .. _v38-0-1:
    

    38.0.1

    ~~~~~~~~~~~~~~~~~~~
    
    * Fixed parsing TLVs in ASN.1 with length greater than 65535 bytes (typically
    seen in large CRLs).
    
    .. _v38-0-0:
    

    38.0.0

    ~~~~~~~~~~~~~~~~~~~
    
    * Final deprecation of OpenSSL 1.1.0. The next release of ``cryptography``
    will drop support.
    * We no longer ship ``manylinux2010`` wheels. Users should upgrade to the
    latest ``pip`` to ensure this doesn&#x27;t cause issues downloading wheels on
    their platform. We now ship ``manylinux_2_28`` wheels for users on new
    enough platforms.
    * Updated the minimum supported Rust version (MSRV) to 1.48.0, from 1.41.0.
    Users with the latest ``pip`` will typically get a wheel and not need Rust
    installed, but check :doc:`/installation` for documentation on installing a
    newer ``rustc`` if required.
    * :meth:`~cryptography.fernet.Fernet.decrypt` and related methods now accept
    both ``str`` and ``bytes`` tokens.
    * Parsing ``CertificateSigningRequest`` restores the behavior of enforcing
    that the ``Extension`` ``critical`` field must be correctly encoded DER. See
    `the issue &lt;https://github.com/pyca/cryptography/issues/6368&gt;`_ for complete
    details.
    * Added two new OpenSSL functions to the bindings to support an upcoming
    ``pyOpenSSL`` release.
    * When parsing :class:`~cryptography.x509.CertificateRevocationList` and
    :class:`~cryptography.x509.CertificateSigningRequest` values, it is now
    enforced that the ``version`` value in the input must be valid according to
    the rules of :rfc:`2986` and :rfc:`5280`.
    * Using MD5 or SHA1 in :class:`~cryptography.x509.CertificateBuilder` and
    other X.509 builders is deprecated and support will be removed in the next
    version.
    * Added additional APIs to
    :class:`~cryptography.x509.certificate_transparency.SignedCertificateTimestamp`, including
    :attr:`~cryptography.x509.certificate_transparency.SignedCertificateTimestamp.signature_hash_algorithm`,
    :attr:`~cryptography.x509.certificate_transparency.SignedCertificateTimestamp.signature_algorithm`,
    :attr:`~cryptography.x509.certificate_transparency.SignedCertificateTimestamp.signature`, and
    :attr:`~cryptography.x509.certificate_transparency.SignedCertificateTimestamp.extension_bytes`.
    * Added :attr:`~cryptography.x509.Certificate.tbs_precertificate_bytes`, allowing
    users to access the to-be-signed pre-certificate data needed for signed
    certificate timestamp verification.
    * :class:`~cryptography.hazmat.primitives.kdf.kbkdf.KBKDFHMAC` and
    :class:`~cryptography.hazmat.primitives.kdf.kbkdf.KBKDFCMAC` now support
    :attr:`~cryptography.hazmat.primitives.kdf.kbkdf.CounterLocation.MiddleFixed`
    counter location.
    * Fixed :rfc:`4514` name parsing to reverse the order of the RDNs according
    to the section 2.1 of the RFC, affecting method
    :meth:`~cryptography.x509.Name.from_rfc4514_string`.
    * It is now possible to customize some aspects of encryption when serializing
    private keys, using
    :meth:`~cryptography.hazmat.primitives.serialization.PrivateFormat.encryption_builder`.
    * Removed several legacy symbols from our OpenSSL bindings. Users of pyOpenSSL
    versions older than 22.0 will need to upgrade.
    * Added
    :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES128` and
    :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES256` classes.
    These classes do not replace
    :class:`~cryptography.hazmat.primitives.ciphers.algorithms.AES` (which
    allows all AES key lengths), but are intended for applications where
    developers want to be explicit about key length.
    
    .. _v37-0-4:
    

    37.0.4

    ~~~~~~~~~~~~~~~~~~~
    
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.0.5.
    
    .. _v37-0-3:
    

    37.0.3

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    .. attention::
    
     This release was subsequently yanked from PyPI due to a regression in OpenSSL.
    
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.0.4.
    
    .. _v37-0-2:
    

    37.0.2

    ~~~~~~~~~~~~~~~~~~~
    
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.0.3.
    * Added a constant needed for an upcoming pyOpenSSL release.
    
    .. _v37-0-1:
    

    37.0.1

    ~~~~~~~~~~~~~~~~~~~
    
    * Fixed an issue where parsing an encrypted private key with the public
    loader functions would hang waiting for console input on OpenSSL 3.0.x rather
    than raising an error.
    * Restored some legacy symbols for older ``pyOpenSSL`` users. These will be
    removed again in the future, so ``pyOpenSSL`` users should still upgrade
    to the latest version of that package when they upgrade ``cryptography``.
    
    .. _v37-0-0:
    

    37.0.0

    ~~~~~~~~~~~~~~~~~~~
    
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.0.2.
    * **BACKWARDS INCOMPATIBLE:** Dropped support for LibreSSL 2.9.x and 3.0.x.
    The new minimum LibreSSL version is 3.1+.
    * **BACKWARDS INCOMPATIBLE:** Removed ``signer`` and ``verifier`` methods
    from the public key and private key classes. These methods were originally
    deprecated in version 2.0, but had an extended deprecation timeline due
    to usage. Any remaining users should transition to ``sign`` and ``verify``.
    * Deprecated OpenSSL 1.1.0 support. OpenSSL 1.1.0 is no longer supported by
    the OpenSSL project. The next release of ``cryptography`` will be the last
    to support compiling with OpenSSL 1.1.0.
    * Deprecated Python 3.6 support. Python 3.6 is no longer supported by the
    Python core team. Support for Python 3.6 will be removed in a future
    ``cryptography`` release.
    * Deprecated the current minimum supported Rust version (MSRV) of 1.41.0.
    In the next release we will raise MSRV to 1.48.0. Users with the latest
    ``pip`` will typically get a wheel and not need Rust installed, but check
    :doc:`/installation` for documentation on installing a newer ``rustc`` if
    required.
    * Deprecated
    :class:`~cryptography.hazmat.primitives.ciphers.algorithms.CAST5`,
    :class:`~cryptography.hazmat.primitives.ciphers.algorithms.SEED`,
    :class:`~cryptography.hazmat.primitives.ciphers.algorithms.IDEA`, and
    :class:`~cryptography.hazmat.primitives.ciphers.algorithms.Blowfish` because
    they are legacy algorithms with extremely low usage. These will be removed
    in a future version of ``cryptography``.
    * Added limited support for distinguished names containing a bit string.
    * We now ship ``universal2`` wheels on macOS, which contain both ``arm64``
    and ``x86_64`` architectures. Users on macOS should upgrade to the latest
    ``pip`` to ensure they can use this wheel, although we will continue to
    ship ``x86_64`` specific wheels for now to ease the transition.
    * This will be the final release for which we ship ``manylinux2010`` wheels.
    Going forward the minimum supported ``manylinux`` ABI for our wheels will
    be ``manylinux2014``. The vast majority of users will continue to receive
    ``manylinux`` wheels provided they have an up to date ``pip``. For PyPy
    wheels this release already requires ``manylinux2014`` for compatibility
    with binaries distributed by upstream.
    * Added support for multiple
    :class:`~cryptography.x509.ocsp.OCSPSingleResponse` in a
    :class:`~cryptography.x509.ocsp.OCSPResponse`.
    * Restored support for signing certificates and other structures in
    :doc:`/x509/index` with SHA3 hash algorithms.
    * :class:`~cryptography.hazmat.primitives.ciphers.algorithms.TripleDES` is
    disabled in FIPS mode.
    * Added support for serialization of PKCS12 CA friendly names/aliases in
    :func:`~cryptography.hazmat.primitives.serialization.pkcs12.serialize_key_and_certificates`
    * Added support for 12-15 byte (96 to 120 bit) nonces to
    :class:`~cryptography.hazmat.primitives.ciphers.aead.AESOCB3`. This class
    previously supported only 12 byte (96 bit).
    * Added support for
    :class:`~cryptography.hazmat.primitives.ciphers.aead.AESSIV` when using
    OpenSSL 3.0.0+.
    * Added support for serializing PKCS7 structures from a list of
    certificates with
    :class:`~cryptography.hazmat.primitives.serialization.pkcs7.serialize_certificates`.
    * Added support for parsing :rfc:`4514` strings with
    :meth:`~cryptography.x509.Name.from_rfc4514_string`.
    * Added :attr:`~cryptography.hazmat.primitives.asymmetric.padding.PSS.AUTO` to
    :class:`~cryptography.hazmat.primitives.asymmetric.padding.PSS`. This can
    be used to verify a signature where the salt length is not already known.
    * Added :attr:`~cryptography.hazmat.primitives.asymmetric.padding.PSS.DIGEST_LENGTH`
    to :class:`~cryptography.hazmat.primitives.asymmetric.padding.PSS`. This
    constant will set the salt length to the same length as the ``PSS`` hash
    algorithm.
    * Added support for loading RSA-PSS key types with
    :func:`~cryptography.hazmat.primitives.serialization.load_pem_private_key`
    and
    :func:`~cryptography.hazmat.primitives.serialization.load_der_private_key`.
    This functionality is limited to OpenSSL 1.1.1e+ and loads the key as a
    normal RSA private key, discarding the PSS constraint information.
    
    .. _v36-0-2:
    

    36.0.2

    ~~~~~~~~~~~~~~~~~~~
    
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 1.1.1n.
    
    .. _v36-0-1:
    

    36.0.1

    ~~~~~~~~~~~~~~~~~~~
    
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 1.1.1m.
    
    .. _v36-0-0:
    

    36.0.0

    ~~~~~~~~~~~~~~~~~~~
    
    * **FINAL DEPRECATION** Support for ``verifier`` and ``signer`` on our
    asymmetric key classes was deprecated in version 2.0. These functions had an
    extended deprecation due to usage, however the next version of
    ``cryptography`` will drop support. Users should migrate to ``sign`` and
    ``verify``.
    * The entire :doc:`/x509/index` layer is now written in Rust. This allows
    alternate asymmetric key implementations that can support cloud key
    management services or hardware security modules provided they implement
    the necessary interface (for example:
    :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey`).
    * :ref:`Deprecated the backend argument&lt;faq-missing-backend&gt;` for all
    functions.
    * Added support for
    :class:`~cryptography.hazmat.primitives.ciphers.aead.AESOCB3`.
    * Added support for iterating over arbitrary request
    :attr:`~cryptography.x509.CertificateSigningRequest.attributes`.
    * Deprecated the ``get_attribute_for_oid`` method on
    :class:`~cryptography.x509.CertificateSigningRequest` in favor of
    :meth:`~cryptography.x509.Attributes.get_attribute_for_oid` on the new
    :class:`~cryptography.x509.Attributes` object.
    * Fixed handling of PEM files to allow loading when certificate and key are
    in the same file.
    * Fixed parsing of :class:`~cryptography.x509.CertificatePolicies` extensions
    containing legacy ``BMPString`` values in their ``explicitText``.
    * Allow parsing of negative serial numbers in certificates. Negative serial
    numbers are prohibited by :rfc:`5280` so a deprecation warning will be
    raised whenever they are encountered. A future version of ``cryptography``
    will drop support for parsing them.
    * Added support for parsing PKCS12 files with friendly names for all
    certificates with
    :func:`~cryptography.hazmat.primitives.serialization.pkcs12.load_pkcs12`,
    which will return an object of type
    :class:`~cryptography.hazmat.primitives.serialization.pkcs12.PKCS12KeyAndCertificates`.
    * :meth:`~cryptography.x509.Name.rfc4514_string` and related methods now have
    an optional ``attr_name_overrides`` parameter to supply custom OID to name
    mappings, which can be used to match vendor-specific extensions.
    * **BACKWARDS INCOMPATIBLE:** Reverted the nonstandard formatting of
    email address fields as ``E`` in
    :meth:`~cryptography.x509.Name.rfc4514_string` methods from version 35.0.
    
    The previous behavior can be restored with:
    ``name.rfc4514_string({NameOID.EMAIL_ADDRESS: &quot;E&quot;})``
    * Allow
    :class:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey`
    and
    :class:`~cryptography.hazmat.primitives.asymmetric.x448.X448PublicKey` to
    be used as public keys when parsing certificates or creating them with
    :class:`~cryptography.x509.CertificateBuilder`. These key types must be
    signed with a different signing algorithm as ``X25519`` and ``X448`` do
    not support signing.
    * Extension values can now be serialized to a DER byte string by calling
    :func:`~cryptography.x509.ExtensionType.public_bytes`.
    * Added experimental support for compiling against BoringSSL. As BoringSSL
    does not commit to a stable API, ``cryptography`` tests against the
    latest commit only. Please note that several features are not available
    when building against BoringSSL.
    * Parsing ``CertificateSigningRequest`` from DER and PEM now, for a limited
    time period, allows the ``Extension`` ``critical`` field to be incorrectly
    encoded. See `the issue &lt;https://github.com/pyca/cryptography/issues/6368&gt;`_
    for complete details. This will be reverted in a future ``cryptography``
    release.
    * When :class:`~cryptography.x509.OCSPNonce` are parsed and generated their
    value is now correctly wrapped in an ASN.1 ``OCTET STRING``. This conforms
    to :rfc:`6960` but conflicts with the original behavior specified in
    :rfc:`2560`. For a temporary period for backwards compatibility, we will
    also parse values that are encoded as specified in :rfc:`2560` but this
    behavior will be removed in a future release.
    
    .. _v35-0-0:
    

    35.0.0

    ~~~~~~~~~~~~~~~~~~~
    
    * Changed the :ref:`version scheme &lt;api-stability:versioning&gt;`. This will
    result in us incrementing the major version more frequently, but does not
    change our existing backwards compatibility policy.
    * **BACKWARDS INCOMPATIBLE:** The :doc:`/x509/index` PEM parsers now require
    that the PEM string passed have PEM delimiters of the correct type. For
    example, parsing a private key PEM concatenated with a certificate PEM will
    no longer be accepted by the PEM certificate parser.
    * **BACKWARDS INCOMPATIBLE:** The X.509 certificate parser no longer allows
    negative serial numbers. :rfc:`5280` has always prohibited these.
    * **BACKWARDS INCOMPATIBLE:** Additional forms of invalid ASN.1 found during
    :doc:`/x509/index` parsing will raise an error on initial parse rather than
    when the malformed field is accessed.
    * Rust is now required for building ``cryptography``, the
    ``CRYPTOGRAPHY_DONT_BUILD_RUST`` environment variable is no longer
    respected.
    * Parsers for :doc:`/x509/index` no longer use OpenSSL and have been
    rewritten in Rust. This should be backwards compatible (modulo the items
    listed above) and improve both security and performance.
    * Added support for OpenSSL 3.0.0 as a compilation target.
    * Added support for
    :class:`~cryptography.hazmat.primitives.hashes.SM3` and
    :class:`~cryptography.hazmat.primitives.ciphers.algorithms.SM4`,
    when using OpenSSL 1.1.1. These algorithms are provided for compatibility
    in regions where they may be required, and are not generally recommended.
    * We now ship ``manylinux_2_24`` and ``musllinux_1_1`` wheels, in addition to
    our ``manylinux2010`` and ``manylinux2014`` wheels. Users on distributions
    like Alpine Linux should ensure they upgrade to the latest ``pip`` to
    correctly receive wheels.
    * Added ``rfc4514_attribute_name`` attribute to :attr:`x509.NameAttribute
    &lt;cryptography.x509.NameAttribute.rfc4514_attribute_name&gt;`.
    * Added :class:`~cryptography.hazmat.primitives.kdf.kbkdf.KBKDFCMAC`.
    
    .. _v3-4-8:
    

    3.4.8

    ~~~~~~~~~~~~~~~~~~
    
    * Updated Windows, macOS, and ``manylinux`` wheels to be compiled with
    OpenSSL 1.1.1l.
    
    .. _v3-4-7:
    

    3.4.7

    ~~~~~~~~~~~~~~~~~~
    
    * Updated Windows, macOS, and ``manylinux`` wheels to be compiled with
    OpenSSL 1.1.1k.
    
    .. _v3-4-6:
    
    Links
    • PyPI: https://pypi.org/project/cryptography
    • Changelog: https://pyup.io/changelogs/cryptography/
    • Repo: https://github.com/pyca/cryptography
    opened by pyup-bot 0
  • Update flake8 to 6.0.0

    Update flake8 to 6.0.0

    This PR updates flake8 from 3.8.4 to 6.0.0.

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

    Links
    • PyPI: https://pypi.org/project/flake8
    • Repo: https://github.com/pycqa/flake8
    opened by pyup-bot 0
  • Update sphinx-rtd-theme to 1.1.0

    Update sphinx-rtd-theme to 1.1.0

    This PR updates sphinx-rtd-theme from 0.5.0 to 1.1.0.

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

    Links
    • PyPI: https://pypi.org/project/sphinx-rtd-theme
    • Repo: https://github.com/readthedocs/sphinx_rtd_theme
    opened by pyup-bot 0
  • Update colorama to 0.4.6

    Update colorama to 0.4.6

    This PR updates colorama from 0.4.4 to 0.4.6.

    Changelog

    0.4.6

    * https://github.com/tartley/colorama/pull/139 Add alternative to &#x27;init()&#x27;,
     called &#x27;just_fix_windows_console&#x27;. This fixes many longstanding problems
     with &#x27;init&#x27;, such as working incorrectly on modern Windows terminals, and
     wonkiness when init gets called multiple times. The intention is that it
     just makes all Windows terminals treat ANSI the same way as other terminals
     do. Many thanks the njsmith for fixing our messes. 
    * https://github.com/tartley/colorama/pull/352 Support Windows 10&#x27;s ANSI/VT
     console. This didn&#x27;t exist when Colorama was created, and avoiding us
     causing havok there is long overdue. Thanks to segeviner for the initial
     approach, and to njsmith for getting it merged.
    * https://github.com/tartley/colorama/pull/338 Internal overhaul of package
     metadata declaration, which abolishes our use of the now heavily
     discouraged setuptools (and hence setup.py, setup.cfg and MANIFEST.in), in
     favor of hatchling (and hence pyproject.toml), generously contributed by
     ofek (author of hatchling). This includes dropping support Python3.5 and
     3.6, which are EOL, and were already dropped from setuptools, so this
     should not affect our users.
    * https://github.com/tartley/colorama/pull/353 Attention to detail award to
     LqdBcnAtWork for a spelling fix in demo06
    

    0.4.5

    * Catch a racy ValueError that could occur on exit.
    * Create README-hacking.md, for Colorama contributors.
    * Tweak some README unicode characters that don&#x27;t render correctly on PyPI.
    * Fix some tests that were failing on some operating systems.
    * Add support for Python 3.9.
    * Add support for PyPy3.
    * Add support for pickling with the ``dill`` module.
    
    Links
    • PyPI: https://pypi.org/project/colorama
    • Changelog: https://pyup.io/changelogs/colorama/
    opened by pyup-bot 0
  • Update sphinx to 5.3.0

    Update sphinx to 5.3.0

    This PR updates Sphinx from 3.3.1 to 5.3.0.

    Changelog

    5.3.0

    =====================================
    
    * 10759: LaTeX: add :confval:`latex_table_style` and support the
    ``&#x27;booktabs&#x27;``, ``&#x27;borderless&#x27;``, and ``&#x27;colorrows&#x27;`` styles.
    (thanks to Stefan Wiehler for initial pull requests 6666, 6671)
    * 10840: One can cross-reference including an option value like ``:option:`--module=foobar,
    ``:option:`--module[=foobar] or ``:option:`--module foobar.
    Patch by Martin Liska.
    * 10881: autosectionlabel: Record the generated section label to the debug log.
    * 10268: Correctly URI-escape image filenames.
    * 10887: domains: Allow sections in all the content of all object description
    directives (e.g. :rst:dir:`py:function`). Patch by Adam Turner
    

    5.2.3

    =====================================
    
    * 10878: Fix base64 image embedding in ``sphinx.ext.imgmath``
    * 10886: Add ``:nocontentsentry:`` flag and global domain table of contents
    entry control option. Patch by Adam Turner
    

    5.2.2

    =====================================
    
    * 10872: Restore link targets for autodoc modules to the top of content.
    Patch by Dominic Davis-Foster.
    

    5.2.1

    =====================================
    
    Bugs fixed
    ----------
    
    * 10861: Always normalise the ``pycon3`` lexer to ``pycon``.
    * Fix using ``sphinx.ext.autosummary`` with modules containing titles in the
    module-level docstring.
    

    5.2.0.post0

    ===========================================
    
    * Recreated source tarballs for Debian maintainers.
    

    5.2.0

    =====================================
    
    Dependencies
    ------------
    
    * 10356: Sphinx now uses declarative metadata with ``pyproject.toml`` to
    create packages, using PyPA&#x27;s ``flit`` project as a build backend. Patch by
    Adam Turner.
    
    Deprecated
    ----------
    
    * 10843: Support for HTML 4 output. Patch by Adam Turner.
    
    Features added
    --------------
    
    * 10738: napoleon: Add support for docstring types using &#x27;of&#x27;, like
    ``type of type``. Example: ``tuple of int``.
    * 10286: C++, support requires clauses not just between the template
    parameter lists and the declaration.
    * 10755: linkcheck: Check the source URL of raw directives that use the ``url``
    option.
    * 10781: Allow :rst:role:`ref` role to be used with definitions and fields.
    * 10717: HTML Search: Increase priority for full title and
    subtitle matches in search results
    * 10718: HTML Search: Save search result score to the HTML element for debugging
    * 10673: Make toctree accept &#x27;genindex&#x27;, &#x27;modindex&#x27; and &#x27;search&#x27; docnames
    * 6316, 10804: Add domain objects to the table of contents. Patch by Adam Turner
    * 6692: HTML Search: Include explicit :rst:dir:`index` directive index entries
    in the search index and search results. Patch by Adam Turner
    * 10816: imgmath: Allow embedding images in HTML as base64
    * 10854: HTML Search: Use browser localstorage for highlight control, stop
    storing highlight parameters in URL query strings. Patch by Adam Turner.
    
    Bugs fixed
    ----------
    
    * 10723: LaTeX: 5.1.0 has made the &#x27;sphinxsetup&#x27; ``verbatimwithframe=false``
    become without effect.
    * 10257: C++, ensure consistent non-specialization template argument
    representation.
    * 10729: C++, fix parsing of certain non-type template parameter packs.
    * 10715: Revert 10520: &quot;Fix&quot; use of sidebar classes in ``agogo.css_t``
    

    5.1.1

    =====================================
    
    Bugs fixed
    ----------
    
    * 10701: Fix ValueError in the new ``deque`` based ``sphinx.ext.napolean``
    iterator implementation.
    * 10702: Restore compatability with third-party builders.
    

    5.1.0

    =====================================
    
    Dependencies
    ------------
    
    * 10656: Support `Docutils 0.19`_. Patch by Adam Turner.
    
    .. _Docutils 0.19: https://docutils.sourceforge.io/RELEASE-NOTES.html#release-0-19-2022-07-05
    
    Deprecated
    ----------
    
    * 10467: Deprecated ``sphinx.util.stemmer`` in favour of ``snowballstemmer``.
    Patch by Adam Turner.
    * 9856: Deprecated ``sphinx.ext.napoleon.iterators``.
    
    Features added
    --------------
    
    * 10444: html theme: Allow specifying multiple CSS files through the ``stylesheet``
    setting in ``theme.conf`` or by setting ``html_style`` to an iterable of strings.
    * 10366: std domain: Add support for emphasising placeholders in :rst:dir:`option`
    directives through a new :confval:`option_emphasise_placeholders` configuration
    option.
    * 10439: std domain: Use the repr of some variables when displaying warnings,
    making whitespace issues easier to identify.
    * 10571: quickstart: Reduce content in the generated ``conf.py`` file. Patch by
    Pradyun Gedam.
    * 10648: LaTeX: CSS-named-alike additional :ref:`&#x27;sphinxsetup&#x27; &lt;latexsphinxsetup&gt;`
    keys allow to configure four separate border-widths, four paddings, four
    corner radii, a shadow (possibly inset), colours for border, background, shadow
    for each of the code-block, topic, attention, caution, danger, error and warning
    directives.
    * 10655: LaTeX: Explain non-standard encoding in LatinRules.xdy
    * 10599: HTML Theme: Wrap consecutive footnotes in an ``&lt;aside&gt;`` element when
    using Docutils 0.18 or later, to allow for easier styling. This matches the
    behaviour introduced in Docutils 0.19. Patch by Adam Turner.
    * 10518: config: Add ``include_patterns`` as the opposite of ``exclude_patterns``.
    Patch by Adam Turner.
    
    Bugs fixed
    ----------
    
    * 10594: HTML Theme: field term colons are doubled if using Docutils 0.18+
    * 10596: Build failure if Docutils version is 0.18 (not 0.18.1) due
    to missing ``Node.findall()``
    * 10506: LaTeX: build error if highlighting inline code role in figure caption
    (refs: 10251)
    * 10634: Make -P (pdb) option work better with exceptions triggered from events
    * 10550: py domain: Fix spurious whitespace in unparsing various operators (``+``,
    ``-``, ``~``, and ``**``). Patch by Adam Turner (refs: 10551).
    * 10460: logging: Always show node source locations as absolute paths.
    * HTML Search: HTML tags are displayed as a part of object name
    * HTML Search: search snipets should not be folded
    * HTML Search: Minor errors are emitted on fetching search snipets
    * HTML Search: The markers for header links are shown in the search result
    * 10520: HTML Theme: Fix use of sidebar classes in ``agogo.css_t``.
    * 6679: HTML Theme: Fix inclusion of hidden toctrees in the agogo theme.
    * 10566: HTML Theme: Fix enable_search_shortcuts does not work
    * 8686: LaTeX: Text can fall out of code-block at end of page and leave artifact
    on next page
    * 10633: LaTeX: user injected ``\color`` commands in topic or admonition boxes may
    cause color leaks in PDF due to upstream `framed.sty &lt;https://ctan.org/pkg/framed&gt;`_
    bug
    * 10638: LaTeX: framed coloured boxes in highlighted code (e.g. highlighted
    diffs using Pygments style ``&#x27;manni&#x27;``) inherit thickness of code-block frame
    * 10647: LaTeX: Only one ``\label`` is generated for ``desc_signature`` node
    even if it has multiple node IDs
    * 10579: i18n: UnboundLocalError is raised on translating raw directive
    * 9577, 10088: py domain: Fix warning for duplicate Python references when
    using ``:any:`` and autodoc.
    * 10548: HTML Search: fix minor summary issues.
    

    5.0.2

    =====================================
    
    Features added
    --------------
    
    * 10523: HTML Theme: Expose the Docutils&#x27;s version info tuple as a template
    variable, ``docutils_version_info``. Patch by Adam Turner.
    
    Bugs fixed
    ----------
    
    * 10538: autodoc: Inherited class attribute having docstring is documented even
    if :confval:`autodoc_inherit_docstring` is disabled
    * 10509: autosummary: autosummary fails with a shared library
    * 10497: py domain: Failed to resolve strings in Literal. Patch by Adam Turner.
    * 10523: HTML Theme: Fix double brackets on citation references in Docutils 0.18+.
    Patch by Adam Turner.
    * 10534: Missing CSS for nav.contents in Docutils 0.18+. Patch by Adam Turner.
    

    5.0.1

    =====================================
    
    Bugs fixed
    ----------
    
    * 10498: gettext: TypeError is raised when sorting warning messages if a node
    has no line number. Patch by Adam Turner.
    * 10493: HTML Theme: :rst:dir:`topic` directive is rendered incorrectly with
    Docutils 0.18. Patch by Adam Turner.
    * 10495: IndexError is raised for a :rst:role:`kbd` role having a separator.
    Patch by Adam Turner.
    

    5.0.0

    * 9575: autodoc: The annotation of return value should not be shown when
    ``autodoc_typehints=&quot;description&quot;``
    * 9648: autodoc: ``*args`` and ``**kwargs`` entries are duplicated when
    ``autodoc_typehints=&quot;description&quot;``
    * 8180: autodoc: Docstring metadata ignored for attributes
    * 10443: epub: EPUB builder can&#x27;t detect the mimetype of .webp file
    * 10104: gettext: Duplicated locations are shown if 3rd party extension does
    not provide correct information
    * 10456: py domain: ``:meta:`` fields are displayed if docstring contains two
    or more meta-field
    * 9096: sphinx-build: the value of progress bar for paralle build is wrong
    * 10110: sphinx-build: exit code is not changed when error is raised on
    builder-finished event
    

    4.5.0

    =====================================
    
    Incompatible changes
    --------------------
    
    * 10112: extlinks: Disable hardcoded links detector by default
    * 9993, 10177: std domain: Disallow to refer an inline target via
    :rst:role:`ref` role
    
    Deprecated
    ----------
    
    * ``sphinx.ext.napoleon.docstring.GoogleDocstring._qualify_name()``
    
    Features added
    --------------
    
    * 10260: Enable ``FORCE_COLOR`` and ``NO_COLOR`` for terminal colouring
    * 10234: autosummary: Add &quot;autosummary&quot; CSS class to summary tables
    * 10125: extlinks: Improve suggestion message for a reference having title
    * 10112: extlinks: Add :confval:`extlinks_detect_hardcoded_links` to enable
    hardcoded links detector feature
    * 9494, 9456: html search: Add a config variable
    :confval:`html_show_search_summary` to enable/disable the search summaries
    * 9337: HTML theme, add option ``enable_search_shortcuts`` that enables :kbd:`/` as
    a Quick search shortcut and :kbd:`Esc` shortcut that
    removes search highlighting.
    * 10107: i18n: Allow to suppress translation warnings by adding ``noqa``
    comment to the tail of each translation message
    * 10252: C++, support attributes on classes, unions, and enums.
    * 10253: :rst:role:`pep` role now generates URLs based on `peps.python.org
    &lt;https://peps.python.org&gt;`_
    
    Bugs fixed
    ----------
    
    * 9876: autodoc: Failed to document an imported class that is built from native
    binary module
    * 10133: autodoc: Crashed when mocked module is used for type annotation
    * 10146: autodoc: :confval:`autodoc_default_options` does not support
    ``no-value`` option
    * 9971: autodoc: TypeError is raised when the target object is annotated by
    unhashable object
    * 10205: extlinks: Failed to compile regexp on checking hardcoded links
    * 10277: html search: Could not search short words (ex. &quot;use&quot;)
    * 9529: LaTeX: named auto numbered footnote (ex. ``[named]``) that is referred
    multiple times was rendered to a question mark
    * 9924: LaTeX: multi-line :rst:dir:`cpp:function` directive has big vertical
    spacing in Latexpdf
    * 10158: LaTeX: excessive whitespace since v4.4.0 for undocumented
    variables/structure members 
    * 10175: LaTeX: named footnote reference is linked to an incorrect footnote if
    the name is also used in the different document
    * 10269: manpage: Failed to resolve the title of :rst:role:`ref` cross references
    * 10179: i18n: suppress &quot;rST localization&quot; warning
    * 10118: imgconverter: Unnecessary availablity check is called for remote URIs
    * 10181: napoleon: attributes are displayed like class attributes for google
    style docstrings when :confval:`napoleon_use_ivar` is enabled
    * 10122: sphinx-build: make.bat does not check the installation of sphinx-build
    command before showing help
    

    4.4.0

    =====================================
    
    Dependencies
    ------------
    
    * 10007: Use ``importlib_metadata`` for python-3.9 or older
    * 10007: Drop ``setuptools``
    
    Features added
    --------------
    
    * 9075: autodoc: Add a config variable :confval:`autodoc_typehints_format`
    to suppress the leading module names of typehints of function signatures (ex.
    ``io.StringIO`` -&gt; ``StringIO``)
    * 9831: Autosummary now documents only the members specified in a module&#x27;s
    ``__all__`` attribute if :confval:`autosummary_ignore_module_all` is set to
    ``False``. The default behaviour is unchanged. Autogen also now supports
    this behavior with the ``--respect-module-all`` switch.
    * 9555: autosummary: Improve error messages on failure to load target object
    * 9800: extlinks: Emit warning if a hardcoded link is replaceable
    by an extlink, suggesting a replacement.
    * 9961: html: Support nested &lt;kbd&gt; HTML elements in other HTML builders
    * 10013: html: Allow to change the loading method of JS via ``loading_method``
    parameter for :meth:`.Sphinx.add_js_file()`
    * 9551: html search: &quot;Hide Search Matches&quot; link removes &quot;highlight&quot; parameter
    from URL
    * 9815: html theme: Wrap sidebar components in div to allow customizing their
    layout via CSS
    * 9827: i18n: Sort items in glossary by translated terms
    * 9899: py domain: Allows to specify cross-reference specifier (``.`` and
    ``~``) as ``:type:`` option
    * 9894: linkcheck: add option ``linkcheck_exclude_documents`` to disable link
    checking in matched documents.
    * 9793: sphinx-build: Allow to use the parallel build feature in macOS on macOS
    and Python3.8+
    * 10055: sphinx-build: Create directories when ``-w`` option given
    * 9993: std domain: Allow to refer an inline target (ex. ``_`target name)
    via :rst:role:`ref` role
    * 9981: std domain: Strip value part of the option directive from general index
    * 9391: texinfo: improve variable in ``samp`` role
    * 9578: texinfo: Add :confval:`texinfo_cross_references` to disable cross
    references for readability with standalone readers
    * 9822 (and 9062), add new Intersphinx role :rst:role:`external` for explict
    lookup in the external projects, without resolving to the local project.
    
    Bugs fixed
    ----------
    
    * 9866: autodoc: doccomment for the imported class was ignored
    * 9883: autodoc: doccomment for the alias to mocked object was ignored
    * 9908: autodoc: debug message is shown on building document using NewTypes
    with Python 3.10
    * 9968: autodoc: instance variables are not shown if __init__ method has
    position-only-arguments
    * 9194: autodoc: types under the &quot;typing&quot; module are not hyperlinked
    * 10009: autodoc: Crashes if target object raises an error on getting docstring
    * 10058: autosummary: Imported members are not shown when
    ``autodoc_class_signature = &#x27;separated&#x27;``
    * 9947: i18n: topic directive having a bullet list can&#x27;t be translatable
    * 9878: mathjax: MathJax configuration is placed after loading MathJax itself
    * 9932: napoleon: empty &quot;returns&quot; section is generated even if no description
    * 9857: Generated RFC links use outdated base url
    * 9909: HTML, prevent line-wrapping in literal text.
    * 10061: html theme: Configuration values added by themes are not be able to
    override from conf.py
    * 10073: imgconverter: Unnecessary availablity check is called for &quot;data&quot; URIs
    * 9925: LaTeX: prohibit also with ``&#x27;xelatex&#x27;`` line splitting at dashes of
    inline and parsed literals
    * 9944: LaTeX: extra vertical whitespace for some nested declarations
    * 9940: LaTeX: Multi-function declaration in Python domain has cramped
    vertical spacing in latexpdf output
    * 10015: py domain: types under the &quot;typing&quot; module are not hyperlinked defined
    at info-field-list
    * 9390: texinfo: Do not emit labels inside footnotes
    * 9413: xml: Invalid XML was generated when cross referencing python objects
    * 9979: Error level messages were displayed as warning messages
    * 10057: Failed to scan documents if the project is placed onto the root
    directory
    * 9636: code-block: ``:dedent:`` without argument did strip newlines
    

    4.3.2

    =====================================
    
    Bugs fixed
    ----------
    
    * 9917: C and C++, parse fundamental types no matter the order of simple type
    specifiers.
    

    4.3.1

    =====================================
    
    Features added
    --------------
    
    * 9864: mathjax: Support chnaging the loading method of MathJax to &quot;defer&quot; via
    :confval:`mathjax_options`
    
    Bugs fixed
    ----------
    
    * 9838: autodoc: AttributeError is raised on building document for functions
    decorated by functools.lru_cache
    * 9879: autodoc: AttributeError is raised on building document for an object
    having invalid __doc__ attribute
    * 9844: autodoc: Failed to process a function wrapped with functools.partial if
    :confval:`autodoc_preserve_defaults` enabled
    * 9872: html: Class namespace collision between autodoc signatures and
    docutils-0.17
    * 9868: imgmath: Crashed if the dvisvgm command failed to convert equation
    * 9864: mathjax: Failed to render equations via MathJax v2.  The loading method
    of MathJax is back to &quot;async&quot; method again
    

    4.3.0

    =====================================
    
    Dependencies
    ------------
    
    * Support Python 3.10
    
    Incompatible changes
    --------------------
    
    * 9649: ``searchindex.js``: the embedded data has changed format to allow
    objects with the same name in different domains.
    * 9672: The rendering of Python domain declarations is implemented
    with more docutils nodes to allow better CSS styling.
    It may break existing styling.
    * 9672: the signature of
    ``domains.python.PyObject.get_signature_prefix`` has changed to
    return a list of nodes instead of a plain string.
    * 9695: ``domains.js.JSObject.display_prefix`` has been changed into a method
    ``get_display_prefix`` which now returns a list of nodes
    instead of a plain string.
    * 9695: The rendering of Javascript domain declarations is implemented
    with more docutils nodes to allow better CSS styling.
    It may break existing styling.
    * 9450: mathjax: Load MathJax via &quot;defer&quot; strategy
    
    Deprecated
    ----------
    
    * ``sphinx.ext.autodoc.AttributeDocumenter._datadescriptor``
    * ``sphinx.writers.html.HTMLTranslator._fieldlist_row_index``
    * ``sphinx.writers.html.HTMLTranslator._table_row_index``
    * ``sphinx.writers.html5.HTML5Translator._fieldlist_row_index``
    * ``sphinx.writers.html5.HTML5Translator._table_row_index``
    
    Features added
    --------------
    
    * 9639: autodoc: Support asynchronous generator functions
    * 9664: autodoc: ``autodoc-process-bases`` supports to inject reST snippet as a
    base class
    * 9691: C, added new info-field ``retval``
    for :rst:dir:`c:function` and :rst:dir:`c:macro`.
    * C++, added new info-field ``retval`` for :rst:dir:`cpp:function`.
    * 9618: i18n: Add :confval:`gettext_allow_fuzzy_translations` to allow &quot;fuzzy&quot;
    messages for translation
    * 9672: More CSS classes on Python domain descriptions
    * 9695: More CSS classes on Javascript domain descriptions
    * 9683: Revert the removal of ``add_stylesheet()`` API.  It will be kept until
    the Sphinx-6.0 release
    * 2068, add :confval:`intersphinx_disabled_reftypes` for disabling
    interphinx resolution of cross-references that do not have an explicit
    inventory specification. Specific types of cross-references can be disabled,
    e.g., ``std:doc`` or all cross-references in a specific domain,
    e.g., ``std:*``.
    * 9623: Allow to suppress &quot;toctree contains reference to excluded document&quot;
    warnings using :confval:`suppress_warnings`
    
    Bugs fixed
    ----------
    
    * 9630: autodoc: Failed to build cross references if :confval:`primary_domain`
    is not &#x27;py&#x27;
    * 9644: autodoc: Crashed on getting source info from problematic object
    * 9655: autodoc: mocked object having doc comment is warned unexpectedly
    * 9651: autodoc: return type field is not generated even if
    :confval:`autodoc_typehints_description_target` is set to &quot;documented&quot; when
    its info-field-list contains ``:returns:`` field
    * 9657: autodoc: The base class for a subclass of mocked object is incorrect
    * 9607: autodoc: Incorrect base class detection for the subclasses of the
    generic class
    * 9755: autodoc: memory addresses are shown for aliases
    * 9752: autodoc: Failed to detect type annotation for slots attribute
    * 9756: autodoc: Crashed if classmethod does not have __func__ attribute
    * 9757: autodoc: :confval:`autodoc_inherit_docstrings` does not effect to
    overridden classmethods
    * 9781: autodoc: :confval:`autodoc_preserve_defaults` does not support
    hexadecimal numeric
    * 9630: autosummary: Failed to build summary table if :confval:`primary_domain`
    is not &#x27;py&#x27;
    * 9670: html: Fix download file with special characters
    * 9710: html: Wrong styles for even/odd rows in nested tables
    * 9763: html: parameter name and its type annotation are not separated in HTML
    * 9649: HTML search: when objects have the same name but in different domains,
    return all of them as result instead of just one.
    * 7634: intersphinx: references on the file in sub directory are broken
    * 9737: LaTeX: hlist is rendered as a list containing &quot;aggedright&quot; text
    * 9678: linkcheck: file extension was shown twice in warnings
    * 9697: py domain: An index entry with parens was registered for ``py:method``
    directive with ``:property:`` option
    * 9775: py domain: Literal typehint was converted to a cross reference when
    :confval:`autodoc_typehints=&#x27;description&#x27;`
    * 9708: needs_extension failed to check double-digit version correctly
    * 9688: Fix Sphinx patched :dudir:`code` does not recognize ``:class:`` option
    * 9733: Fix for logging handler flushing warnings in the middle of the docs
    build
    * 9656: Fix warnings without subtype being incorrectly suppressed
    * Intersphinx, for unresolved references with an explicit inventory,
    e.g., ``proj:myFunc``, leave the inventory prefix in the unresolved text.
    

    4.2.0

    =====================================
    
    Features added
    --------------
    
    * 9445: autodoc: Support class properties
    * 9479: autodoc: Emit a warning if target is a mocked object
    * 9560: autodoc: Allow to refer NewType instances with module name in Python
    3.10 or above
    * 9447: html theme: Expose the version of Sphinx in the form of tuple as a
    template variable ``sphinx_version_tuple``
    * 9594: manpage: Suppress the title of man page if description is empty
    * 9445: py domain: :rst:dir:`py:property` directive supports ``:classmethod:``
    option to describe the class property
    * 9524: test: SphinxTestApp can take ``builddir`` as an argument
    * 9535: C and C++, support more fundamental types, including GNU extensions.
    
    Bugs fixed
    ----------
    
    * 9608: apidoc: apidoc does not generate a module definition for implicit
    namespace package
    * 9504: autodoc: generate incorrect reference to the parent class if the target
    class inherites the class having ``_name`` attribute
    * 9537, 9589: autodoc: Some objects under ``typing`` module are not displayed
    well with the HEAD of 3.10
    * 9487: autodoc: typehint for cached_property is not shown
    * 9509: autodoc: AttributeError is raised on failed resolving typehints
    * 9518: autodoc: autodoc_docstring_signature does not effect to ``__init__()``
    and ``__new__()``
    * 9522: autodoc: PEP 585 style typehints having arguments (ex. ``list[int]``)
    are not displayed well
    * 9481: autosummary: some warnings contain non-existing filenames
    * 9568: autosummary: summarise overlined sectioned headings correctly
    * 9600: autosummary: Type annotations which contain commas in autosummary table
    are not removed completely
    * 9481: c domain: some warnings contain non-existing filenames
    * 9481: cpp domain: some warnings contain non-existing filenames
    * 9456: html search: abbreation marks are inserted to the search result if
    failed to fetch the content of the page
    * 9617: html search: The JS requirement warning is shown if browser is slow
    * 9267: html theme: CSS and JS files added by theme were loaded twice
    * 9585: py domain: ``:type:`` option for :rst:dir:`py:property` directive does
    not create a hyperlink
    * 9576: py domain: Literal typehint was converted to a cross reference
    * 9535 comment: C++, fix parsing of defaulted function parameters that are
    function pointers.
    * 9564: smartquotes: don&#x27;t adjust typography for text with
    language-highlighted ``:code:`` role.
    * 9512: sphinx-build: crashed with the HEAD of Python 3.10
    

    4.1.2

    =====================================
    
    Incompatible changes
    --------------------
    
    * 9435: linkcheck: Disable checking automatically generated anchors on
    github.com (ex. anchors in reST/Markdown documents)
    
    Bugs fixed
    ----------
    
    * 9489: autodoc: Custom types using ``typing.NewType`` are not displayed well
    with the HEAD of 3.10
    * 9490: autodoc: Some objects under ``typing`` module are not displayed well
    with the HEAD of 3.10
    * 9436, 9471: autodoc: crashed if ``autodoc_class_signature = &quot;separated&quot;``
    * 9456: html search: html_copy_source can&#x27;t control the search summaries
    * 9500: LaTeX: Failed to build Japanese document on Windows
    * 9435: linkcheck: Failed to check anchors in github.com
    

    4.1.1

    =====================================
    
    Dependencies
    ------------
    
    * 9434: sphinxcontrib-htmlhelp-2.0.0 or above
    * 9434: sphinxcontrib-serializinghtml-1.1.5 or above
    
    Bugs fixed
    ----------
    
    * 9438: html: HTML logo or Favicon specified as file not being found on output
    

    4.1.0

    =====================================
    
    Dependencies
    ------------
    
    * Support jinja2-3.0
    
    Deprecated
    ----------
    
    * The ``app`` argument of ``sphinx.environment.BuildEnvironment`` becomes
    required
    * ``sphinx.application.Sphinx.html_theme``
    * ``sphinx.ext.autosummary._app``
    * ``sphinx.util.docstrings.extract_metadata()``
    
    Features added
    --------------
    
    * 8107: autodoc: Add ``class-doc-from`` option to :rst:dir:`autoclass`
    directive to control the content of the specific class like
    :confval:`autoclass_content`
    * 8588: autodoc: :confval:`autodoc_type_aliases` now supports dotted name. It
    allows you to define an alias for a class with module name like
    ``foo.bar.BazClass``
    * 9175: autodoc: Special member is not documented in the module
    * 9195: autodoc: The arguments of ``typing.Literal`` are wrongly rendered
    * 9185: autodoc: :confval:`autodoc_typehints` allows ``&#x27;both&#x27;`` setting to
    allow typehints to be included both in the signature and description
    * 4257: autodoc: Add :confval:`autodoc_class_signature` to separate the class
    entry and the definition of ``__init__()`` method
    * 8061, 9218: autodoc: Support variable comment for alias classes
    * 3014: autodoc: Add :event:`autodoc-process-bases` to modify the base classes
    of the class definitions
    * 9272: autodoc: Render enum values for the default argument value better
    * 9384: autodoc: ``autodoc_typehints=&#x27;none&#x27;`` now erases typehints for
    variables, attributes and properties
    * 3257: autosummary: Support instance attributes for classes
    * 9358: html: Add &quot;heading&quot; role to the toctree items
    * 9225: html: Add span tag to the return typehint of method/function
    * 9129: html search: Show search summaries when html_copy_source = False
    * 9307: html search: Prevent corrections and completions in search field
    * 9120: html theme: Eliminate prompt characters of code-block from copyable
    text
    * 9176: i18n: Emit a debug message if message catalog file not found under
    :confval:`locale_dirs`
    * 9414: LaTeX: Add xeCJKVerbAddon to default fvset config for Chinese documents
    * 9016: linkcheck: Support checking anchors on github.com
    * 9016: linkcheck: Add a new event :event:`linkcheck-process-uri` to modify
    URIs before checking hyperlinks
    * 6525: linkcheck: Add :confval:`linkcheck_allowed_redirects` to mark
    hyperlinks that are redirected to expected URLs as &quot;working&quot;
    * 1874: py domain: Support union types using ``|`` in info-field-list
    * 9268: py domain: :confval:`python_use_unqualified_type_names` supports type
    field in info-field-list
    * 9097: Optimize the parallel build
    * 9131: Add :confval:`nitpick_ignore_regex` to ignore nitpicky warnings using
    regular expressions
    * 9174: Add ``Sphinx.set_html_assets_policy`` to tell extensions to include
    HTML assets in all the pages. Extensions can check this via
    ``Sphinx.registry.html_assets_policy``
    * C++, add support for
    
    - ``inline`` variables,
    - ``consteval`` functions,
    - ``constinit`` variables,
    - ``char8_t``,
    - ``explicit(&lt;constant expression&gt;)`` specifier,
    - digit separators in literals, and
    - constraints in placeholder type specifiers, aka. adjective syntax
     (e.g., ``Sortable auto &amp;v``).
    
    * C, add support for digit separators in literals.
    * 9166: LaTeX: support containers in LaTeX output
    
    
    Bugs fixed
    ----------
    
    * 8872: autodoc: stacked singledispatches are wrongly rendered
    * 8597: autodoc: a docsting having metadata only should be treated as
    undocumented
    * 9185: autodoc: typehints for overloaded functions and methods are inaccurate
    * 9250: autodoc: The inherited method not having docstring is wrongly parsed
    * 9283: autodoc: autoattribute directive failed to generate document for an
    attribute not having any comment
    * 9364: autodoc: single element tuple on the default argument value is wrongly
    rendered
    * 9362: autodoc: AttributeError is raised on processing a subclass of Tuple[()]
    * 9404: autodoc: TypeError is raised on processing dict-like object (not a
    class) via autoclass directive
    * 9317: html: Pushing left key causes visiting the next page at the first page
    * 9381: html: URL for html_favicon and html_log does not work
    * 9270: html theme : pyramid theme generates incorrect logo links
    * 9217: manpage: The name of manpage directory that is generated by
    :confval:`man_make_section_directory` is not correct
    * 9350: manpage: Fix font isn&#x27;t reset after keyword at the top of samp role
    * 9306: Linkcheck reports broken link when remote server closes the connection
    on HEAD request
    * 9280: py domain: &quot;exceptions&quot; module is not displayed
    * 9418: py domain: a Callable annotation with no parameters
    (e.g. ``Callable[[], None])`` will be rendered with a bracket missing
    (``Callable[], None]``)
    * 9319: quickstart: Make sphinx-quickstart exit when conf.py already exists
    * 9387: xml: XML Builder ignores custom visitors
    * 9224: ``:param:`` and ``:type:`` fields does not support a type containing
    whitespace (ex. ``Dict[str, str]``)
    * 8945: when transforming typed fields, call the specified role instead of
    making an single xref. For C and C++, use the ``expr`` role for typed fields.
    

    4.0.3

    =====================================
    
    Features added
    --------------
    
    * C, add C23 keywords ``_Decimal32``, ``_Decimal64``, and ``_Decimal128``.
    * 9354: C, add :confval:`c_extra_keywords` to allow user-defined keywords
    during parsing.
    * Revert the removal of ``sphinx.util:force_decode()`` to become some 3rd party
    extensions available again during 5.0
    
    Bugs fixed
    ----------
    
    * 9330: changeset domain: :rst:dir:`versionchanged` with contents being a list
    will cause error during pdf build
    * 9313: LaTeX: complex table with merged cells broken since 4.0
    * 9305: LaTeX: backslash may cause Improper discretionary list pdf build error
    with Japanese engines
    * 9354: C, remove special macro names from the keyword list.
    See also :confval:`c_extra_keywords`.
    * 9322: KeyError is raised on PropagateDescDomain transform
    

    4.0.2

    =====================================
    
    Dependencies
    ------------
    
    * 9216: Support jinja2-3.0
    
    Incompatible changes
    --------------------
    
    * 9222: Update Underscore.js to 1.13.1
    * 9217: manpage: Stop creating a section directory on build manpage by default
    (see :confval:`man_make_section_directory`)
    
    Bugs fixed
    ----------
    
    * 9210: viewcode: crashed if non importable modules found on parallel build
    * 9240: Unknown node error for pending_xref_condition is raised if an extension
    that does not support the node installs a missing-reference handler
    

    4.0.1

    =====================================
    
    Bugs fixed
    ----------
    
    * 9189: autodoc: crashed when ValueError is raised on generating signature
    from a property of the class
    * 9188: autosummary: warning is emitted if list value is set to
    autosummary_generate
    * 8380: html search: tags for search result are broken
    * 9198: i18n: Babel emits errors when running compile_catalog
    * 9205: py domain: The :canonical: option causes &quot;more than one target for
    cross-reference&quot; warning
    * 9201: websupport: UndefinedError is raised: &#x27;css_tag&#x27; is undefined
    

    4.0.0

    =====================================
    
    Dependencies
    ------------
    

    4.0.0b3

    * 9167: html: Failed to add CSS files to the specific page
    

    4.0.0b2

    * C, C++, fix ``KeyError`` when an ``alias`` directive is the first C/C++
    directive in a file with another C/C++ directive later.
    

    4.0.0b1

    * 8917: autodoc: Raises a warning if function has wrong __globals__ value
    * 8415: autodoc: a TypeVar imported from other module is not resolved (in
    Python 3.7 or above)
    * 8992: autodoc: Failed to resolve types.TracebackType type annotation
    * 8905: html: html_add_permalinks=None and html_add_permalinks=&quot;&quot; are ignored
    * 8380: html search: Paragraphs in search results are not identified as ``&lt;p&gt;``
    * 8915: html theme: The translation of sphinx_rtd_theme does not work
    * 8342: Emit a warning if a unknown domain is given for directive or role (ex.
    ``:unknown:doc:``)
    * 7241: LaTeX: No wrapping for ``cpp:enumerator``
    * 8711: LaTeX: backticks in code-blocks trigger latexpdf build warning (and font
    change) with late TeXLive 2019
    * 8253: LaTeX: Figures with no size defined get overscaled (compared to images
    with size explicitly set in pixels) (fixed for ``&#x27;pdflatex&#x27;/&#x27;lualatex&#x27;`` only)
    * 8881: LaTeX: The depth of bookmarks panel in PDF is not enough for navigation
    * 8874: LaTeX: the fix to two minor Pygments LaTeXFormatter output issues ignore
    Pygments style
    * 8925: LaTeX: 3.5.0 ``verbatimmaxunderfull`` setting does not work as
    expected
    * 8980: LaTeX: missing line break in ``\pysigline``
    * 8995: LaTeX: legacy ``\pysiglinewithargsret`` does not compute correctly
    available  horizontal space and should use a ragged right style
    * 9009: LaTeX: &quot;release&quot; value with underscore leads to invalid LaTeX
    * 8911: C++: remove the longest matching prefix in
    :confval:`cpp_index_common_prefix` instead of the first that matches.
    * C, properly reject function declarations when a keyword is used
    as parameter name.
    * 8933: viewcode: Failed to create back-links on parallel build
    * 8960: C and C++, fix rendering of (member) function pointer types in
    function parameter lists.
    * C++, fix linking of names in array declarators, pointer to member
    (function) declarators, and in the argument to ``sizeof...``.
    * C, fix linking of names in array declarators.
    

    3.5.5

    ==============================
    

    3.5.4

    =====================================
    
    Dependencies
    ------------
    
    * 9071: Restrict docutils to 0.16
    
    Bugs fixed
    ----------
    
    * 9078: autodoc: Async staticmethods and classmethods are considered as non
    async coroutine-functions with Python3.10
    * 8870, 9001, 9051: html theme: The style are not applied with docutils-0.17
    
    - toctree captions
    - The content of ``sidebar`` directive
    - figures
    

    3.5.3

    =====================================
    
    Features added
    --------------
    
    * 8959: using UNIX path separator in image directive confuses Sphinx on Windows
    

    3.5.2

    =====================================
    
    Bugs fixed
    ----------
    
    * 8943: i18n: Crashed by broken translation messages in ES, EL and HR
    * 8936: LaTeX: A custom LaTeX builder fails with unknown node error
    * 8952: Exceptions raised in a Directive cause parallel builds to hang
    

    3.5.1

    =====================================
    
    Bugs fixed
    ----------
    
    * 8883: autodoc: AttributeError is raised on assigning __annotations__ on
    read-only class
    * 8884: html: minified js stemmers not included in the distributed package
    * 8885: html: AttributeError is raised if CSS/JS files are installed via
    :confval:`html_context`
    * 8880: viewcode: ExtensionError is raised on incremental build after
    unparsable python module found
    

    3.5.0

    =====================================
    
    Dependencies
    ------------
    
    * LaTeX: ``multicol`` (it is anyhow a required part of the official latex2e
    base distribution)
    
    Incompatible changes
    --------------------
    
    * Update Underscore.js to 1.12.0
    * 6550: html: The config variable ``html_add_permalinks`` is replaced by
    :confval:`html_permalinks` and :confval:`html_permalinks_icon`
    
    Deprecated
    ----------
    
    * pending_xref node for viewcode extension
    * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.anchors_ignore``
    * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.auth``
    * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.broken``
    * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.good``
    * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.redirected``
    * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.rqueue``
    * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.to_ignore``
    * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.workers``
    * ``sphinx.builders.linkcheck.CheckExternalLinksBuilder.wqueue``
    * ``sphinx.builders.linkcheck.node_line_or_0()``
    * ``sphinx.ext.autodoc.AttributeDocumenter.isinstanceattribute()``
    * ``sphinx.ext.autodoc.directive.DocumenterBridge.reporter``
    * ``sphinx.ext.autodoc.importer.get_module_members()``
    * ``sphinx.ext.autosummary.generate._simple_info()``
    * ``sphinx.ext.autosummary.generate._simple_warn()``
    * ``sphinx.writers.html.HTMLTranslator.permalink_text``
    * ``sphinx.writers.html5.HTML5Translator.permalink_text``
    
    Features added
    --------------
    
    * 8022: autodoc: autodata and autoattribute directives does not show right-hand
    value of the variable if docstring contains ``:meta hide-value:`` in
    info-field-list
    * 8514: autodoc: Default values of overloaded functions are taken from actual
    implementation if they&#x27;re ellipsis
    * 8775: autodoc: Support type union operator (PEP-604) in Python 3.10 or above
    * 8297: autodoc: Allow to extend :confval:`autodoc_default_options` via
    directive options
    * 759: autodoc: Add a new configuration :confval:`autodoc_preserve_defaults` as
    an experimental feature.  It preserves the default argument values of
    functions in source code and keep them not evaluated for readability.
    * 8619: html: kbd role generates customizable HTML tags for compound keys
    * 8634: html: Allow to change the order of JS/CSS via ``priority`` parameter
    for :meth:`Sphinx.add_js_file()` and :meth:`Sphinx.add_css_file()`
    * 6241: html: Allow to add JS/CSS files to the specific page when an extension
    calls ``app.add_js_file()`` or ``app.add_css_file()`` on
    :event:`html-page-context` event
    * 6550: html: Allow to use HTML permalink texts via
    :confval:`html_permalinks_icon`
    * 1638: html: Add permalink icons to glossary terms
    * 8868: html search: performance issue with massive lists
    * 8867: html search: Update JavaScript stemmer code to the latest version of
    Snowball (v2.1.0)
    * 8852: i18n: Allow to translate heading syntax in MyST-Parser
    * 8649: imgconverter: Skip availability check if builder supports the image
    type
    * 8573: napoleon: Allow to change the style of custom sections using
    :confval:`napoleon_custom_styles`
    * 8004: napoleon: Type definitions in Google style docstrings are rendered as
    references when :confval:`napoleon_preprocess_types` enabled
    * 6241: mathjax: Include mathjax.js only on the document using equations
    * 8775: py domain: Support type union operator (PEP-604)
    * 8651: std domain: cross-reference for a rubric having inline item is broken
    * 7642: std domain: Optimize case-insensitive match of term
    * 8681: viewcode: Support incremental build
    * 8132: Add :confval:`project_copyright` as an alias of :confval:`copyright`
    * 207: Now :confval:`highlight_language` supports multiple languages
    * 2030: :rst:dir:`code-block` and :rst:dir:`literalinclude` supports automatic
    dedent via no-argument ``:dedent:`` option
    * C++, also hyperlink operator overloads in expressions and alias declarations.
    * 8247: Allow production lists to refer to tokens from other production groups
    * 8813: Show what extension (or module) caused it on errors on event handler
    * 8213: C++: add ``maxdepth`` option to :rst:dir:`cpp:alias` to insert nested
    declarations.
    * C, add ``noroot`` option to :rst:dir:`c:alias` to render only nested
    declarations.
    * C++, add ``noroot`` option to :rst:dir:`cpp:alias` to render only nested
    declarations.
    
    Bugs fixed
    ----------
    
    * 8727: apidoc: namespace module file is not generated if no submodules there
    * 741: autodoc: inherited-members doesn&#x27;t work for instance attributes on super
    class
    * 8592: autodoc: ``:meta public:`` does not effect to variables
    * 8594: autodoc: empty __all__ attribute is ignored
    * 8315: autodoc: Failed to resolve struct.Struct type annotation
    * 8652: autodoc: All variable comments in the module are ignored if the module
    contains invalid type comments
    * 8693: autodoc: Default values for overloaded functions are rendered as string
    * 8134: autodoc: crashes when mocked decorator takes arguments
    * 8800: autodoc: Uninitialized attributes in superclass are recognized as
    undocumented
    * 8655: autodoc: Failed to generate document if target module contains an
    object that raises an exception on ``hasattr()``
    * 8306: autosummary: mocked modules are documented as empty page when using
    :recursive: option
    * 8232: graphviz: Image node is not rendered if graph file is in subdirectory
    * 8618: html: kbd role produces incorrect HTML when compound-key separators (-,
    + or ^) are used as keystrokes
    * 8629: html: A type warning for html_use_opensearch is shown twice
    * 8714: html: kbd role with &quot;Caps Lock&quot; rendered incorrectly
    * 8123: html search: fix searching for terms containing + (Requires a custom
    search language that does not split on +)
    * 8665: html theme: Could not override globaltoc_maxdepth in theme.conf
    * 8446: html: consecutive spaces are displayed as single space
    * 8745: i18n: crashes with KeyError when translation message adds a new auto
    footnote reference
    * 4304: linkcheck: Fix race condition that could lead to checking the
    availability of the same URL twice
    * 8791: linkcheck: The docname for each hyperlink is not displayed
    * 7118: sphinx-quickstart: questionare got Mojibake if libreadline unavailable
    * 8094: texinfo: image files on the different directory with document are not
    copied
    * 8782: todo: Cross references in todolist get broken
    * 8720: viewcode: module pages are generated for epub on incremental build
    * 8704: viewcode: anchors are generated in incremental build after singlehtml
    * 8756: viewcode: highlighted code is generated even if not referenced
    * 8671: :confval:`highlight_options` is not working
    * 8341: C, fix intersphinx lookup types for names in declarations.
    * C, C++: in general fix intersphinx and role lookup types.
    * 8683: :confval:`html_last_updated_fmt` does not support UTC offset (%z)
    * 8683: :confval:`html_last_updated_fmt` generates wrong time zone for %Z
    * 1112: ``download`` role creates duplicated copies when relative path is
    specified
    * 2616 (fifth item): LaTeX: footnotes from captions are not clickable,
    and for manually numbered footnotes only first one with same number is
    an hyperlink
    * 7576: LaTeX with French babel and memoir crash: &quot;Illegal parameter number
    in definition of ``\FNHprefntext``&quot;
    * 8055: LaTeX (docs): A potential display bug with the LaTeX generation step
    in Sphinx (how to generate one-column index)
    * 8072: LaTeX: Directive :rst:dir:`hlist` not implemented in LaTeX
    * 8214: LaTeX: The :rst:role:`index` role and the glossary generate duplicate
    entries in the LaTeX index (if both used for same term)
    * 8735: LaTeX: wrong internal links in pdf to captioned code-blocks when
    :confval:`numfig` is not True
    * 8442: LaTeX: some indexed terms are ignored when using xelatex engine
    (or pdflatex and :confval:`latex_use_xindy` set to True) with memoir class
    * 8750: LaTeX: URLs as footnotes fail to show in PDF if originating from
    inside function type signatures
    * 8780: LaTeX: long words in narrow columns may not be hyphenated
    * 8788: LaTeX: ``\titleformat`` last argument in sphinx.sty should be
    bracketed, not braced (and is anyhow not needed) 
    * 8849: LaTex: code-block printed out of margin (see the opt-in LaTeX syntax
    boolean :ref:`verbatimforcewraps &lt;latexsphinxsetupforcewraps&gt;` for use via
    the :ref:`&#x27;sphinxsetup&#x27; &lt;latexsphinxsetup&gt;` key of ``latex_elements``)
    * 8183: LaTeX: Remove substitution_reference nodes from doctree only on LaTeX
    builds
    * 8865: LaTeX: Restructure the index nodes inside title nodes only on LaTeX
    builds
    * 8796: LaTeX: potentially critical low level TeX coding mistake has gone
    unnoticed so far
    * C, :rst:dir:`c:alias` skip symbols without explicit declarations
    instead of crashing.
    * C, :rst:dir:`c:alias` give a warning when the root symbol is not declared.
    * C, ``expr`` role should start symbol lookup in the current scope.
    

    3.4.3

    =====================================
    
    Bugs fixed
    ----------
    
    * 8655: autodoc: Failed to generate document if target module contains an
    object that raises an exception on ``hasattr()``
    

    3.4.2

    =====================================
    
    Bugs fixed
    ----------
    
    * 8164: autodoc: Classes that inherit mocked class are not documented
    * 8602: autodoc: The ``autodoc-process-docstring`` event is emitted to the
    non-datadescriptors unexpectedly
    * 8616: autodoc: AttributeError is raised on non-class object is passed to
    autoclass directive
    

    3.4.1

    =====================================
    
    Bugs fixed
    ----------
    
    * 8559: autodoc: AttributeError is raised when using forward-reference type
    annotations
    * 8568: autodoc: TypeError is raised on checking slots attribute
    * 8567: autodoc: Instance attributes are incorrectly added to Parent class
    * 8566: autodoc: The ``autodoc-process-docstring`` event is emitted to the
    alias classes unexpectedly
    * 8583: autodoc: Unnecessary object comparison via ``__eq__`` method
    * 8565: linkcheck: Fix PriorityQueue crash when link tuples are not
    comparable
    

    3.4.0

    =====================================
    
    Incompatible changes
    --------------------
    
    * 8105: autodoc: the signature of class constructor will be shown for decorated
    classes, not a signature of decorator
    
    Deprecated
    ----------
    
    * The ``follow_wrapped`` argument of ``sphinx.util.inspect.signature()``
    * The ``no_docstring`` argument of
    ``sphinx.ext.autodoc.Documenter.add_content()``
    * ``sphinx.ext.autodoc.Documenter.get_object_members()``
    * ``sphinx.ext.autodoc.DataDeclarationDocumenter``
    * ``sphinx.ext.autodoc.GenericAliasDocumenter``
    * ``sphinx.ext.autodoc.InstanceAttributeDocumenter``
    * ``sphinx.ext.autodoc.SlotsAttributeDocumenter``
    * ``sphinx.ext.autodoc.TypeVarDocumenter``
    * ``sphinx.ext.autodoc.importer._getannotations()``
    * ``sphinx.ext.autodoc.importer._getmro()``
    * ``sphinx.pycode.ModuleAnalyzer.parse()``
    * ``sphinx.util.osutil.movefile()``
    * ``sphinx.util.requests.is_ssl_error()``
    
    Features added
    --------------
    
    * 8119: autodoc: Allow to determine whether a member not included in
    ``__all__`` attribute of the module should be documented or not via
    :event:`autodoc-skip-member` event
    * 8219: autodoc: Parameters for generic class are not shown when super class is
    a generic class and show-inheritance option is given (in Python 3.7 or above)
    * autodoc: Add ``Documenter.config`` as a shortcut to access the config object
    * autodoc: Add Optional[t] to annotation of function and method if a default
    value equal to None is set.
    * 8209: autodoc: Add ``:no-value:`` option to :rst:dir:`autoattribute` and
    :rst:dir:`autodata` directive to suppress the default value of the variable
    * 8460: autodoc: Support custom types defined by typing.NewType
    * 8285: napoleon: Add :confval:`napoleon_attr_annotations` to merge type hints
    on source code automatically if any type is specified in docstring
    * 8236: napoleon: Support numpydoc&#x27;s &quot;Receives&quot; section
    * 6914: Add a new event :event:`warn-missing-reference` to custom warning
    messages when failed to resolve a cross-reference
    * 6914: Emit a detailed warning when failed to resolve a ``:ref:`` reference
    * 6629: linkcheck: The builder now handles rate limits. See
    :confval:`linkcheck_retry_on_rate_limit` for details.
    
    Bugs fixed
    ----------
    
    * 7613: autodoc: autodoc does not respect __signature__ of the class
    * 4606: autodoc: the location of the warning is incorrect for inherited method
    * 8105: autodoc: the signature of class constructor is incorrect if the class
    is decorated
    * 8434: autodoc: :confval:`autodoc_type_aliases` does not effect to variables
    and attributes
    * 8443: autodoc: autodata directive can&#x27;t create document for PEP-526 based
    type annotated variables
    * 8443: autodoc: autoattribute directive can&#x27;t create document for PEP-526
    based uninitialized variables
    * 8480: autodoc: autoattribute could not create document for __slots__
    attributes
    * 8503: autodoc: autoattribute could not create document for a GenericAlias as
    class attributes correctly
    * 8534: autodoc: autoattribute could not create document for a commented
    attribute in alias class
    * 8452: autodoc: autodoc_type_aliases doesn&#x27;t work when autodoc_typehints is
    set to &quot;description&quot;
    * 8541: autodoc: autodoc_type_aliases doesn&#x27;t work for the type annotation to
    instance attributes
    * 8460: autodoc: autodata and autoattribute directives do not display type
    information of TypeVars
    * 8493: autodoc: references to builtins not working in class aliases
    * 8522: autodoc:  ``__bool__`` method could be called
    * 8067: autodoc: A typehint for the instance variable having type_comment on
    super class is not displayed
    * 8545: autodoc: a __slots__ attribute is not documented even having docstring
    * 741: autodoc: inherited-members doesn&#x27;t work for instance attributes on super
    class
    * 8477: autosummary: non utf-8 reST files are generated when template contains
    multibyte characters
    * 8501: autosummary: summary extraction splits text after &quot;el at.&quot; unexpectedly
    * 8524: html: Wrong url_root has been generated on a document named &quot;index&quot;
    * 8419: html search: Do not load ``language_data.js`` in non-search pages
    * 8549: i18n: ``-D gettext_compact=0`` is no longer working
    * 8454: graphviz: The layout option for graph and digraph directives don&#x27;t work
    * 8131: linkcheck: Use GET when HEAD requests cause Too Many Redirects, to
    accommodate infinite redirect loops on HEAD
    * 8437: Makefile: ``make clean`` with empty BUILDDIR is dangerous
    * 8365: py domain: ``:type:`` and ``:rtype:`` gives false ambiguous class
    lookup warnings
    * 8352: std domain: Failed to parse an option that starts with bracket
    * 8519: LaTeX: Prevent page brake in the middle of a seealso
    * 8520: C, fix copying of AliasNode.
    
    Links
    • PyPI: https://pypi.org/project/sphinx
    • Changelog: https://pyup.io/changelogs/sphinx/
    opened by pyup-bot 0
  • Update coverage to 6.5.0

    Update coverage to 6.5.0

    This PR updates coverage from 5.3 to 6.5.0.

    Changelog

    6.5.0

    --------------------------
    
    - The JSON report now includes details of which branches were taken, and which
    are missing for each file. Thanks, Christoph Blessing (`pull 1438`_). Closes
    `issue 1425`_.
    
    - Starting with coverage.py 6.2, ``class`` statements were marked as a branch.
    This wasn&#x27;t right, and has been reverted, fixing `issue 1449`_. Note this
    will very slightly reduce your coverage total if you are measuring branch
    coverage.
    
    - Packaging is now compliant with `PEP 517`_, closing `issue 1395`_.
    
    - A new debug option ``--debug=pathmap`` shows details of the remapping of
    paths that happens during combine due to the ``[paths]`` setting.
    
    - Fix an internal problem with caching of invalid Python parsing. Found by
    OSS-Fuzz, fixing their `bug 50381`_.
    
    .. _bug 50381: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=50381
    .. _PEP 517: https://peps.python.org/pep-0517/
    .. _issue 1395: https://github.com/nedbat/coveragepy/issues/1395
    .. _issue 1425: https://github.com/nedbat/coveragepy/issues/1425
    .. _pull 1438: https://github.com/nedbat/coveragepy/pull/1438
    .. _issue 1449: https://github.com/nedbat/coveragepy/issues/1449
    
    
    .. _changes_6-4-4:
    

    6.4.4

    --------------------------
    
    - Wheels are now provided for Python 3.11.
    
    
    .. _changes_6-4-3:
    

    6.4.3

    --------------------------
    
    - Fix a failure when combining data files if the file names contained
    glob-like patterns (`pull 1405`_).  Thanks, Michael Krebs and Benjamin
    Schubert.
    
    - Fix a messaging failure when combining Windows data files on a different
    drive than the current directory. (`pull 1430`_, fixing `issue 1428`_).
    Thanks, Lorenzo Micò.
    
    - Fix path calculations when running in the root directory, as you might do in
    a Docker container: `pull 1403`_, thanks Arthur Rio.
    
    - Filtering in the HTML report wouldn&#x27;t work when reloading the index page.
    This is now fixed (`pull 1413`_).  Thanks, Marc Legendre.
    
    - Fix a problem with Cython code measurement (`pull 1347`_, fixing `issue
    972`_).  Thanks, Matus Valo.
    
    .. _issue 972: https://github.com/nedbat/coveragepy/issues/972
    .. _pull 1347: https://github.com/nedbat/coveragepy/pull/1347
    .. _pull 1403: https://github.com/nedbat/coveragepy/issues/1403
    .. _pull 1405: https://github.com/nedbat/coveragepy/issues/1405
    .. _pull 1413: https://github.com/nedbat/coveragepy/issues/1413
    .. _issue 1428: https://github.com/nedbat/coveragepy/issues/1428
    .. _pull 1430: https://github.com/nedbat/coveragepy/pull/1430
    
    
    .. _changes_6-4-2:
    

    6.4.2

    --------------------------
    
    - Updated for a small change in Python 3.11.0 beta 4: modules now start with a
    line with line number 0, which is ignored.  This line cannnot be executed, so
    coverage totals were thrown off.  This line is now ignored by coverage.py,
    but this also means that truly empty modules (like ``__init__.py``) have no
    lines in them, rather than one phantom line.  Fixes `issue 1419`_.
    
    - Internal debugging data added to sys.modules is now an actual module, to
    avoid confusing code that examines everything in sys.modules.  Thanks,
    Yilei Yang (`pull 1399`_).
    
    .. _pull 1399: https://github.com/nedbat/coveragepy/pull/1399
    .. _issue 1419: https://github.com/nedbat/coveragepy/issues/1419
    
    
    .. _changes_6-4-1:
    

    6.4.1

    --------------------------
    
    - Greatly improved performance on PyPy, and other environments that need the
    pure Python trace function.  Thanks, Carl Friedrich Bolz-Tereick (`pull
    1381`_ and `pull 1388`_).  Slightly improved performance when using the C
    trace function, as most environments do.  Closes `issue 1339`_.
    
    - The conditions for using tomllib from the standard library have been made
    more precise, so that 3.11 alphas will continue to work. Closes `issue
    1390`_.
    
    .. _issue 1339: https://github.com/nedbat/coveragepy/issues/1339
    .. _pull 1381: https://github.com/nedbat/coveragepy/pull/1381
    .. _pull 1388: https://github.com/nedbat/coveragepy/pull/1388
    .. _issue 1390: https://github.com/nedbat/coveragepy/issues/1390
    
    
    .. _changes_64:
    

    6.4

    ------------------------
    
    - A new setting, :ref:`config_run_sigterm`, controls whether a SIGTERM signal
    handler is used.  In 6.3, the signal handler was always installed, to capture
    data at unusual process ends.  Unfortunately, this introduced other problems
    (see `issue 1310`_).  Now the signal handler is only used if you opt-in by
    setting ``[run] sigterm = true``.
    
    - Small changes to the HTML report:
    
    - Added links to next and previous file, and more keyboard shortcuts: ``[``
     and ``]`` for next file and previous file; ``u`` for up to the index; and
     ``?`` to open/close the help panel.  Thanks, `J. M. F. Tsang
     &lt;pull 1364_&gt;`_.
    
    - The timestamp and version are displayed at the top of the report.  Thanks,
     `Ammar Askar &lt;pull 1354_&gt;`_. Closes `issue 1351`_.
    
    - A new debug option ``debug=sqldata`` adds more detail to ``debug=sql``,
    logging all the data being written to the database.
    
    - Previously, running ``coverage report`` (or any of the reporting commands) in
    an empty directory would create a .coverage data file.  Now they do not,
    fixing `issue 1328`_.
    
    - On Python 3.11, the ``[toml]`` extra no longer installs tomli, instead using
    tomllib from the standard library.  Thanks `Shantanu &lt;pull 1359_&gt;`_.
    
    - In-memory CoverageData objects now properly update(), closing `issue 1323`_.
    
    .. _issue 1310: https://github.com/nedbat/coveragepy/issues/1310
    .. _issue 1323: https://github.com/nedbat/coveragepy/issues/1323
    .. _issue 1328: https://github.com/nedbat/coveragepy/issues/1328
    .. _issue 1351: https://github.com/nedbat/coveragepy/issues/1351
    .. _pull 1354: https://github.com/nedbat/coveragepy/pull/1354
    .. _pull 1359: https://github.com/nedbat/coveragepy/pull/1359
    .. _pull 1364: https://github.com/nedbat/coveragepy/pull/1364
    
    
    .. _changes_633:
    

    6.3.3

    --------------------------
    
    - Fix: Coverage.py now builds successfully on CPython 3.11 (3.11.0b1) again.
    Closes `issue 1367`_.  Some results for generators may have changed.
    
    .. _issue 1367: https://github.com/nedbat/coveragepy/issues/1367
    
    
    .. _changes_632:
    

    6.3.2

    --------------------------
    
    - Fix: adapt to pypy3.9&#x27;s decorator tracing behavior.  It now traces function
    decorators like CPython 3.8: both the -line and the def-line are traced.
    Fixes `issue 1326`_.
    
    - Debug: added ``pybehave`` to the list of :ref:`coverage debug &lt;cmd_debug&gt;`
    and :ref:`cmd_run_debug` options.
    
    - Fix: show an intelligible error message if ``--concurrency=multiprocessing``
    is used without a configuration file.  Closes `issue 1320`_.
    
    .. _issue 1320: https://github.com/nedbat/coveragepy/issues/1320
    .. _issue 1326: https://github.com/nedbat/coveragepy/issues/1326
    
    
    .. _changes_631:
    

    6.3.1

    --------------------------
    
    - Fix: deadlocks could occur when terminating processes.  Some of these
    deadlocks (described in `issue 1310`_) are now fixed.
    
    - Fix: a signal handler was being set from multiple threads, causing an error:
    &quot;ValueError: signal only works in main thread&quot;.  This is now fixed, closing
    `issue 1312`_.
    
    - Fix: ``--precision`` on the command-line was being ignored while considering
    ``--fail-under``.  This is now fixed, thanks to
    `Marcelo Trylesinski &lt;pull 1317_&gt;`_.
    
    - Fix: releases no longer provide 3.11.0-alpha wheels. Coverage.py uses CPython
    internal fields which are moving during the alpha phase. Fixes `issue 1316`_.
    
    .. _issue 1310: https://github.com/nedbat/coveragepy/issues/1310
    .. _issue 1312: https://github.com/nedbat/coveragepy/issues/1312
    .. _issue 1316: https://github.com/nedbat/coveragepy/issues/1316
    .. _pull 1317: https://github.com/nedbat/coveragepy/pull/1317
    
    
    .. _changes_63:
    

    6.3

    ------------------------
    
    - Feature: Added the ``lcov`` command to generate reports in LCOV format.
    Thanks, `Bradley Burns &lt;pull 1289_&gt;`_. Closes issues `587 &lt;issue 587_&gt;`_
    and `626 &lt;issue 626_&gt;`_.
    
    - Feature: the coverage data file can now be specified on the command line with
    the ``--data-file`` option in any command that reads or writes data.  This is
    in addition to the existing ``COVERAGE_FILE`` environment variable.  Closes
    `issue 624`_. Thanks, `Nikita Bloshchanevich &lt;pull 1304_&gt;`_.
    
    - Feature: coverage measurement data will now be written when a SIGTERM signal
    is received by the process.  This includes
    :meth:`Process.terminate &lt;python:multiprocessing.Process.terminate&gt;`,
    and other ways to terminate a process.  Currently this is only on Linux and
    Mac; Windows is not supported.  Fixes `issue 1307`_.
    
    - Dropped support for Python 3.6, which reached end-of-life on 2021-12-23.
    
    - Updated Python 3.11 support to 3.11.0a4, fixing `issue 1294`_.
    
    - Fix: the coverage data file is now created in a more robust way, to avoid
    problems when multiple processes are trying to write data at once. Fixes
    issues `1303 &lt;issue 1303_&gt;`_ and `883 &lt;issue 883_&gt;`_.
    
    - Fix: a .gitignore file will only be written into the HTML report output
    directory if the directory is empty.  This should prevent certain unfortunate
    accidents of writing the file where it is not wanted.
    
    - Releases now have MacOS arm64 wheels for Apple Silicon, fixing `issue 1288`_.
    
    .. _issue 587: https://github.com/nedbat/coveragepy/issues/587
    .. _issue 624: https://github.com/nedbat/coveragepy/issues/624
    .. _issue 626: https://github.com/nedbat/coveragepy/issues/626
    .. _issue 883: https://github.com/nedbat/coveragepy/issues/883
    .. _issue 1288: https://github.com/nedbat/coveragepy/issues/1288
    .. _issue 1294: https://github.com/nedbat/coveragepy/issues/1294
    .. _issue 1303: https://github.com/nedbat/coveragepy/issues/1303
    .. _issue 1307: https://github.com/nedbat/coveragepy/issues/1307
    .. _pull 1289: https://github.com/nedbat/coveragepy/pull/1289
    .. _pull 1304: https://github.com/nedbat/coveragepy/pull/1304
    
    
    .. _changes_62:
    

    6.2

    ------------------------
    
    - Feature: Now the ``--concurrency`` setting can now have a list of values, so
    that threads and another lightweight threading package can be measured
    together, such as ``--concurrency=gevent,thread``.  Closes `issue 1012`_ and
    `issue 1082`_.
    
    - Fix: A module specified as the ``source`` setting is imported during startup,
    before the user program imports it.  This could cause problems if the rest of
    the program isn&#x27;t ready yet.  For example, `issue 1203`_ describes a Django
    setting that is accessed before settings have been configured.  Now the early
    import is wrapped in a try/except so errors then don&#x27;t stop execution.
    
    - Fix: A colon in a decorator expression would cause an exclusion to end too
    early, preventing the exclusion of the decorated function. This is now fixed.
    
    - Fix: The HTML report now will not overwrite a .gitignore file that already
    exists in the HTML output directory (follow-on for `issue 1244`_).
    
    - API: The exceptions raised by Coverage.py have been specialized, to provide
    finer-grained catching of exceptions by third-party code.
    
    - API: Using ``suffix=False`` when constructing a Coverage object with
    multiprocessing wouldn&#x27;t suppress the data file suffix (`issue 989`_).  This
    is now fixed.
    
    - Debug: The ``coverage debug data`` command will now sniff out combinable data
    files, and report on all of them.
    
    - Debug: The ``coverage debug`` command used to accept a number of topics at a
    time, and show all of them, though this was never documented.  This no longer
    works, to allow for command-line options in the future.
    
    .. _issue 989: https://github.com/nedbat/coveragepy/issues/989
    .. _issue 1012: https://github.com/nedbat/coveragepy/issues/1012
    .. _issue 1082: https://github.com/nedbat/coveragepy/issues/1082
    .. _issue 1203: https://github.com/nedbat/coveragepy/issues/1203
    
    
    .. _changes_612:
    

    6.1.2

    --------------------------
    
    - Python 3.11 is supported (tested with 3.11.0a2).  One still-open issue has to
    do with `exits through with-statements &lt;issue 1270_&gt;`_.
    
    - Fix: When remapping file paths through the ``[paths]`` setting while
    combining, the ``[run] relative_files`` setting was ignored, resulting in
    absolute paths for remapped file names (`issue 1147`_).  This is now fixed.
    
    - Fix: Complex conditionals over excluded lines could have incorrectly reported
    a missing branch (`issue 1271`_). This is now fixed.
    
    - Fix: More exceptions are now handled when trying to parse source files for
    reporting.  Problems that used to terminate coverage.py can now be handled
    with ``[report] ignore_errors``.  This helps with plugins failing to read
    files (`django_coverage_plugin issue 78`_).
    
    - Fix: Removed another vestige of jQuery from the source tarball
    (`issue 840`_).
    
    - Fix: Added a default value for a new-to-6.x argument of an internal class.
    This unsupported class is being used by coveralls (`issue 1273`_). Although
    I&#x27;d rather not &quot;fix&quot; unsupported interfaces, it&#x27;s actually nicer with a
    default value.
    
    .. _django_coverage_plugin issue 78: https://github.com/nedbat/django_coverage_plugin/issues/78
    .. _issue 1147: https://github.com/nedbat/coveragepy/issues/1147
    .. _issue 1270: https://github.com/nedbat/coveragepy/issues/1270
    .. _issue 1271: https://github.com/nedbat/coveragepy/issues/1271
    .. _issue 1273: https://github.com/nedbat/coveragepy/issues/1273
    
    
    .. _changes_611:
    

    6.1.1

    --------------------------
    
    - Fix: The sticky header on the HTML report didn&#x27;t work unless you had branch
    coverage enabled. This is now fixed: the sticky header works for everyone.
    (Do people still use coverage without branch measurement!? j/k)
    
    - Fix: When using explicitly declared namespace packages, the &quot;already imported
    a file that will be measured&quot; warning would be issued (`issue 888`_).  This
    is now fixed.
    
    .. _issue 888: https://github.com/nedbat/coveragepy/issues/888
    
    
    .. _changes_61:
    

    6.1

    ------------------------
    
    - Deprecated: The ``annotate`` command and the ``Coverage.annotate`` function
    will be removed in a future version, unless people let me know that they are
    using it.  Instead, the ``html`` command gives better-looking (and more
    accurate) output, and the ``report -m`` command will tell you line numbers of
    missing lines.  Please get in touch if you have a reason to use ``annotate``
    over those better options: nednedbatchelder.com.
    
    - Feature: Coverage now sets an environment variable, ``COVERAGE_RUN`` when
    running your code with the ``coverage run`` command.  The value is not
    important, and may change in the future.  Closes `issue 553`_.
    
    - Feature: The HTML report pages for Python source files now have a sticky
    header so the file name and controls are always visible.
    
    - Feature: The ``xml`` and ``json`` commands now describe what they wrote
    where.
    
    - Feature: The ``html``, ``combine``, ``xml``, and ``json`` commands all accept
    a ``-q/--quiet`` option to suppress the messages they write to stdout about
    what they are doing (`issue 1254`_).
    
    - Feature: The ``html`` command writes a ``.gitignore`` file into the HTML
    output directory, to prevent the report from being committed to git.  If you
    want to commit it, you will need to delete that file.  Closes `issue 1244`_.
    
    - Feature: Added support for PyPy 3.8.
    
    - Fix: More generated code is now excluded from measurement.  Code such as
    `attrs`_ boilerplate, or doctest code, was being measured though the
    synthetic line numbers meant they were never reported.  Once Cython was
    involved though, the generated .so files were parsed as Python, raising
    syntax errors, as reported in `issue 1160`_.  This is now fixed.
    
    - Fix: When sorting human-readable names, numeric components are sorted
    correctly: file10.py will appear after file9.py.  This applies to file names,
    module names, environment variables, and test contexts.
    
    - Performance: Branch coverage measurement is faster, though you might only
    notice on code that is executed many times, such as long-running loops.
    
    - Build: jQuery is no longer used or vendored (`issue 840`_ and `issue 1118`_).
    Huge thanks to Nils Kattenbeck (septatrix) for the conversion to vanilla
    JavaScript in `pull request 1248`_.
    
    .. _issue 553: https://github.com/nedbat/coveragepy/issues/553
    .. _issue 840: https://github.com/nedbat/coveragepy/issues/840
    .. _issue 1118: https://github.com/nedbat/coveragepy/issues/1118
    .. _issue 1160: https://github.com/nedbat/coveragepy/issues/1160
    .. _issue 1244: https://github.com/nedbat/coveragepy/issues/1244
    .. _pull request 1248: https://github.com/nedbat/coveragepy/pull/1248
    .. _issue 1254: https://github.com/nedbat/coveragepy/issues/1254
    .. _attrs: https://www.attrs.org/
    
    
    .. _changes_602:
    

    6.0.2

    --------------------------
    
    - Namespace packages being measured weren&#x27;t properly handled by the new code
    that ignores third-party packages. If the namespace package was installed, it
    was ignored as a third-party package.  That problem (`issue 1231`_) is now
    fixed.
    
    - Packages named as &quot;source packages&quot; (with ``source``, or ``source_pkgs``, or
    pytest-cov&#x27;s ``--cov``) might have been only partially measured.  Their
    top-level statements could be marked as unexecuted, because they were
    imported by coverage.py before measurement began (`issue 1232`_).  This is
    now fixed, but the package will be imported twice, once by coverage.py, then
    again by your test suite.  This could cause problems if importing the package
    has side effects.
    
    - The :meth:`.CoverageData.contexts_by_lineno` method was documented to return
    a dict, but was returning a defaultdict.  Now it returns a plain dict.  It
    also no longer returns negative numbered keys.
    
    .. _issue 1231: https://github.com/nedbat/coveragepy/issues/1231
    .. _issue 1232: https://github.com/nedbat/coveragepy/issues/1232
    
    
    .. _changes_601:
    

    6.0.1

    --------------------------
    
    - In 6.0, the coverage.py exceptions moved from coverage.misc to
    coverage.exceptions. These exceptions are not part of the public supported
    API, CoverageException is. But a number of other third-party packages were
    importing the exceptions from coverage.misc, so they are now available from
    there again (`issue 1226`_).
    
    - Changed an internal detail of how tomli is imported, so that tomli can use
    coverage.py for their own test suite (`issue 1228`_).
    
    - Defend against an obscure possibility under code obfuscation, where a
    function can have an argument called &quot;self&quot;, but no local named &quot;self&quot;
    (`pull request 1210`_).  Thanks, Ben Carlsson.
    
    .. _pull request 1210: https://github.com/nedbat/coveragepy/pull/1210
    .. _issue 1226: https://github.com/nedbat/coveragepy/issues/1226
    .. _issue 1228: https://github.com/nedbat/coveragepy/issues/1228
    
    
    .. _changes_60:
    

    6.0

    ------------------------
    
    - The ``coverage html`` command now prints a message indicating where the HTML
    report was written.  Fixes `issue 1195`_.
    
    - The ``coverage combine`` command now prints messages indicating each data
    file being combined.  Fixes `issue 1105`_.
    
    - The HTML report now includes a sentence about skipped files due to
    ``skip_covered`` or ``skip_empty`` settings.  Fixes `issue 1163`_.
    
    - Unrecognized options in the configuration file are no longer errors. They are
    now warnings, to ease the use of coverage across versions.  Fixes `issue
    1035`_.
    
    - Fix handling of exceptions through context managers in Python 3.10. A missing
    exception is no longer considered a missing branch from the with statement.
    Fixes `issue 1205`_.
    
    - Fix another rarer instance of &quot;Error binding parameter 0 - probably
    unsupported type.&quot; (`issue 1010`_).
    
    - Creating a directory for the coverage data file now is safer against
    conflicts when two coverage runs happen simultaneously (`pull 1220`_).
    Thanks, Clément Pit-Claudel.
    
    .. _issue 1035: https://github.com/nedbat/coveragepy/issues/1035
    .. _issue 1105: https://github.com/nedbat/coveragepy/issues/1105
    .. _issue 1163: https://github.com/nedbat/coveragepy/issues/1163
    .. _issue 1195: https://github.com/nedbat/coveragepy/issues/1195
    .. _issue 1205: https://github.com/nedbat/coveragepy/issues/1205
    .. _pull 1220: https://github.com/nedbat/coveragepy/pull/1220
    
    
    .. _changes_60b1:
    

    6.0b1

    --------------------------
    
    - Dropped support for Python 2.7, PyPy 2, and Python 3.5.
    
    - Added support for the Python 3.10 ``match/case`` syntax.
    
    - Data collection is now thread-safe.  There may have been rare instances of
    exceptions raised in multi-threaded programs.
    
    - Plugins (like the `Django coverage plugin`_) were generating &quot;Already
    imported a file that will be measured&quot; warnings about Django itself.  These
    have been fixed, closing `issue 1150`_.
    
    - Warnings generated by coverage.py are now real Python warnings.
    
    - Using ``--fail-under=100`` with coverage near 100% could result in the
    self-contradictory message :code:`total of 100 is less than fail-under=100`.
    This bug (`issue 1168`_) is now fixed.
    
    - The ``COVERAGE_DEBUG_FILE`` environment variable now accepts ``stdout`` and
    ``stderr`` to write to those destinations.
    
    - TOML parsing now uses the `tomli`_ library.
    
    - Some minor changes to usually invisible details of the HTML report:
    
    - Use a modern hash algorithm when fingerprinting, for high-security
     environments (`issue 1189`_).  When generating the HTML report, we save the
     hash of the data, to avoid regenerating an unchanged HTML page. We used to
     use MD5 to generate the hash, and now use SHA-3-256.  This was never a
     security concern, but security scanners would notice the MD5 algorithm and
     raise a false alarm.
    
    - Change how report file names are generated, to avoid leading underscores
     (`issue 1167`_), to avoid rare file name collisions (`issue 584`_), and to
     avoid file names becoming too long (`issue 580`_).
    
    .. _Django coverage plugin: https://pypi.org/project/django-coverage-plugin/
    .. _issue 580: https://github.com/nedbat/coveragepy/issues/580
    .. _issue 584: https://github.com/nedbat/coveragepy/issues/584
    .. _issue 1150: https://github.com/nedbat/coveragepy/issues/1150
    .. _issue 1167: https://github.com/nedbat/coveragepy/issues/1167
    .. _issue 1168: https://github.com/nedbat/coveragepy/issues/1168
    .. _issue 1189: https://github.com/nedbat/coveragepy/issues/1189
    .. _tomli: https://pypi.org/project/tomli/
    
    
    .. _changes_56b1:
    

    5.6b1

    --------------------------
    
    Note: 5.6 final was never released. These changes are part of 6.0.
    
    - Third-party packages are now ignored in coverage reporting.  This solves a
    few problems:
    
    - Coverage will no longer report about other people&#x27;s code (`issue 876`_).
     This is true even when using ``--source=.`` with a venv in the current
     directory.
    
    - Coverage will no longer generate &quot;Already imported a file that will be
     measured&quot; warnings about coverage itself (`issue 905`_).
    
    - The HTML report uses j/k to move up and down among the highlighted chunks of
    code.  They used to highlight the current chunk, but 5.0 broke that behavior.
    Now the highlighting is working again.
    
    - The JSON report now includes ``percent_covered_display``, a string with the
    total percentage, rounded to the same number of decimal places as the other
    reports&#x27; totals.
    
    .. _issue 876: https://github.com/nedbat/coveragepy/issues/876
    .. _issue 905: https://github.com/nedbat/coveragepy/issues/905
    
    
    .. _changes_55:
    

    5.5

    ------------------------
    
    - ``coverage combine`` has a new option, ``--keep`` to keep the original data
    files after combining them.  The default is still to delete the files after
    they have been combined.  This was requested in `issue 1108`_ and implemented
    in `pull request 1110`_.  Thanks, Éric Larivière.
    
    - When reporting missing branches in ``coverage report``, branches aren&#x27;t
    reported that jump to missing lines.  This adds to the long-standing behavior
    of not reporting branches from missing lines.  Now branches are only reported
    if both the source and destination lines are executed.  Closes both `issue
    1065`_ and `issue 955`_.
    
    - Minor improvements to the HTML report:
    
    - The state of the line visibility selector buttons is saved in local storage
     so you don&#x27;t have to fiddle with them so often, fixing `issue 1123`_.
    
    - It has a little more room for line numbers so that 4-digit numbers work
     well, fixing `issue 1124`_.
    
    - Improved the error message when combining line and branch data, so that users
    will be more likely to understand what&#x27;s happening, closing `issue 803`_.
    
    .. _issue 803: https://github.com/nedbat/coveragepy/issues/803
    .. _issue 955: https://github.com/nedbat/coveragepy/issues/955
    .. _issue 1065: https://github.com/nedbat/coveragepy/issues/1065
    .. _issue 1108: https://github.com/nedbat/coveragepy/issues/1108
    .. _pull request 1110: https://github.com/nedbat/coveragepy/pull/1110
    .. _issue 1123: https://github.com/nedbat/coveragepy/issues/1123
    .. _issue 1124: https://github.com/nedbat/coveragepy/issues/1124
    
    
    .. _changes_54:
    

    5.4

    ------------------------
    
    - The text report produced by ``coverage report`` now always outputs a TOTAL
    line, even if only one Python file is reported.  This makes regex parsing
    of the output easier.  Thanks, Judson Neer.  This had been requested a number
    of times (`issue 1086`_, `issue 922`_, `issue 732`_).
    
    - The ``skip_covered`` and ``skip_empty`` settings in the configuration file
    can now be specified in the ``[html]`` section, so that text reports and HTML
    reports can use separate settings.  The HTML report will still use the
    ``[report]`` settings if there isn&#x27;t a value in the ``[html]`` section.
    Closes `issue 1090`_.
    
    - Combining files on Windows across drives now works properly, fixing `issue
    577`_.  Thanks, `Valentin Lab &lt;pr1080_&gt;`_.
    
    - Fix an obscure warning from deep in the _decimal module, as reported in
    `issue 1084`_.
    
    - Update to support Python 3.10 alphas in progress, including `PEP 626: Precise
    line numbers for debugging and other tools &lt;pep626_&gt;`_.
    
    .. _issue 577: https://github.com/nedbat/coveragepy/issues/577
    .. _issue 732: https://github.com/nedbat/coveragepy/issues/732
    .. _issue 922: https://github.com/nedbat/coveragepy/issues/922
    .. _issue 1084: https://github.com/nedbat/coveragepy/issues/1084
    .. _issue 1086: https://github.com/nedbat/coveragepy/issues/1086
    .. _issue 1090: https://github.com/nedbat/coveragepy/issues/1090
    .. _pr1080: https://github.com/nedbat/coveragepy/pull/1080
    .. _pep626: https://www.python.org/dev/peps/pep-0626/
    
    
    .. _changes_531:
    

    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:
    
    Links
    • PyPI: https://pypi.org/project/coverage
    • Changelog: https://pyup.io/changelogs/coverage/
    • Repo: https://github.com/nedbat/coveragepy
    opened by pyup-bot 0
Owner
Chris Hager
Hacker, Maker, Engineer
Chris Hager
Simple and versatile logging library for python 3.6 above

Simple and versatile logging library for python 3.6 above

Miguel 1 Nov 23, 2022
Python logging made (stupidly) simple

Loguru is a library which aims to bring enjoyable logging in Python. Did you ever feel lazy about configuring a logger and used print() instead?... I

null 13.7k Jan 2, 2023
Structured Logging for Python

structlog makes logging in Python faster, less painful, and more powerful by adding structure to your log entries. It's up to you whether you want str

Hynek Schlawack 2.3k Jan 5, 2023
A colored formatter for the python logging module

Log formatting with colors! colorlog.ColoredFormatter is a formatter for use with Python's logging module that outputs records using terminal colors.

Sam Clements 778 Dec 26, 2022
Colored terminal output for Python's logging module

coloredlogs: Colored terminal output for Python's logging module The coloredlogs package enables colored terminal output for Python's logging module.

Peter Odding 496 Dec 30, 2022
A cool logging replacement for Python.

Welcome to Logbook Travis AppVeyor Supported Versions Latest Version Test Coverage Logbook is a nice logging replacement. It should be easy to setup,

null 1.4k Nov 11, 2022
Python logging package for easy reproducible experimenting in research

smilelogging Python logging package for easy reproducible experimenting in research. Why you may need this package This project is meant to provide an

Huan Wang 20 Dec 23, 2022
A basic logging library for Python.

log.py ?? About: A basic logging library for Python with the capability to: save to files. have custom formats. have custom levels. be used instantiat

Sebastiaan Bij 1 Jan 19, 2022
Small toolkit for python multiprocessing logging to file

Small Toolkit for Python Multiprocessing Logging This is a small toolkit for solving unsafe python mutliprocess logging (file logging and rotation) In

Qishuai 1 Nov 10, 2021
A lightweight logging library for python applications

cakelog a lightweight logging library for python applications This is a very small logging library to make logging in python easy and simple. config o

null 2 Jan 5, 2022
A Python package which supports global logfmt formatted logging.

Python Logfmter A Python package which supports global logfmt formatted logging. Install $ pip install logfmter Usage Before integrating this library,

Joshua Taylor Eppinette 15 Dec 29, 2022
Stand-alone parser for User Access Logging from Server 2012 and newer systems

KStrike Stand-alone parser for User Access Logging from Server 2012 and newer systems BriMor Labs KStrike This script will parse data from the User Ac

BriMor Labs 69 Nov 1, 2022
Logging system for the TPC software.

tpc_logger Logging system for the TPC software. The TPC Logger class provides a singleton for logging information within C++ code or in the python API

UC Davis Machine Learning 1 Jan 10, 2022
Outlog it's a library to make logging a simple task

outlog Outlog it's a library to make logging a simple task!. I'm a lazy python user, the times that i do logging on my apps it's hard to do, a lot of

ZSendokame 2 Mar 5, 2022
metovlogs is a very simple logging library

metovlogs is a very simple logging library. Setup is one line, then you can use it as a drop-in print replacement. Sane and useful log format out of the box. Best for small or early projects.

Azat Akhmetov 1 Mar 1, 2022
Pretty-print tabular data in Python, a library and a command-line utility. Repository migrated from bitbucket.org/astanin/python-tabulate.

python-tabulate Pretty-print tabular data in Python, a library and a command-line utility. The main use cases of the library are: printing small table

Sergey Astanin 1.5k Jan 6, 2023
Progressbar 2 - A progress bar for Python 2 and Python 3 - "pip install progressbar2"

Text progress bar library for Python. Travis status: Coverage: Install The package can be installed through pip (this is the recommended method): pip

Rick van Hattem 795 Dec 18, 2022
ClusterMonitor - a very simple python script which monitors and records the CPU and RAM consumption of submitted cluster jobs

ClusterMonitor A very simple python script which monitors and records the CPU and RAM consumption of submitted cluster jobs. Usage To start recording

null 23 Oct 4, 2021
A Fast, Extensible Progress Bar for Python and CLI

tqdm tqdm derives from the Arabic word taqaddum (تقدّم) which can mean "progress," and is an abbreviation for "I love you so much" in Spanish (te quie

tqdm developers 23.7k Jan 1, 2023