loguru-0.6.0/ 0000755 0001750 0001750 00000000000 14175241406 012364 5 ustar nilesh nilesh loguru-0.6.0/README.rst 0000644 0001750 0001750 00000045413 14175241406 014062 0 ustar nilesh nilesh .. raw:: html
=========
**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 did, yet logging is fundamental to every application and eases the process of debugging. Using **Loguru** you have no excuse not to use logging from the start, this is as simple as ``from loguru import logger``.
Also, this library is intended to make Python logging less painful by adding a bunch of useful functionalities that solve caveats of the standard loggers. Using logs in your application should be an automatism, **Loguru** tries to make it both pleasant and powerful.
.. end-of-readme-intro
Installation
------------
::
pip install loguru
Features
--------
* `Ready to use out of the box without boilerplate`_
* `No Handler, no Formatter, no Filter: one function to rule them all`_
* `Easier file logging with rotation / retention / compression`_
* `Modern string formatting using braces style`_
* `Exceptions catching within threads or main`_
* `Pretty logging with colors`_
* `Asynchronous, Thread-safe, Multiprocess-safe`_
* `Fully descriptive exceptions`_
* `Structured logging as needed`_
* `Lazy evaluation of expensive functions`_
* `Customizable levels`_
* `Better datetime handling`_
* `Suitable for scripts and libraries`_
* `Entirely compatible with standard logging`_
* `Personalizable defaults through environment variables`_
* `Convenient parser`_
* `Exhaustive notifier`_
* |strike| `10x faster than built-in logging`_ |/strike|
Take the tour
-------------
.. highlight:: python3
.. |logger| replace:: ``logger``
.. _logger: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger
.. |add| replace:: ``add()``
.. _add: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.add
.. |remove| replace:: ``remove()``
.. _remove: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.remove
.. |complete| replace:: ``complete()``
.. _complete: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.complete
.. |catch| replace:: ``catch()``
.. _catch: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.catch
.. |bind| replace:: ``bind()``
.. _bind: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.bind
.. |contextualize| replace:: ``contextualize()``
.. _contextualize: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.contextualize
.. |patch| replace:: ``patch()``
.. _patch: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.patch
.. |opt| replace:: ``opt()``
.. _opt: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.opt
.. |trace| replace:: ``trace()``
.. _trace: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.trace
.. |success| replace:: ``success()``
.. _success: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.success
.. |level| replace:: ``level()``
.. _level: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.level
.. |configure| replace:: ``configure()``
.. _configure: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.configure
.. |disable| replace:: ``disable()``
.. _disable: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.disable
.. |enable| replace:: ``enable()``
.. _enable: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.enable
.. |parse| replace:: ``parse()``
.. _parse: https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.parse
.. _sinks: https://loguru.readthedocs.io/en/stable/api/logger.html#sink
.. _record dict: https://loguru.readthedocs.io/en/stable/api/logger.html#record
.. _log messages: https://loguru.readthedocs.io/en/stable/api/logger.html#message
.. _easily configurable: https://loguru.readthedocs.io/en/stable/api/logger.html#file
.. _markup tags: https://loguru.readthedocs.io/en/stable/api/logger.html#color
.. _fixes it: https://loguru.readthedocs.io/en/stable/api/logger.html#time
.. _No problem: https://loguru.readthedocs.io/en/stable/api/logger.html#env
.. _logging levels: https://loguru.readthedocs.io/en/stable/api/logger.html#levels
.. |better_exceptions| replace:: ``better_exceptions``
.. _better_exceptions: https://github.com/Qix-/better-exceptions
.. |notifiers| replace:: ``notifiers``
.. _notifiers: https://github.com/notifiers/notifiers
Ready to use out of the box without boilerplate
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The main concept of `Loguru` is that **there is one and only one** |logger|_.
For convenience, it is pre-configured and outputs to ``stderr`` to begin with (but that's entirely configurable).
::
from loguru import logger
logger.debug("That's it, beautiful and simple logging!")
The |logger|_ is just an interface which dispatches log messages to configured handlers. Simple, right?
No Handler, no Formatter, no Filter: one function to rule them all
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
How to add a handler? How to set up logs formatting? How to filter messages? How to set level?
One answer: the |add|_ function.
::
logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
This function should be used to register sinks_ which are responsible for managing `log messages`_ contextualized with a `record dict`_. A sink can take many forms: a simple function, a string path, a file-like object, a coroutine function or a built-in Handler.
Note that you may also |remove|_ a previously added handler by using the identifier returned while adding it. This is particularly useful if you want to supersede the default ``stderr`` handler: just call ``logger.remove()`` to make a fresh start.
Easier file logging with rotation / retention / compression
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
If you want to send logged messages to a file, you just have to use a string path as the sink. It can be automatically timed too for convenience::
logger.add("file_{time}.log")
It is also `easily configurable`_ if you need rotating logger, if you want to remove older logs, or if you wish to compress your files at closure.
::
logger.add("file_1.log", rotation="500 MB") # Automatically rotate too big file
logger.add("file_2.log", rotation="12:00") # New file is created each day at noon
logger.add("file_3.log", rotation="1 week") # Once the file is too old, it's rotated
logger.add("file_X.log", retention="10 days") # Cleanup after some time
logger.add("file_Y.log", compression="zip") # Save some loved space
Modern string formatting using braces style
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
`Loguru` favors the much more elegant and powerful ``{}`` formatting over ``%``, logging functions are actually equivalent to ``str.format()``.
::
logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")
Exceptions catching within threads or main
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Have you ever seen your program crashing unexpectedly without seeing anything in the log file? Did you ever notice that exceptions occurring in threads were not logged? This can be solved using the |catch|_ decorator / context manager which ensures that any error is correctly propagated to the |logger|_.
::
@logger.catch
def my_function(x, y, z):
# An error? It's caught anyway!
return 1 / (x + y + z)
Pretty logging with colors
^^^^^^^^^^^^^^^^^^^^^^^^^^
`Loguru` automatically adds colors to your logs if your terminal is compatible. You can define your favorite style by using `markup tags`_ in the sink format.
::
logger.add(sys.stdout, colorize=True, format="{time} {message} ")
Asynchronous, Thread-safe, Multiprocess-safe
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
All sinks added to the |logger|_ are thread-safe by default. They are not multiprocess-safe, but you can ``enqueue`` the messages to ensure logs integrity. This same argument can also be used if you want async logging.
::
logger.add("somefile.log", enqueue=True)
Coroutine functions used as sinks are also supported and should be awaited with |complete|_.
Fully descriptive exceptions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Logging exceptions that occur in your code is important to track bugs, but it's quite useless if you don't know why it failed. `Loguru` helps you identify problems by allowing the entire stack trace to be displayed, including values of variables (thanks |better_exceptions|_ for this!).
The code::
logger.add("out.log", backtrace=True, diagnose=True) # Caution, may leak sensitive data in prod
def func(a, b):
return a / b
def nested(c):
try:
func(5, c)
except ZeroDivisionError:
logger.exception("What?!")
nested(0)
Would result in:
.. code-block:: none
2018-07-17 01:38:43.975 | ERROR | __main__:nested:10 - What?!
Traceback (most recent call last):
File "test.py", line 12, in
nested(0)
└
> File "test.py", line 8, in nested
func(5, c)
│ └ 0
└
File "test.py", line 4, in func
return a / b
│ └ 0
└ 5
ZeroDivisionError: division by zero
Structured logging as needed
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Want your logs to be serialized for easier parsing or to pass them around? Using the ``serialize`` argument, each log message will be converted to a JSON string before being sent to the configured sink.
::
logger.add(custom_sink_function, serialize=True)
Using |bind|_ you can contextualize your logger messages by modifying the `extra` record attribute.
::
logger.add("file.log", format="{extra[ip]} {extra[user]} {message}")
context_logger = logger.bind(ip="192.168.0.1", user="someone")
context_logger.info("Contextualize your logger easily")
context_logger.bind(user="someone_else").info("Inline binding of extra attribute")
context_logger.info("Use kwargs to add context during formatting: {user}", user="anybody")
It is possible to modify a context-local state temporarily with |contextualize|_:
::
with logger.contextualize(task=task_id):
do_something()
logger.info("End of task")
You can also have more fine-grained control over your logs by combining |bind|_ and ``filter``:
::
logger.add("special.log", filter=lambda record: "special" in record["extra"])
logger.debug("This message is not logged to the file")
logger.bind(special=True).info("This message, though, is logged to the file!")
Finally, the |patch|_ method allows dynamic values to be attached to the record dict of each new message:
::
logger.add(sys.stderr, format="{extra[utc]} {message}")
logger = logger.patch(lambda record: record["extra"].update(utc=datetime.utcnow()))
Lazy evaluation of expensive functions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sometime you would like to log verbose information without performance penalty in production, you can use the |opt|_ method to achieve this.
::
logger.opt(lazy=True).debug("If sink level <= DEBUG: {x}", x=lambda: expensive_function(2**64))
# By the way, "opt()" serves many usages
logger.opt(exception=True).info("Error stacktrace added to the log message (tuple accepted too)")
logger.opt(colors=True).info("Per message colors ")
logger.opt(record=True).info("Display values from the record (eg. {record[thread]})")
logger.opt(raw=True).info("Bypass sink formatting\n")
logger.opt(depth=1).info("Use parent stack context (useful within wrapped functions)")
logger.opt(capture=False).info("Keyword arguments not added to {dest} dict", dest="extra")
Customizable levels
^^^^^^^^^^^^^^^^^^^
`Loguru` comes with all standard `logging levels`_ to which |trace|_ and |success|_ are added. Do you need more? Then, just create it by using the |level|_ function.
::
new_level = logger.level("SNAKY", no=38, color="", icon="🐍")
logger.log("SNAKY", "Here we go!")
Better datetime handling
^^^^^^^^^^^^^^^^^^^^^^^^
The standard logging is bloated with arguments like ``datefmt`` or ``msecs``, ``%(asctime)s`` and ``%(created)s``, naive datetimes without timezone information, not intuitive formatting, etc. `Loguru` `fixes it`_:
::
logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}")
Suitable for scripts and libraries
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Using the logger in your scripts is easy, and you can |configure|_ it at start. To use `Loguru` from inside a library, remember to never call |add|_ but use |disable|_ instead so logging functions become no-op. If a developer wishes to see your library's logs, he can |enable|_ it again.
::
# For scripts
config = {
"handlers": [
{"sink": sys.stdout, "format": "{time} - {message}"},
{"sink": "file.log", "serialize": True},
],
"extra": {"user": "someone"}
}
logger.configure(**config)
# For libraries
logger.disable("my_library")
logger.info("No matter added sinks, this message is not displayed")
logger.enable("my_library")
logger.info("This message however is propagated to the sinks")
Entirely compatible with standard logging
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Wish to use built-in logging ``Handler`` as a `Loguru` sink?
::
handler = logging.handlers.SysLogHandler(address=('localhost', 514))
logger.add(handler)
Need to propagate `Loguru` messages to standard `logging`?
::
class PropagateHandler(logging.Handler):
def emit(self, record):
logging.getLogger(record.name).handle(record)
logger.add(PropagateHandler(), format="{message}")
Want to intercept standard `logging` messages toward your `Loguru` sinks?
::
class InterceptHandler(logging.Handler):
def emit(self, record):
# Get corresponding Loguru level if it exists
try:
level = logger.level(record.levelname).name
except ValueError:
level = record.levelno
# Find caller from where originated the logged message
frame, depth = logging.currentframe(), 2
while frame.f_code.co_filename == logging.__file__:
frame = frame.f_back
depth += 1
logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage())
logging.basicConfig(handlers=[InterceptHandler()], level=0)
Personalizable defaults through environment variables
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Don't like the default logger formatting? Would prefer another ``DEBUG`` color? `No problem`_::
# Linux / OSX
export LOGURU_FORMAT="{time} | {message} "
# Windows
setx LOGURU_DEBUG_COLOR ""
Convenient parser
^^^^^^^^^^^^^^^^^
It is often useful to extract specific information from generated logs, this is why `Loguru` provides a |parse|_ method which helps to deal with logs and regexes.
::
pattern = r"(?P.*) - (?P[0-9]+) - (?P.*)" # Regex with named groups
caster_dict = dict(time=dateutil.parser.parse, level=int) # Transform matching groups
for groups in logger.parse("file.log", pattern, cast=caster_dict):
print("Parsed:", groups)
# {"level": 30, "message": "Log example", "time": datetime(2018, 12, 09, 11, 23, 55)}
Exhaustive notifier
^^^^^^^^^^^^^^^^^^^
`Loguru` can easily be combined with the great |notifiers|_ library (must be installed separately) to receive an e-mail when your program fail unexpectedly or to send many other kind of notifications.
::
import notifiers
params = {
"username": "you@gmail.com",
"password": "abc123",
"to": "dest@gmail.com"
}
# Send a single notification
notifier = notifiers.get_notifier("gmail")
notifier.notify(message="The application is running!", **params)
# Be alerted on each error message
from notifiers.logging import NotificationHandler
handler = NotificationHandler("gmail", defaults=params)
logger.add(handler, level="ERROR")
|strike|
10x faster than built-in logging
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|/strike|
Although logging impact on performances is in most cases negligible, a zero-cost logger would allow to use it anywhere without much concern. In an upcoming release, Loguru's critical functions will be implemented in C for maximum speed.
.. |strike| raw:: html
.. |/strike| raw:: html
.. end-of-readme-usage
Documentation
-------------
* `API Reference `_
* `Help & Guides `_
* `Type hints `_
* `Contributing `_
* `License `_
* `Changelog `_
loguru-0.6.0/CONTRIBUTING.rst 0000644 0001750 0001750 00000005255 14175241406 015034 0 ustar nilesh nilesh Thank you for considering improving `Loguru`, any contribution is much welcome!
.. _minimal reproducible example: https://stackoverflow.com/help/mcve
.. _open a new issue: https://github.com/Delgan/loguru/issues/new
.. _open a pull request: https://github.com/Delgan/loguru/compare
.. _PEP 8: https://www.python.org/dev/peps/pep-0008/
.. _Loguru: https://github.com/Delgan/loguru
Asking questions
----------------
If you have any question about `Loguru`, if you are seeking for help, or if you would like to suggest a new feature, you are encouraged to `open a new issue`_ so we can discuss it. Bringing new ideas and pointing out elements needing clarification allows to make this library always better!
Reporting a bug
---------------
If you encountered an unexpected behavior using `Loguru`, please `open a new issue`_ and describe the problem you have spotted. Be as specific as possible in the description of the trouble so we can easily analyse it and quickly fix it.
An ideal bug report includes:
* The Python version you are using
* The `Loguru` version you are using (you can find it with ``print(loguru.__version__)``)
* Your operating system name and version (Linux, MacOS, Windows)
* Your development environment and local setup (IDE, Terminal, project context, any relevant information that could be useful)
* Some `minimal reproducible example`_
Implementing changes
--------------------
If you are willing to enhance `Loguru` by implementing non-trivial changes, please `open a new issue`_ first to keep a reference about why such modifications are made (and potentially avoid unneeded work). Then, the workflow would look as follows:
1. Fork the `Loguru`_ project from GitHub
2. Clone the repository locally::
$ git clone git@github.com:your_name_here/loguru.git
$ cd loguru
3. Activate your virtual environment::
$ python -m virtualenv env
$ source env/bin/activate
4. Create a new branch from ``master``::
$ git checkout master
$ git branch fix_bug
$ git checkout fix_bug
5. Install `Loguru` in development mode::
$ pip install -e .[dev]
6. Implement the modifications wished. During the process of development, honor `PEP 8`_ as much as possible.
7. Add unit tests (don't hesitate to be exhaustive!) and ensure none are failing using::
$ tox
8. Remember to update documentation if required
9. Update the ``CHANGELOG.rst`` file with what you improved
10. ``add`` and ``commit`` your changes, ``rebase`` your branch on ``master``, ``push`` your local project::
$ git add .
$ git commit -m 'Add succinct explanation of what changed'
$ git rebase master
$ git push origin fix_bug
11. Finally, `open a pull request`_ before getting it merged!
loguru-0.6.0/tox.ini 0000644 0001750 0001750 00000001267 14175241406 013705 0 ustar nilesh nilesh [tox]
skip_missing_interpreters = True
envlist = py{35,36,37,38,39,310,py3}
[testenv]
setenv = PYTHONPATH = {toxinidir}
extras = dev
commands =
flake8 --exit-zero loguru tests docs setup.py
pytest --cov loguru/ --cov-report=xml
coverage report -m
[testenv:format]
commands =
isort --profile black -l 100 loguru tests setup.py
black -l 100 loguru tests setup.py
[pytest]
addopts = -l
[flake8]
max_line_length = 100
max_doc_length = 100
ignore =
* W503 # Line break before binary operator (PEP8 now recommend to break after binary operator)
* E203 # Whitespace before ":" in slices
exclude =
tests/exceptions/source
[coverage:html]
title = Loguru Coverage
loguru-0.6.0/setup.py 0000644 0001750 0001750 00000005232 14175241406 014100 0 ustar nilesh nilesh import re
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
with open("loguru/__init__.py", "r") as file:
regex_version = r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]'
version = re.search(regex_version, file.read(), re.MULTILINE).group(1)
with open("README.rst", "rb") as file:
readme = file.read().decode("utf-8")
setup(
name="loguru",
version=version,
packages=["loguru"],
package_data={"loguru": ["__init__.pyi", "py.typed"]},
description="Python logging made (stupidly) simple",
long_description=readme,
long_description_content_type="text/x-rst",
author="Delgan",
author_email="delgan.py@gmail.com",
url="https://github.com/Delgan/loguru",
download_url="https://github.com/Delgan/loguru/archive/{}.tar.gz".format(version),
project_urls={
"Changelog": "https://github.com/Delgan/loguru/blob/master/CHANGELOG.rst",
"Documentation": "https://loguru.readthedocs.io/en/stable/index.html",
},
keywords=["loguru", "logging", "logger", "log"],
license="MIT license",
classifiers=[
"Development Status :: 5 - Production/Stable",
"Topic :: System :: Logging",
"Intended Audience :: Developers",
"Natural Language :: English",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: Implementation :: PyPy",
"Programming Language :: Python :: Implementation :: CPython",
],
install_requires=[
"colorama>=0.3.4 ; sys_platform=='win32'",
"aiocontextvars>=0.2.0 ; python_version<'3.7'",
"win32-setctime>=1.0.0 ; sys_platform=='win32'",
],
extras_require={
"dev": [
"black>=19.10b0 ; python_version>='3.6'",
"colorama>=0.3.4",
"docutils==0.16",
"flake8>=3.7.7",
"isort>=5.1.1 ; python_version>='3.6'",
"tox>=3.9.0",
"pytest>=4.6.2",
"pytest-cov>=2.7.1",
"Sphinx>=4.1.1 ; python_version>='3.6'",
"sphinx-autobuild>=0.7.1 ; python_version>='3.6'",
"sphinx-rtd-theme>=0.4.3 ; python_version>='3.6'",
]
},
python_requires=">=3.5",
)
loguru-0.6.0/tests/ 0000755 0001750 0001750 00000000000 14175241406 013526 5 ustar nilesh nilesh loguru-0.6.0/tests/test_add_option_colorize.py 0000644 0001750 0001750 00000013754 14175241406 021177 0 ustar nilesh nilesh import os
import sys
from unittest.mock import MagicMock
import pytest
import loguru
from loguru import logger
from .conftest import parse
class Stream:
def __init__(self, tty):
self.out = ""
self.tty = tty
self.closed = False
def write(self, m):
self.out += m
def isatty(self):
if self.tty is None:
raise RuntimeError
else:
return self.tty
def flush(self):
pass
@pytest.mark.parametrize(
"format, message, expected",
[
("{message} ", "Foo", parse("Foo \n")),
(lambda _: "{message} ", "Bar", parse("Bar ")),
("{message}", "Baz ", "Baz \n"),
("{{{message:} }}", "A", parse("{A }\n")),
],
)
def test_colorized_format(format, message, expected, writer):
logger.add(writer, format=format, colorize=True)
logger.debug(message)
assert writer.read() == expected
@pytest.mark.parametrize(
"format, message, expected",
[
("{message} ", "Foo", "Foo\n"),
(lambda _: "{message} ", "Bar", "Bar"),
("{message}", "Baz ", "Baz \n"),
("{{{message:} }}", "A", "{A}\n"),
],
)
def test_decolorized_format(format, message, expected, writer):
logger.add(writer, format=format, colorize=False)
logger.debug(message)
assert writer.read() == expected
@pytest.fixture
def patch_colorama(monkeypatch):
AnsiToWin32_instance = MagicMock()
AnsiToWin32_class = MagicMock(return_value=AnsiToWin32_instance)
winapi_test = MagicMock(return_value=True)
win32 = MagicMock(winapi_test=winapi_test)
colorama = MagicMock(AnsiToWin32=AnsiToWin32_class, win32=win32)
monkeypatch.setitem(sys.modules, "colorama", colorama)
monkeypatch.setitem(sys.modules, "colorama.win32", win32)
yield colorama
@pytest.mark.parametrize("colorize", [True, False, None])
@pytest.mark.parametrize("tty", [True, False])
@pytest.mark.parametrize("replace_original", [True, False])
def test_colorize_stream(patch_colorama, monkeypatch, colorize, tty, replace_original):
stream = Stream(tty)
monkeypatch.delenv("TERM", raising=False)
monkeypatch.delenv("PYCHARM_HOSTED", raising=False)
monkeypatch.setattr(os, "name", "unix")
if replace_original:
monkeypatch.setattr(sys, "__stdout__", stream)
logger.add(stream, format="{message} ", colorize=colorize, catch=False)
logger.debug("Message")
winapi_test = patch_colorama.win32.winapi_test
stream_write = patch_colorama.AnsiToWin32().stream.write
assert not stream_write.called
assert not winapi_test.called
if colorize or (colorize is None and tty):
assert stream.out == parse("Message \n")
else:
assert stream.out == "Message\n"
@pytest.mark.parametrize("colorize", [True, False, None])
@pytest.mark.parametrize("tty", [True, False])
@pytest.mark.parametrize("replace_original", [True, False])
def test_colorize_stream_windows(patch_colorama, monkeypatch, colorize, tty, replace_original):
stream = Stream(tty)
monkeypatch.delenv("TERM", raising=False)
monkeypatch.delenv("PYCHARM_HOSTED", raising=False)
monkeypatch.setattr(os, "name", "nt")
if replace_original:
monkeypatch.setattr(sys, "__stdout__", stream)
logger.add(stream, format="{message} ", colorize=colorize, catch=False)
logger.debug("Message")
winapi_test = patch_colorama.win32.winapi_test
stream_write = patch_colorama.AnsiToWin32().stream.write
if replace_original and (colorize or (colorize is None and tty)):
assert winapi_test.called
assert stream_write.called
else:
assert not winapi_test.called
assert not stream_write.called
@pytest.mark.parametrize("colorize", [True, False, None])
def test_isatty_error(monkeypatch, colorize):
monkeypatch.setattr(os, "name", "posix")
stream = Stream(None)
logger.add(stream, format="{message} ", colorize=colorize)
logger.debug("Message")
if colorize is True:
assert stream.out == parse("Message \n")
else:
assert stream.out == "Message\n"
@pytest.mark.parametrize("stream", [sys.__stdout__, sys.__stderr__])
def test_pycharm_fixed(monkeypatch, stream):
monkeypatch.setitem(os.environ, "PYCHARM_HOSTED", "1")
monkeypatch.setattr(stream, "isatty", lambda: False)
assert not stream.isatty()
assert loguru._colorama.should_colorize(stream)
@pytest.mark.parametrize("stream", [None, Stream(False), Stream(None)])
def test_pycharm_ignored(monkeypatch, stream):
monkeypatch.setitem(os.environ, "PYCHARM_HOSTED", "1")
assert not loguru._colorama.should_colorize(stream)
@pytest.mark.parametrize("stream", [sys.__stdout__, sys.__stderr__])
def test_mintty_fixed_windows(monkeypatch, stream):
monkeypatch.setattr(os, "name", "nt")
monkeypatch.setitem(os.environ, "TERM", "xterm")
monkeypatch.setattr(stream, "isatty", lambda: False)
assert not stream.isatty()
assert loguru._colorama.should_colorize(stream)
@pytest.mark.parametrize("stream", [None, Stream(False), Stream(None)])
def test_mintty_ignored_windows(monkeypatch, stream):
monkeypatch.setattr(os, "name", "nt")
monkeypatch.setitem(os.environ, "TERM", "xterm")
assert not loguru._colorama.should_colorize(stream)
@pytest.mark.parametrize("stream", [sys.__stdout__, sys.__stderr__])
def test_mintty_not_fixed_linux(monkeypatch, stream):
monkeypatch.setattr(os, "name", "posix")
monkeypatch.setitem(os.environ, "TERM", "xterm")
monkeypatch.setattr(stream, "isatty", lambda: False)
assert not stream.isatty()
assert not loguru._colorama.should_colorize(stream)
@pytest.mark.parametrize("stream", [None, Stream(False), Stream(None)])
def test_mintty_ignored_linux(monkeypatch, stream):
monkeypatch.setattr(os, "name", "posix")
monkeypatch.setitem(os.environ, "TERM", "xterm")
assert not loguru._colorama.should_colorize(stream)
loguru-0.6.0/tests/test_filesink_delay.py 0000644 0001750 0001750 00000006306 14175241406 020126 0 ustar nilesh nilesh import re
import time
from loguru import logger
def test_file_not_delayed(tmpdir):
file = tmpdir.join("test.log")
logger.add(str(file), format="{message}", delay=False)
assert file.check(exists=1)
assert file.read() == ""
logger.debug("Not delayed")
assert file.read() == "Not delayed\n"
def test_file_delayed(tmpdir):
file = tmpdir.join("test.log")
logger.add(str(file), format="{message}", delay=True)
assert file.check(exists=0)
logger.debug("Delayed")
assert file.read() == "Delayed\n"
def test_compression(tmpdir):
i = logger.add(str(tmpdir.join("file.log")), compression="gz", delay=True)
logger.debug("a")
logger.remove(i)
assert len(tmpdir.listdir()) == 1
assert tmpdir.join("file.log.gz").check(exists=1)
def test_compression_early_remove(tmpdir):
i = logger.add(str(tmpdir.join("file.log")), compression="gz", delay=True)
logger.remove(i)
assert len(tmpdir.listdir()) == 0
def test_retention(tmpdir):
for i in range(5):
tmpdir.join("test.2020-01-01_01-01-%d_000001.log" % i).write("test")
i = logger.add(str(tmpdir.join("test.log")), retention=0, delay=True)
logger.debug("a")
logger.remove(i)
assert len(tmpdir.listdir()) == 0
def test_retention_early_remove(tmpdir):
for i in range(5):
tmpdir.join("test.2020-01-01_01-01-%d_000001.log" % i).write("test")
i = logger.add(str(tmpdir.join("test.log")), retention=0, delay=True)
logger.remove(i)
assert len(tmpdir.listdir()) == 0
def test_rotation(tmpdir):
i = logger.add(str(tmpdir.join("file.log")), rotation=0, delay=True, format="{message}")
logger.debug("a")
logger.remove(i)
files = sorted(tmpdir.listdir())
assert len(files) == 2
assert re.match(r"file\.[0-9-_]+\.log", files[0].basename)
assert files[1].basename == "file.log"
assert files[0].read() == ""
assert files[1].read() == "a\n"
def test_rotation_early_remove(tmpdir):
i = logger.add(str(tmpdir.join("file.log")), rotation=0, delay=True, format="{message}")
logger.remove(i)
assert len(tmpdir.listdir()) == 0
def test_rotation_and_retention(tmpdir):
filepath = str(tmpdir.join("file.log"))
logger.add(filepath, rotation=30, retention=2, delay=True, format="{message}")
for i in range(1, 10):
time.sleep(0.02)
logger.info(str(i) * 20)
files = sorted(tmpdir.listdir())
assert len(files) == 3
assert all(re.match(r"file\.[0-9-_]+\.log", f.basename) for f in files[:2])
assert files[2].basename == "file.log"
assert files[0].read() == "7" * 20 + "\n"
assert files[1].read() == "8" * 20 + "\n"
assert files[2].read() == "9" * 20 + "\n"
def test_rotation_and_retention_timed_file(tmpdir):
filepath = str(tmpdir.join("file.{time}.log"))
logger.add(filepath, rotation=30, retention=2, delay=True, format="{message}")
for i in range(1, 10):
time.sleep(0.02)
logger.info(str(i) * 20)
files = sorted(tmpdir.listdir())
assert len(files) == 3
assert all(re.match(r"file\.[0-9-_]+\.log", f.basename) for f in files)
assert files[0].read() == "7" * 20 + "\n"
assert files[1].read() == "8" * 20 + "\n"
assert files[2].read() == "9" * 20 + "\n"
loguru-0.6.0/tests/test_exceptions_catch.py 0000644 0001750 0001750 00000024765 14175241406 020500 0 ustar nilesh nilesh import asyncio
import site
import sys
import sysconfig
import types
import pytest
import loguru
from loguru import logger
@pytest.mark.parametrize("diagnose", [False, True])
def test_caret_not_masked(writer, diagnose):
logger.add(writer, backtrace=True, diagnose=diagnose, colorize=False, format="")
@logger.catch
def f(n):
1 / n
f(n - 1)
f(30)
assert sum(line.startswith("> ") for line in writer.read().splitlines()) == 1
@pytest.mark.parametrize("diagnose", [False, True])
def test_no_caret_if_no_backtrace(writer, diagnose):
logger.add(writer, backtrace=False, diagnose=diagnose, colorize=False, format="")
@logger.catch
def f(n):
1 / n
f(n - 1)
f(30)
assert sum(line.startswith("> ") for line in writer.read().splitlines()) == 0
@pytest.mark.parametrize("encoding", ["ascii", "UTF8", None, "unknown-encoding", "", object()])
def test_sink_encoding(writer, encoding):
class Writer:
def __init__(self, encoding):
self.encoding = encoding
self.output = ""
def write(self, message):
self.output += message
writer = Writer(encoding)
logger.add(writer, backtrace=True, diagnose=True, colorize=False, format="", catch=False)
def foo(a, b):
a / b
def bar(c):
foo(c, 0)
try:
bar(4)
except ZeroDivisionError:
logger.exception("")
assert writer.output.endswith("ZeroDivisionError: division by zero\n")
def test_file_sink_ascii_encoding(tmpdir):
file = tmpdir.join("test.log")
logger.add(str(file), format="", encoding="ascii", errors="backslashreplace", catch=False)
a = "天"
try:
"天" * a
except Exception:
logger.exception("")
logger.remove()
result = file.read_text("ascii")
assert result.count('"\\u5929" * a') == 1
assert result.count("-> '\\u5929'") == 1
def test_file_sink_utf8_encoding(tmpdir):
file = tmpdir.join("test.log")
logger.add(str(file), format="", encoding="utf8", errors="strict", catch=False)
a = "天"
try:
"天" * a
except Exception:
logger.exception("")
logger.remove()
result = file.read_text("utf8")
assert result.count('"天" * a') == 1
assert result.count("└ '天'") == 1
def test_has_sys_real_prefix(writer, monkeypatch):
monkeypatch.setattr(sys, "real_prefix", "/foo/bar/baz", raising=False)
logger.add(writer, backtrace=False, diagnose=True, colorize=False, format="")
try:
1 / 0
except ZeroDivisionError:
logger.exception("")
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
def test_no_sys_real_prefix(writer, monkeypatch):
monkeypatch.delattr(sys, "real_prefix", raising=False)
logger.add(writer, backtrace=False, diagnose=True, colorize=False, format="")
try:
1 / 0
except ZeroDivisionError:
logger.exception("")
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
def test_has_site_getsitepackages(writer, monkeypatch):
monkeypatch.setattr(site, "getsitepackages", lambda: ["foo", "bar", "baz"], raising=False)
logger.add(writer, backtrace=False, diagnose=True, colorize=False, format="")
try:
1 / 0
except ZeroDivisionError:
logger.exception("")
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
def test_no_site_getsitepackages(writer, monkeypatch):
monkeypatch.delattr(site, "getsitepackages", raising=False)
logger.add(writer, backtrace=False, diagnose=True, colorize=False, format="")
try:
1 / 0
except ZeroDivisionError:
logger.exception("")
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
def test_user_site_is_path(writer, monkeypatch):
monkeypatch.setattr(site, "USER_SITE", "/foo/bar/baz")
logger.add(writer, backtrace=False, diagnose=True, colorize=False, format="")
try:
1 / 0
except ZeroDivisionError:
logger.exception("")
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
def test_user_site_is_none(writer, monkeypatch):
monkeypatch.setattr(site, "USER_SITE", None)
logger.add(writer, backtrace=False, diagnose=True, colorize=False, format="")
try:
1 / 0
except ZeroDivisionError:
logger.exception("")
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
def test_sysconfig_get_path_return_path(writer, monkeypatch):
monkeypatch.setattr(sysconfig, "get_path", lambda *a, **k: "/foo/bar/baz")
logger.add(writer, backtrace=False, diagnose=True, colorize=False, format="")
try:
1 / 0
except ZeroDivisionError:
logger.exception("")
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
def test_sysconfig_get_path_return_none(writer, monkeypatch):
monkeypatch.setattr(sysconfig, "get_path", lambda *a, **k: None)
logger.add(writer, backtrace=False, diagnose=True, colorize=False, format="")
try:
1 / 0
except ZeroDivisionError:
logger.exception("")
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
def test_no_exception(writer):
logger.add(writer, backtrace=False, diagnose=False, colorize=False, format="{message}")
logger.exception("No Error.")
assert writer.read() in (
"No Error.\nNoneType\n",
"No Error.\nNoneType: None\n", # Old versions of Python 3.5
)
def test_exception_is_none():
err = object()
def writer(msg):
nonlocal err
err = msg.record["exception"]
logger.add(writer)
logger.error("No exception")
assert err is None
def test_exception_is_tuple():
exception = None
def writer(msg):
nonlocal exception
exception = msg.record["exception"]
logger.add(writer, catch=False)
try:
1 / 0
except ZeroDivisionError:
logger.exception("Exception")
reference = sys.exc_info()
t_1, v_1, tb_1 = exception
t_2, v_2, tb_2 = (x for x in exception)
t_3, v_3, tb_3 = exception[0], exception[1], exception[2]
t_4, v_4, tb_4 = exception.type, exception.value, exception.traceback
assert isinstance(exception, tuple)
assert len(exception) == 3
assert exception == reference
assert reference == exception
assert not (exception != reference)
assert not (reference != exception)
assert all(t == ZeroDivisionError for t in (t_1, t_2, t_3, t_4))
assert all(isinstance(v, ZeroDivisionError) for v in (v_1, v_2, v_3, v_4))
assert all(isinstance(tb, types.TracebackType) for tb in (tb_1, tb_2, tb_3, tb_4))
@pytest.mark.parametrize(
"exception", [ZeroDivisionError, ArithmeticError, (ValueError, ZeroDivisionError)]
)
def test_exception_not_raising(writer, exception):
logger.add(writer)
@logger.catch(exception)
def a():
1 / 0
a()
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
@pytest.mark.parametrize("exception", [ValueError, ((SyntaxError, TypeError))])
def test_exception_raising(writer, exception):
logger.add(writer)
@logger.catch(exception=exception)
def a():
1 / 0
with pytest.raises(ZeroDivisionError):
a()
assert writer.read() == ""
@pytest.mark.parametrize(
"exclude", [ZeroDivisionError, ArithmeticError, (ValueError, ZeroDivisionError)]
)
@pytest.mark.parametrize("exception", [BaseException, ZeroDivisionError])
def test_exclude_exception_raising(writer, exclude, exception):
logger.add(writer)
@logger.catch(exception, exclude=exclude)
def a():
1 / 0
with pytest.raises(ZeroDivisionError):
a()
assert writer.read() == ""
@pytest.mark.parametrize("exclude", [ValueError, ((SyntaxError, TypeError))])
@pytest.mark.parametrize("exception", [BaseException, ZeroDivisionError])
def test_exclude_exception_not_raising(writer, exclude, exception):
logger.add(writer)
@logger.catch(exception, exclude=exclude)
def a():
1 / 0
a()
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
def test_reraise(writer):
logger.add(writer)
@logger.catch(reraise=True)
def a():
1 / 0
with pytest.raises(ZeroDivisionError):
a()
assert writer.read().endswith("ZeroDivisionError: division by zero\n")
def test_onerror(writer):
is_error_valid = False
logger.add(writer, format="{message}")
def onerror(error):
nonlocal is_error_valid
logger.info("Called after logged message")
_, exception, _ = sys.exc_info()
is_error_valid = (error == exception) and isinstance(error, ZeroDivisionError)
@logger.catch(onerror=onerror)
def a():
1 / 0
a()
assert is_error_valid
assert writer.read().endswith(
"ZeroDivisionError: division by zero\n" "Called after logged message\n"
)
def test_onerror_with_reraise(writer):
called = False
logger.add(writer, format="{message}")
def onerror(_):
nonlocal called
called = True
with pytest.raises(ZeroDivisionError):
with logger.catch(onerror=onerror, reraise=True):
1 / 0
assert called
def test_decorate_function(writer):
logger.add(writer, format="{message}", diagnose=False, backtrace=False, colorize=False)
@logger.catch
def a(x):
return 100 / x
assert a(50) == 2
assert writer.read() == ""
def test_decorate_coroutine(writer):
logger.add(writer, format="{message}", diagnose=False, backtrace=False, colorize=False)
@logger.catch
async def foo(a, b):
return a + b
result = asyncio.run(foo(100, 5))
assert result == 105
assert writer.read() == ""
def test_decorate_generator(writer):
@logger.catch
def foo(x, y, z):
yield x
yield y
return z
f = foo(1, 2, 3)
assert next(f) == 1
assert next(f) == 2
with pytest.raises(StopIteration, match=r"3"):
next(f)
def test_decorate_generator_with_error():
@logger.catch
def foo():
for i in range(3):
1 / (2 - i)
yield i
assert list(foo()) == [0, 1]
def test_default_with_function():
@logger.catch(default=42)
def foo():
1 / 0
assert foo() == 42
def test_default_with_generator():
@logger.catch(default=42)
def foo():
yield 1 / 0
with pytest.raises(StopIteration, match=r"42"):
next(foo())
def test_default_with_coroutine():
@logger.catch(default=42)
async def foo():
return 1 / 0
assert asyncio.run(foo()) == 42
loguru-0.6.0/tests/test_remove.py 0000644 0001750 0001750 00000005166 14175241406 016444 0 ustar nilesh nilesh import sys
import time
import pytest
from loguru import logger
class StopSinkError:
def write(self, message):
print(message, end="")
def stop(self):
raise Exception("Stop error")
def test_remove_all(tmpdir, writer, capsys):
file = tmpdir.join("test.log")
logger.debug("This shouldn't be printed.")
logger.add(str(file), format="{message}")
logger.add(sys.stdout, format="{message}")
logger.add(sys.stderr, format="{message}")
logger.add(writer, format="{message}")
message = "some message"
expected = message + "\n"
logger.debug(message)
logger.remove()
logger.debug("This shouldn't be printed neither.")
out, err = capsys.readouterr()
assert file.read() == expected
assert out == expected
assert err == expected
assert writer.read() == expected
def test_remove_simple(writer):
i = logger.add(writer, format="{message}")
logger.debug("1")
logger.remove(i)
logger.debug("2")
assert writer.read() == "1\n"
def test_remove_enqueue(writer):
i = logger.add(writer, format="{message}", enqueue=True)
logger.debug("1")
time.sleep(0.1)
logger.remove(i)
logger.debug("2")
assert writer.read() == "1\n"
def test_remove_enqueue_filesink(tmpdir):
file = tmpdir.join("test.log")
i = logger.add(str(file), format="{message}", enqueue=True)
logger.debug("1")
logger.remove(i)
assert file.read() == "1\n"
def test_exception_in_stop_during_remove_one(capsys):
i = logger.add(StopSinkError(), catch=False, format="{message}")
logger.info("A")
with pytest.raises(Exception, match=r"Stop error"):
logger.remove(i)
logger.info("Nope")
out, err = capsys.readouterr()
assert out == "A\n"
assert err == ""
def test_exception_in_stop_not_caught_during_remove_all(capsys):
logger.add(StopSinkError(), catch=False, format="{message}")
logger.add(StopSinkError(), catch=False, format="{message}")
with pytest.raises(Exception, match=r"Stop error"):
logger.remove()
logger.info("A")
with pytest.raises(Exception, match=r"Stop error"):
logger.remove()
logger.info("Nope")
out, err = capsys.readouterr()
assert out == "A\n"
assert err == ""
def test_invalid_handler_id_value(writer):
logger.add(writer)
with pytest.raises(ValueError, match=r"^There is no existing handler.*"):
logger.remove(42)
@pytest.mark.parametrize("handler_id", [sys.stderr, sys, object(), int])
def test_invalid_handler_id_type(handler_id):
with pytest.raises(TypeError, match=r"^Invalid handler id.*"):
logger.remove(handler_id)
loguru-0.6.0/tests/conftest.py 0000644 0001750 0001750 00000011132 14175241406 015723 0 ustar nilesh nilesh import asyncio
import contextlib
import logging
import os
import sys
import threading
import time
import traceback
import warnings
import pytest
import loguru
if sys.version_info < (3, 5, 3):
def run(coro):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
res = loop.run_until_complete(coro)
loop.close()
asyncio.set_event_loop(None)
return res
asyncio.run = run
elif sys.version_info < (3, 7):
def run(coro):
loop = asyncio.new_event_loop()
res = loop.run_until_complete(coro)
loop.close()
asyncio.set_event_loop(None)
return res
asyncio.run = run
def parse(text, *, strip=False, strict=True):
parser = loguru._colorizer.AnsiParser()
parser.feed(text)
tokens = parser.done(strict=strict)
if strip:
return parser.strip(tokens)
else:
return parser.colorize(tokens, "")
@contextlib.contextmanager
def default_threading_excepthook():
if not hasattr(threading, "excepthook"):
yield
return
# Pytest added "PytestUnhandledThreadExceptionWarning", we need to
# remove it temporarily for somes tests checking exceptions in threads.
def excepthook(args):
print("Exception in thread:", file=sys.stderr, flush=True)
traceback.print_exception(
args.exc_type, args.exc_value, args.exc_traceback, file=sys.stderr
)
old_excepthook = threading.excepthook
threading.excepthook = excepthook
yield
threading.excepthook = old_excepthook
@pytest.fixture(scope="session", autouse=True)
def check_env_variables():
for var in os.environ:
if var.startswith("LOGURU_"):
warnings.warn(
"A Loguru environment variable has been detected "
"and may interfere with the tests: '%s'" % var,
RuntimeWarning,
)
@pytest.fixture(autouse=True)
def reset_logger():
def reset():
loguru.logger.remove()
loguru.logger.__init__(
loguru._logger.Core(), None, 0, False, False, False, False, True, None, {}
)
loguru._logger.context.set({})
reset()
yield
reset()
@pytest.fixture
def writer():
def w(message):
w.written.append(message)
w.written = []
w.read = lambda: "".join(w.written)
w.clear = lambda: w.written.clear()
return w
@pytest.fixture
def sink_with_logger():
class SinkWithLogger:
def __init__(self, logger):
self.logger = logger
self.out = ""
def write(self, message):
self.logger.info(message)
self.out += message
return SinkWithLogger
@pytest.fixture
def monkeypatch_date(monkeypatch):
fix_struct = os.name == "nt" and sys.version_info < (3, 6)
def monkeypatch_date(year, month, day, hour, minute, second, microsecond, zone="UTC", offset=0):
dt = loguru._datetime.datetime(year, month, day, hour, minute, second, microsecond)
if fix_struct:
class StructTime:
def __init__(self, struct, tm_zone, tm_gmtoff):
self._struct = struct
self.tm_zone = tm_zone
self.tm_gmtoff = tm_gmtoff
def __getattr__(self, name):
return getattr(self._struct, name)
def __iter__(self):
return iter(self._struct)
struct = StructTime(time.struct_time([*dt.timetuple()]), zone, offset)
else:
struct = time.struct_time([*dt.timetuple()] + [zone, offset])
def patched_now(tz=None):
return dt
def patched_localtime(t):
return struct
monkeypatch.setattr(loguru._datetime.datetime, "now", patched_now)
monkeypatch.setattr(loguru._datetime, "localtime", patched_localtime)
return monkeypatch_date
@contextlib.contextmanager
def make_logging_logger(name, handler, fmt="%(message)s", level="DEBUG"):
logging_logger = logging.getLogger(name)
logging_logger.setLevel(level)
formatter = logging.Formatter(fmt)
handler.setLevel(level)
handler.setFormatter(formatter)
logging_logger.addHandler(handler)
try:
yield logging_logger
finally:
logging_logger.removeHandler(handler)
@pytest.fixture
def f_globals_name_absent(monkeypatch):
getframe_ = loguru._get_frame.load_get_frame_function()
def patched_getframe(*args, **kwargs):
frame = getframe_(*args, **kwargs)
frame.f_globals.pop("__name__", None)
return frame
monkeypatch.setattr(loguru._logger, "get_frame", patched_getframe)
loguru-0.6.0/tests/test_add_option_catch.py 0000644 0001750 0001750 00000007206 14175241406 020426 0 ustar nilesh nilesh import re
import sys
import time
import pytest
from loguru import logger
from .conftest import default_threading_excepthook
def broken_sink(m):
raise Exception("Error!")
def test_catch_is_true(capsys):
logger.add(broken_sink, catch=True)
logger.debug("Fail")
out, err = capsys.readouterr()
assert out == ""
assert err != ""
def test_catch_is_false(capsys):
logger.add(broken_sink, catch=False)
with pytest.raises(Exception):
logger.debug("Fail")
out, err = capsys.readouterr()
assert out == err == ""
def test_no_sys_stderr(capsys, monkeypatch):
monkeypatch.setattr(sys, "stderr", None)
logger.add(broken_sink, catch=True)
logger.debug("a")
out, err = capsys.readouterr()
assert out == err == ""
def test_broken_sys_stderr(capsys, monkeypatch):
def broken_write(*args, **kwargs):
raise OSError
monkeypatch.setattr(sys.stderr, "write", broken_write)
logger.add(broken_sink, catch=True)
logger.debug("a")
out, err = capsys.readouterr()
assert out == err == ""
def test_encoding_error(capsys):
def sink(m):
raise UnicodeEncodeError("utf8", "", 10, 11, "too bad")
logger.add(sink, catch=True)
logger.debug("test")
out, err = capsys.readouterr()
lines = err.strip().splitlines()
assert out == ""
assert lines[0] == "--- Logging error in Loguru Handler #0 ---"
assert lines[1].startswith("Record was: {")
assert lines[1].endswith("}")
assert lines[-2].startswith("UnicodeEncodeError:")
assert lines[-1] == "--- End of logging error ---"
def test_unprintable_record(writer, capsys):
class Unprintable:
def __repr__(self):
raise ValueError("Failed")
logger.add(writer, format="{message} {extra[unprintable]}", catch=True)
logger.bind(unprintable=1).debug("a")
logger.bind(unprintable=Unprintable()).debug("b")
logger.bind(unprintable=2).debug("c")
out, err = capsys.readouterr()
lines = err.strip().splitlines()
assert writer.read() == "a 1\nc 2\n"
assert out == ""
assert lines[0] == "--- Logging error in Loguru Handler #0 ---"
assert lines[1] == "Record was: /!\\ Unprintable record /!\\"
assert lines[-2] == "ValueError: Failed"
assert lines[-1] == "--- End of logging error ---"
@pytest.mark.parametrize("enqueue", [False, True])
def test_broken_sink_message(capsys, enqueue):
logger.add(broken_sink, catch=True, enqueue=enqueue)
logger.debug("Oops")
time.sleep(0.1)
out, err = capsys.readouterr()
lines = err.strip().splitlines()
assert out == ""
assert lines[0] == "--- Logging error in Loguru Handler #0 ---"
assert re.match(r"Record was: \{.*Oops.*\}", lines[1])
assert lines[-2].startswith("Exception: Error!")
assert lines[-1] == "--- End of logging error ---"
@pytest.mark.parametrize("enqueue", [False, True])
def test_broken_sink_caught_keep_working(enqueue):
output = ""
def half_broken_sink(m):
nonlocal output
if m.startswith("NOK"):
raise ValueError("Broken!")
else:
output += m
logger.add(half_broken_sink, format="{message}", enqueue=enqueue, catch=True)
logger.info("A")
logger.info("NOK")
logger.info("B")
time.sleep(0.1)
assert output == "A\nB\n"
def test_broken_sink_not_caught_enqueue():
called = 0
def broken_sink(m):
nonlocal called
called += 1
raise ValueError("Nop")
logger.add(broken_sink, format="{message}", enqueue=True, catch=False)
with default_threading_excepthook():
logger.info("A")
logger.info("B")
time.sleep(0.1)
assert called == 1
loguru-0.6.0/tests/test_coroutine_sink.py 0000644 0001750 0001750 00000035241 14175241406 020177 0 ustar nilesh nilesh import asyncio
import logging
import multiprocessing
import platform
import re
import sys
import threading
import pytest
import loguru
from loguru import logger
async def async_writer(msg):
await asyncio.sleep(0.01)
print(msg, end="")
class AsyncWriter:
async def __call__(self, msg):
await asyncio.sleep(0.01)
print(msg, end="")
def test_coroutine_function(capsys):
async def worker():
logger.debug("A message")
await logger.complete()
logger.add(async_writer, format="{message}")
asyncio.run(worker())
out, err = capsys.readouterr()
assert err == ""
assert out == "A message\n"
def test_async_callable_sink(capsys):
async def worker():
logger.debug("A message")
await logger.complete()
logger.add(AsyncWriter(), format="{message}")
asyncio.run(worker())
out, err = capsys.readouterr()
assert err == ""
assert out == "A message\n"
def test_concurrent_execution(capsys):
async def task(i):
logger.debug("=> {}", i)
async def main():
tasks = [task(i) for i in range(10)]
await asyncio.gather(*tasks)
await logger.complete()
logger.add(async_writer, format="{message}")
asyncio.run(main())
out, err = capsys.readouterr()
assert err == ""
assert sorted(out.splitlines()) == sorted("=> %d" % i for i in range(10))
def test_recursive_coroutine(capsys):
async def task(i):
if i == 0:
await logger.complete()
return
logger.info("{}!", i)
await task(i - 1)
logger.add(async_writer, format="{message}")
asyncio.run(task(9))
out, err = capsys.readouterr()
assert err == ""
assert sorted(out.splitlines()) == sorted("%d!" % i for i in range(1, 10))
@pytest.mark.skipif(sys.version_info < (3, 5, 3), reason="Coroutine can't access running loop")
def test_using_another_event_loop(capsys):
async def worker():
logger.debug("A message")
await logger.complete()
loop = asyncio.new_event_loop()
logger.add(async_writer, format="{message}", loop=loop)
loop.run_until_complete(worker())
out, err = capsys.readouterr()
assert err == ""
assert out == "A message\n"
def test_run_mutiple_different_loops(capsys):
async def worker(i):
logger.debug("Message {}", i)
await logger.complete()
logger.add(async_writer, format="{message}", loop=None)
asyncio.run(worker(1))
asyncio.run(worker(2))
out, err = capsys.readouterr()
assert err == ""
assert out == "Message 1\nMessage 2\n"
@pytest.mark.skipif(sys.version_info < (3, 5, 3), reason="Coroutine can't access running loop")
def test_run_multiple_same_loop(capsys):
async def worker(i):
logger.debug("Message {}", i)
await logger.complete()
loop = asyncio.new_event_loop()
logger.add(async_writer, format="{message}", loop=loop)
loop.run_until_complete(worker(1))
loop.run_until_complete(worker(2))
out, err = capsys.readouterr()
assert err == ""
assert out == "Message 1\nMessage 2\n"
def test_using_sink_without_running_loop_not_none(capsys):
loop = asyncio.new_event_loop()
logger.add(sys.stderr, format="=> {message}")
logger.add(async_writer, format="{message}", loop=loop)
logger.info("A message")
loop.run_until_complete(logger.complete())
out, err = capsys.readouterr()
assert err == "=> A message\n"
assert out == "A message\n"
def test_using_sink_without_running_loop_none(capsys):
loop = asyncio.new_event_loop()
logger.add(sys.stderr, format="=> {message}")
logger.add(async_writer, format="{message}", loop=None)
logger.info("A message")
loop.run_until_complete(logger.complete())
out, err = capsys.readouterr()
assert err == "=> A message\n"
assert out == ""
def test_global_loop_not_used(capsys):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
logger.add(sys.stderr, format="=> {message}")
logger.add(async_writer, format="{message}", loop=None)
logger.info("A message")
loop.run_until_complete(logger.complete())
out, err = capsys.readouterr()
assert err == "=> A message\n"
assert out == ""
@pytest.mark.skipif(sys.version_info < (3, 5, 3), reason="Coroutine can't access running loop")
def test_complete_in_another_run(capsys):
async def worker_1():
logger.debug("A")
async def worker_2():
logger.debug("B")
await logger.complete()
loop = asyncio.new_event_loop()
logger.add(async_writer, format="{message}", loop=loop)
loop.run_until_complete(worker_1())
loop.run_until_complete(worker_2())
out, err = capsys.readouterr()
assert out == "A\nB\n"
assert err == ""
def test_tasks_cancelled_on_remove(capsys):
logger.add(async_writer, format="{message}", catch=False)
async def foo():
logger.info("A")
logger.info("B")
logger.info("C")
logger.remove()
await logger.complete()
asyncio.run(foo())
out, err = capsys.readouterr()
assert out == err == ""
def test_remove_without_tasks(capsys):
logger.add(async_writer, format="{message}", catch=False)
logger.remove()
async def foo():
logger.info("!")
await logger.complete()
asyncio.run(foo())
out, err = capsys.readouterr()
assert out == err == ""
def test_complete_without_tasks(capsys):
logger.add(async_writer, catch=False)
async def worker():
await logger.complete()
asyncio.run(worker())
out, err = capsys.readouterr()
assert out == err == ""
def test_complete_stream_noop(capsys):
logger.add(sys.stderr, format="{message}", catch=False)
logger.info("A")
async def worker():
logger.info("B")
await logger.complete()
logger.info("C")
asyncio.run(worker())
logger.info("D")
out, err = capsys.readouterr()
assert out == ""
assert err == "A\nB\nC\nD\n"
def test_complete_file_noop(tmpdir):
filepath = tmpdir.join("test.log")
logger.add(str(filepath), format="{message}", catch=False)
logger.info("A")
async def worker():
logger.info("B")
await logger.complete()
logger.info("C")
asyncio.run(worker())
logger.info("D")
assert filepath.read() == "A\nB\nC\nD\n"
def test_complete_function_noop():
out = ""
def write(msg):
nonlocal out
out += msg
logger.add(write, format="{message}", catch=False)
logger.info("A")
async def worker():
logger.info("B")
await logger.complete()
logger.info("C")
asyncio.run(worker())
logger.info("D")
assert out == "A\nB\nC\nD\n"
def test_complete_standard_noop(capsys):
logger.add(logging.StreamHandler(sys.stderr), format="{message}", catch=False)
logger.info("A")
async def worker():
logger.info("B")
await logger.complete()
logger.info("C")
asyncio.run(worker())
logger.info("D")
out, err = capsys.readouterr()
assert out == ""
assert err == "A\nB\nC\nD\n"
def test_exception_in_coroutine_caught(capsys):
async def sink(msg):
raise Exception("Oh no")
async def main():
logger.add(sink, catch=True)
logger.info("Hello world")
await asyncio.sleep(0.1)
await logger.complete()
asyncio.run(main())
out, err = capsys.readouterr()
lines = err.strip().splitlines()
assert out == ""
assert lines[0] == "--- Logging error in Loguru Handler #0 ---"
assert re.match(r"Record was: \{.*Hello world.*\}", lines[1])
assert lines[-2] == "Exception: Oh no"
assert lines[-1] == "--- End of logging error ---"
def test_exception_in_coroutine_not_caught(capsys, caplog):
async def sink(msg):
raise ValueError("Oh no")
async def main():
logger.add(sink, catch=False)
logger.info("Hello world")
await asyncio.sleep(0.1)
await logger.complete()
asyncio.run(main())
out, err = capsys.readouterr()
assert out == err == ""
records = caplog.records
assert len(records) == 1
record = records[0]
message = record.getMessage()
assert "Logging error in Loguru Handler" not in message
assert "was never retrieved" not in message
exc_type, exc_value, _ = record.exc_info
assert exc_type == ValueError
assert str(exc_value) == "Oh no"
def test_exception_in_coroutine_during_complete_caught(capsys):
async def sink(msg):
await asyncio.sleep(0.1)
raise Exception("Oh no")
async def main():
logger.add(sink, catch=True)
logger.info("Hello world")
await logger.complete()
asyncio.run(main())
out, err = capsys.readouterr()
lines = err.strip().splitlines()
assert out == ""
assert lines[0] == "--- Logging error in Loguru Handler #0 ---"
assert re.match(r"Record was: \{.*Hello world.*\}", lines[1])
assert lines[-2] == "Exception: Oh no"
assert lines[-1] == "--- End of logging error ---"
def test_exception_in_coroutine_during_complete_not_caught(capsys, caplog):
async def sink(msg):
await asyncio.sleep(0.1)
raise ValueError("Oh no")
async def main():
logger.add(sink, catch=False)
logger.info("Hello world")
await logger.complete()
asyncio.run(main())
out, err = capsys.readouterr()
assert out == err == ""
records = caplog.records
assert len(records) == 1
record = records[0]
message = record.getMessage()
assert "Logging error in Loguru Handler" not in message
assert "was never retrieved" not in message
exc_type, exc_value, _ = record.exc_info
assert exc_type == ValueError
assert str(exc_value) == "Oh no"
@pytest.mark.skipif(sys.version_info < (3, 5, 3), reason="Coroutine can't access running loop")
def test_enqueue_coroutine_loop(capsys):
loop = asyncio.new_event_loop()
logger.add(async_writer, enqueue=True, loop=loop, format="{message}", catch=False)
async def worker():
logger.info("A")
await logger.complete()
loop.run_until_complete(worker())
out, err = capsys.readouterr()
assert out == "A\n"
assert err == ""
def test_enqueue_coroutine_from_inside_coroutine_without_loop(capsys):
loop = asyncio.new_event_loop()
async def worker():
logger.add(async_writer, enqueue=True, loop=None, format="{message}", catch=False)
logger.info("A")
await logger.complete()
loop.run_until_complete(worker())
out, err = capsys.readouterr()
assert out == "A\n"
assert err == ""
def test_custom_complete_function(capsys):
awaited = False
class Handler:
def write(self, message):
print(message, end="")
async def complete(self):
nonlocal awaited
awaited = True
async def worker():
logger.info("A")
await logger.complete()
logger.add(Handler(), catch=False, format="{message}")
asyncio.run(worker())
out, err = capsys.readouterr()
assert out == "A\n"
assert err == ""
assert awaited
@pytest.mark.skipif(sys.version_info < (3, 5, 3), reason="Coroutine can't access running loop")
@pytest.mark.parametrize("loop_is_none", [True, False])
def test_complete_from_another_loop(capsys, loop_is_none):
main_loop = asyncio.new_event_loop()
second_loop = asyncio.new_event_loop()
loop = None if loop_is_none else main_loop
logger.add(async_writer, loop=loop, format="{message}")
async def worker_1():
logger.info("A")
async def worker_2():
await logger.complete()
main_loop.run_until_complete(worker_1())
second_loop.run_until_complete(worker_2())
out, err = capsys.readouterr()
assert out == err == ""
main_loop.run_until_complete(worker_2())
out, err = capsys.readouterr()
assert out == "A\n"
assert err == ""
def test_complete_from_multiple_threads_loop_is_none(capsys):
async def worker(i):
for j in range(100):
await asyncio.sleep(0)
logger.info("{:03}", i)
await logger.complete()
async def sink(msg):
print(msg, end="")
def worker_(i):
asyncio.run(worker(i))
logger.add(sink, catch=False, format="{message}")
threads = [threading.Thread(target=worker_, args=(i,)) for i in range(10)]
for t in threads:
t.start()
for t in threads:
t.join()
out, err = capsys.readouterr()
assert sorted(out.splitlines()) == ["{:03}".format(i) for i in range(10) for _ in range(100)]
assert err == ""
def test_complete_from_multiple_threads_loop_is_not_none(capsys):
async def worker(i):
for j in range(100):
await asyncio.sleep(0)
logger.info("{:03}", i)
await logger.complete()
async def sink(msg):
print(msg, end="")
def worker_(i):
asyncio.run(worker(i))
loop = asyncio.new_event_loop()
logger.add(sink, catch=False, format="{message}", loop=loop)
threads = [threading.Thread(target=worker_, args=(i,)) for i in range(10)]
for t in threads:
t.start()
for t in threads:
t.join()
async def complete():
await logger.complete()
loop.run_until_complete(complete())
out, err = capsys.readouterr()
assert sorted(out.splitlines()) == ["{:03}".format(i) for i in range(10) for _ in range(100)]
assert err == ""
async def async_subworker(logger_):
logger_.info("Child")
await logger_.complete()
async def async_mainworker(logger_):
logger_.info("Main")
await logger_.complete()
def subworker(logger_):
loop = asyncio.new_event_loop()
loop.run_until_complete(async_subworker(logger_))
class Writer:
def __init__(self):
self.output = ""
async def write(self, message):
self.output += message
@pytest.mark.skipif(platform.python_implementation() == "PyPy", reason="PyPy bug #3630")
def test_complete_with_sub_processes(monkeypatch, capsys):
ctx = multiprocessing.get_context("spawn")
monkeypatch.setattr(loguru._handler, "multiprocessing", ctx)
loop = asyncio.new_event_loop()
writer = Writer()
logger.add(writer.write, format="{message}", enqueue=True, loop=loop)
process = ctx.Process(target=subworker, args=[logger])
process.start()
process.join()
async def complete():
await logger.complete()
loop.run_until_complete(complete())
out, err = capsys.readouterr()
assert out == err == ""
assert writer.output == "Child\n"
@pytest.mark.skipif(sys.version_info < (3, 5, 3), reason="Coroutine can't access running loop")
def test_invalid_coroutine_sink_if_no_loop_with_enqueue():
with pytest.raises(ValueError):
logger.add(async_writer, enqueue=True, loop=None)
loguru-0.6.0/tests/test_formatting.py 0000644 0001750 0001750 00000015557 14175241406 017326 0 ustar nilesh nilesh import re
import pytest
from loguru import logger
@pytest.mark.parametrize(
"format, validator",
[
("{name}", lambda r: r == "tests.test_formatting"),
("{time}", lambda r: re.fullmatch(r"\d+-\d+-\d+T\d+:\d+:\d+[.,]\d+[+-]\d{4}", r)),
("{elapsed}", lambda r: re.fullmatch(r"\d:\d{2}:\d{2}\.\d{6}", r)),
("{elapsed.seconds}", lambda r: re.fullmatch(r"\d+", r)),
("{line}", lambda r: re.fullmatch(r"\d+", r)),
("{level}", lambda r: r == "DEBUG"),
("{level.name}", lambda r: r == "DEBUG"),
("{level.no}", lambda r: r == "10"),
("{level.icon}", lambda r: r == "🐞"),
("{file}", lambda r: r == "test_formatting.py"),
("{file.name}", lambda r: r == "test_formatting.py"),
("{file.path}", lambda r: r == __file__),
("{function}", lambda r: r == "test_log_formatters"),
("{module}", lambda r: r == "test_formatting"),
("{thread}", lambda r: re.fullmatch(r"\d+", r)),
("{thread.id}", lambda r: re.fullmatch(r"\d+", r)),
("{thread.name}", lambda r: isinstance(r, str) and r != ""),
("{process}", lambda r: re.fullmatch(r"\d+", r)),
("{process.id}", lambda r: re.fullmatch(r"\d+", r)),
("{process.name}", lambda r: isinstance(r, str) and r != ""),
("{message}", lambda r: r == "Message"),
("%s {{a}} 天 {{1}} %d", lambda r: r == "%s {a} 天 {1} %d"),
],
)
@pytest.mark.parametrize("use_log_function", [False, True])
def test_log_formatters(format, validator, writer, use_log_function):
message = "Message"
logger.add(writer, format=format)
if use_log_function:
logger.log("DEBUG", message)
else:
logger.debug(message)
result = writer.read().rstrip("\n")
assert validator(result)
@pytest.mark.parametrize(
"format, validator",
[
("{time}.log", lambda r: re.fullmatch(r"\d+-\d+-\d+_\d+-\d+-\d+\_\d+.log", r)),
("%s_{{a}}_天_{{1}}_%d", lambda r: r == "%s_{a}_天_{1}_%d"),
],
)
@pytest.mark.parametrize("part", ["file", "dir", "both"])
def test_file_formatters(tmpdir, format, validator, part):
if part == "file":
file = tmpdir.join(format)
elif part == "dir":
file = tmpdir.join(format, "log.log")
elif part == "both":
file = tmpdir.join(format, format)
logger.add(str(file))
logger.debug("Message")
files = [f for f in tmpdir.visit() if f.check(file=1)]
assert len(files) == 1
file = files[0]
if part == "file":
assert validator(file.basename)
elif part == "dir":
assert file.basename == "log.log"
assert validator(file.dirpath().basename)
elif part == "both":
assert validator(file.basename)
assert validator(file.dirpath().basename)
@pytest.mark.parametrize(
"message, args, kwargs, expected",
[
("{1, 2, 3} - {0} - {", [], {}, "{1, 2, 3} - {0} - {"),
("{} + {} = {}", [1, 2, 3], {}, "1 + 2 = 3"),
("{a} + {b} = {c}", [], dict(a=1, b=2, c=3), "1 + 2 = 3"),
("{0} + {two} = {1}", [1, 3], dict(two=2, nope=4), "1 + 2 = 3"),
(
"{self} or {message} or {level}",
[],
dict(self="a", message="b", level="c"),
"a or b or c",
),
("{:.2f}", [1], {}, "1.00"),
("{0:0{three}d}", [5], dict(three=3), "005"),
("{{nope}} {my_dict} {}", ["{{!}}"], dict(my_dict={"a": 1}), "{nope} {'a': 1} {{!}}"),
],
)
@pytest.mark.parametrize("use_log_function", [False, True])
def test_log_formatting(writer, message, args, kwargs, expected, use_log_function):
logger.add(writer, format="{message}", colorize=False)
if use_log_function:
logger.log(10, message, *args, **kwargs)
else:
logger.debug(message, *args, **kwargs)
assert writer.read() == expected + "\n"
def test_f_globals_name_absent(writer, f_globals_name_absent):
logger.add(writer, format="{name} {message}", colorize=False)
logger.info("Foobar")
assert writer.read() == "None Foobar\n"
def test_extra_formatting(writer):
logger.configure(extra={"test": "my_test", "dict": {"a": 10}})
logger.add(writer, format="{extra[test]} -> {extra[dict]} -> {message}")
logger.debug("level: {name}", name="DEBUG")
assert writer.read() == "my_test -> {'a': 10} -> level: DEBUG\n"
def test_kwargs_in_extra_dict():
extra_dicts = []
messages = []
def sink(message):
extra_dicts.append(message.record["extra"])
messages.append(str(message))
logger.add(sink, format="{message}")
logger.info("A")
logger.info("B", foo=123)
logger.bind(merge=True).info("C", other=False)
logger.bind(override=False).info("D", override=True)
logger.info("Formatted kwargs: {foobar}", foobar=123)
logger.info("Ignored args: {}", 456)
logger.info("Both: {foobar} {}", 456, foobar=123)
logger.opt(lazy=True).info("Lazy: {lazy}", lazy=lambda: 789)
assert messages == [
"A\n",
"B\n",
"C\n",
"D\n",
"Formatted kwargs: 123\n",
"Ignored args: 456\n",
"Both: 123 456\n",
"Lazy: 789\n",
]
assert extra_dicts == [
{},
{"foo": 123},
{"merge": True, "other": False},
{"override": True},
{"foobar": 123},
{},
{"foobar": 123},
{"lazy": 789},
]
def test_non_string_message(writer):
logger.add(writer, format="{message}")
logger.info(1)
logger.info({})
logger.info(b"test")
assert writer.read() == "1\n{}\nb'test'\n"
@pytest.mark.parametrize("colors", [True, False])
def test_non_string_message_is_str_in_record(writer, colors):
output = ""
def sink(message):
nonlocal output
assert isinstance(message.record["message"], str)
output += message
def format(record):
assert isinstance(record["message"], str)
return "[{message}]\n"
logger.add(sink, format=format, catch=False)
logger.opt(colors=colors).info(123)
assert output == "[123]\n"
@pytest.mark.parametrize("colors", [True, False])
def test_missing_positional_field_during_formatting(writer, colors):
logger.add(writer)
with pytest.raises(IndexError):
logger.opt(colors=colors).info("Foo {} {}", 123)
@pytest.mark.parametrize("colors", [True, False])
def test_missing_named_field_during_formatting(writer, colors):
logger.add(writer)
with pytest.raises(KeyError):
logger.opt(colors=colors).info("Foo {bar}", baz=123)
def test_not_formattable_message(writer):
logger.add(writer)
with pytest.raises(AttributeError):
logger.info(123, baz=456)
def test_not_formattable_message_with_colors(writer):
logger.add(writer)
with pytest.raises(TypeError):
logger.opt(colors=True).info(123, baz=456)
def test_invalid_color_markup(writer):
with pytest.raises(ValueError):
logger.add(writer, format="Not closed tag", colorize=True)
loguru-0.6.0/tests/test_activation.py 0000644 0001750 0001750 00000007123 14175241406 017303 0 ustar nilesh nilesh import pytest
from loguru import logger
@pytest.mark.parametrize(
"name, should_log",
[
("", False),
("tests", False),
("test", True),
("testss", True),
("tests.", True),
("tests.test_activation", False),
("tests.test_activation.", True),
("test_activation", True),
(".", True),
],
)
def test_disable(writer, name, should_log):
logger.add(writer, format="{message}")
logger.disable(name)
logger.debug("message")
result = writer.read()
if should_log:
assert result == "message\n"
else:
assert result == ""
@pytest.mark.parametrize(
"name, should_log",
[
("", True),
("tests", True),
("test", False),
("testss", False),
("tests.", False),
("tests.test_activation", True),
("tests.test_activation.", False),
("test_activation", False),
(".", False),
],
)
def test_enable(writer, name, should_log):
logger.add(writer, format="{message}")
logger.disable("")
logger.enable(name)
logger.debug("message")
result = writer.read()
if should_log:
assert result == "message\n"
else:
assert result == ""
def test_log_before_enable(writer):
logger.add(writer, format="{message}")
logger.disable("")
logger.debug("nope")
logger.enable("tests")
logger.debug("yes")
result = writer.read()
assert result == "yes\n"
def test_log_before_disable(writer):
logger.add(writer, format="{message}")
logger.enable("")
logger.debug("yes")
logger.disable("tests")
logger.debug("nope")
result = writer.read()
assert result == "yes\n"
def test_multiple_activations():
def n():
return len(logger._core.activation_list)
assert n() == 0
logger.enable("")
assert n() == 0
logger.disable("")
assert n() == 1
logger.enable("foo")
assert n() == 2
logger.enable("foo.bar")
assert n() == 2
logger.disable("foo")
assert n() == 1
logger.disable("foo.bar")
assert n() == 1
logger.enable("foo.bar")
assert n() == 2
logger.disable("foo.bar.baz")
assert n() == 3
logger.disable("foo.baz")
assert n() == 3
logger.disable("foo.baz.bar")
assert n() == 3
logger.enable("foo.baz.bar")
assert n() == 4
logger.enable("")
assert n() == 0
def test_log_before_enable_f_globals_name_absent(writer, f_globals_name_absent):
logger.add(writer, format="{message}")
logger.disable(None)
logger.debug("nope")
logger.enable(None)
logger.debug("yes")
result = writer.read()
assert result == "yes\n"
def test_log_before_disable_f_globals_name_absent(writer, f_globals_name_absent):
logger.add(writer, format="{message}")
logger.enable(None)
logger.debug("yes")
logger.disable(None)
logger.debug("nope")
result = writer.read()
assert result == "yes\n"
def test_f_globals_name_absent_with_others(writer, f_globals_name_absent):
logger.add(writer, format="{message}")
logger.info("1")
logger.enable(None)
logger.disable("foobar")
logger.enable("foo.bar")
logger.disable(None)
logger.info("2")
logger.enable("foobar")
logger.enable(None)
logger.info("3")
assert writer.read() == "1\n3\n"
@pytest.mark.parametrize("name", [42, [], object()])
def test_invalid_enable_name(name):
with pytest.raises(TypeError):
logger.enable(name)
@pytest.mark.parametrize("name", [42, [], object()])
def test_invalid_disable_name(name):
with pytest.raises(TypeError):
logger.disable(name)
loguru-0.6.0/tests/test_contextualize.py 0000644 0001750 0001750 00000012746 14175241406 020047 0 ustar nilesh nilesh import asyncio
import sys
import threading
from unittest.mock import MagicMock
import pytest
from loguru import logger
from loguru._contextvars import load_contextvar_class
def test_contextualize(writer):
logger.add(writer, format="{message} {extra[foo]} {extra[baz]}")
with logger.contextualize(foo="bar", baz=123):
logger.info("Contextualized")
assert writer.read() == "Contextualized bar 123\n"
def test_contextualize_as_decorator(writer):
logger.add(writer, format="{message} {extra[foo]} {extra[baz]}")
@logger.contextualize(foo=123, baz="bar")
def task():
logger.info("Contextualized")
task()
assert writer.read() == "Contextualized 123 bar\n"
def test_contextualize_in_function(writer):
logger.add(writer, format="{message} {extra}")
def foobar():
logger.info("Foobar!")
with logger.contextualize(foobar="baz"):
foobar()
assert writer.read() == "Foobar! {'foobar': 'baz'}\n"
def test_contextualize_reset():
contexts = []
output = []
def sink(message):
contexts.append(message.record["extra"])
output.append(str(message))
logger.add(sink, format="{level} {message}")
logger.info("A")
with logger.contextualize(abc="def"):
logger.debug("B")
logger.warning("C")
logger.info("D")
assert contexts == [{}, {"abc": "def"}, {"abc": "def"}, {}]
assert output == ["INFO A\n", "DEBUG B\n", "WARNING C\n", "INFO D\n"]
@pytest.mark.xfail(sys.version_info < (3, 5, 3), reason="ContextVar backport not supported")
def test_contextualize_async(writer):
logger.add(writer, format="{message} {extra[i]}", catch=False)
async def task():
logger.info("Start")
await asyncio.sleep(0.1)
logger.info("End")
async def worker(i):
with logger.contextualize(i=i):
await task()
async def main():
workers = [worker(i) for i in range(5)]
await asyncio.gather(*workers)
await logger.complete()
asyncio.run(main())
assert sorted(writer.read().splitlines()) == ["End %d" % i for i in range(5)] + [
"Start %d" % i for i in range(5)
]
def test_contextualize_thread(writer):
logger.add(writer, format="{message} {extra[i]}")
def task():
logger.info("Processing")
def worker(entry_barrier, exit_barrier, i):
with logger.contextualize(i=i):
entry_barrier.wait()
task()
exit_barrier.wait()
entry_barrier = threading.Barrier(5)
exit_barrier = threading.Barrier(5)
threads = [
threading.Thread(target=worker, args=(entry_barrier, exit_barrier, i)) for i in range(5)
]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
assert sorted(writer.read().splitlines()) == ["Processing %d" % i for i in range(5)]
def test_contextualize_before_bind(writer):
logger.add(writer, format="{message} {extra[foobar]}")
logger_2 = logger.bind(foobar="baz")
with logger.contextualize(foobar="baz_2"):
logger.info("A")
logger_2.info("B")
logger_2.info("C")
assert writer.read() == "A baz_2\nB baz\nC baz\n"
def test_contextualize_after_bind(writer):
logger.add(writer, format="{message} {extra[foobar]}")
with logger.contextualize(foobar="baz"):
logger_2 = logger.bind(foobar="baz_2")
logger.info("A")
logger_2.info("B")
logger_2.info("C")
assert writer.read() == "A baz\nB baz_2\nC baz_2\n"
def test_contextualize_using_bound(writer):
logger.add(writer, format="{message} {extra[foobar]}")
logger_2 = logger.bind(foobar="baz")
with logger_2.contextualize(foobar="baz_2"):
logger.info("A")
logger_2.info("B")
logger_2.info("C")
assert writer.read() == "A baz_2\nB baz\nC baz\n"
def test_contextualize_before_configure(writer):
logger.add(writer, format="{message} {extra[foobar]}")
logger.configure(extra={"foobar": "baz"})
with logger.contextualize(foobar="baz_2"):
logger.info("A")
logger.info("B")
assert writer.read() == "A baz_2\nB baz\n"
def test_contextualize_after_configure(writer):
logger.add(writer, format="{message} {extra[foobar]}")
with logger.contextualize(foobar="baz"):
logger.configure(extra={"foobar": "baz_2"})
logger.info("A")
logger.info("B")
assert writer.read() == "A baz\nB baz_2\n"
def test_nested_contextualize(writer):
logger.add(writer, format="{message} {extra[foobar]}")
with logger.contextualize(foobar="a"):
with logger.contextualize(foobar="b"):
logger.info("B")
logger.info("A")
with logger.contextualize(foobar="c"):
logger.info("C")
assert writer.read() == "B b\nA a\nC c\n"
def test_context_reset_despite_error(writer):
logger.add(writer, format="{message} {extra}")
try:
with logger.contextualize(foobar=456):
logger.info("Division")
1 / 0
except ZeroDivisionError:
logger.info("Error")
assert writer.read() == "Division {'foobar': 456}\nError {}\n"
# There is not CI runner available for Python 3.5.2. Consequently, we are just
# verifying third-library is properly imported to reach 100% coverage.
def test_contextvars_fallback_352(monkeypatch):
mock_module = MagicMock()
monkeypatch.setattr(sys, "version_info", (3, 5, 2))
monkeypatch.setitem(sys.modules, "contextvars", mock_module)
assert load_contextvar_class() == mock_module.ContextVar
loguru-0.6.0/tests/test_add_option_filter.py 0000644 0001750 0001750 00000006543 14175241406 020634 0 ustar nilesh nilesh import pytest
from loguru import logger
@pytest.mark.parametrize(
"filter",
[
None,
"",
"tests",
"tests.test_add_option_filter",
(lambda r: True),
(lambda r: r["level"].name == "DEBUG"),
{},
{"": "DEBUG"},
{"tests": True},
{"tests.test_add_option_filter": 10},
{"": "WARNING", "tests": 0},
{"tests.test_add_option_filter": 5, "tests": False},
{"tests.test_add_option_filter.foobar": False},
{"tests.": False},
{"tests.test_add_option_filter.": False},
],
)
def test_filterd_in(filter, writer):
logger.add(writer, filter=filter, format="{message}")
logger.debug("Test Filter")
assert writer.read() == "Test Filter\n"
@pytest.mark.parametrize(
"filter",
[
"test",
"testss",
"tests.",
"tests.test_add_option_filter.",
".",
(lambda r: False),
(lambda r: r["level"].no != 10),
{"": False},
{"": True, "tests": 50},
{"tests.test_add_option_filter": False},
{"tests": "WARNING"},
{"tests": 5, "tests.test_add_option_filter": 40},
{"": 100, "tests.test_add_option_filter.foobar": True},
],
)
def test_filtered_out(filter, writer):
logger.add(writer, filter=filter, format="{message}")
logger.debug("Test Filter")
assert writer.read() == ""
@pytest.mark.parametrize(
"filter",
[
None,
lambda _: True,
{},
{None: 0},
{"": False},
{"tests": False, None: True},
{"unrelated": 100},
{None: "INFO", "": "WARNING"},
],
)
def test_filtered_in_f_globals_name_absent(writer, filter, f_globals_name_absent):
logger.add(writer, filter=filter, format="{message}", catch=False)
logger.info("It's ok")
assert writer.read() == "It's ok\n"
@pytest.mark.parametrize(
"filter",
[
"tests",
"",
lambda _: False,
{None: False},
{"": 0, None: "WARNING"},
{None: 100, "tests": True},
],
)
def test_filtered_out_f_globals_name_absent(writer, filter, f_globals_name_absent):
logger.add(writer, filter=filter, format="{message}", catch=False)
logger.info("It's not ok")
assert writer.read() == ""
@pytest.mark.parametrize("filter", [-1, 3.4, object()])
def test_invalid_filter(writer, filter):
with pytest.raises(TypeError):
logger.add(writer, filter=filter)
@pytest.mark.parametrize(
"filter",
[{1: "DEBUG"}, {object(): 10}, {"foo": None}, {"foo": 2.5}, {"a": "DEBUG", "b": object()}],
)
def test_invalid_filter_dict_types(writer, filter):
with pytest.raises(TypeError):
logger.add(writer, filter=filter)
@pytest.mark.parametrize(
"filter", [{"foo": "UNKNOWN_LEVEL"}, {"tests": -1}, {"tests.test_add_option_filter": ""}]
)
def test_invalid_filter_dict_values(writer, filter):
with pytest.raises(ValueError):
logger.add(writer, filter=filter)
def test_filter_dict_with_custom_level(writer):
logger.level("MY_LEVEL", 6, color="", icon="")
logger.add(writer, level=0, filter={"tests": "MY_LEVEL"}, format="{message}")
logger.log(3, "No")
logger.log(9, "Yes")
assert writer.read() == "Yes\n"
def test_invalid_filter_builtin(writer):
with pytest.raises(ValueError, match=r".* most likely a mistake"):
logger.add(writer, filter=filter)
loguru-0.6.0/tests/test_exceptions_formatting.py 0000644 0001750 0001750 00000015334 14175241406 021560 0 ustar nilesh nilesh import os
import platform
import re
import subprocess
import sys
import pytest
def normalize(exception):
"""Normalize exception output for reproducible test cases"""
if os.name == "nt":
exception = re.sub(
r'File[^"]+"[^"]+\.py[^"]*"', lambda m: m.group().replace("\\", "/"), exception
)
exception = re.sub(r"(\r\n|\r|\n)", "\n", exception)
if sys.version_info >= (3, 9, 0):
def fix_filepath(match):
filepath = match.group(1)
pattern = (
r'((?:\x1b\[[0-9]*m)+)([^"]+?)((?:\x1b\[[0-9]*m)+)([^"]+?)((?:\x1b\[[0-9]*m)+)'
)
match = re.match(pattern, filepath)
start_directory = os.path.dirname(os.path.dirname(__file__))
if match:
groups = list(match.groups())
groups[1] = os.path.relpath(os.path.abspath(groups[1]), start_directory) + "/"
relpath = "".join(groups)
else:
relpath = os.path.relpath(os.path.abspath(filepath), start_directory)
return 'File "%s"' % relpath.replace("\\", "/")
exception = re.sub(
r'File "([^"]+\.py[^"]*)"',
fix_filepath,
exception,
)
if sys.version_info < (3, 9, 0):
if "SyntaxError" in exception:
exception = re.sub(r"(\n *)(\^ *\n)", r"\1 \2", exception)
elif "IndentationError" in exception:
exception = re.sub(r"\n *\^ *\n", "\n", exception)
if sys.version_info < (3, 10, 0):
for module, line_before, line_after in [
("handler_formatting_with_context_manager.py", 17, 16),
("message_formatting_with_context_manager.py", 13, 10),
]:
if module not in exception:
continue
expression = r"^(__main__ %s a) %d\n" % (module, line_before)
exception = re.sub(expression, r"\1 %d\n" % line_after, exception)
exception = re.sub(
r'"[^"]*/somelib/__init__.py"', '"/usr/lib/python/somelib/__init__.py"', exception
)
exception = re.sub(r"\b0x[0-9a-fA-F]+\b", "0xDEADBEEF", exception)
if platform.python_implementation() == "PyPy":
exception = (
exception.replace(
"", ""
)
.replace(
"", ""
)
.replace(
"",
"",
)
)
return exception
def generate(output, outpath):
"""Generate new output file if exception formatting is updated"""
os.makedirs(os.path.dirname(outpath), exist_ok=True)
with open(outpath, "w") as file:
file.write(output)
assert False # Avoid forgetting to remove "generate()" inadvertently
def compare_exception(dirname, filename):
cwd = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
python = sys.executable or "python"
filepath = os.path.join("tests", "exceptions", "source", dirname, filename + ".py")
outpath = os.path.join(cwd, "tests", "exceptions", "output", dirname, filename + ".txt")
with subprocess.Popen(
[python, filepath],
shell=False,
cwd=cwd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
env=dict(os.environ, PYTHONPATH=cwd, PYTHONIOENCODING="utf8"),
) as proc:
stdout, stderr = proc.communicate()
print(stderr, file=sys.stderr)
assert proc.returncode == 0
assert stdout == ""
assert stderr != ""
stderr = normalize(stderr)
# generate(stderr, outpath)
with open(outpath, "r") as file:
assert stderr == file.read()
@pytest.mark.parametrize(
"filename",
[
"chained_expression_direct",
"chained_expression_indirect",
"chaining_first",
"chaining_second",
"chaining_third",
"enqueue",
"enqueue_with_others_handlers",
"frame_values_backward",
"frame_values_forward",
"function",
"head_recursion",
"missing_attributes_traceback_objects",
"nested",
"nested_chained_catch_up",
"nested_decorator_catch_up",
"nested_explicit_catch_up",
"nested_wrapping",
"no_tb",
"not_enough_arguments",
"raising_recursion",
"suppressed_expression_direct",
"suppressed_expression_indirect",
"tail_recursion",
"too_many_arguments",
],
)
def test_backtrace(filename):
compare_exception("backtrace", filename)
@pytest.mark.parametrize(
"filename",
[
"assertion_error",
"assertion_error_custom",
"assertion_error_in_string",
"attributes",
"chained_both",
"encoding",
"global_variable",
"indentation_error",
"keyword_argument",
"multilines_repr",
"no_error_message",
"parenthesis",
"source_multilines",
"source_strings",
"syntax_error",
"syntax_highlighting",
"truncating",
"unprintable_object",
],
)
def test_diagnose(filename):
compare_exception("diagnose", filename)
@pytest.mark.parametrize(
"filename",
[
"assertion_from_lib",
"assertion_from_local",
"callback",
"catch_decorator",
"catch_decorator_from_lib",
"decorated_callback",
"direct",
"indirect",
"string_lib",
"string_source",
"syntaxerror",
],
)
def test_exception_ownership(filename):
compare_exception("ownership", filename)
@pytest.mark.parametrize(
"filename",
[
"assertionerror_without_traceback",
"catch_as_context_manager",
"catch_as_decorator_with_parentheses",
"catch_as_decorator_without_parentheses",
"catch_as_function",
"catch_message",
"exception_formatting_coroutine",
"exception_formatting_function",
"exception_formatting_generator",
"exception_in_property",
"handler_formatting_with_context_manager",
"handler_formatting_with_decorator",
"level_name",
"level_number",
"message_formatting_with_context_manager",
"message_formatting_with_decorator",
"nested_with_reraise",
"syntaxerror_without_traceback",
"sys_tracebacklimit",
"sys_tracebacklimit_negative",
"sys_tracebacklimit_none",
"sys_tracebacklimit_unset",
"zerodivisionerror_without_traceback",
],
)
def test_exception_others(filename):
compare_exception("others", filename)
loguru-0.6.0/tests/exceptions/ 0000755 0001750 0001750 00000000000 14175241406 015707 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/source/ 0000755 0001750 0001750 00000000000 14175241406 017207 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/source/others/ 0000755 0001750 0001750 00000000000 14175241406 020513 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/source/others/exception_in_property.py 0000644 0001750 0001750 00000000565 14175241406 025523 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=True, backtrace=True, colorize=False)
class A:
@property
def value(self):
try:
1 / 0
except:
logger.opt(exception=True).debug("test")
return None
else:
return "Never"
a = A()
value = a.value
loguru-0.6.0/tests/exceptions/source/others/handler_formatting_with_context_manager.py 0000644 0001750 0001750 00000000375 14175241406 031232 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(
sys.stderr,
format="{name} {file.name} {function} {line}",
diagnose=False,
backtrace=False,
colorize=False,
)
def a():
with logger.catch():
1 / 0
a()
loguru-0.6.0/tests/exceptions/source/others/assertionerror_without_traceback.py 0000644 0001750 0001750 00000000642 14175241406 027732 0 ustar nilesh nilesh import sys
from loguru import logger
def test(diagnose, backtrace):
logger.remove()
logger.add(sys.stderr, format="", diagnose=diagnose, backtrace=backtrace, colorize=True)
try:
assert False
except AssertionError:
type_, value, _ = sys.exc_info()
logger.opt(exception=(type_, value, None)).error("")
test(False, False)
test(True, False)
test(False, True)
test(True, True)
loguru-0.6.0/tests/exceptions/source/others/catch_as_context_manager.py 0000644 0001750 0001750 00000000253 14175241406 026070 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
with logger.catch():
1 / 0
loguru-0.6.0/tests/exceptions/source/others/catch_as_decorator_without_parentheses.py 0000644 0001750 0001750 00000000272 14175241406 031061 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
@logger.catch
def c(a, b=0):
a / b
c(2)
loguru-0.6.0/tests/exceptions/source/others/zerodivisionerror_without_traceback.py 0000644 0001750 0001750 00000000636 14175241406 030452 0 ustar nilesh nilesh import sys
from loguru import logger
def test(diagnose, backtrace):
logger.remove()
logger.add(sys.stderr, format="", diagnose=diagnose, backtrace=backtrace, colorize=True)
try:
1 / 0
except ZeroDivisionError:
type_, value, _ = sys.exc_info()
logger.opt(exception=(type_, value, None)).error("")
test(False, False)
test(True, False)
test(False, True)
test(True, True)
loguru-0.6.0/tests/exceptions/source/others/exception_formatting_function.py 0000644 0001750 0001750 00000000660 14175241406 027224 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=False, backtrace=True, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=True, colorize=False)
@logger.catch
def a(a, b):
a / b
a(1, 0)
loguru-0.6.0/tests/exceptions/source/others/sys_tracebacklimit.py 0000644 0001750 0001750 00000001241 14175241406 024737 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=False, backtrace=True, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=True, colorize=False)
def a():
b()
def b():
c()
def c():
d()
def d():
e()
def e():
f()
def f():
g()
def g():
h()
def h():
i()
def i():
j(1, 0)
def j(a, b):
a / b
sys.tracebacklimit = 5
try:
a()
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/others/catch_as_decorator_with_parentheses.py 0000644 0001750 0001750 00000000277 14175241406 030336 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
@logger.catch()
def c(a, b):
a / b
c(5, b=0)
loguru-0.6.0/tests/exceptions/source/others/nested_with_reraise.py 0000644 0001750 0001750 00000001161 14175241406 025113 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=False, backtrace=True, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=True, colorize=False)
@logger.catch(reraise=True)
def foo(a, b):
a / b
@logger.catch
def bar(x, y):
try:
f = foo(x, y)
except Exception as e:
raise ValueError from e
def baz():
bar(1, 0)
if __name__ == "__main__":
baz()
loguru-0.6.0/tests/exceptions/source/others/sys_tracebacklimit_none.py 0000644 0001750 0001750 00000001244 14175241406 025761 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=False, backtrace=True, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=True, colorize=False)
def a():
b()
def b():
c()
def c():
d()
def d():
e()
def e():
f()
def f():
g()
def g():
h()
def h():
i()
def i():
j(1, 0)
def j(a, b):
a / b
sys.tracebacklimit = None
try:
a()
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/others/handler_formatting_with_decorator.py 0000644 0001750 0001750 00000000356 14175241406 030035 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(
sys.stderr,
format="{name} {file.name} {function} {line}",
diagnose=False,
backtrace=False,
colorize=False,
)
@logger.catch
def a():
1 / 0
a()
loguru-0.6.0/tests/exceptions/source/others/catch_message.py 0000644 0001750 0001750 00000000442 14175241406 023653 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="{message}", diagnose=False, backtrace=False, colorize=False)
def a():
1 / 0
with logger.catch(message="An error occurred (1):"):
a()
a = logger.catch(message="An error occurred (2):")(a)
a()
loguru-0.6.0/tests/exceptions/source/others/exception_formatting_coroutine.py 0000644 0001750 0001750 00000000764 14175241406 027413 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=False, backtrace=True, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=True, colorize=False)
@logger.catch
async def foo(a, b):
a / b
f = foo(1, 0)
try:
f.send(None)
except StopIteration:
pass
loguru-0.6.0/tests/exceptions/source/others/message_formatting_with_context_manager.py 0000644 0001750 0001750 00000000447 14175241406 031241 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="{message}", diagnose=False, backtrace=False, colorize=False)
def a():
with logger.catch(
message="{record[name]} {record[file].name} {record[function]} {record[line]}"
):
1 / 0
a()
loguru-0.6.0/tests/exceptions/source/others/syntaxerror_without_traceback.py 0000644 0001750 0001750 00000000640 14175241406 027247 0 ustar nilesh nilesh import sys
from loguru import logger
def test(diagnose, backtrace):
logger.remove()
logger.add(sys.stderr, format="", diagnose=diagnose, backtrace=backtrace, colorize=True)
try:
exec("foo =")
except SyntaxError:
type_, value, _ = sys.exc_info()
logger.opt(exception=(type_, value, None)).error("")
test(False, False)
test(True, False)
test(False, True)
test(True, True)
loguru-0.6.0/tests/exceptions/source/others/sys_tracebacklimit_unset.py 0000644 0001750 0001750 00000001312 14175241406 026154 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=False, backtrace=True, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=True, colorize=False)
def a():
b()
def b():
c()
def c():
d()
def d():
e()
def e():
f()
def f():
g()
def g():
h()
def h():
i()
def i():
j(1, 0)
def j(a, b):
a / b
try:
del sys.tracebacklimit
except AttributeError:
pass
try:
a()
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/others/exception_formatting_generator.py 0000644 0001750 0001750 00000000757 14175241406 027374 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=False, backtrace=True, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=True, colorize=False)
@logger.catch
def foo(a, b):
yield a / b
f = foo(1, 0)
try:
next(f)
except StopIteration:
pass
loguru-0.6.0/tests/exceptions/source/others/sys_tracebacklimit_negative.py 0000644 0001750 0001750 00000001242 14175241406 026622 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=False, colorize=False)
logger.add(sys.stderr, format="", diagnose=False, backtrace=True, colorize=False)
logger.add(sys.stderr, format="", diagnose=True, backtrace=True, colorize=False)
def a():
b()
def b():
c()
def c():
d()
def d():
e()
def e():
f()
def f():
g()
def g():
h()
def h():
i()
def i():
j(1, 0)
def j(a, b):
a / b
sys.tracebacklimit = -1
try:
a()
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/others/level_number.py 0000644 0001750 0001750 00000000351 14175241406 023543 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(
sys.stderr, format="{level.name} | {level.no}", diagnose=False, backtrace=False, colorize=False
)
def a():
with logger.catch(level=13):
1 / 0
a()
loguru-0.6.0/tests/exceptions/source/others/catch_as_function.py 0000644 0001750 0001750 00000000273 14175241406 024541 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", diagnose=False, backtrace=False, colorize=False)
def a():
1 / 0
a = logger.catch()(a)
a()
loguru-0.6.0/tests/exceptions/source/others/level_name.py 0000644 0001750 0001750 00000000356 14175241406 023200 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(
sys.stderr, format="{level.name} | {level.no}", diagnose=False, backtrace=False, colorize=False
)
def a():
with logger.catch(level="DEBUG"):
1 / 0
a()
loguru-0.6.0/tests/exceptions/source/others/message_formatting_with_decorator.py 0000644 0001750 0001750 00000000414 14175241406 030037 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="{message}", diagnose=False, backtrace=False, colorize=False)
@logger.catch(message="{record[name]} {record[file].name} {record[function]} {record[line]}")
def a():
1 / 0
a()
loguru-0.6.0/tests/exceptions/source/ownership/ 0000755 0001750 0001750 00000000000 14175241406 021225 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/source/ownership/assertion_from_lib.py 0000644 0001750 0001750 00000001165 14175241406 025462 0 ustar nilesh nilesh import sys
import _init
from somelib import assertionerror
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
try:
a, b = 1, 2
assertionerror(a, b)
except AssertionError:
logger.exception("")
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/ownership/_init.py 0000644 0001750 0001750 00000000320 14175241406 022674 0 ustar nilesh nilesh import os
import sys
import sysconfig
usersite = os.path.abspath(os.path.join(os.path.dirname(__file__), "usersite"))
sys.path.append(usersite)
sysconfig._INSTALL_SCHEMES["posix_user"]["purelib"] = usersite
loguru-0.6.0/tests/exceptions/source/ownership/usersite/ 0000755 0001750 0001750 00000000000 14175241406 023070 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/source/ownership/usersite/somelib/ 0000755 0001750 0001750 00000000000 14175241406 024522 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/source/ownership/usersite/somelib/__init__.py 0000644 0001750 0001750 00000000360 14175241406 026632 0 ustar nilesh nilesh def divide(x, y):
x / y
def divide_indirect(a, b):
divide(a, b)
def callme(callback):
callback()
def execute():
exec("divide(1, 0)")
def syntaxerror():
exec("foo =")
def assertionerror(x, y):
assert x == y
loguru-0.6.0/tests/exceptions/source/ownership/assertion_from_local.py 0000644 0001750 0001750 00000001156 14175241406 026006 0 ustar nilesh nilesh import sys
import _init
from somelib import assertionerror
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
try:
a, b = 1, 2
assert a == b
except AssertionError:
logger.exception("")
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/ownership/indirect.py 0000644 0001750 0001750 00000001147 14175241406 023403 0 ustar nilesh nilesh import sys
import _init
from somelib import divide_indirect
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
try:
divide_indirect(10, 0)
except ZeroDivisionError:
logger.exception("")
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/ownership/callback.py 0000644 0001750 0001750 00000001212 14175241406 023327 0 ustar nilesh nilesh import sys
import _init
from somelib import callme, divide
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
def callback():
divide(1, 0)
try:
callme(callback)
except ZeroDivisionError:
logger.exception("")
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/ownership/string_source.py 0000644 0001750 0001750 00000001112 14175241406 024460 0 ustar nilesh nilesh import sys
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
def foo():
1 / 0
try:
exec("foo()")
except ZeroDivisionError:
logger.exception("")
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/ownership/decorated_callback.py 0000644 0001750 0001750 00000001141 14175241406 025342 0 ustar nilesh nilesh import sys
import _init
from somelib import callme, divide
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
@logger.catch
def callback():
a, b = 1, 0
a / b
callme(callback)
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/ownership/catch_decorator_from_lib.py 0000644 0001750 0001750 00000001124 14175241406 026572 0 ustar nilesh nilesh import sys
import _init
from somelib import callme, divide
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
@logger.catch
def callback():
divide(1, 0)
callme(callback)
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/ownership/catch_decorator.py 0000644 0001750 0001750 00000001074 14175241406 024725 0 ustar nilesh nilesh import sys
import _init
from somelib import divide
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
@logger.catch
def foo():
divide(1, 0)
foo()
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/ownership/syntaxerror.py 0000644 0001750 0001750 00000001124 14175241406 024175 0 ustar nilesh nilesh import sys
import _init
from somelib import syntaxerror
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
try:
syntaxerror()
except SyntaxError:
logger.exception("")
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/ownership/string_lib.py 0000644 0001750 0001750 00000001122 14175241406 023727 0 ustar nilesh nilesh import sys
import _init
from somelib import execute
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
try:
execute()
except ZeroDivisionError:
logger.exception("")
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/ownership/direct.py 0000644 0001750 0001750 00000001125 14175241406 023050 0 ustar nilesh nilesh import sys
import _init
from somelib import divide
from loguru import logger
def test(*, backtrace, colorize, diagnose):
logger.remove()
logger.add(sys.stderr, format="", colorize=colorize, backtrace=backtrace, diagnose=diagnose)
try:
divide(10, 0)
except ZeroDivisionError:
logger.exception("")
test(backtrace=True, colorize=True, diagnose=True)
test(backtrace=False, colorize=True, diagnose=True)
test(backtrace=True, colorize=True, diagnose=False)
test(backtrace=False, colorize=True, diagnose=False)
test(backtrace=False, colorize=False, diagnose=False)
loguru-0.6.0/tests/exceptions/source/diagnose/ 0000755 0001750 0001750 00000000000 14175241406 021000 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/source/diagnose/no_error_message.py 0000644 0001750 0001750 00000000402 14175241406 024677 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
def foo():
raise ValueError("")
def bar():
foo()
try:
bar()
except ValueError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/keyword_argument.py 0000644 0001750 0001750 00000000366 14175241406 024745 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
def f(x):
return 1 / x
y = 0
with logger.catch():
f(x=y)
x = 0
with logger.catch():
f(x=x)
loguru-0.6.0/tests/exceptions/source/diagnose/assertion_error.py 0000644 0001750 0001750 00000000405 14175241406 024571 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
def foo(abc, xyz):
assert abc > 10 and xyz == 60
try:
foo(9, 55)
except AssertionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/attributes.py 0000644 0001750 0001750 00000000657 14175241406 023550 0 ustar nilesh nilesh import sys
from loguru import logger
# fmt: off
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
class Obj:
@property
def forbidden(self):
raise RuntimeError
a = Obj()
a.b = "123"
def foo():
x = None
... + 1 + bar(a).b + a.forbidden + a.nope.a + x.__bool__ or a. b . isdigit() and .3 + ...
try:
foo()
except TypeError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/assertion_error_custom.py 0000644 0001750 0001750 00000000435 14175241406 026166 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
def foo(abc, xyz):
assert abc > 10 and xyz == 60, "Foo assertion failed"
try:
foo(9, 55)
except AssertionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/multilines_repr.py 0000644 0001750 0001750 00000000525 14175241406 024571 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
class A:
def __repr__(self):
return "[[1, 2, 3]\n" " [4, 5, 6]\n" " [7, 8, 9]]"
def multiline():
a = b = A()
a + b
try:
multiline()
except TypeError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/source_multilines.py 0000644 0001750 0001750 00000001405 14175241406 025117 0 ustar nilesh nilesh import sys
from loguru import logger
# fmt: off
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
def bug_1(n):
return ("""multi-lines
""" + n / 0)
def bug_2(a, b, c):
return (1 / 0 + a + b + \
c)
def bug_3(string):
return min(10
, string, 20 / 0)
def bug_4():
a, b = 1, 0
dct = {
"foo": 1,
"bar": a / b,
}
return dct
string = """multi-lines
"""
try:
bug_1(10)
except ZeroDivisionError:
logger.exception("")
try:
bug_2(1, string, 3)
except ZeroDivisionError:
logger.exception("")
try:
bug_3(string)
except ZeroDivisionError:
logger.exception("")
try:
bug_4()
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/indentation_error.py 0000644 0001750 0001750 00000000474 14175241406 025104 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
code = """
if True:
a = 5
print("foobar") #intentional faulty indentation here.
b = 7
"""
try:
exec(code)
except IndentationError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/assertion_error_in_string.py 0000644 0001750 0001750 00000000415 14175241406 026646 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
def foo(abc, xyz):
exec("assert abc > 10 and xyz == 60")
try:
foo(9, 55)
except AssertionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/chained_both.py 0000644 0001750 0001750 00000000723 14175241406 023763 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
def div(x, y):
x / y
def cause(x, y):
try:
div(x, y)
except Exception:
raise ValueError("Division error")
def context(x, y):
try:
cause(x, y)
except Exception as e:
raise ValueError("Cause error") from e
try:
context(1, 0)
except ValueError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/unprintable_object.py 0000644 0001750 0001750 00000000463 14175241406 025226 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
class Object:
def __repr__(self):
raise RuntimeError("No way!")
try:
obj = Object()
obj + 1 / 0
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/encoding.py 0000644 0001750 0001750 00000000416 14175241406 023141 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
def _deep(val):
return 1 / val
def div():
return _deep("天")
try:
div()
except TypeError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/parenthesis.py 0000644 0001750 0001750 00000001163 14175241406 023700 0 ustar nilesh nilesh import sys
from loguru import logger
# fmt: off
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
class XYZ:
pass
def a(b, c):
x = XYZ()
x.val = 9
(a, b, x.val, ) = 12, 15 / c, 17
def b():
foo, bar, baz = {}, XYZ, 0
foo[("baz")] = bar() + (a(5, baz))
def c():
x = XYZ()
x.val = 123
x.val += 456 and b()
def d(j):
x, y, z = 2, 5, 3
xyz = XYZ()
xyz.val = 123
i = 12 \
; z = (x * y); y = (j or xyz.val * c() \
+ 3)
def e():
a = 1
(5 \
) + d(()) + a
with logger.catch():
e()
loguru-0.6.0/tests/exceptions/source/diagnose/source_strings.py 0000644 0001750 0001750 00000000405 14175241406 024422 0 ustar nilesh nilesh import sys
from loguru import logger
# fmt: off
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
a = b = 0
try:
a + b"prefix" + 'single' + """triple""" + 1 + b
except TypeError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/syntax_error.py 0000644 0001750 0001750 00000000373 14175241406 024114 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
code = """
if True:
a = 5
b = 7 *
"""
try:
exec(code)
except SyntaxError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/global_variable.py 0000644 0001750 0001750 00000000450 14175241406 024456 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
foo = True
bar = False
def func():
foo = None
return 1 / 0 + foo + bar + False
try:
func()
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/truncating.py 0000644 0001750 0001750 00000000370 14175241406 023530 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
def div():
var = "9" * 150
return 1 / var
try:
div()
except TypeError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/diagnose/syntax_highlighting.py 0000644 0001750 0001750 00000000770 14175241406 025431 0 ustar nilesh nilesh import sys
from loguru import logger
# fmt: off
logger.remove()
logger.add(sys.stderr, format="", colorize=True, backtrace=False, diagnose=True)
def a():
1 / 0 + 1 * 0 - 1 % 0 // 1**0 @ 1 # Error
def b():
a() or False == None != True
def c():
1, 2.5, 3.0, 0.4, "str", r"rrr", rb"binary", b()
def d():
min(range(1, 10)), list(), dict(), c(), ...
def e(x):
x in [1], x in (1,), x in {1}, x in {1: 1}, d()
try:
e(0)
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/backtrace/ 0000755 0001750 0001750 00000000000 14175241406 021126 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/source/backtrace/nested_decorator_catch_up.py 0000644 0001750 0001750 00000000526 14175241406 026675 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=False, diagnose=False)
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
@logger.catch(ZeroDivisionError)
def foo():
bar()
@logger.catch(NotImplementedError)
def bar():
1 / 0
foo()
loguru-0.6.0/tests/exceptions/source/backtrace/chaining_second.py 0000644 0001750 0001750 00000001004 14175241406 024606 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
def a_decorator():
b_decorated()
def a_context_manager():
with logger.catch():
b_not_decorated()
def a_explicit():
try:
b_not_decorated()
except ZeroDivisionError:
logger.exception("")
@logger.catch()
def b_decorated():
c()
def b_not_decorated():
c()
def c():
1 / 0
a_decorator()
a_context_manager()
a_explicit()
loguru-0.6.0/tests/exceptions/source/backtrace/not_enough_arguments.py 0000644 0001750 0001750 00000000541 14175241406 025732 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
@logger.catch
def decorated(x, y, z):
pass
def not_decorated(x, y, z):
pass
decorated(1)
with logger.catch():
not_decorated(2)
try:
not_decorated(3)
except TypeError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/backtrace/tail_recursion.py 0000644 0001750 0001750 00000000630 14175241406 024521 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
@logger.catch()
def a(n):
1 / n
a(n - 1)
def b(n):
1 / n
with logger.catch():
b(n - 1)
def c(n):
1 / n
try:
c(n - 1)
except ZeroDivisionError:
logger.exception("")
a(1)
a(2)
a(3)
b(1)
b(2)
b(3)
c(1)
c(2)
c(3)
loguru-0.6.0/tests/exceptions/source/backtrace/chained_expression_direct.py 0000644 0001750 0001750 00000001202 14175241406 026677 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
@logger.catch()
def a_decorated():
try:
1 / 0
except ZeroDivisionError:
raise ValueError("NOK")
def a_not_decorated():
try:
1 / 0
except ZeroDivisionError:
raise ValueError("NOK")
def b_decorator():
a_decorated()
def b_context_manager():
with logger.catch():
a_not_decorated()
def b_explicit():
try:
a_not_decorated()
except ValueError:
logger.exception("")
b_decorator()
b_context_manager()
b_explicit()
loguru-0.6.0/tests/exceptions/source/backtrace/no_tb.py 0000644 0001750 0001750 00000000517 14175241406 022604 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="{message}", colorize=False, backtrace=True, diagnose=False)
def f():
try:
1 / 0
except ZeroDivisionError:
ex_type, ex, tb = sys.exc_info()
tb = None
logger.opt(exception=(ex_type, ex, tb)).debug("Test:")
f()
loguru-0.6.0/tests/exceptions/source/backtrace/frame_values_backward.py 0000644 0001750 0001750 00000000355 14175241406 026012 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
k = 2
@logger.catch
def a(n):
1 / n
def b(n):
a(n - 1)
def c(n):
b(n - 1)
c(k)
loguru-0.6.0/tests/exceptions/source/backtrace/suppressed_expression_direct.py 0000644 0001750 0001750 00000001265 14175241406 027512 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
def a(x, y):
x / y
@logger.catch
def b_decorated():
try:
a(1, 0)
except ZeroDivisionError as e:
raise ValueError("NOK") from e
def b_not_decorated():
try:
a(1, 0)
except ZeroDivisionError as e:
raise ValueError("NOK") from e
def c_decorator():
b_decorated()
def c_context_manager():
with logger.catch():
b_not_decorated()
def c_explicit():
try:
b_not_decorated()
except ValueError:
logger.exception("")
c_decorator()
c_context_manager()
c_explicit()
loguru-0.6.0/tests/exceptions/source/backtrace/missing_attributes_traceback_objects.py 0000644 0001750 0001750 00000001774 14175241406 031140 0 ustar nilesh nilesh import sys
from collections import namedtuple
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
a, b = 1, 0
def div(x, y):
x / y
def foo():
div(a, b)
# See Twisted: https://git.io/fjJ48
# See Billiard: https://git.io/fjJ44
fake_code = namedtuple("fake_code", ("co_filename", "co_name"))
fake_frame = namedtuple("fake_frame", ("f_back", "f_code", "f_globals", "f_lineno", "f_locals"))
fake_traceback = namedtuple("fake_traceback", ("tb_frame", "tb_lasti", "tb_lineno", "tb_next"))
def make_fake(tb):
if not tb:
return None
code = fake_code(tb.tb_frame.f_code.co_filename, tb.tb_frame.f_code.co_name)
frame = fake_frame(None, code, {}, tb.tb_lineno, {})
tb = fake_traceback(frame, tb.tb_lasti, tb.tb_lineno, make_fake(tb.tb_next))
return tb
try:
foo()
except ZeroDivisionError:
type_, value, tb = sys.exc_info()
tb = make_fake(tb)
logger.opt(exception=(type_, value, tb)).error("")
loguru-0.6.0/tests/exceptions/source/backtrace/frame_values_forward.py 0000644 0001750 0001750 00000000355 14175241406 025700 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
k = 2
def a(n):
1 / n
def b(n):
a(n - 1)
@logger.catch
def c(n):
b(n - 1)
c(k)
loguru-0.6.0/tests/exceptions/source/backtrace/chained_expression_indirect.py 0000644 0001750 0001750 00000000550 14175241406 027233 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
def a():
try:
1 / 0
except ZeroDivisionError:
raise ValueError("NOK")
@logger.catch
def b():
a()
b()
with logger.catch():
a()
try:
a()
except ValueError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/backtrace/too_many_arguments.py 0000644 0001750 0001750 00000000523 14175241406 025412 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
@logger.catch
def decorated():
pass
def not_decorated():
pass
decorated(1)
with logger.catch():
not_decorated(2)
try:
not_decorated(3)
except TypeError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/backtrace/chaining_first.py 0000644 0001750 0001750 00000000611 14175241406 024465 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
@logger.catch
def a_decorated():
b()
def a_not_decorated():
b()
def b():
c()
def c():
1 / 0
a_decorated()
with logger.catch():
a_not_decorated()
try:
a_not_decorated()
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/backtrace/chaining_third.py 0000644 0001750 0001750 00000001160 14175241406 024450 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
def a_decorator():
b_decorator()
def a_context_manager():
b_context_manager()
def a_explicit():
b_explicit()
def b_decorator():
c_decorated()
def b_context_manager():
with logger.catch():
c_not_decorated()
def b_explicit():
try:
c_not_decorated()
except ZeroDivisionError:
logger.exception("")
@logger.catch
def c_decorated():
1 / 0
def c_not_decorated():
1 / 0
a_decorator()
a_context_manager()
a_explicit()
loguru-0.6.0/tests/exceptions/source/backtrace/function.py 0000644 0001750 0001750 00000000475 14175241406 023333 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
@logger.catch()
def a():
1 / 0
def b():
2 / 0
def c():
3 / 0
a()
with logger.catch():
b()
try:
c()
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/backtrace/enqueue_with_others_handlers.py 0000644 0001750 0001750 00000001152 14175241406 027445 0 ustar nilesh nilesh import sys
from loguru import logger
def check_tb_sink(message):
exception = message.record["exception"]
if exception is None:
return
assert exception.traceback is not None
logger.remove()
logger.add(
check_tb_sink, enqueue=False, catch=False, colorize=False, backtrace=True, diagnose=False
)
logger.add(
sys.stderr, format="", enqueue=True, catch=False, colorize=False, backtrace=True, diagnose=False
)
logger.add(
check_tb_sink, enqueue=False, catch=False, colorize=False, backtrace=True, diagnose=False
)
try:
1 / 0
except ZeroDivisionError:
logger.exception("Error")
loguru-0.6.0/tests/exceptions/source/backtrace/raising_recursion.py 0000644 0001750 0001750 00000000720 14175241406 025224 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
@logger.catch
def a(n):
if n:
a(n - 1)
n / 0
def b(n):
with logger.catch():
if n:
b(n - 1)
n / 0
def c(n):
try:
if n:
c(n - 1)
n / 0
except ZeroDivisionError:
logger.exception("")
a(1)
a(2)
a(3)
b(1)
b(2)
b(3)
c(1)
c(2)
c(3)
loguru-0.6.0/tests/exceptions/source/backtrace/nested_explicit_catch_up.py 0000644 0001750 0001750 00000000561 14175241406 026533 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=False, diagnose=False)
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
def foo():
bar()
@logger.catch(NotImplementedError)
def bar():
1 / 0
try:
foo()
except ZeroDivisionError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/backtrace/enqueue.py 0000644 0001750 0001750 00000000337 14175241406 023152 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, enqueue=True, format="", colorize=False, backtrace=True, diagnose=False)
try:
1 / 0
except ZeroDivisionError:
logger.exception("Error")
loguru-0.6.0/tests/exceptions/source/backtrace/suppressed_expression_indirect.py 0000644 0001750 0001750 00000000740 14175241406 030036 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
def a(x, y):
x / y
def b():
try:
a(1, 0)
except ZeroDivisionError as e:
raise ValueError("NOK") from e
@logger.catch
def c_decorated():
b()
def c_not_decorated():
b()
c_decorated()
with logger.catch():
c_not_decorated()
try:
c_not_decorated()
except ValueError:
logger.exception("")
loguru-0.6.0/tests/exceptions/source/backtrace/head_recursion.py 0000644 0001750 0001750 00000000722 14175241406 024473 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
@logger.catch()
def a(n):
if n:
a(n - 1)
1 / n
def b(n):
if n:
with logger.catch():
b(n - 1)
1 / n
def c(n):
if n:
try:
c(n - 1)
except ZeroDivisionError:
logger.exception("")
1 / n
a(1)
a(2)
a(3)
b(1)
b(2)
b(3)
c(1)
c(2)
c(3)
loguru-0.6.0/tests/exceptions/source/backtrace/nested_chained_catch_up.py 0000644 0001750 0001750 00000000642 14175241406 026305 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=False, diagnose=False)
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
def foo():
bar()
@logger.catch(ValueError)
def bar():
1 / 0
@logger.catch
def main():
try:
foo()
except Exception as e:
raise ZeroDivisionError from e
main()
loguru-0.6.0/tests/exceptions/source/backtrace/nested.py 0000644 0001750 0001750 00000000711 14175241406 022761 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
def a(x):
@logger.catch
def nested(i):
1 / i
nested(x)
a(0)
def b(x):
def nested(i):
1 / i
with logger.catch():
nested(x)
b(0)
def c(x):
def nested(i):
1 / i
try:
nested(x)
except ZeroDivisionError:
logger.exception("")
c(0)
loguru-0.6.0/tests/exceptions/source/backtrace/nested_wrapping.py 0000644 0001750 0001750 00000000631 14175241406 024671 0 ustar nilesh nilesh import sys
from loguru import logger
logger.remove()
logger.add(sys.stderr, format="", colorize=False, backtrace=True, diagnose=False)
def f(i):
1 / i
@logger.catch
@logger.catch()
def a(x):
f(x)
a(0)
with logger.catch():
with logger.catch():
f(0)
try:
try:
f(0)
except ZeroDivisionError:
logger.exception("")
except Exception:
logger.exception("")
loguru-0.6.0/tests/exceptions/output/ 0000755 0001750 0001750 00000000000 14175241406 017247 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/output/others/ 0000755 0001750 0001750 00000000000 14175241406 020553 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/output/others/catch_message.txt 0000644 0001750 0001750 00000001016 14175241406 024100 0 ustar nilesh nilesh An error occurred (1):
Traceback (most recent call last):
File "tests/exceptions/source/others/catch_message.py", line 14, in
a()
File "tests/exceptions/source/others/catch_message.py", line 10, in a
1 / 0
ZeroDivisionError: division by zero
An error occurred (2):
Traceback (most recent call last):
File "tests/exceptions/source/others/catch_message.py", line 17, in
a()
File "tests/exceptions/source/others/catch_message.py", line 10, in a
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/handler_formatting_with_decorator.txt 0000644 0001750 0001750 00000000522 14175241406 030257 0 ustar nilesh nilesh __main__ handler_formatting_with_decorator.py 20
Traceback (most recent call last):
File "tests/exceptions/source/others/handler_formatting_with_decorator.py", line 20, in
a()
File "tests/exceptions/source/others/handler_formatting_with_decorator.py", line 17, in a
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/exception_formatting_function.txt 0000644 0001750 0001750 00000002324 14175241406 027452 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/exception_formatting_function.py", line 17, in
a(1, 0)
File "tests/exceptions/source/others/exception_formatting_function.py", line 14, in a
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/exception_formatting_function.py", line 17, in
a(1, 0)
└
File "tests/exceptions/source/others/exception_formatting_function.py", line 14, in a
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
Traceback (most recent call last):
> File "tests/exceptions/source/others/exception_formatting_function.py", line 17, in
a(1, 0)
File "tests/exceptions/source/others/exception_formatting_function.py", line 14, in a
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
> File "tests/exceptions/source/others/exception_formatting_function.py", line 17, in
a(1, 0)
└
File "tests/exceptions/source/others/exception_formatting_function.py", line 14, in a
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/sys_tracebacklimit_none.txt 0000644 0001750 0001750 00000011724 14175241406 026214 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 55, in
a()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 13, in a
b()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 17, in b
c()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 21, in c
d()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 25, in d
e()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 29, in e
f()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 33, in f
g()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 37, in g
h()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 41, in h
i()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 45, in i
j(1, 0)
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 49, in j
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 55, in
a()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 13, in a
b()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 17, in b
c()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 21, in c
d()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 25, in d
e()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 29, in e
f()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 33, in f
g()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 37, in g
h()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 41, in h
i()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 45, in i
j(1, 0)
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 49, in j
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
Traceback (most recent call last):
> File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 55, in
a()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 13, in a
b()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 17, in b
c()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 21, in c
d()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 25, in d
e()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 29, in e
f()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 33, in f
g()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 37, in g
h()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 41, in h
i()
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 45, in i
j(1, 0)
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 49, in j
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
> File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 55, in
a()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 13, in a
b()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 17, in b
c()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 21, in c
d()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 25, in d
e()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 29, in e
f()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 33, in f
g()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 37, in g
h()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 41, in h
i()
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 45, in i
j(1, 0)
└
File "tests/exceptions/source/others/sys_tracebacklimit_none.py", line 49, in j
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/sys_tracebacklimit.txt 0000644 0001750 0001750 00000004464 14175241406 025200 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 33, in f
g()
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 37, in g
h()
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 41, in h
i()
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 45, in i
j(1, 0)
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 49, in j
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 33, in f
g()
└
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 37, in g
h()
└
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 41, in h
i()
└
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 45, in i
j(1, 0)
└
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 49, in j
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 33, in f
g()
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 37, in g
h()
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 41, in h
i()
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 45, in i
j(1, 0)
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 49, in j
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 33, in f
g()
└
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 37, in g
h()
└
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 41, in h
i()
└
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 45, in i
j(1, 0)
└
File "tests/exceptions/source/others/sys_tracebacklimit.py", line 49, in j
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/sys_tracebacklimit_negative.txt 0000644 0001750 0001750 00000000224 14175241406 027050 0 ustar nilesh nilesh
ZeroDivisionError: division by zero
ZeroDivisionError: division by zero
ZeroDivisionError: division by zero
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/assertionerror_without_traceback.txt 0000644 0001750 0001750 00000000164 14175241406 030160 0 ustar nilesh nilesh
[31m[1mAssertionError[0m
[31m[1mAssertionError[0m
[31m[1mAssertionError[0m
[31m[1mAssertionError[0m
loguru-0.6.0/tests/exceptions/output/others/catch_as_decorator_with_parentheses.txt 0000644 0001750 0001750 00000000443 14175241406 030560 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/catch_as_decorator_with_parentheses.py", line 14, in
c(5, b=0)
File "tests/exceptions/source/others/catch_as_decorator_with_parentheses.py", line 11, in c
a / b
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/handler_formatting_with_context_manager.txt 0000644 0001750 0001750 00000000354 14175241406 031456 0 ustar nilesh nilesh __main__ handler_formatting_with_context_manager.py a 16
Traceback (most recent call last):
File "tests/exceptions/source/others/handler_formatting_with_context_manager.py", line 17, in a
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/nested_with_reraise.txt 0000644 0001750 0001750 00000010746 14175241406 025353 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 20, in bar
f = foo(x, y)
File "tests/exceptions/source/others/nested_with_reraise.py", line 14, in foo
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 20, in bar
f = foo(x, y)
│ │ └ 0
│ └ 1
└
File "tests/exceptions/source/others/nested_with_reraise.py", line 14, in foo
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 30, in
baz()
File "tests/exceptions/source/others/nested_with_reraise.py", line 26, in baz
bar(1, 0)
> File "tests/exceptions/source/others/nested_with_reraise.py", line 20, in bar
f = foo(x, y)
File "tests/exceptions/source/others/nested_with_reraise.py", line 14, in foo
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 30, in
baz()
└
File "tests/exceptions/source/others/nested_with_reraise.py", line 26, in baz
bar(1, 0)
└
> File "tests/exceptions/source/others/nested_with_reraise.py", line 20, in bar
f = foo(x, y)
│ │ └ 0
│ └ 1
└
File "tests/exceptions/source/others/nested_with_reraise.py", line 14, in foo
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 20, in bar
f = foo(x, y)
File "tests/exceptions/source/others/nested_with_reraise.py", line 14, in foo
a / b
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 26, in baz
bar(1, 0)
File "tests/exceptions/source/others/nested_with_reraise.py", line 22, in bar
raise ValueError from e
ValueError
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 20, in bar
f = foo(x, y)
│ │ └ 0
│ └ 1
└
File "tests/exceptions/source/others/nested_with_reraise.py", line 14, in foo
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 26, in baz
bar(1, 0)
└
File "tests/exceptions/source/others/nested_with_reraise.py", line 22, in bar
raise ValueError from e
ValueError
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 20, in bar
f = foo(x, y)
File "tests/exceptions/source/others/nested_with_reraise.py", line 14, in foo
a / b
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 30, in
baz()
> File "tests/exceptions/source/others/nested_with_reraise.py", line 26, in baz
bar(1, 0)
File "tests/exceptions/source/others/nested_with_reraise.py", line 22, in bar
raise ValueError from e
ValueError
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 20, in bar
f = foo(x, y)
│ │ └ 0
│ └ 1
└
File "tests/exceptions/source/others/nested_with_reraise.py", line 14, in foo
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "tests/exceptions/source/others/nested_with_reraise.py", line 30, in
baz()
└
> File "tests/exceptions/source/others/nested_with_reraise.py", line 26, in baz
bar(1, 0)
└
File "tests/exceptions/source/others/nested_with_reraise.py", line 22, in bar
raise ValueError from e
ValueError
loguru-0.6.0/tests/exceptions/output/others/catch_as_decorator_without_parentheses.txt 0000644 0001750 0001750 00000000444 14175241406 031311 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/catch_as_decorator_without_parentheses.py", line 14, in
c(2)
File "tests/exceptions/source/others/catch_as_decorator_without_parentheses.py", line 11, in c
a / b
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/catch_as_context_manager.txt 0000644 0001750 0001750 00000000254 14175241406 026320 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/catch_as_context_manager.py", line 10, in
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/level_number.txt 0000644 0001750 0001750 00000000246 14175241406 023775 0 ustar nilesh nilesh Level 13 | 13
Traceback (most recent call last):
File "tests/exceptions/source/others/level_number.py", line 13, in a
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/exception_in_property.txt 0000644 0001750 0001750 00000000572 14175241406 025750 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/exception_in_property.py", line 22, in
value = a.value
│ └
└ <__main__.A object at 0xDEADBEEF>
> File "tests/exceptions/source/others/exception_in_property.py", line 13, in value
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/exception_formatting_generator.txt 0000644 0001750 0001750 00000002462 14175241406 027616 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/exception_formatting_generator.py", line 20, in
next(f)
File "tests/exceptions/source/others/exception_formatting_generator.py", line 14, in foo
yield a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/exception_formatting_generator.py", line 20, in
next(f)
└
File "tests/exceptions/source/others/exception_formatting_generator.py", line 14, in foo
yield a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
Traceback (most recent call last):
> File "tests/exceptions/source/others/exception_formatting_generator.py", line 20, in
next(f)
File "tests/exceptions/source/others/exception_formatting_generator.py", line 14, in foo
yield a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
> File "tests/exceptions/source/others/exception_formatting_generator.py", line 20, in
next(f)
└
File "tests/exceptions/source/others/exception_formatting_generator.py", line 14, in foo
yield a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/catch_as_function.txt 0000644 0001750 0001750 00000000371 14175241406 024767 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/catch_as_function.py", line 14, in
a()
File "tests/exceptions/source/others/catch_as_function.py", line 10, in a
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/message_formatting_with_context_manager.txt 0000644 0001750 0001750 00000000354 14175241406 031465 0 ustar nilesh nilesh __main__ message_formatting_with_context_manager.py a 10
Traceback (most recent call last):
File "tests/exceptions/source/others/message_formatting_with_context_manager.py", line 13, in a
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/zerodivisionerror_without_traceback.txt 0000644 0001750 0001750 00000000350 14175241406 030672 0 ustar nilesh nilesh
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
loguru-0.6.0/tests/exceptions/output/others/message_formatting_with_decorator.txt 0000644 0001750 0001750 00000000522 14175241406 030266 0 ustar nilesh nilesh __main__ message_formatting_with_decorator.py 14
Traceback (most recent call last):
File "tests/exceptions/source/others/message_formatting_with_decorator.py", line 14, in
a()
File "tests/exceptions/source/others/message_formatting_with_decorator.py", line 11, in a
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/sys_tracebacklimit_unset.txt 0000644 0001750 0001750 00000012000 14175241406 026377 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 58, in
a()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 13, in a
b()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 17, in b
c()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 21, in c
d()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 25, in d
e()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 29, in e
f()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 33, in f
g()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 37, in g
h()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 41, in h
i()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 45, in i
j(1, 0)
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 49, in j
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 58, in
a()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 13, in a
b()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 17, in b
c()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 21, in c
d()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 25, in d
e()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 29, in e
f()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 33, in f
g()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 37, in g
h()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 41, in h
i()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 45, in i
j(1, 0)
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 49, in j
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
Traceback (most recent call last):
> File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 58, in
a()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 13, in a
b()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 17, in b
c()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 21, in c
d()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 25, in d
e()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 29, in e
f()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 33, in f
g()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 37, in g
h()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 41, in h
i()
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 45, in i
j(1, 0)
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 49, in j
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
> File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 58, in
a()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 13, in a
b()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 17, in b
c()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 21, in c
d()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 25, in d
e()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 29, in e
f()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 33, in f
g()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 37, in g
h()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 41, in h
i()
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 45, in i
j(1, 0)
└
File "tests/exceptions/source/others/sys_tracebacklimit_unset.py", line 49, in j
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/level_name.txt 0000644 0001750 0001750 00000000241 14175241406 023420 0 ustar nilesh nilesh DEBUG | 10
Traceback (most recent call last):
File "tests/exceptions/source/others/level_name.py", line 13, in a
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/others/syntaxerror_without_traceback.txt 0000644 0001750 0001750 00000000604 14175241406 027476 0 ustar nilesh nilesh
File "", line 1
foo =
^
[31m[1mSyntaxError[0m:[1m invalid syntax[0m
File "", line 1
foo =
^
[31m[1mSyntaxError[0m:[1m invalid syntax[0m
File "", line 1
foo =
^
[31m[1mSyntaxError[0m:[1m invalid syntax[0m
File "", line 1
foo =
^
[31m[1mSyntaxError[0m:[1m invalid syntax[0m
loguru-0.6.0/tests/exceptions/output/others/exception_formatting_coroutine.txt 0000644 0001750 0001750 00000002562 14175241406 027640 0 ustar nilesh nilesh
Traceback (most recent call last):
File "tests/exceptions/source/others/exception_formatting_coroutine.py", line 20, in
f.send(None)
File "tests/exceptions/source/others/exception_formatting_coroutine.py", line 14, in foo
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
File "tests/exceptions/source/others/exception_formatting_coroutine.py", line 20, in
f.send(None)
│ └
└
File "tests/exceptions/source/others/exception_formatting_coroutine.py", line 14, in foo
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
Traceback (most recent call last):
> File "tests/exceptions/source/others/exception_formatting_coroutine.py", line 20, in
f.send(None)
File "tests/exceptions/source/others/exception_formatting_coroutine.py", line 14, in foo
a / b
ZeroDivisionError: division by zero
Traceback (most recent call last):
> File "tests/exceptions/source/others/exception_formatting_coroutine.py", line 20, in
f.send(None)
│ └
└
File "tests/exceptions/source/others/exception_formatting_coroutine.py", line 14, in foo
a / b
│ └ 0
└ 1
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/ownership/ 0000755 0001750 0001750 00000000000 14175241406 021265 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/output/ownership/assertion_from_local.txt 0000644 0001750 0001750 00000004234 14175241406 026235 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_local.py[0m", line [33m20[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_local.py[0m", line [33m15[0m, in [35mtest[0m
[35m[1massert[0m [1ma[0m [35m[1m==[0m [1mb[0m
[36m │ └ [0m[36m[1m2[0m
[36m └ [0m[36m[1m1[0m
[31m[1mAssertionError[0m: [35m[1massert[0m [1ma[0m [35m[1m==[0m [1mb[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_local.py[0m", line [33m15[0m, in [35mtest[0m
[35m[1massert[0m [1ma[0m [35m[1m==[0m [1mb[0m
[36m │ └ [0m[36m[1m2[0m
[36m └ [0m[36m[1m1[0m
[31m[1mAssertionError[0m: [35m[1massert[0m [1ma[0m [35m[1m==[0m [1mb[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_local.py[0m", line [33m22[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_local.py[0m", line [33m15[0m, in [35mtest[0m
[35m[1massert[0m [1ma[0m [35m[1m==[0m [1mb[0m
[31m[1mAssertionError[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_local.py[0m", line [33m15[0m, in [35mtest[0m
[35m[1massert[0m [1ma[0m [35m[1m==[0m [1mb[0m
[31m[1mAssertionError[0m
Traceback (most recent call last):
File "tests/exceptions/source/ownership/assertion_from_local.py", line 15, in test
assert a == b
AssertionError
loguru-0.6.0/tests/exceptions/output/ownership/direct.txt 0000644 0001750 0001750 00000005015 14175241406 023301 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdirect.py[0m", line [33m19[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mdirect.py[0m", line [33m14[0m, in [35mtest[0m
[1mdivide[0m[1m([0m[34m[1m10[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 10
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdirect.py[0m", line [33m14[0m, in [35mtest[0m
[1mdivide[0m[1m([0m[34m[1m10[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 10
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdirect.py[0m", line [33m21[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mdirect.py[0m", line [33m14[0m, in [35mtest[0m
[1mdivide[0m[1m([0m[34m[1m10[0m[1m,[0m [34m[1m0[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdirect.py[0m", line [33m14[0m, in [35mtest[0m
[1mdivide[0m[1m([0m[34m[1m10[0m[1m,[0m [34m[1m0[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
Traceback (most recent call last):
File "tests/exceptions/source/ownership/direct.py", line 14, in test
divide(10, 0)
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/ownership/decorated_callback.txt 0000644 0001750 0001750 00000006067 14175241406 025605 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdecorated_callback.py[0m", line [33m21[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdecorated_callback.py[0m", line [33m18[0m, in [35mtest[0m
[1mcallme[0m[1m([0m[1mcallback[0m[1m)[0m
[36m│ └ [0m[36m[1m.callback at 0xDEADBEEF>[0m
[36m└ [0m[36m[1m[0m
> File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
└ .callback at 0xDEADBEEF>
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdecorated_callback.py[0m", line [33m16[0m, in [35mcallback[0m
[1ma[0m [35m[1m/[0m [1mb[0m
[36m│ └ [0m[36m[1m0[0m
[36m└ [0m[36m[1m1[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
└ .callback at 0xDEADBEEF>
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdecorated_callback.py[0m", line [33m16[0m, in [35mcallback[0m
[1ma[0m [35m[1m/[0m [1mb[0m
[36m│ └ [0m[36m[1m0[0m
[36m└ [0m[36m[1m1[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdecorated_callback.py[0m", line [33m23[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdecorated_callback.py[0m", line [33m18[0m, in [35mtest[0m
[1mcallme[0m[1m([0m[1mcallback[0m[1m)[0m
> File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdecorated_callback.py[0m", line [33m16[0m, in [35mcallback[0m
[1ma[0m [35m[1m/[0m [1mb[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
File "[32mtests/exceptions/source/ownership/[0m[32m[1mdecorated_callback.py[0m", line [33m16[0m, in [35mcallback[0m
[1ma[0m [35m[1m/[0m [1mb[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
Traceback (most recent call last):
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
File "tests/exceptions/source/ownership/decorated_callback.py", line 16, in callback
a / b
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/ownership/syntaxerror.txt 0000644 0001750 0001750 00000005205 14175241406 024430 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1msyntaxerror.py[0m", line [33m19[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1msyntaxerror.py[0m", line [33m14[0m, in [35mtest[0m
[1msyntaxerror[0m[1m([0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 18, in syntaxerror
exec("foo =")
File "", line 1
foo =
^
[31m[1mSyntaxError[0m:[1m invalid syntax[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1msyntaxerror.py[0m", line [33m14[0m, in [35mtest[0m
[1msyntaxerror[0m[1m([0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 18, in syntaxerror
exec("foo =")
File "", line 1
foo =
^
[31m[1mSyntaxError[0m:[1m invalid syntax[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1msyntaxerror.py[0m", line [33m21[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1msyntaxerror.py[0m", line [33m14[0m, in [35mtest[0m
[1msyntaxerror[0m[1m([0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 18, in syntaxerror
exec("foo =")
File "", line 1
foo =
^
[31m[1mSyntaxError[0m:[1m invalid syntax[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1msyntaxerror.py[0m", line [33m14[0m, in [35mtest[0m
[1msyntaxerror[0m[1m([0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 18, in syntaxerror
exec("foo =")
File "", line 1
foo =
^
[31m[1mSyntaxError[0m:[1m invalid syntax[0m
Traceback (most recent call last):
File "tests/exceptions/source/ownership/syntaxerror.py", line 14, in test
syntaxerror()
File "/usr/lib/python/somelib/__init__.py", line 18, in syntaxerror
exec("foo =")
File "", line 1
foo =
^
SyntaxError: invalid syntax
loguru-0.6.0/tests/exceptions/output/ownership/catch_decorator.txt 0000644 0001750 0001750 00000006626 14175241406 025164 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator.py[0m", line [33m20[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator.py[0m", line [33m17[0m, in [35mtest[0m
[1mfoo[0m[1m([0m[1m)[0m
[36m└ [0m[36m[1m.foo at 0xDEADBEEF>[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator.py[0m", line [33m15[0m, in [35mfoo[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 1
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator.py[0m", line [33m17[0m, in [35mtest[0m
[1mfoo[0m[1m([0m[1m)[0m
[36m└ [0m[36m[1m.foo at 0xDEADBEEF>[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator.py[0m", line [33m15[0m, in [35mfoo[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 1
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator.py[0m", line [33m22[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator.py[0m", line [33m17[0m, in [35mtest[0m
[1mfoo[0m[1m([0m[1m)[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator.py[0m", line [33m15[0m, in [35mfoo[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator.py[0m", line [33m17[0m, in [35mtest[0m
[1mfoo[0m[1m([0m[1m)[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator.py[0m", line [33m15[0m, in [35mfoo[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
Traceback (most recent call last):
File "tests/exceptions/source/ownership/catch_decorator.py", line 17, in test
foo()
File "tests/exceptions/source/ownership/catch_decorator.py", line 15, in foo
divide(1, 0)
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/ownership/callback.txt 0000644 0001750 0001750 00000010114 14175241406 023557 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcallback.py[0m", line [33m22[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mcallback.py[0m", line [33m17[0m, in [35mtest[0m
[1mcallme[0m[1m([0m[1mcallback[0m[1m)[0m
[36m│ └ [0m[36m[1m.callback at 0xDEADBEEF>[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
└ .callback at 0xDEADBEEF>
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcallback.py[0m", line [33m14[0m, in [35mcallback[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 1
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcallback.py[0m", line [33m17[0m, in [35mtest[0m
[1mcallme[0m[1m([0m[1mcallback[0m[1m)[0m
[36m│ └ [0m[36m[1m.callback at 0xDEADBEEF>[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
└ .callback at 0xDEADBEEF>
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcallback.py[0m", line [33m14[0m, in [35mcallback[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 1
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcallback.py[0m", line [33m24[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mcallback.py[0m", line [33m17[0m, in [35mtest[0m
[1mcallme[0m[1m([0m[1mcallback[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcallback.py[0m", line [33m14[0m, in [35mcallback[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcallback.py[0m", line [33m17[0m, in [35mtest[0m
[1mcallme[0m[1m([0m[1mcallback[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcallback.py[0m", line [33m14[0m, in [35mcallback[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
Traceback (most recent call last):
File "tests/exceptions/source/ownership/callback.py", line 17, in test
callme(callback)
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
File "tests/exceptions/source/ownership/callback.py", line 14, in callback
divide(1, 0)
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/ownership/string_lib.txt 0000644 0001750 0001750 00000006027 14175241406 024167 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_lib.py[0m", line [33m19[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_lib.py[0m", line [33m14[0m, in [35mtest[0m
[1mexecute[0m[1m([0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 14, in execute
exec("divide(1, 0)")
File "", line 1, in
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 1
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_lib.py[0m", line [33m14[0m, in [35mtest[0m
[1mexecute[0m[1m([0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 14, in execute
exec("divide(1, 0)")
File "", line 1, in
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 1
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_lib.py[0m", line [33m21[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_lib.py[0m", line [33m14[0m, in [35mtest[0m
[1mexecute[0m[1m([0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 14, in execute
exec("divide(1, 0)")
File "", line 1, in
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_lib.py[0m", line [33m14[0m, in [35mtest[0m
[1mexecute[0m[1m([0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 14, in execute
exec("divide(1, 0)")
File "", line 1, in
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
Traceback (most recent call last):
File "tests/exceptions/source/ownership/string_lib.py", line 14, in test
execute()
File "/usr/lib/python/somelib/__init__.py", line 14, in execute
exec("divide(1, 0)")
File "", line 1, in
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/ownership/string_source.txt 0000644 0001750 0001750 00000005552 14175241406 024723 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_source.py[0m", line [33m19[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_source.py[0m", line [33m14[0m, in [35mtest[0m
[1mexec[0m[1m([0m[36m"foo()"[0m[1m)[0m
File "", line 1, in
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_source.py[0m", line [33m11[0m, in [35mfoo[0m
[34m[1m1[0m [35m[1m/[0m [34m[1m0[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_source.py[0m", line [33m14[0m, in [35mtest[0m
[1mexec[0m[1m([0m[36m"foo()"[0m[1m)[0m
File "", line 1, in
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_source.py[0m", line [33m11[0m, in [35mfoo[0m
[34m[1m1[0m [35m[1m/[0m [34m[1m0[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_source.py[0m", line [33m21[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_source.py[0m", line [33m14[0m, in [35mtest[0m
[1mexec[0m[1m([0m[36m"foo()"[0m[1m)[0m
File "", line 1, in
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_source.py[0m", line [33m11[0m, in [35mfoo[0m
[34m[1m1[0m [35m[1m/[0m [34m[1m0[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_source.py[0m", line [33m14[0m, in [35mtest[0m
[1mexec[0m[1m([0m[36m"foo()"[0m[1m)[0m
File "", line 1, in
File "[32mtests/exceptions/source/ownership/[0m[32m[1mstring_source.py[0m", line [33m11[0m, in [35mfoo[0m
[34m[1m1[0m [35m[1m/[0m [34m[1m0[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
Traceback (most recent call last):
File "tests/exceptions/source/ownership/string_source.py", line 14, in test
exec("foo()")
File "", line 1, in
File "tests/exceptions/source/ownership/string_source.py", line 11, in foo
1 / 0
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/ownership/catch_decorator_from_lib.txt 0000644 0001750 0001750 00000007234 14175241406 027031 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator_from_lib.py[0m", line [33m20[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator_from_lib.py[0m", line [33m17[0m, in [35mtest[0m
[1mcallme[0m[1m([0m[1mcallback[0m[1m)[0m
[36m│ └ [0m[36m[1m.callback at 0xDEADBEEF>[0m
[36m└ [0m[36m[1m[0m
> File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
└ .callback at 0xDEADBEEF>
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator_from_lib.py[0m", line [33m15[0m, in [35mcallback[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 1
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
└ .callback at 0xDEADBEEF>
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator_from_lib.py[0m", line [33m15[0m, in [35mcallback[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 1
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator_from_lib.py[0m", line [33m22[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator_from_lib.py[0m", line [33m17[0m, in [35mtest[0m
[1mcallme[0m[1m([0m[1mcallback[0m[1m)[0m
> File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator_from_lib.py[0m", line [33m15[0m, in [35mcallback[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
File "[32mtests/exceptions/source/ownership/[0m[32m[1mcatch_decorator_from_lib.py[0m", line [33m15[0m, in [35mcallback[0m
[1mdivide[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
Traceback (most recent call last):
File "/usr/lib/python/somelib/__init__.py", line 10, in callme
callback()
File "tests/exceptions/source/ownership/catch_decorator_from_lib.py", line 15, in callback
divide(1, 0)
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/ownership/indirect.txt 0000644 0001750 0001750 00000006304 14175241406 023632 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mindirect.py[0m", line [33m19[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mindirect.py[0m", line [33m14[0m, in [35mtest[0m
[1mdivide_indirect[0m[1m([0m[34m[1m10[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 6, in divide_indirect
divide(a, b)
│ │ └ 0
│ └ 10
└
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 10
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mindirect.py[0m", line [33m14[0m, in [35mtest[0m
[1mdivide_indirect[0m[1m([0m[34m[1m10[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 6, in divide_indirect
divide(a, b)
│ │ └ 0
│ └ 10
└
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
│ └ 0
└ 10
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mindirect.py[0m", line [33m21[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1mindirect.py[0m", line [33m14[0m, in [35mtest[0m
[1mdivide_indirect[0m[1m([0m[34m[1m10[0m[1m,[0m [34m[1m0[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 6, in divide_indirect
divide(a, b)
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1mindirect.py[0m", line [33m14[0m, in [35mtest[0m
[1mdivide_indirect[0m[1m([0m[34m[1m10[0m[1m,[0m [34m[1m0[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 6, in divide_indirect
divide(a, b)
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
Traceback (most recent call last):
File "tests/exceptions/source/ownership/indirect.py", line 14, in test
divide_indirect(10, 0)
File "/usr/lib/python/somelib/__init__.py", line 6, in divide_indirect
divide(a, b)
File "/usr/lib/python/somelib/__init__.py", line 2, in divide
x / y
ZeroDivisionError: division by zero
loguru-0.6.0/tests/exceptions/output/ownership/assertion_from_lib.txt 0000644 0001750 0001750 00000005624 14175241406 025715 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_lib.py[0m", line [33m20[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mTrue[0m[1m)[0m
[36m└ [0m[36m[1m[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_lib.py[0m", line [33m15[0m, in [35mtest[0m
[1massertionerror[0m[1m([0m[1ma[0m[1m,[0m [1mb[0m[1m)[0m
[36m│ │ └ [0m[36m[1m2[0m
[36m│ └ [0m[36m[1m1[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 22, in assertionerror
assert x == y
│ └ 2
└ 1
[31m[1mAssertionError[0m: [35m[1massert[0m [1mx[0m [35m[1m==[0m [1my[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_lib.py[0m", line [33m15[0m, in [35mtest[0m
[1massertionerror[0m[1m([0m[1ma[0m[1m,[0m [1mb[0m[1m)[0m
[36m│ │ └ [0m[36m[1m2[0m
[36m│ └ [0m[36m[1m1[0m
[36m└ [0m[36m[1m[0m
File "/usr/lib/python/somelib/__init__.py", line 22, in assertionerror
assert x == y
│ └ 2
└ 1
[31m[1mAssertionError[0m: [35m[1massert[0m [1mx[0m [35m[1m==[0m [1my[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_lib.py[0m", line [33m22[0m, in [35m[0m
[1mtest[0m[1m([0m[1mbacktrace[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mcolorize[0m[35m[1m=[0m[36m[1mTrue[0m[1m,[0m [1mdiagnose[0m[35m[1m=[0m[36m[1mFalse[0m[1m)[0m
> File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_lib.py[0m", line [33m15[0m, in [35mtest[0m
[1massertionerror[0m[1m([0m[1ma[0m[1m,[0m [1mb[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 22, in assertionerror
assert x == y
[31m[1mAssertionError[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/ownership/[0m[32m[1massertion_from_lib.py[0m", line [33m15[0m, in [35mtest[0m
[1massertionerror[0m[1m([0m[1ma[0m[1m,[0m [1mb[0m[1m)[0m
File "/usr/lib/python/somelib/__init__.py", line 22, in assertionerror
assert x == y
[31m[1mAssertionError[0m
Traceback (most recent call last):
File "tests/exceptions/source/ownership/assertion_from_lib.py", line 15, in test
assertionerror(a, b)
File "/usr/lib/python/somelib/__init__.py", line 22, in assertionerror
assert x == y
AssertionError
loguru-0.6.0/tests/exceptions/output/diagnose/ 0000755 0001750 0001750 00000000000 14175241406 021040 5 ustar nilesh nilesh loguru-0.6.0/tests/exceptions/output/diagnose/global_variable.txt 0000644 0001750 0001750 00000001310 14175241406 024701 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mglobal_variable.py[0m", line [33m19[0m, in [35m[0m
[1mfunc[0m[1m([0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mglobal_variable.py[0m", line [33m15[0m, in [35mfunc[0m
[35m[1mreturn[0m [34m[1m1[0m [35m[1m/[0m [34m[1m0[0m [35m[1m+[0m [1mfoo[0m [35m[1m+[0m [1mbar[0m [35m[1m+[0m [36m[1mFalse[0m
[36m │ └ [0m[36m[1mFalse[0m
[36m └ [0m[36m[1mNone[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
loguru-0.6.0/tests/exceptions/output/diagnose/indentation_error.txt 0000644 0001750 0001750 00000000766 14175241406 025337 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mindentation_error.py[0m", line [33m17[0m, in [35m[0m
[1mexec[0m[1m([0m[1mcode[0m[1m)[0m
[36m └ [0m[36m[1m'\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n'[0m
File "", line 4
print("foobar") #intentional faulty indentation here.
[31m[1mIndentationError[0m:[1m unexpected indent[0m
loguru-0.6.0/tests/exceptions/output/diagnose/chained_both.txt 0000644 0001750 0001750 00000003753 14175241406 024220 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mchained_both.py[0m", line [33m15[0m, in [35mcause[0m
[1mdiv[0m[1m([0m[1mx[0m[1m,[0m [1my[0m[1m)[0m
[36m│ │ └ [0m[36m[1m0[0m
[36m│ └ [0m[36m[1m1[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mchained_both.py[0m", line [33m10[0m, in [35mdiv[0m
[1mx[0m [35m[1m/[0m [1my[0m
[36m│ └ [0m[36m[1m0[0m
[36m└ [0m[36m[1m1[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[1mDuring handling of the above exception, another exception occurred:[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mchained_both.py[0m", line [33m22[0m, in [35mcontext[0m
[1mcause[0m[1m([0m[1mx[0m[1m,[0m [1my[0m[1m)[0m
[36m│ │ └ [0m[36m[1m0[0m
[36m│ └ [0m[36m[1m1[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mchained_both.py[0m", line [33m17[0m, in [35mcause[0m
[35m[1mraise[0m [1mValueError[0m[1m([0m[36m"Division error"[0m[1m)[0m
[31m[1mValueError[0m:[1m Division error[0m
[1mThe above exception was the direct cause of the following exception:[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mchained_both.py[0m", line [33m28[0m, in [35m[0m
[1mcontext[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mchained_both.py[0m", line [33m24[0m, in [35mcontext[0m
[35m[1mraise[0m [1mValueError[0m[1m([0m[36m"Cause error"[0m[1m)[0m [35m[1mfrom[0m [1me[0m
[31m[1mValueError[0m:[1m Cause error[0m
loguru-0.6.0/tests/exceptions/output/diagnose/unprintable_object.txt 0000644 0001750 0001750 00000000560 14175241406 025453 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1munprintable_object.py[0m", line [33m16[0m, in [35m[0m
[1mobj[0m [35m[1m+[0m [34m[1m1[0m [35m[1m/[0m [34m[1m0[0m
[36m└ [0m[36m[1m[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
loguru-0.6.0/tests/exceptions/output/diagnose/attributes.txt 0000644 0001750 0001750 00000003613 14175241406 023772 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mattributes.py[0m", line [33m27[0m, in [35m[0m
[1mfoo[0m[1m([0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mattributes.py[0m", line [33m23[0m, in [35mfoo[0m
[35m[1m...[0m [35m[1m+[0m [34m[1m1[0m [35m[1m+[0m [1mbar[0m[1m([0m[1ma[0m[1m)[0m[35m[1m.[0m[1mb[0m [35m[1m+[0m [1ma[0m[35m[1m.[0m[1mforbidden[0m [35m[1m+[0m [1ma[0m[35m[1m.[0m[1mnope[0m[35m[1m.[0m[1ma[0m [35m[1m+[0m [1mx[0m[35m[1m.[0m[1m__bool__[0m [35m[1mor[0m [1ma[0m[35m[1m.[0m [1mb[0m [35m[1m.[0m [1misdigit[0m[1m([0m[1m)[0m [35m[1mand[0m [34m[1m.3[0m [35m[1m+[0m [35m[1m...[0m
[36m │ │ │ │ │ │ │ │ └ [0m[36m[1m[0m
[36m │ │ │ │ │ │ │ └ [0m[36m[1m'123'[0m
[36m │ │ │ │ │ │ └ [0m[36m[1m<__main__.Obj object at 0xDEADBEEF>[0m
[36m │ │ │ │ │ └ [0m[36m[1m[0m
[36m │ │ │ │ └ [0m[36m[1mNone[0m
[36m │ │ │ └ [0m[36m[1m<__main__.Obj object at 0xDEADBEEF>[0m
[36m │ │ └ [0m[36m[1m[0m
[36m │ └ [0m[36m[1m<__main__.Obj object at 0xDEADBEEF>[0m
[36m └ [0m[36m[1m<__main__.Obj object at 0xDEADBEEF>[0m
[31m[1mTypeError[0m:[1m unsupported operand type(s) for +: 'ellipsis' and 'int'[0m
loguru-0.6.0/tests/exceptions/output/diagnose/encoding.txt 0000644 0001750 0001750 00000001464 14175241406 023374 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mencoding.py[0m", line [33m18[0m, in [35m[0m
[1mdiv[0m[1m([0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mencoding.py[0m", line [33m14[0m, in [35mdiv[0m
[35m[1mreturn[0m [1m_deep[0m[1m([0m[36m"天"[0m[1m)[0m
[36m └ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1mencoding.py[0m", line [33m10[0m, in [35m_deep[0m
[35m[1mreturn[0m [34m[1m1[0m [35m[1m/[0m [1mval[0m
[36m └ [0m[36m[1m'天'[0m
[31m[1mTypeError[0m:[1m unsupported operand type(s) for /: 'int' and 'str'[0m
loguru-0.6.0/tests/exceptions/output/diagnose/source_multilines.txt 0000644 0001750 0001750 00000005035 14175241406 025351 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msource_multilines.py[0m", line [33m40[0m, in [35m[0m
[1mbug_1[0m[1m([0m[34m[1m10[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msource_multilines.py[0m", line [33m13[0m, in [35mbug_1[0m
""" + n / 0)
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msource_multilines.py[0m", line [33m46[0m, in [35m[0m
[1mbug_2[0m[1m([0m[34m[1m1[0m[1m,[0m [1mstring[0m[1m,[0m [34m[1m3[0m[1m)[0m
[36m│ └ [0m[36m[1m'multi-lines\n'[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msource_multilines.py[0m", line [33m17[0m, in [35mbug_2[0m
[35m[1mreturn[0m [1m([0m[34m[1m1[0m [35m[1m/[0m [34m[1m0[0m [35m[1m+[0m [1ma[0m [35m[1m+[0m [1mb[0m [35m[1m+[0m \
[36m │ └ [0m[36m[1m'multi-lines\n'[0m
[36m └ [0m[36m[1m1[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msource_multilines.py[0m", line [33m52[0m, in [35m[0m
[1mbug_3[0m[1m([0m[1mstring[0m[1m)[0m
[36m│ └ [0m[36m[1m'multi-lines\n'[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msource_multilines.py[0m", line [33m23[0m, in [35mbug_3[0m
[1m,[0m [1mstring[0m[1m,[0m [34m[1m20[0m [35m[1m/[0m [34m[1m0[0m[1m)[0m
[36m └ [0m[36m[1m'multi-lines\n'[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msource_multilines.py[0m", line [33m58[0m, in [35m[0m
[1mbug_4[0m[1m([0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msource_multilines.py[0m", line [33m30[0m, in [35mbug_4[0m
[36m"bar"[0m[1m:[0m [1ma[0m [35m[1m/[0m [1mb[0m[1m,[0m
[36m │ └ [0m[36m[1m0[0m
[36m └ [0m[36m[1m1[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
loguru-0.6.0/tests/exceptions/output/diagnose/assertion_error.txt 0000644 0001750 0001750 00000001440 14175241406 025020 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1massertion_error.py[0m", line [33m14[0m, in [35m[0m
[1mfoo[0m[1m([0m[34m[1m9[0m[1m,[0m [34m[1m55[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1massertion_error.py[0m", line [33m10[0m, in [35mfoo[0m
[35m[1massert[0m [1mabc[0m [35m[1m>[0m [34m[1m10[0m [35m[1mand[0m [1mxyz[0m [35m[1m==[0m [34m[1m60[0m
[36m │ └ [0m[36m[1m55[0m
[36m └ [0m[36m[1m9[0m
[31m[1mAssertionError[0m: [35m[1massert[0m [1mabc[0m [35m[1m>[0m [34m[1m10[0m [35m[1mand[0m [1mxyz[0m [35m[1m==[0m [34m[1m60[0m
loguru-0.6.0/tests/exceptions/output/diagnose/syntax_highlighting.txt 0000644 0001750 0001750 00000005235 14175241406 025661 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msyntax_highlighting.py[0m", line [33m32[0m, in [35m[0m
[1me[0m[1m([0m[34m[1m0[0m[1m)[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msyntax_highlighting.py[0m", line [33m28[0m, in [35me[0m
[1mx[0m [35m[1min[0m [1m[[0m[34m[1m1[0m[1m][0m[1m,[0m [1mx[0m [35m[1min[0m [1m([0m[34m[1m1[0m[1m,[0m[1m)[0m[1m,[0m [1mx[0m [35m[1min[0m [1m{[0m[34m[1m1[0m[1m}[0m[1m,[0m [1mx[0m [35m[1min[0m [1m{[0m[34m[1m1[0m[1m:[0m [34m[1m1[0m[1m}[0m[1m,[0m [1md[0m[1m([0m[1m)[0m
[36m│ │ │ │ └ [0m[36m[1m[0m
[36m│ │ │ └ [0m[36m[1m0[0m
[36m│ │ └ [0m[36m[1m0[0m
[36m│ └ [0m[36m[1m0[0m
[36m└ [0m[36m[1m0[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msyntax_highlighting.py[0m", line [33m24[0m, in [35md[0m
[1mmin[0m[1m([0m[1mrange[0m[1m([0m[34m[1m1[0m[1m,[0m [34m[1m10[0m[1m)[0m[1m)[0m[1m,[0m [1mlist[0m[1m([0m[1m)[0m[1m,[0m [1mdict[0m[1m([0m[1m)[0m[1m,[0m [1mc[0m[1m([0m[1m)[0m[1m,[0m [35m[1m...[0m
[36m └ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msyntax_highlighting.py[0m", line [33m20[0m, in [35mc[0m
[34m[1m1[0m[1m,[0m [34m[1m2.5[0m[1m,[0m [34m[1m3.0[0m[1m,[0m [34m[1m0.4[0m[1m,[0m [36m"str"[0m[1m,[0m [36mr"rrr"[0m[1m,[0m [36mrb"binary"[0m[1m,[0m [1mb[0m[1m([0m[1m)[0m
[36m └ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msyntax_highlighting.py[0m", line [33m16[0m, in [35mb[0m
[1ma[0m[1m([0m[1m)[0m [35m[1mor[0m [36m[1mFalse[0m [35m[1m==[0m [36m[1mNone[0m [35m[1m!=[0m [36m[1mTrue[0m
[36m└ [0m[36m[1m[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1msyntax_highlighting.py[0m", line [33m12[0m, in [35ma[0m
[34m[1m1[0m [35m[1m/[0m [34m[1m0[0m [35m[1m+[0m [34m[1m1[0m [35m[1m*[0m [34m[1m0[0m [35m[1m-[0m [34m[1m1[0m [35m[1m%[0m [34m[1m0[0m [35m[1m//[0m [34m[1m1[0m[35m[1m**[0m[34m[1m0[0m [35m[1m@[0m [34m[1m1[0m [30m[1m# Error[0m
[31m[1mZeroDivisionError[0m:[1m division by zero[0m
loguru-0.6.0/tests/exceptions/output/diagnose/assertion_error_in_string.txt 0000644 0001750 0001750 00000001114 14175241406 027072 0 ustar nilesh nilesh
[33m[1mTraceback (most recent call last):[0m
File "[32mtests/exceptions/source/diagnose/[0m[32m[1massertion_error_in_string.py[0m", line [33m14[0m, in [35m[0m
[1mfoo[0m[1m([0m[34m[1m9[0m[1m,[0m [34m[1m55[0m[1m)[0m
[36m└ [0m[36m[1m