Fast Base64 encoding/decoding in Python

Overview

Fast Base64 implementation

license-status pypi-status python-versions Documentation Status gha-status codecov-status

This project is a wrapper on libbase64.

It aims to provide a fast base64 implementation for base64 encoding/decoding.

Installation

pip install pybase64

Usage

pybase64 uses the same API as Python base64 "modern interface" (introduced in Python 2.4) for an easy integration.

To get the fastest decoding, it is recommended to use the pybase64.b64decode and validate=True when possible.

import pybase64

print(pybase64.b64encode(b'>>>foo???', altchars='_:'))
# b'Pj4_Zm9vPz8:'
print(pybase64.b64decode(b'Pj4_Zm9vPz8:', altchars='_:', validate=True))
# b'>>>foo???'

# Standard encoding helpers
print(pybase64.standard_b64encode(b'>>>foo???'))
# b'Pj4+Zm9vPz8/'
print(pybase64.standard_b64decode(b'Pj4+Zm9vPz8/'))
# b'>>>foo???'

# URL safe encoding helpers
print(pybase64.urlsafe_b64encode(b'>>>foo???'))
# b'Pj4-Zm9vPz8_'
print(pybase64.urlsafe_b64decode(b'Pj4-Zm9vPz8_'))
# b'>>>foo???'

A command-line tool is also provided. It has encode, decode and benchmark subcommands.

usage: pybase64 [-h] [-V] {benchmark,encode,decode} ...

pybase64 command-line tool.

positional arguments:
  {benchmark,encode,decode}
                        tool help
    benchmark           -h for usage
    encode              -h for usage
    decode              -h for usage

optional arguments:
  -h, --help            show this help message and exit
  -V, --version         show program's version number and exit

Full documentation on Read the Docs.

Benchmark

Running Python 3.7.2, Apple LLVM version 10.0.0 (clang-1000.11.45.5), Mac OS X 10.14.2 on an Intel Core i7-4870HQ @ 2.50GHz

pybase64 0.5.0 (C extension active - AVX2)
bench: altchars=None, validate=False
pybase64._pybase64.encodebytes:   1734.776 MB/s (13,271,472 bytes -> 17,928,129 bytes)
pybase64._pybase64.b64encode:     4039.539 MB/s (13,271,472 bytes -> 17,695,296 bytes)
pybase64._pybase64.b64decode:     1854.423 MB/s (17,695,296 bytes -> 13,271,472 bytes)
base64.encodebytes:                 78.352 MB/s (13,271,472 bytes -> 17,928,129 bytes)
base64.b64encode:                  539.840 MB/s (13,271,472 bytes -> 17,695,296 bytes)
base64.b64decode:                  287.826 MB/s (17,695,296 bytes -> 13,271,472 bytes)
bench: altchars=None, validate=True
pybase64._pybase64.b64encode:     4156.607 MB/s (13,271,472 bytes -> 17,695,296 bytes)
pybase64._pybase64.b64decode:     4107.997 MB/s (17,695,296 bytes -> 13,271,472 bytes)
base64.b64encode:                  559.342 MB/s (13,271,472 bytes -> 17,695,296 bytes)
base64.b64decode:                  143.674 MB/s (17,695,296 bytes -> 13,271,472 bytes)
bench: altchars=b'-_', validate=False
pybase64._pybase64.b64encode:     2786.776 MB/s (13,271,472 bytes -> 17,695,296 bytes)
pybase64._pybase64.b64decode:     1124.136 MB/s (17,695,296 bytes -> 13,271,472 bytes)
base64.b64encode:                  322.427 MB/s (13,271,472 bytes -> 17,695,296 bytes)
base64.b64decode:                  205.195 MB/s (17,695,296 bytes -> 13,271,472 bytes)
bench: altchars=b'-_', validate=True
pybase64._pybase64.b64encode:     2806.271 MB/s (13,271,472 bytes -> 17,695,296 bytes)
pybase64._pybase64.b64decode:     2740.456 MB/s (17,695,296 bytes -> 13,271,472 bytes)
base64.b64encode:                  314.709 MB/s (13,271,472 bytes -> 17,695,296 bytes)
base64.b64decode:                  121.803 MB/s (17,695,296 bytes -> 13,271,472 bytes)

