Skip to main content

Decorator for logging function arguments and return value by human-readable way

Project description

logwrap

https://travis-ci.com/python-useful-helpers/logwrap.svg?branch=master https://github.com/python-useful-helpers/logwrap/workflows/Python%20package/badge.svg https://coveralls.io/repos/github/python-useful-helpers/logwrap/badge.svg?branch=master Documentation Status https://img.shields.io/pypi/v/logwrap.svg https://img.shields.io/pypi/pyversions/logwrap.svg https://img.shields.io/pypi/status/logwrap.svg https://img.shields.io/github/license/python-useful-helpers/logwrap.svg https://img.shields.io/badge/code%20style-black-000000.svg

logwrap is a helper for logging in human-readable format function arguments and call result on function call. Why? Because logging of *args, **kwargs become useless with project grow and you need more details in call log.

Cons:

  • Log records are not single line.

Pros:

  • Log records are not single 100500 symbols length line. (Especially actual for testing/development environments and for Kibana users).

  • Service free: job is done by this library and it’s dependencies. It works at virtualenv

  • Free software: Apache license

  • Open Source: https://github.com/python-useful-helpers/logwrap

  • PyPI packaged: https://pypi.python.org/pypi/logwrap

  • Self-documented code: docstrings with types in comments

  • Tested: see bages on top

  • Support multiple Python versions:

Python 3.7
Python 3.8
Python 3.9
Python 3.10

This package includes helpers:

  • logwrap - main helper. The same is LogWrap.

  • LogWrap - class with logwrap implementation. May be used directly.

  • pretty_repr

  • pretty_str

  • PrettyFormat

  • LogOnAccess - property with logging on successful get/set/delete or failure.

Usage

logwrap

The main decorator. Could be used as not argumented (@logwrap.logwrap) and argumented (@logwrap.logwrap()). Not argumented usage simple calls with default values for all positions.

Argumented usage with arguments from signature:

@logwrap.logwrap(
    log=None,  # if not set: try to find LOGGER, LOG, logger or log object in target module and use it if it logger instance. Fallback: logger named logwrap
    log_level=logging.DEBUG,
    exc_level=logging.ERROR,
    max_indent=20,  # forwarded to the pretty_repr
    blacklisted_names=None,  # list argument names, which should be dropped from log
    blacklisted_exceptions=None,  # Exceptions to skip details in log (no traceback, no exception details - just class name)
    log_call_args=True,  # Log call arguments before call
    log_call_args_on_exc=True,  # Log call arguments if exception happens
    log_traceback = True,  # Log traceback if exception happens
    log_result_obj=True,  # Log result object
)

Usage examples:

@logwrap.logwrap()
def foo():
    pass

is equal to:

@logwrap.logwrap
def foo():
    pass

Get decorator for use without parameters:

get_logs = logwrap.logwrap()  # set required parameters via arguments

type(get_logs) == LogWrap  # All logic is implemented in LogWrap class starting from version 2.2.0

@get_logs
def foo():
    pass

Call example (python 3.8):

import logwrap

@logwrap.logwrap
def example_function1(
        arg0: str,
        /,
        arg1: str,
        arg2: str='arg2',
        *args,
        kwarg1: str,
        kwarg2: str='kwarg2',
        **kwargs
) -> tuple():
    return (arg0, arg1, arg2, args, kwarg1, kwarg2, kwargs)

example_function1('arg0', 'arg1', kwarg1='kwarg1', kwarg3='kwarg3')

This code during execution will produce log records:

Calling:
'example_function1'(
    # POSITIONAL_ONLY:
    arg0='arg0',  # type: str
    # POSITIONAL_OR_KEYWORD:
    arg1='arg1',  # type: str
    arg2='arg2',  # type: str
    # VAR_POSITIONAL:
    args=(),
    # KEYWORD_ONLY:
    kwarg1='kwarg1',  # type: str
    kwarg2='kwarg2',  # type: str
    # VAR_KEYWORD:
    kwargs={
        'kwarg3': 'kwarg3',
    },
)
Done: 'example_function1' with result:

 (
    'arg0',
    'arg1',
    'arg2',
    (),
    'kwarg1',
    'kwarg2',
    {
        'kwarg3': 'kwarg3',
    },
 )

LogWrap

Example construction and read from test:

log_call = logwrap.LogWrap()
log_call.log_level == logging.DEBUG
log_call.exc_level == logging.ERROR
log_call.max_indent == 20
log_call.blacklisted_names == []
log_call.blacklisted_exceptions == []
log_call.log_call_args == True
log_call.log_call_args_on_exc == True
log_call.log_traceback == True
log_call.log_result_obj == True

On object change, variable types is validated.

In special cases, when special processing required for parameters logging (hide or change parameters in log), it can be done by override pre_process_param and post_process_param.