Changelog

1.2.0

  • Release the GIL
  • Publish CPython 3.10 wheels
  • Drop python 3.5 support

1.1.4

  • Add macOS arm64 wheel

1.1.3

  • GitHub Actions: fix build on tag

1.1.2

  • Add PyPy wheels
  • Add aarch64, ppc64le & s390x manylinux wheels

1.1.1

  • Move CI from TravisCI/AppVeyor to GitHub Actions
  • Fix publication of Linux/macOS wheels

1.1.0

  • Add b64encode_as_string, same as b64encode but returns a str object instead of a bytes object
  • Add b64decode_as_bytearray, same as b64decode but returns a bytarray object instead of a bytes object
  • Speed-Up decoding from UCS1 strings

1.0.2

  • Update base64 library
  • Publish python 3.9 wheels

1.0.1

  • Publish python 3.8 wheels

1.0.0

  • Drop python 3.4 support
  • Drop python 2.7 support

0.5.0

  • Publish python 3.7 wheels
  • Drop python 3.3 support

0.4.0

  • Speed-up decoding when validate==False

0.3.1

  • Fix deployment issues

0.3.0

  • Add encodebytes function

0.2.1

  • Fixed invalid results on Windows

0.2.0

  • Added documentation

  • Added subcommands to the main script:

    • help
    • version
    • encode
    • decode
    • benchmark

0.1.2

  • Updated base64 native library

0.1.1

  • Fixed deployment issues

0.1.0

  • First public release
Comments
  • encoding to string and decoding to bytearray optimizations

    encoding to string and decoding to bytearray optimizations

    Hi, I'm developing serializejson, a python library for fast serialization and deserialization of python objects in JSON designed as a safe, interoperable and human-readable drop-in replacement for the Python pickle package.

    I use PyBase64 for bytes and bytesarray encoding in json. When encoding and decoding bytes and bytesarrays, most of the time is spend in avoidable copies rather really encoding and decoding in base64.

    example with line profiler :

    import pybase64
    import json
    
    @profile
    def encode_bytearray(bytearray_):
        bytes_b64 = pybase64.b64encode(bytearray_) # 1.05 msec, 29% of time
        string_b64 = bytes_b64.decode("ascii")     # 1.44 msec, 40% of time  
        string_json = f'"{string_b64}"'            # 1.10 msec, 30% of time
        return string_json
    
    @profile
    def decode_bytearray(string_json_without_quotes):
        bytes_b64 = string_json_without_quotes.encode("ascii")  # 1.13 msec, 28% of time 
        bytes_decoded = pybase64.b64decode(bytes_b64)           # 2.00 msec, 52% of time 
        #bytes_decoded = pybase64.b64decode(string_b64)         # 3.72 msec   
        bytearray_decoded  = bytearray(bytes_decoded)           # 0.86 msec, 20% of time
        return bytearray_decoded
    
    # encoding :
    bytearray_ = bytearray(range(256)) * 12000
    string_json = encode_bytearray(bytearray_)
    
    # decoding : 
    string_json_without_quotes = json.loads(string_json)
    print(string_json_without_quotes.isascii())
    bytearray_decoded = decode_bytearray(string_json)
    

    When encoding, 70% of time is lost in avoidable copies. I would like to know if it could be possible to add an option to encode directly in string to avoid a first copy with bytes_b64.decode("ascii"), and if it could be possible to add an option to encode directly in string with double quotes, to avoid a second copy just for adding double quotes for Json.

    When loading, 48 % of time is lost in avoidable copies. First, strangely, decoding directly from string is slower than passing by intermediary encoding in bytes even if the string is already ASCII (string_json_without_quotes.isascii() is True) and so continuous ascii in memory. Secondly, I would know if it could be possible to add an option to b64decode (or a new function) for decoding directly in bytesarray, in order to avoid a second copy passing by an intermediary bytes. Sadly, I don't know C and C++ and I'm not comfortable to fork your project or propose a pull request for this améliorations.

    Tanks a lot .

    Baptiste

    enhancement 
    opened by SmartAudioTools 6
  • Bump cibuildwheel from 0.10.0 to 0.10.1

    Bump cibuildwheel from 0.10.0 to 0.10.1

    Bumps cibuildwheel from 0.10.0 to 0.10.1.

    Commits
    • f1bba58 Bump version
    • 56218d8 Merge pull request #123 from YannickJadoul/fix-issue-122
    • d79ca07 Running 'pip install --upgrade setuptools' with 'sudo' on macOS, fixing #122
    • c6f4f01 Update README.md
    • 586b3c7 Update openssl patch from 1.0.2p to 1.0.2q on macOS
    • 0b4475e Update Python from 3.6.7, 3.7.1 to 3.6.8, 3.7.2 on macOS
    • 38b3b0a Merge pull request #114 from YannickJadoul/deterministic-preamble-order
    • 5adfce9 Merge pull request #113 from xanderyzwich/master
    • bc83839 Sorting build options dict items when printing preamble
    • 481b1cb Revert "Uninstalling oclint in Travis CI config to fix HomeBrew upgrade of gc...
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Note: This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

    You can always request more updates by clicking Bump now in your Dependabot dashboard.

    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies 
    opened by dependabot-preview[bot] 5
  • Add encodebytes function

    Add encodebytes function

    A newline needs to be inserted after every 76 characters.

    https://docs.python.org/2/library/base64.html#base64.encodestring https://docs.python.org/2/library/base64.html#base64.decodestring

    enhancement 
    opened by thestick613 5
  • pybase64 returns invalid results on Windows

    pybase64 returns invalid results on Windows

    pybase64 encode created not base64 encoded stream

    Hi there,

    I wanted to encode an image:

    import requests import pybase64

    image_url = 'http://www.123freeicons.com/wp-content/uploads/Images/Nature/003-tick-weather-icons-l.jpg'
    image = requests.get(image_url).content
    image_base64 = pybase64.b64encode(image)
    

    the returned stream contained non ascii characters. Maybe "just" encode and decode are exchanged (I did not try). But the same behaviour is found when used standrad or url_safe encoding.

    used: windows 7 64 bit, Python 3.6.1 64 bit 4 cores cpu

    checked standard lib, it created good base64 encoding

    BR, George

    bug 
    opened by GeorgeFischhof 5
  • Bump cibuildwheel from 0.10.1 to 0.10.2

    Bump cibuildwheel from 0.10.1 to 0.10.2

    Bumps cibuildwheel from 0.10.1 to 0.10.2.

    Commits
    • 054c273 Bump version
    • 87a9d17 Merge pull request #131 from mayeut/openssl-1.0.2r
    • 1d3c59d Update openssl patch from 1.0.2q to 1.0.2r on macOS
    • 0b791db Merge pull request #130 from YannickJadoul/macos-python-2.7.16
    • 44256e4 Revert "Running 'pip install --upgrade setuptools' with 'sudo' on macOS, fixi...
    • b579cd5 Updating version of Python 2.7 to 2.7.16 on macOS
    • 8523b25 Merge pull request #128 from YannickJadoul/fix-bashlex-install-permission
    • 637a251 Fixing issue #127 by avoiding bashlex 0.13 in 'install_requires'
    • a6ff864 Merge pull request #125 from ushuz/patch-1
    • 79f0443 Add missing date to changelog
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies python 
    opened by dependabot-preview[bot] 4
  • build(deps): bump sphinx from 5.3.0 to 6.0.0

    build(deps): bump sphinx from 5.3.0 to 6.0.0

    Bumps sphinx from 5.3.0 to 6.0.0.

    Release notes

    Sourced from sphinx's releases.

    v6.0.0

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.0.0b2

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.0.0b1

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    Changelog

    Sourced from sphinx's changelog.

    Release 6.0.0 (released Dec 29, 2022)

    Dependencies

    • #10468: Drop Python 3.6 support
    • #10470: Drop Python 3.7, Docutils 0.14, Docutils 0.15, Docutils 0.16, and Docutils 0.17 support. Patch by Adam Turner

    Incompatible changes

    • #7405: Removed the jQuery and underscore.js JavaScript frameworks.

      These frameworks are no longer be automatically injected into themes from Sphinx 6.0. If you develop a theme or extension that uses the jQuery, $, or $u global objects, you need to update your JavaScript to modern standards, or use the mitigation below.

      The first option is to use the sphinxcontrib.jquery_ extension, which has been developed by the Sphinx team and contributors. To use this, add sphinxcontrib.jquery to the extensions list in conf.py, or call app.setup_extension("sphinxcontrib.jquery") if you develop a Sphinx theme or extension.

      The second option is to manually ensure that the frameworks are present. To re-add jQuery and underscore.js, you will need to copy jquery.js and underscore.js from the Sphinx repository_ to your static directory, and add the following to your layout.html:

      .. code-block:: html+jinja

      {%- block scripts %} {{ super() }} {%- endblock %}

      .. _sphinxcontrib.jquery: https://github.com/sphinx-contrib/jquery/

      Patch by Adam Turner.

    • #10471, #10565: Removed deprecated APIs scheduled for removal in Sphinx 6.0. See :ref:dev-deprecated-apis for details. Patch by Adam Turner.

    • #10901: C Domain: Remove support for parsing pre-v3 style type directives and roles. Also remove associated configuration variables c_allow_pre_v3 and c_warn_on_allowed_pre_v3. Patch by Adam Turner.

    Features added

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 3
  • Bump setuptools from 50.3.2 to 51.0.0

    Bump setuptools from 50.3.2 to 51.0.0

    Bumps setuptools from 50.3.2 to 51.0.0.

    Changelog

    Sourced from setuptools's changelog.

    v51.0.0

    Breaking Changes

    • #2435: Require Python 3.6 or later.

    Documentation changes

    • #2430: Fixed inconsistent RST title nesting levels caused by #2399 -- by webknjaz
    • #2430: Fixed a typo in Sphinx docs that made docs dev section disappear as a result of PR #2426 -- by webknjaz

    Misc

    • #2471: Removed the tests that guarantee that the vendored dependencies can be built by distutils.
    Commits
    • b6bbe23 Bump version: 50.3.2 → 51.0.0
    • 7f477c5 Merge pull request #2472 from pypa/bugfix/2471-remove-deps
    • 2a0463c Update changelog.
    • 99bc2c1 Remove tests guaranteeing that (vendored) dependencies can be installed witho...
    • 6544183 Remove conditional skip, no longer relevant.
    • 9365c7e Merge pull request #2468 from wimglenn/patch-1
    • 43b0b81 Merge pull request #2461 from webknjaz/testing/gha-fix-set-env-usage
    • 43f7600 Merge pull request #2460 from HaraldKorneliussen/master
    • 2065f85 Merge pull request #2444 from zegor/patch-1
    • e961759 Merge pull request #2439 from mgedmin/patch-1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies python 
    opened by dependabot-preview[bot] 3
  • Bump pytest from 4.5.0 to 4.6.1

    Bump pytest from 4.5.0 to 4.6.1

    Bumps pytest from 4.5.0 to 4.6.1.

    Changelog

    Sourced from pytest's changelog.

    pytest 4.6.1 (2019-06-02)

    Bug Fixes

    • #5354: Fix pytest.mark.parametrize when the argvalues is an iterator.
    • #5358: Fix assertion rewriting of all() calls to deal with non-generators.

    pytest 4.6.0 (2019-05-31)

    Important

    The 4.6.X series will be the last series to support Python 2 and Python 3.4.

    For more details, see our Python 2.7 and 3.4 support plan.

    Features

    • #4559: Added the junit_log_passing_tests ini value which can be used to enable or disable logging of passing test output in the Junit XML file.
    • #4956: pytester's testdir.spawn uses tmpdir as HOME/USERPROFILE directory.
    • #5062: Unroll calls to all to full for-loops with assertion rewriting for better failure messages, especially when using Generator Expressions.
    • #5063: Switch from pkg_resources to importlib-metadata for entrypoint detection for improved performance and import time.
    • #5091: The output for ini options in --help has been improved.
    • #5269: pytest.importorskip includes the ImportError now in the default reason.
    • #5311: Captured logs that are output for each failing test are formatted using the ColoredLevelFormatter.
    • #5312: Improved formatting of multiline log messages in Python 3.

    Bug Fixes

    • #2064: The debugging plugin imports the wrapped Pdb class (--pdbcls) on-demand now.
    • #4908: The pytest_enter_pdb hook gets called with post-mortem (--pdb).
    • #5036: Fix issue where fixtures dependent on other parametrized fixtures would be erroneously parametrized.
    • #5256: Handle internal error due to a lone surrogate unicode character not being representable in Jython.
    • #5257: Ensure that sys.stdout.mode does not include 'b' as it is a text stream.
    • #5278: Pytest's internal python plugin can be disabled using -p no:python again.
    • #5286: Fix issue with disable_test_id_escaping_and_forfeit_all_rights_to_community_support option not working when using a list of test IDs in parametrized tests.
    • #5330: Show the test module being collected when emitting PytestCollectionWarning messages for test classes with __init__ and __new__ methods to make it easier to pin down the problem.
    • #5333: Fix regression in 4.5.0 with --lf not re-running all tests with known failures from non-selected tests.

    Improved Documentation

    • #5250: Expand docs on use of setenv and delenv with monkeypatch.
    Commits
    • abb853f Preparing release version 4.6.1
    • 8208a37 Merge pull request #5361 from asottile/backport_5360
    • f078984 Fix all() unroll for non-generators/non-list comprehensions (#5360)
    • dba62f8 [4.6] Fix pytest.mark.parametrize when the argvalue is an iterator (#5357)
    • f7bf914 Fix pytest.mark.parametrize when the argvalue is an iterator
    • 917195e Merge pull request #5350 from asottile/release-4.6.0
    • e7cd00a Preparing release version 4.6.0
    • 693c3b7 Merge pull request #5349 from asottile/mm
    • fb3ae5e Merge remote-tracking branch 'origin/master' into mm
    • c8d23c2 logging: Improve formatting of multiline message (#5312)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies python 
    opened by dependabot-preview[bot] 3
  • Bump pytest from 4.4.2 to 4.5.0

    Bump pytest from 4.4.2 to 4.5.0

    Bumps pytest from 4.4.2 to 4.5.0.

    Changelog

    Sourced from pytest's changelog.

    pytest 4.5.0 (2019-05-11)

    Features

    • #4826: A warning is now emitted when unknown marks are used as a decorator. This is often due to a typo, which can lead to silently broken tests.

    • #4907: Show XFail reason as part of JUnitXML message field.

    • #5013: Messages from crash reports are displayed within test summaries now, truncated to the terminal width.

    • #5023: New flag --strict-markers that triggers an error when unknown markers (e.g. those not registered using the markers option in the configuration file) are used in the test suite.

      The existing --strict option has the same behavior currently, but can be augmented in the future for additional checks.

    • #5026: Assertion failure messages for sequences and dicts contain the number of different items now.

    • #5034: Improve reporting with --lf and --ff (run-last-failure).

    • #5035: The --cache-show option/action accepts an optional glob to show only matching cache entries.

    • #5059: Standard input (stdin) can be given to pytester's Testdir.run() and Testdir.popen().

    • #5068: The -r option learnt about A to display all reports (including passed ones) in the short test summary.

    • #5108: The short test summary is displayed after passes with output (-rP).

    • #5172: The --last-failed (--lf) option got smarter and will now skip entire files if all tests of that test file have passed in previous runs, greatly speeding up collection.

    • #5177: Introduce new specific warning PytestWarning subclasses to make it easier to filter warnings based on the class, rather than on the message. The new subclasses are:

      • PytestAssertRewriteWarning
      • PytestCacheWarning
      • PytestCollectionWarning
      • PytestConfigWarning
      • PytestUnhandledCoroutineWarning
      • PytestUnknownMarkWarning
    • #5202: New record_testsuite_property session-scoped fixture allows users to log <property> tags at the testsuite level with the junitxml plugin.

      The generated XML is compatible with the latest xunit standard, contrary to the properties recorded by record_property and record_xml_attribute.

    • #5214: The default logging format has been changed to improve readability. Here is an example of a previous logging message:

      test_log_cli_enabled_disabled.py    3 CRITICAL critical message logged by test
      

      This has now become:

      CRITICAL root:test_log_cli_enabled_disabled.py:3 critical message logged by test
      

      The formatting can be changed through the log_format configuration option.

    • #5220: --fixtures now also shows fixture scope for scopes other than "function".

    Bug Fixes

    • #5113: Deselected items from plugins using pytest_collect_modifyitems as a hookwrapper are correctly reported now.
    • #5144: With usage errors exitstatus is set to EXIT_USAGEERROR in the pytest_sessionfinish hook now as expected.
    • #5235: outcome.exit is not used with EOF in the pdb wrapper anymore, but only with quit.
    ... (truncated)
    Commits
    • 63fe547 Preparing release version 4.5.0
    • b709e61 Merge remote-tracking branch 'upstream/master' into release-4.5.0
    • 465b2d9 Further "unknown marks warning" improvements (#5178)
    • 184ef92 Introduce record_testsuite_property fixture (#5205)
    • 73bbff2 Introduce record_testsuite_property fixture
    • 4ccaa98 Merge pull request #5240 from nicoddemus/tidelift
    • 3a4a815 Merge master into features (#5233)
    • dae455e Add Tidelift management docs and blurb on README, as discussed in the ML
    • 0594dba Remove unused markers and enable --strict-markers
    • f1183c2 Remove the 'issue' marker from test suite
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies python 
    opened by dependabot-preview[bot] 3
  • Bump tox from 3.8.3 to 3.8.4

    Bump tox from 3.8.3 to 3.8.4

    Bumps tox from 3.8.3 to 3.8.4.

    Changelog

    Sourced from tox's changelog.

    v3.8.4 (2019-04-01)

    Bugfixes

    • Fix sdist creation on python2.x when there is non-ascii output. #1234
    • fix typos in isolated.py that made it impossible to install package with requirements in pyproject.toml - by unmade #1236
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies python 
    opened by dependabot-preview[bot] 3
  • Bump sphinx from 1.8.4 to 1.8.5

    Bump sphinx from 1.8.4 to 1.8.5

    Bumps sphinx from 1.8.4 to 1.8.5.

    Changelog

    Sourced from sphinx's changelog.

    Release 1.8.5 (released Mar 10, 2019)

    Bugs fixed

    • LaTeX: Remove extraneous space after author names on PDF title page (refs: #6004)
    • #6026: LaTeX: A cross reference to definition list does not work
    • #6046: LaTeX: TypeError is raised when invalid latex_elements given
    • #6067: LaTeX: images having a target are concatenated to next line
    • #6067: LaTeX: images having a target are not aligned even if specified
    • #6149: LaTeX: :index: role in titles causes Use of \[@&#8203;icentercr](https://github.com/icentercr) doesn't match its definition error on latexpdf build
    • #6019: imgconverter: Including multipage PDF fails
    • #6047: autodoc: autofunction emits a warning for method objects
    • #6028: graphviz: Ensure the graphviz filenames are reproducible
    • #6068: doctest: skipif option may remove the code block from documentation
    • #6136: :name: option for math directive causes a crash
    • #6139: intersphinx: ValueError on failure reporting
    • #6135: changes: Fix UnboundLocalError when any module found
    • #3859: manpage: code-block captions are not displayed correctly
    Commits
    • 591bdd7 Bump to 1.8.5 final
    • f44aa23 Merge pull request #6159 from tk0miya/3859_code-block_captions_for_manpage
    • fc99687 Fix #3859: manpage: code-block captions are not displayed correctly
    • f57041a Merge pull request #6152 from tk0miya/6149_index_on_title
    • 05d3e37 Fix #6149: LaTeX: :index: role titles causes build error of LaTeX
    • 9f283bc Merge pull request #6153 from tk0miya/use_bionic_on_circleci
    • f61a5f9 Fix test: imgconverter expects size of images fixed
    • f7315ed Use bionic (py36) on Circle CI
    • f03c2d4 Update CHANGES for PR #6135
    • 7c50f8f Merge pull request #6135 from bz2/changes_module_1.8
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)

    Finally, you can contact us by mentioning @dependabot.

    dependencies python 
    opened by dependabot-preview[bot] 3
  • build(deps): bump sphinx from 5.3.0 to 6.1.1

    build(deps): bump sphinx from 5.3.0 to 6.1.1

    Bumps sphinx from 5.3.0 to 6.1.1.

    Release notes

    Sourced from sphinx's releases.

    v6.1.1

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.1.0

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.0.1

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.0.0

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.0.0b2

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    v6.0.0b1

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    Changelog

    Sourced from sphinx's changelog.

    Release 6.1.1 (released Jan 05, 2023)

    Bugs fixed

    • #11091: Fix util.nodes.apply_source_workaround for literal_block nodes with no source information in the node or the node's parents.

    Release 6.1.0 (released Jan 05, 2023)

    Dependencies

    Incompatible changes

    • #10979: gettext: Removed support for pluralisation in get_translation. This was unused and complicated other changes to sphinx.locale.

    Deprecated

    • sphinx.util functions:

      • Renamed sphinx.util.typing.stringify() to sphinx.util.typing.stringify_annotation()
      • Moved sphinx.util.xmlname_checker() to sphinx.builders.epub3._XML_NAME_PATTERN

      Moved to sphinx.util.display:

      • sphinx.util.status_iterator
      • sphinx.util.display_chunk
      • sphinx.util.SkipProgressMessage
      • sphinx.util.progress_message

      Moved to sphinx.util.http_date:

      • sphinx.util.epoch_to_rfc1123
      • sphinx.util.rfc1123_to_epoch

      Moved to sphinx.util.exceptions:

      • sphinx.util.save_traceback

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 1
Releases(v1.2.3)
Owner
Matthieu Darbois
Matthieu Darbois
A project to find out all the words in a crossword.

A project to find out all the words in a crossword.

Kalpesh Dhoundiyal 1 Feb 06, 2022
万能通用对象池,可以池化任意自定义类型的对象。

pip install universal_object_pool 此包能够将一切任意类型的python对象池化,是万能池,适用范围远大于单一用途的mysql连接池 http连接池等。 框架使用对象池包,自带实现了4个对象池。可以直接开箱用这四个对象池,也可以作为例子学习对象池用法。

12 Dec 15, 2022
A guy with a lot of useful things to do when doing AtCoder in Python

atcoder_python_env Python で AtCoder をやるときに便利な諸々を用意したやつ コンテスト用フォルダの作成 セットアップ 自動テス

2 Dec 28, 2021
Calculadora-basica - Calculator with basic operators

Calculadora básica Calculadora com operadores básicos; O programa solicitará a d

Vitor Antoni 2 Apr 26, 2022
App and Python library for parsing, writing, and validation of the STAND013 file format.

python-stand013 python-stand013 is a Python app and library for parsing, writing, and validation of the STAND013 file format. Features The following i

Oda 3 Nov 09, 2022
Make discord server By Coding!

Discord Server Maker Make discord server by Coding! FAQ How can i get role permissons? Open discord with chrome developer tool, go to network and clic

1 Jul 17, 2022
It's like Forth but in Python

It's like Forth but written in Python. But I don't actually know for sure since I never programmed in Forth, I only heard that it's some sort of stack-based programming language. Porth is also stack-

Tsoding 619 Dec 21, 2022
An Airflow operator to call the main function from the dbt-core Python package

airflow-dbt-python An Airflow operator to call the main function from the dbt-core Python package Motivation Airflow running in a managed environment

Tomás Farías Santana 93 Jan 08, 2023
免杀shellcode加载器

bypassAV 条件触发式远控 VT 5/70 免杀国内杀软及defender、卡巴斯基等主流杀软 原理 https://pureqh.top/?p=5412 use 将shellcode填至go_shellcode_encode.py生成混淆后的base64 payload 然后将生成的payl

405 Dec 14, 2022
Moji sends text and fun facts from different APIs wit da use of a notification deamon

Moji sends text and fun facts from different APIs wit da use of a notification deamon. Can be runned via dmenu or rofi.

kshly 2 Jan 12, 2022
Cool Bioinformatics Scripts

Cool Bioinformatics Scripts qqplot You can use this script in two ways read tons of millions of P values from stdin # python zcat pval.txt.gz | qqplo

8 Oct 30, 2022
A 100% python file organizer. Keep your computer always organized!

PythonOrganizer A 100% python file organizer. Keep your computer always organized! To run the project, just clone the folder and run the installation

3 Dec 02, 2022
Cylinder volume calculator features the calculations of the volume of a Right /oblique full cylinder

Cylinder-Volume-Calculator Cylinder volume calculator features the calculations of the volume of a Right /oblique full cylinder. Size : 10.5 mb compat

Abhijeet 4 Nov 07, 2022
A small Blender addon for changing an object's local orientation while in edit mode

A small Blender addon for changing an object's local orientation while in edit mode.

Jonathan Lampel 50 Jan 06, 2023
hey, this repo is the backend of the sociio project

sociio backend Hey, this repository is a part of sociio project , In this repo we are working to create an independent server for everything you can i

2 Jun 09, 2022
A complex language with high level programming and moderate syntax.

zsq a complex language with high level programming and moderate syntax.

an aspirin 6 Jun 25, 2022
Domoticz-hyundai-kia - Domoticz Hyundai-Kia plugin for Domoticz home automation system

Domoticz Hyundai-Kia plugin Author: Creasol https://www.creasol.it/domotics For

Creasol 7 Aug 03, 2022
Multi View Stereo on Internet Images

Evaluating MVS in a CPC Scenario This repository contains the set of artficats used for the ENGN8601/8602 research project. The thesis emphasizes on t

Namas Bhandari 1 Nov 10, 2021
A Python package that provides astronomical constants.

AstroConst A Python package that provides astronomical constants. The code is being developed by Marc van der Sluys of the department of Astrophysics

Marc van der Sluys 1 Jan 10, 2022
Basic repository showing how to use Hydra + Hydra launchers on SLURM cluster

Slurm-Hydra-Submitit This repository is a minimal working example on how to: setup Hydra setup batch of slurm jobs on top of Hydra via submitit-launch

Raphael Meudec 2 Jul 25, 2022