See API documentation for details.

pretty_repr

This is specified helper for making human-readable repr on complex objects. Signature is self-documenting:

def pretty_repr(
    src,  # object for repr
    indent=0,  # start indent
    no_indent_start=False,  # do not indent the first level
    max_indent=20,  # maximum allowed indent level
    indent_step=4,  # step between indents
)

pretty_str

This is specified helper for making human-readable str on complex objects. Signature is self-documenting:

def pretty_str(
    src,  # object for __str__
    indent=0,  # start indent
    no_indent_start=False,  # do not indent the first level
    max_indent=20,  # maximum allowed indent level
    indent_step=4,  # step between indents
)
Limitations:

Dict like objects is always marked inside {} for readability, even if it is collections.OrderedDict (standard repr as list of tuples).

Iterable types is not declared, only brackets is used.

String and bytes looks the same (its __str__, not __repr__).

PrettyFormat

PrettyFormat is the main formatting implementation class. pretty_repr and pretty_str uses instances of subclasses PrettyRepr and PrettyStr from this class. This class is mostly exposed for typing reasons. Object signature:

def __init__(
    self,
    max_indent=20,  # maximum allowed indent level
    indent_step=4,  # step between indents
)

Callable object (PrettyFormat instance) signature:

def __call__(
    self,
    src,  # object for repr
    indent=0,  # start indent
    no_indent_start=False  # do not indent the first level
)

Adopting your code

pretty_repr behavior could be overridden for your classes by implementing specific magic method:

def __pretty_repr__(
    self,
    parser  # PrettyFormat class instance,
    indent  # start indent,
    no_indent_start  # do not indent the first level
):
    return ...

This method will be executed instead of __repr__ on your object.

def __pretty_str__(
    self,
    parser  # PrettyFormat class instance,
    indent  # start indent,
    no_indent_start  # do not indent the first level
):
    return ...

This method will be executed instead of __str__ on your object.

LogOnAccess

This special case of property is useful in cases, where a lot of properties should be logged by similar way without writing a lot of code.

Basic API is conform with property, but in addition it is possible to customize logger, log levels and log conditions.

Usage examples:

  1. Simple usage. All by default. logger is re-used:

    • from instance if available with names logger or log,

    • from instance module if available with names LOGGER, log,

    • else used internal logwrap.log_on_access logger.

import logging

class Target(object):

    def init(self, val='ok')
        self.val = val
        self.logger = logging.get_logger(self.__class__.__name__)  # Single for class, follow subclassing

    def __repr__(self):
        return "{cls}(val={self.val})".format(cls=self.__class__.__name__, self=self)

    @logwrap.LogOnAccess
    def ok(self):
        return self.val

    @ok.setter
    def ok(self, val):
        self.val = val

    @ok.deleter
    def ok(self):
        self.val = ""
  1. Use with global logger for class:

class Target(object):

  def init(self, val='ok')
      self.val = val

  def __repr__(self):
      return "{cls}(val={self.val})".format(cls=self.__class__.__name__, self=self)

  @logwrap.LogOnAccess
  def ok(self):
      return self.val

  @ok.setter
  def ok(self, val):
      self.val = val

  @ok.deleter
  def ok(self):
      self.val = ""

  ok.logger = 'test_logger'
  ok.log_level = logging.INFO
  ok.exc_level = logging.ERROR
  ok.log_object_repr = True  # As by default
  ok.log_before = True  # As by default
  ok.log_success = True  # As by default
  ok.log_failure = True  # As by default
  ok.log_traceback = True  # As by default
  ok.override_name = None  # As by default: use original name

Testing

The main test mechanism for the package logwrap is using tox. Available environments can be collected via tox -l

CI systems

For code checking several CI systems is used in parallel:

  1. Travis CI: is used for checking: PEP8, pylint, bandit, installation possibility and unit tests. Also it’s publishes coverage on coveralls.

  2. coveralls: is used for coverage display.

  3. GitHub: is used for functional tests.

CD systems

  1. Travis CI: is used for linux and SDIST package delivery on PyPI.

Project details


Release history Release notifications | RSS feed

This version

9.0.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

logwrap-9.0.0.tar.gz (43.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

logwrap-9.0.0-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

logwrap-9.0.0-cp39-cp39-win_amd64.whl (85.3 kB view details)

Uploaded CPython 3.9Windows x86-64

logwrap-9.0.0-cp39-cp39-win32.whl (76.5 kB view details)

Uploaded CPython 3.9Windows x86

logwrap-9.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (884.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

logwrap-9.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (875.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

logwrap-9.0.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (804.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

logwrap-9.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (846.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

logwrap-9.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (767.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

logwrap-9.0.0-cp38-cp38-win_amd64.whl (84.9 kB view details)

Uploaded CPython 3.8Windows x86-64

logwrap-9.0.0-cp38-cp38-win32.whl (76.3 kB view details)

Uploaded CPython 3.8Windows x86

logwrap-9.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (892.3 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

logwrap-9.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (883.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

logwrap-9.0.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (869.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

logwrap-9.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (859.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

logwrap-9.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (825.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

logwrap-9.0.0-cp37-cp37m-win_amd64.whl (83.4 kB view details)

Uploaded CPython 3.7mWindows x86-64

logwrap-9.0.0-cp37-cp37m-win32.whl (75.3 kB view details)

Uploaded CPython 3.7mWindows x86

logwrap-9.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (802.1 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

logwrap-9.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (793.5 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

logwrap-9.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (722.7 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64manylinux: glibc 2.5+ x86-64

logwrap-9.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (767.5 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

logwrap-9.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl (688.6 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ i686manylinux: glibc 2.5+ i686

File details

Details for the file logwrap-9.0.0.tar.gz.

File metadata

  • Download URL: logwrap-9.0.0.tar.gz
  • Upload date:
  • Size: 43.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.7.9

File hashes

Hashes for logwrap-9.0.0.tar.gz
Algorithm Hash digest
SHA256 4480609676eef3630069f71c1e386fc4d6f2933fd6169f8666ca383cf1c397ed
MD5 4de124c1b71593e0d079d5fcae7ab5ab
BLAKE2b-256 ab03c6f43932264be3701e24fc2c316aaf5ecbe2708f5ae2f4538c1ede37ef37

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-py3-none-any.whl.

File metadata

  • Download URL: logwrap-9.0.0-py3-none-any.whl
  • Upload date:
  • Size: 25.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.8.1

File hashes

Hashes for logwrap-9.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1f4cd464054d3fbfda3d4c3187ba99b20c2f2d60830c7d7198c6d7eb4f0389f5
MD5 072de33c33d212bbd6338bb2719114a9
BLAKE2b-256 6e1bcc149a19b479dd85b5b9613df7ab74a6ad944b25bc9ee76544c380b0d5f7

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: logwrap-9.0.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 85.3 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

File hashes

Hashes for logwrap-9.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 97f3b4c06cdcf9f31dfff85589c65564f66ba6a0f715ac4bf14cf2702cd8821c
MD5 baa8b06561487938d0eb85560b2fcd63
BLAKE2b-256 94082aa8289d65b98931dc4bd1a8ab50b0f0cd4efa5b893f630b08d2543f373b

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: logwrap-9.0.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 76.5 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

File hashes

Hashes for logwrap-9.0.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 41fcfa02c9e54e86e8cfe13652f4825cc646aab493ae05f33bbbda88a5fb4e8f
MD5 ec47890821d807773c12331015b88872
BLAKE2b-256 8cca0fc53c41515f3dcfcd091e5e6105cb525d3ee6dfc3e04bbb4656307cf1bd

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 af1cfbd8d382033dfb3c9fd9c4c23b2491dd05fd9b5cb4dc03aef65afe0dbba5
MD5 968f07779bd8c66137787fc34cc59081
BLAKE2b-256 a8aa5e0bca7a1ed25811d5d35809812a5533557e1a5652fe368540f0b7ff3848

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f4faacbbc67acc63c293f8f4c5ee165a9d0f86da782eb747344cfde86edb224b
MD5 d8a9456965a1553b8da6974b1894f8b8
BLAKE2b-256 0c75a77035cb441d7454450592107c89051135a5a510ed7a9fe0e5a209c37196

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 e17fc60820f1a14a1341f3b7e89605f65ccb490f95b534beb3163350bea51592
MD5 4db45f9a7ca562491764d9ab5419b556
BLAKE2b-256 9a334ca845d12f1d3ba7fe1780d06e6f9de789035941130f297eeea34ce8c3bc

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 81c5e4fde59da5ca97de810b3918b2b47c03552f1fe72d64380aed6fd789cde1
MD5 25ffce5824fb58f81534b50a1b38be4e
BLAKE2b-256 ef6a95025c88501d8e0c8cab296ed61630c9f638d51aa5e20e52885897ff5ca5

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 84b9e8dd13a225f7cd5a61ee92d192c2ba20f53a236b7955d58cb8754321f368
MD5 609bedb47cb85210cc706953fddc6027
BLAKE2b-256 c55898580c81b5bedb45f8a2ce910842c3ea3d36f0f1e338e686e5efc33531de

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: logwrap-9.0.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 84.9 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.8.10

File hashes

Hashes for logwrap-9.0.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 939627e442d0df9f53114606a4d20ae92bbad9a0bdcd696baa393233bdf4bdaa
MD5 43a7adbc467f4989bb06324d0fadf761
BLAKE2b-256 a6b10426061e9c7cb2e1719ba6934f46f208223a80fff2f51d2df7f1509753d1

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: logwrap-9.0.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 76.3 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.8.10

File hashes

Hashes for logwrap-9.0.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 d29c99f203c08e4859c4a1678faaa0095ce1d0393df4cce8b16ca1f2e06b042e
MD5 6d713a407c2f0649edd8952bbb828b9a
BLAKE2b-256 56899c7ffc3892aec1e9959332422640de8f18031021177c2dd7aa92283e0f00

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 84986f1ad95fbe1bd53e37d52667d9877519f73d8c9f58bf9c1ee4bb3a7342a1
MD5 7f3e283b5210e6b27ba661fdacda8e36
BLAKE2b-256 e507df4bd79c0dd99812d8e047909b5a0d297729838d0f7e8adf7e178bb8808d

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d8bdb576645422e6da91ab22128a79582f249b5f6b4878daf37add024da6c96e
MD5 12d1b0c1b91e81bbaff3774559c5b3f5
BLAKE2b-256 a1284df2f32cb79a0a68f0af2899ea67423dfbe0c72178cf75101c5128b3531e

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 116729f105fac5aff8cb88b02de06b959905fd0fa134b39effc1892e2e1f506d
MD5 6dd9f359dcb75f1353ca583909c73131
BLAKE2b-256 8fd2dfc04e1a039b9cece007a6aef4a88290f15479f9d9a960544886aa846864

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a9b63f6194f0e2af323d6addfe645c63f92a235522dd3d9eccc5a122c82a4012
MD5 96a16d125f90da49fb7f8aa0cfc4b0df
BLAKE2b-256 57f43e44ed4befb83290840bf64ef74f1b3bcc2aff451ac72e30d478586791a2

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 b6148548c315555826542f38e25d70b90d1fd4b60dc931ec2023db7b2ac822b1
MD5 cb6d2b202e3ea66bcae17aaa8252037d
BLAKE2b-256 1f0b540bb4c4d96a40805f010e68fe07301aa9e07ad6f8beb82b8dca5a6ef8d6

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: logwrap-9.0.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 83.4 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.7.9

File hashes

Hashes for logwrap-9.0.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 b74b7a4d354b3c99d16b5c5632b68fb7b75e246751d770e25fd0294470381786
MD5 a7a2a89a4c3b2e5d30b18a79def7dab6
BLAKE2b-256 0d31fddc1b603f706613cd18292701e21232cf025c930dd1731b2d77fe58fa3e

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp37-cp37m-win32.whl.

File metadata

  • Download URL: logwrap-9.0.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 75.3 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.7.9

File hashes

Hashes for logwrap-9.0.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 82a01d2d8df14f4bad98df5580244c203ecf0e77d349582514795a916c7f700a
MD5 d43436e8c8c500dfcc7c191e2d98d8ec
BLAKE2b-256 693a03318e51f200583fe89a14b2f3e8f6f4eba998dbc2b47175cff6bcaa2bd9

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 62c52b884622c792da8cff4ded207013fbfab7b68bbaf93e92fe37359c54af80
MD5 b03fc7bd4a69e94135dba096b99f3f36
BLAKE2b-256 5f5fe83311361ad57504c2b5afd23d86b1355b1952188df9ac5a624bcd7b2561

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9d754290dba1e0e2362188a353633104ef7afb9103254d779451dd8445fd9811
MD5 9f5906aafc0f8e3eff149c8364cb29b7
BLAKE2b-256 d9ea2ee415e0a07dc636c534d8369ee3f6a1ad0149d1b6385b85aa426f78a0a1

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 80239b9ec05912ab09a49e1ab7be7bdcc0e320fef42c0972781378a39bf80715
MD5 f0e1a12fea0570cf0682d038d4e45acd
BLAKE2b-256 5b440fb3401aedf80a550ec0be31e25d92edfe2b8b7a695bbce38a7b9c7e06b6

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 4b7ae7244e00965b59f1f42f35a958aec964fbbef5dc690e65280aa6b0619a45
MD5 cae634ade43177d90bcab3b425130a85
BLAKE2b-256 03685fa51594e95f9265e24b98827188f25d601d1387fb016e2bd4e4f46fe4c5

See more details on using hashes here.

File details

Details for the file logwrap-9.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for logwrap-9.0.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 95c33bccfe76b4a2109c29485d0da9f30fc3dcd93e22e5f7f8f1c5997c0186b9
MD5 62373bd2ff8ed507608b6a5e61bd8988
BLAKE2b-256 82da5405f5b138aa453d36ef565335d777c32b8fc785e4a29e3b805909668292

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page