From aaf4ef70b8faa83aaa989e192b8cada032671930 Mon Sep 17 00:00:00 2001 From: Derek Wan Date: Fri, 13 Sep 2024 22:51:57 +0900 Subject: [PATCH] Add `make_slack_sink(_async)` (#731) --- pyproject.toml | 30 +++++++++++++------------- requirements.txt | 8 +++---- requirements/altair.txt | 6 +++--- requirements/astor.txt | 2 +- requirements/asyncio.txt | 2 +- requirements/atomicwrites.txt | 2 +- requirements/atools.txt | 2 +- requirements/cachetools.txt | 2 +- requirements/click.txt | 4 ++-- requirements/cryptography.txt | 2 +- requirements/cvxpy.txt | 2 +- requirements/dataclasses.txt | 2 +- requirements/datetime.txt | 2 +- requirements/email.txt | 2 +- requirements/enum.txt | 2 +- requirements/errors.txt | 2 +- requirements/eventkit.txt | 2 +- requirements/fpdf2.txt | 2 +- requirements/functions.txt | 2 +- requirements/functools.txt | 2 +- requirements/getpass.txt | 2 +- requirements/git.txt | 2 +- requirements/hashlib.txt | 2 +- requirements/http.txt | 2 +- requirements/humps.txt | 2 +- requirements/hypothesis.txt | 4 ++-- requirements/ipython.txt | 2 +- requirements/iterables.txt | 2 +- requirements/jupyter.txt | 4 ++-- requirements/logging.txt | 2 +- requirements/loguru.txt | 2 +- requirements/math.txt | 2 +- requirements/memory-profiler.txt | 2 +- requirements/modules.txt | 2 +- requirements/more-itertools.txt | 2 +- requirements/numpy.txt | 2 +- requirements/optuna.txt | 2 +- requirements/orjson.txt | 4 ++-- requirements/os.txt | 2 +- requirements/pathlib.txt | 2 +- requirements/pickle.txt | 2 +- requirements/platform.txt | 2 +- requirements/polars.txt | 4 ++-- requirements/pqdm.txt | 2 +- requirements/pydantic.txt | 2 +- requirements/pyinstrument.txt | 2 +- requirements/pytest.txt | 2 +- requirements/python-dotenv.txt | 2 +- requirements/random.txt | 2 +- requirements/re.txt | 2 +- requirements/redis.txt | 4 ++-- requirements/reprlib.txt | 4 ++-- requirements/scipy.txt | 2 +- requirements/scripts-pypi-server.txt | 2 +- requirements/sentinel.txt | 2 +- requirements/slack-sdk.txt | 2 +- requirements/socket.txt | 2 +- requirements/sqlalchemy-polars.txt | 4 ++-- requirements/sqlalchemy.txt | 2 +- requirements/streamlit.txt | 4 ++-- requirements/subprocess.txt | 2 +- requirements/sys.txt | 2 +- requirements/tempfile.txt | 2 +- requirements/tenacity.txt | 2 +- requirements/text.txt | 2 +- requirements/timer.txt | 2 +- requirements/tqdm.txt | 2 +- requirements/typed-settings.txt | 4 ++-- requirements/types.txt | 2 +- requirements/typing.txt | 2 +- requirements/warnings.txt | 2 +- requirements/whenever.txt | 4 ++-- requirements/zipfile.txt | 2 +- requirements/zoneinfo.txt | 2 +- src/tests/test_loguru.py | 21 ++++++++++++++++++ src/utilities/__init__.py | 2 +- src/utilities/loguru.py | 32 ++++++++++++++++++++++++++-- 77 files changed, 156 insertions(+), 107 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 86daa4286..631f12db6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ dev = [ "fpdf2 >= 2.7.9, < 2.8", "greenlet >= 3.0.3, < 3.1", # for sqlalchemy async "hatch >= 1.12.0, < 1.13", - "hypothesis >= 6.112.0, < 6.113", + "hypothesis >= 6.112.1, < 6.113", "img2pdf >= 0.5.1, < 0.6", "loguru >= 0.7.2, < 0.8", "memory-profiler >= 0.61.0, < 0.62", @@ -67,7 +67,7 @@ dev = [ "vegafusion >= 1.6.9, < 1.7", "vegafusion-python-embed >= 1.6.9, < 1.7", "vl-convert-python >= 1.6.1, < 1.7", - "whenever >= 0.6.8, < 0.7", + "whenever >= 0.6.9, < 0.7", # test "coverage-conditional-plugin >= 0.9.0, < 0.10", "pytest-asyncio >= 0.24.0, < 0.25", @@ -88,7 +88,7 @@ scripts-pypi-server = [ "typed-settings >= 24.5.0, < 24.6", ] test = [ - "hypothesis >= 6.112.0, < 6.113", + "hypothesis >= 6.112.1, < 6.113", "pytest >= 8.3.3, < 8.4", "pytest-randomly >= 3.15.0, < 3.16", "pytest-rerunfailures >= 14.0, < 15", @@ -98,7 +98,7 @@ zzz-test-altair = [ "altair >= 5.4.1, < 5.5", "atomicwrites >= 1.4.1, < 1.5", "img2pdf >= 0.5.1, < 0.6", - "polars-lts-cpu >= 1.5.0, < 1.6", + "polars-lts-cpu >= 1.7.1, < 1.8", "vl-convert-python >= 1.6.1, < 1.7", ] zzz-test-astor = ["astor >= 0.8.1, < 0.9"] @@ -112,14 +112,14 @@ zzz-test-cachetools = ["cachetools >= 5.5.0, < 5.6"] zzz-test-click = [ "click >= 8.1.7, < 8.2", "sqlalchemy >= 2.0.34, < 2.1", - "whenever >= 0.6.8, < 0.7", + "whenever >= 0.6.9, < 0.7", ] zzz-test-cryptography = ["cryptography >= 43.0.1, < 43.1"] zzz-test-cvxpy = ["cvxpy >= 1.5.3, < 1.6"] zzz-test-dataclasses = [] zzz-test-datetime = ["tzlocal >= 5.2, < 5.3"] zzz-test-defaults = [ - "hypothesis >= 6.112.0, < 6.113", + "hypothesis >= 6.112.1, < 6.113", "pytest >= 8.3.3, < 8.4", "pytest-asyncio >= 0.23.8, < 0.24", "pytest-cov >= 5.0.0, < 5.1", @@ -147,14 +147,14 @@ zzz-test-hypothesis = [ "numpy >= 2.0.2, < 2.1", "redis >= 5.0.8, < 5.1", "sqlalchemy >= 2.0.34, < 2.1", - "whenever >= 0.6.8, < 0.7", + "whenever >= 0.6.9, < 0.7", ] zzz-test-ipython = ["ipython >= 8.24.0, < 8.25"] zzz-test-iterables = [] zzz-test-jupyter = [ "jupyterlab >= 4.2.0, < 4.3", "pandas >= 2.2.2, < 2.3", - "polars-lts-cpu >= 1.5.0, < 1.6", + "polars-lts-cpu >= 1.7.1, < 1.8", ] zzz-test-logging = [] zzz-test-loguru = ["loguru >= 0.7.2, < 0.8"] @@ -171,7 +171,7 @@ zzz-test-optuna = ["optuna >= 3.6.1, < 3.7"] zzz-test-orjson = [ "orjson >= 3.10.7, < 3.11", "sqlalchemy >= 2.0.34, < 2.1", - "whenever >= 0.6.8, < 0.7", + "whenever >= 0.6.9, < 0.7", ] zzz-test-os = [] zzz-test-pathlib = [] @@ -179,7 +179,7 @@ zzz-test-pickle = ["atomicwrites >= 1.4.1, < 1.5"] zzz-test-platform = [] zzz-test-polars = [ "dacite >= 1.8.1, < 1.9", - "polars-lts-cpu >= 1.5.0, < 1.6", + "polars-lts-cpu >= 1.7.1, < 1.8", ] zzz-test-pqdm = ["pqdm >= 0.2.0, < 0.3"] zzz-test-pydantic = [ @@ -198,10 +198,10 @@ zzz-test-python-dotenv = ["python-dotenv >= 1.0.1, < 1.1"] zzz-test-random = [] zzz-test-re = [] zzz-test-redis = [ - "polars-lts-cpu >= 1.5.0, < 1.6", + "polars-lts-cpu >= 1.7.1, < 1.8", "redis >= 5.0.8, < 5.1", ] -zzz-test-reprlib = ["polars-lts-cpu >= 1.5.0, < 1.6"] +zzz-test-reprlib = ["polars-lts-cpu >= 1.7.1, < 1.8"] zzz-test-scipy = ["scipy >= 1.14.1, < 1.15"] zzz-test-scripts-pypi-server = [ "click >= 8.1.7, < 8.2", @@ -227,7 +227,7 @@ zzz-test-sqlalchemy = [ zzz-test-sqlalchemy-polars = [ "aiosqlite >= 0.20.0, < 0.21", "greenlet >= 3.0.3, < 3.1", # for sqlalchemy async - "polars-lts-cpu >= 1.5.0, < 1.6", + "polars-lts-cpu >= 1.7.1, < 1.8", "nest-asyncio >= 1.6.0, < 1.7", # for sqlalchemy async "pyhumps >= 3.8.0, < 3.9", "sqlalchemy >= 2.0.34, < 2.1", @@ -247,12 +247,12 @@ zzz-test-typed-settings = [ "click >= 8.1.7, < 8.2", "sqlalchemy >= 2.0.34, < 2.1", "typed-settings >= 24.5.0, < 24.6", - "whenever >= 0.6.8, < 0.7", + "whenever >= 0.6.9, < 0.7", ] zzz-test-types = [] zzz-test-typing = [] zzz-test-warnings = [] -zzz-test-whenever = ["whenever >= 0.6.8, < 0.7"] +zzz-test-whenever = ["whenever >= 0.6.9, < 0.7"] zzz-test-zipfile = [] zzz-test-zoneinfo = ["tzdata >= 2024.1, < 2024.2"] diff --git a/requirements.txt b/requirements.txt index e236e1ba1..5d804af43 100644 --- a/requirements.txt +++ b/requirements.txt @@ -126,7 +126,7 @@ httpx==0.27.2 # via hatch hyperlink==21.0.0 # via hatch -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) idna==3.8 # via @@ -186,7 +186,7 @@ multidict==6.1.0 # via # aiohttp # yarl -narwhals==1.7.0 +narwhals==1.8.0 # via altair nest-asyncio==1.6.0 # via dycw-utilities (pyproject.toml) @@ -402,7 +402,7 @@ tqdm==4.66.5 # dycw-utilities (pyproject.toml) # optuna # pqdm -trove-classifiers==2024.7.2 +trove-classifiers==2024.9.12 # via hatchling typed-settings==24.5.0 # via dycw-utilities (pyproject.toml) @@ -439,7 +439,7 @@ virtualenv==20.26.4 # nox vl-convert-python==1.6.1 # via dycw-utilities (pyproject.toml) -whenever==0.6.8 +whenever==0.6.9 # via dycw-utilities (pyproject.toml) win32-setctime==1.1.0 # via dycw-utilities (pyproject.toml) diff --git a/requirements/altair.txt b/requirements/altair.txt index de4ed45a6..a98882572 100644 --- a/requirements/altair.txt +++ b/requirements/altair.txt @@ -13,7 +13,7 @@ coverage==7.6.1 # via pytest-cov deprecated==1.2.14 # via pikepdf -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) img2pdf==0.5.1 # via dycw-utilities (pyproject.toml) @@ -29,7 +29,7 @@ lxml==5.3.0 # via pikepdf markupsafe==2.1.5 # via jinja2 -narwhals==1.7.0 +narwhals==1.8.0 # via altair packaging==24.1 # via @@ -45,7 +45,7 @@ pillow==10.4.0 # pikepdf pluggy==1.5.0 # via pytest -polars-lts-cpu==1.5.0 +polars-lts-cpu==1.7.1 # via dycw-utilities (pyproject.toml) pytest==8.3.3 # via diff --git a/requirements/astor.txt b/requirements/astor.txt index 31b0a1960..753aef064 100644 --- a/requirements/astor.txt +++ b/requirements/astor.txt @@ -6,7 +6,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/asyncio.txt b/requirements/asyncio.txt index 975b2ad8c..85874dcfb 100644 --- a/requirements/asyncio.txt +++ b/requirements/asyncio.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/atomicwrites.txt b/requirements/atomicwrites.txt index 307a60e5d..a95fd7b21 100644 --- a/requirements/atomicwrites.txt +++ b/requirements/atomicwrites.txt @@ -6,7 +6,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/atools.txt b/requirements/atools.txt index 02a4747f9..14f43c7f0 100644 --- a/requirements/atools.txt +++ b/requirements/atools.txt @@ -8,7 +8,7 @@ coverage==7.6.1 # via pytest-cov frozendict==2.4.4 # via atools -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/cachetools.txt b/requirements/cachetools.txt index 750184ed8..fa7c13301 100644 --- a/requirements/cachetools.txt +++ b/requirements/cachetools.txt @@ -6,7 +6,7 @@ cachetools==5.5.0 # via dycw-utilities (pyproject.toml) coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/click.txt b/requirements/click.txt index 9f4dd0ead..3ac37fc70 100644 --- a/requirements/click.txt +++ b/requirements/click.txt @@ -6,7 +6,7 @@ click==8.1.7 # via dycw-utilities (pyproject.toml) coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest @@ -41,5 +41,5 @@ typing-extensions==4.12.2 # via # dycw-utilities (pyproject.toml) # sqlalchemy -whenever==0.6.8 +whenever==0.6.9 # via dycw-utilities (pyproject.toml) diff --git a/requirements/cryptography.txt b/requirements/cryptography.txt index 329dc175c..e61cc3db9 100644 --- a/requirements/cryptography.txt +++ b/requirements/cryptography.txt @@ -8,7 +8,7 @@ coverage==7.6.1 # via pytest-cov cryptography==43.0.1 # via dycw-utilities (pyproject.toml) -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/cvxpy.txt b/requirements/cvxpy.txt index badb0da9b..c40f8a5b7 100644 --- a/requirements/cvxpy.txt +++ b/requirements/cvxpy.txt @@ -10,7 +10,7 @@ cvxpy==1.5.3 # via dycw-utilities (pyproject.toml) ecos==2.0.14 # via cvxpy -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/dataclasses.txt b/requirements/dataclasses.txt index 0b322433d..5a56bd945 100644 --- a/requirements/dataclasses.txt +++ b/requirements/dataclasses.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/datetime.txt b/requirements/datetime.txt index f972b8148..c7637d7b5 100644 --- a/requirements/datetime.txt +++ b/requirements/datetime.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/email.txt b/requirements/email.txt index 916044962..ef070563e 100644 --- a/requirements/email.txt +++ b/requirements/email.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/enum.txt b/requirements/enum.txt index 95e0c5790..63b862e4a 100644 --- a/requirements/enum.txt +++ b/requirements/enum.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/errors.txt b/requirements/errors.txt index 145eedd60..11658bf05 100644 --- a/requirements/errors.txt +++ b/requirements/errors.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/eventkit.txt b/requirements/eventkit.txt index f601d613e..da75ea89f 100644 --- a/requirements/eventkit.txt +++ b/requirements/eventkit.txt @@ -6,7 +6,7 @@ coverage==7.6.1 # via pytest-cov eventkit==1.0.3 # via dycw-utilities (pyproject.toml) -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/fpdf2.txt b/requirements/fpdf2.txt index 0959323d9..787d0e06a 100644 --- a/requirements/fpdf2.txt +++ b/requirements/fpdf2.txt @@ -10,7 +10,7 @@ fonttools==4.53.1 # via fpdf2 fpdf2==2.7.9 # via dycw-utilities (pyproject.toml) -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/functions.txt b/requirements/functions.txt index 76656826c..c44ba40d0 100644 --- a/requirements/functions.txt +++ b/requirements/functions.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/functools.txt b/requirements/functools.txt index a2d26f38f..b001ffdbb 100644 --- a/requirements/functools.txt +++ b/requirements/functools.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/getpass.txt b/requirements/getpass.txt index 9f6f7f2a2..0b05a37d2 100644 --- a/requirements/getpass.txt +++ b/requirements/getpass.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/git.txt b/requirements/git.txt index a2c85f1ed..8a553859b 100644 --- a/requirements/git.txt +++ b/requirements/git.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/hashlib.txt b/requirements/hashlib.txt index fa6419d1f..77df32a33 100644 --- a/requirements/hashlib.txt +++ b/requirements/hashlib.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/http.txt b/requirements/http.txt index 3cdb17490..9609a1d40 100644 --- a/requirements/http.txt +++ b/requirements/http.txt @@ -6,7 +6,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/humps.txt b/requirements/humps.txt index d4a33aa38..25455f2a4 100644 --- a/requirements/humps.txt +++ b/requirements/humps.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/hypothesis.txt b/requirements/hypothesis.txt index f95ce3714..bfd66f454 100644 --- a/requirements/hypothesis.txt +++ b/requirements/hypothesis.txt @@ -10,7 +10,7 @@ coverage==7.6.1 # via pytest-cov greenlet==3.0.3 # via dycw-utilities (pyproject.toml) -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest @@ -50,5 +50,5 @@ typing-extensions==4.12.2 # dycw-utilities (pyproject.toml) # aiosqlite # sqlalchemy -whenever==0.6.8 +whenever==0.6.9 # via dycw-utilities (pyproject.toml) diff --git a/requirements/ipython.txt b/requirements/ipython.txt index 3eb619e75..573cb58aa 100644 --- a/requirements/ipython.txt +++ b/requirements/ipython.txt @@ -10,7 +10,7 @@ decorator==5.1.1 # via ipython executing==2.1.0 # via stack-data -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/iterables.txt b/requirements/iterables.txt index 6b037338c..8880cd136 100644 --- a/requirements/iterables.txt +++ b/requirements/iterables.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/jupyter.txt b/requirements/jupyter.txt index 78df39259..e256acd4b 100644 --- a/requirements/jupyter.txt +++ b/requirements/jupyter.txt @@ -58,7 +58,7 @@ httpcore==1.0.5 # via httpx httpx==0.27.2 # via jupyterlab -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) idna==3.8 # via @@ -173,7 +173,7 @@ platformdirs==4.3.2 # via jupyter-core pluggy==1.5.0 # via pytest -polars-lts-cpu==1.5.0 +polars-lts-cpu==1.7.1 # via dycw-utilities (pyproject.toml) prometheus-client==0.20.0 # via jupyter-server diff --git a/requirements/logging.txt b/requirements/logging.txt index 9b6b4317b..a2745e185 100644 --- a/requirements/logging.txt +++ b/requirements/logging.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/loguru.txt b/requirements/loguru.txt index 9e39d8ce6..1a8cdf674 100644 --- a/requirements/loguru.txt +++ b/requirements/loguru.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/math.txt b/requirements/math.txt index a45181c20..d4cc402fa 100644 --- a/requirements/math.txt +++ b/requirements/math.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/memory-profiler.txt b/requirements/memory-profiler.txt index 85bd2859c..c266ddba8 100644 --- a/requirements/memory-profiler.txt +++ b/requirements/memory-profiler.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/modules.txt b/requirements/modules.txt index 84fc00c99..46618d34d 100644 --- a/requirements/modules.txt +++ b/requirements/modules.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/more-itertools.txt b/requirements/more-itertools.txt index 8dbc7734d..aace69c55 100644 --- a/requirements/more-itertools.txt +++ b/requirements/more-itertools.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/numpy.txt b/requirements/numpy.txt index d1ac193d7..db60bef61 100644 --- a/requirements/numpy.txt +++ b/requirements/numpy.txt @@ -6,7 +6,7 @@ bottleneck==1.4.0 # via dycw-utilities (pyproject.toml) coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/optuna.txt b/requirements/optuna.txt index 0b4ab0a55..3ef4973c7 100644 --- a/requirements/optuna.txt +++ b/requirements/optuna.txt @@ -8,7 +8,7 @@ colorlog==6.8.2 # via optuna coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/orjson.txt b/requirements/orjson.txt index 3a7c6292c..61e70d01e 100644 --- a/requirements/orjson.txt +++ b/requirements/orjson.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest @@ -41,5 +41,5 @@ typing-extensions==4.12.2 # via # dycw-utilities (pyproject.toml) # sqlalchemy -whenever==0.6.8 +whenever==0.6.9 # via dycw-utilities (pyproject.toml) diff --git a/requirements/os.txt b/requirements/os.txt index 4cc553d6e..d9836d987 100644 --- a/requirements/os.txt +++ b/requirements/os.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/pathlib.txt b/requirements/pathlib.txt index 9654a1828..5d3d04a9f 100644 --- a/requirements/pathlib.txt +++ b/requirements/pathlib.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/pickle.txt b/requirements/pickle.txt index f138f985c..05f69c148 100644 --- a/requirements/pickle.txt +++ b/requirements/pickle.txt @@ -6,7 +6,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/platform.txt b/requirements/platform.txt index d1cc9a370..4f1ee44fd 100644 --- a/requirements/platform.txt +++ b/requirements/platform.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/polars.txt b/requirements/polars.txt index 42f5a4662..ce9fb3b06 100644 --- a/requirements/polars.txt +++ b/requirements/polars.txt @@ -6,7 +6,7 @@ coverage==7.6.1 # via pytest-cov dacite==1.8.1 # via dycw-utilities (pyproject.toml) -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest @@ -16,7 +16,7 @@ packaging==24.1 # pytest-rerunfailures pluggy==1.5.0 # via pytest -polars-lts-cpu==1.5.0 +polars-lts-cpu==1.7.1 # via dycw-utilities (pyproject.toml) pytest==8.3.3 # via diff --git a/requirements/pqdm.txt b/requirements/pqdm.txt index 27f172db5..a8a7e4355 100644 --- a/requirements/pqdm.txt +++ b/requirements/pqdm.txt @@ -6,7 +6,7 @@ bounded-pool-executor==0.0.3 # via pqdm coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/pydantic.txt b/requirements/pydantic.txt index 3330be76d..5794f0132 100644 --- a/requirements/pydantic.txt +++ b/requirements/pydantic.txt @@ -8,7 +8,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/pyinstrument.txt b/requirements/pyinstrument.txt index 2636ca571..a2a53508b 100644 --- a/requirements/pyinstrument.txt +++ b/requirements/pyinstrument.txt @@ -6,7 +6,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/pytest.txt b/requirements/pytest.txt index 9d7340850..5768ffed2 100644 --- a/requirements/pytest.txt +++ b/requirements/pytest.txt @@ -6,7 +6,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/python-dotenv.txt b/requirements/python-dotenv.txt index 5bbc3579c..966a13390 100644 --- a/requirements/python-dotenv.txt +++ b/requirements/python-dotenv.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/random.txt b/requirements/random.txt index 306648507..a70694689 100644 --- a/requirements/random.txt +++ b/requirements/random.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/re.txt b/requirements/re.txt index a57f5bc4d..242adc652 100644 --- a/requirements/re.txt +++ b/requirements/re.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/redis.txt b/requirements/redis.txt index b77fdd109..de44d0fd8 100644 --- a/requirements/redis.txt +++ b/requirements/redis.txt @@ -6,7 +6,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest @@ -16,7 +16,7 @@ packaging==24.1 # pytest-rerunfailures pluggy==1.5.0 # via pytest -polars-lts-cpu==1.5.0 +polars-lts-cpu==1.7.1 # via dycw-utilities (pyproject.toml) pytest==8.3.3 # via diff --git a/requirements/reprlib.txt b/requirements/reprlib.txt index 345efd32e..bb784851a 100644 --- a/requirements/reprlib.txt +++ b/requirements/reprlib.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest @@ -14,7 +14,7 @@ packaging==24.1 # pytest-rerunfailures pluggy==1.5.0 # via pytest -polars-lts-cpu==1.5.0 +polars-lts-cpu==1.7.1 # via dycw-utilities (pyproject.toml) pytest==8.3.3 # via diff --git a/requirements/scipy.txt b/requirements/scipy.txt index ab5cbf359..187efcb5c 100644 --- a/requirements/scipy.txt +++ b/requirements/scipy.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/scripts-pypi-server.txt b/requirements/scripts-pypi-server.txt index d681bedc2..562accfc5 100644 --- a/requirements/scripts-pypi-server.txt +++ b/requirements/scripts-pypi-server.txt @@ -6,7 +6,7 @@ click==8.1.7 # via dycw-utilities (pyproject.toml) coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) importlib-resources==6.4.5 # via pypiserver diff --git a/requirements/sentinel.txt b/requirements/sentinel.txt index 511bffcbf..455978c2a 100644 --- a/requirements/sentinel.txt +++ b/requirements/sentinel.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/slack-sdk.txt b/requirements/slack-sdk.txt index e873aec6d..34d79da5f 100644 --- a/requirements/slack-sdk.txt +++ b/requirements/slack-sdk.txt @@ -16,7 +16,7 @@ frozenlist==1.4.1 # via # aiohttp # aiosignal -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) idna==3.8 # via yarl diff --git a/requirements/socket.txt b/requirements/socket.txt index 112438fd2..4757ae90c 100644 --- a/requirements/socket.txt +++ b/requirements/socket.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/sqlalchemy-polars.txt b/requirements/sqlalchemy-polars.txt index fed61ec8a..b8b4adf12 100644 --- a/requirements/sqlalchemy-polars.txt +++ b/requirements/sqlalchemy-polars.txt @@ -8,7 +8,7 @@ coverage==7.6.1 # via pytest-cov greenlet==3.0.3 # via dycw-utilities (pyproject.toml) -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest @@ -20,7 +20,7 @@ packaging==24.1 # pytest-rerunfailures pluggy==1.5.0 # via pytest -polars-lts-cpu==1.5.0 +polars-lts-cpu==1.7.1 # via dycw-utilities (pyproject.toml) pyhumps==3.8.0 # via dycw-utilities (pyproject.toml) diff --git a/requirements/sqlalchemy.txt b/requirements/sqlalchemy.txt index 1839797ab..e42fee0c7 100644 --- a/requirements/sqlalchemy.txt +++ b/requirements/sqlalchemy.txt @@ -12,7 +12,7 @@ coverage==7.6.1 # via pytest-cov greenlet==3.0.3 # via dycw-utilities (pyproject.toml) -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/streamlit.txt b/requirements/streamlit.txt index 4ab845af4..3d46441dd 100644 --- a/requirements/streamlit.txt +++ b/requirements/streamlit.txt @@ -23,7 +23,7 @@ gitdb==4.0.11 # via gitpython gitpython==3.1.43 # via streamlit -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) idna==3.8 # via requests @@ -43,7 +43,7 @@ markupsafe==2.1.5 # via jinja2 mdurl==0.1.2 # via markdown-it-py -narwhals==1.7.0 +narwhals==1.8.0 # via altair numpy==2.1.1 # via diff --git a/requirements/subprocess.txt b/requirements/subprocess.txt index 9f7618837..287167a2e 100644 --- a/requirements/subprocess.txt +++ b/requirements/subprocess.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/sys.txt b/requirements/sys.txt index 98f5d642d..c9f5fc001 100644 --- a/requirements/sys.txt +++ b/requirements/sys.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/tempfile.txt b/requirements/tempfile.txt index 7a059ec2b..63a1b776e 100644 --- a/requirements/tempfile.txt +++ b/requirements/tempfile.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/tenacity.txt b/requirements/tenacity.txt index 3fa612506..8dff1516c 100644 --- a/requirements/tenacity.txt +++ b/requirements/tenacity.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/text.txt b/requirements/text.txt index 4e983aca9..30348bafa 100644 --- a/requirements/text.txt +++ b/requirements/text.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/timer.txt b/requirements/timer.txt index 82487d4e6..00f28898d 100644 --- a/requirements/timer.txt +++ b/requirements/timer.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/tqdm.txt b/requirements/tqdm.txt index 906634cbc..062ce361e 100644 --- a/requirements/tqdm.txt +++ b/requirements/tqdm.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/typed-settings.txt b/requirements/typed-settings.txt index 031d02f1a..e9563cc00 100644 --- a/requirements/typed-settings.txt +++ b/requirements/typed-settings.txt @@ -6,7 +6,7 @@ click==8.1.7 # via dycw-utilities (pyproject.toml) coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest @@ -43,5 +43,5 @@ typing-extensions==4.12.2 # via # dycw-utilities (pyproject.toml) # sqlalchemy -whenever==0.6.8 +whenever==0.6.9 # via dycw-utilities (pyproject.toml) diff --git a/requirements/types.txt b/requirements/types.txt index 456752389..a5392b06d 100644 --- a/requirements/types.txt +++ b/requirements/types.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/typing.txt b/requirements/typing.txt index 4e18e4158..572cf8a4a 100644 --- a/requirements/typing.txt +++ b/requirements/typing.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/warnings.txt b/requirements/warnings.txt index 1643f62bd..c59e68bc9 100644 --- a/requirements/warnings.txt +++ b/requirements/warnings.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/whenever.txt b/requirements/whenever.txt index 39dfb59ef..6b6def02b 100644 --- a/requirements/whenever.txt +++ b/requirements/whenever.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest @@ -35,5 +35,5 @@ tomli==2.0.1 # via coverage typing-extensions==4.12.2 # via dycw-utilities (pyproject.toml) -whenever==0.6.8 +whenever==0.6.9 # via dycw-utilities (pyproject.toml) diff --git a/requirements/zipfile.txt b/requirements/zipfile.txt index 726e86bde..a44181672 100644 --- a/requirements/zipfile.txt +++ b/requirements/zipfile.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/requirements/zoneinfo.txt b/requirements/zoneinfo.txt index 590ce2a74..f4918331b 100644 --- a/requirements/zoneinfo.txt +++ b/requirements/zoneinfo.txt @@ -4,7 +4,7 @@ attrs==24.2.0 # via hypothesis coverage==7.6.1 # via pytest-cov -hypothesis==6.112.0 +hypothesis==6.112.1 # via dycw-utilities (pyproject.toml) iniconfig==2.0.0 # via pytest diff --git a/src/tests/test_loguru.py b/src/tests/test_loguru.py index 1e3d3967b..6545304c5 100644 --- a/src/tests/test_loguru.py +++ b/src/tests/test_loguru.py @@ -5,6 +5,7 @@ from re import search from typing import TYPE_CHECKING, Any, ClassVar, cast +from hypothesis import given from loguru import logger from loguru._defaults import LOGURU_FORMAT from loguru._recattrs import RecordFile, RecordLevel, RecordProcess, RecordThread @@ -27,6 +28,7 @@ func_test_exit_predicate, func_test_exit_sync, ) +from utilities.hypothesis import text_ascii from utilities.loguru import ( LEVEL_CONFIGS, GetLoggingLevelNumberError, @@ -41,6 +43,8 @@ logged_sleep_sync, make_except_hook, make_filter, + make_slack_sink, + make_slack_sink_async, ) from utilities.text import ensure_str, strip_and_dedent @@ -781,3 +785,20 @@ def _record(self) -> Record: ), } return cast(Any, record) + + +class TestMakeSlackSink: + @given(url=text_ascii()) + def test_sync(self, *, url: str) -> None: + sink = make_slack_sink(url) + handler: HandlerConfiguration = {"sink": sink, "level": LogLevel.TRACE} + _ = logger.configure(handlers=[cast(dict[str, Any], handler)]) + logger.trace("message") + + @given(url=text_ascii()) + async def test_async(self, *, url: str) -> None: + sink = make_slack_sink_async(url) + handler: HandlerConfiguration = {"sink": sink, "level": LogLevel.TRACE} + _ = logger.configure(handlers=[cast(dict[str, Any], handler)]) + logger.trace("message") + await logger.complete() diff --git a/src/utilities/__init__.py b/src/utilities/__init__.py index afd05d3a7..c76758c5a 100644 --- a/src/utilities/__init__.py +++ b/src/utilities/__init__.py @@ -1,3 +1,3 @@ from __future__ import annotations -__version__ = "0.54.1" +__version__ = "0.54.2" diff --git a/src/utilities/loguru.py b/src/utilities/loguru.py index 61af00380..43b7f9519 100644 --- a/src/utilities/loguru.py +++ b/src/utilities/loguru.py @@ -11,7 +11,7 @@ from functools import partial, wraps from inspect import iscoroutinefunction from logging import Handler, LogRecord -from sys import __excepthook__, _getframe +from sys import __excepthook__, _getframe, stderr from typing import ( TYPE_CHECKING, Any, @@ -53,7 +53,7 @@ Writable, ) - from utilities.asyncio import MaybeCoroutine1 + from utilities.asyncio import Coroutine1, MaybeCoroutine1 from utilities.iterables import MaybeIterable from utilities.types import Duration, PathLike, StrMapping @@ -429,6 +429,32 @@ def filter_func(record: Record, /) -> bool: return filter_func +def make_slack_sink(url: str, /) -> Callable[[Message], None]: + """Make a `slack` sink.""" + from utilities.slack_sdk import SendSlackError, send_slack_sync + + def sink_sync(message: Message, /) -> None: + try: + send_slack_sync(message, url=url) + except SendSlackError as error: + _ = stderr.write(f"{error}\n") # pragma: no cover + + return sink_sync + + +def make_slack_sink_async(url: str, /) -> Callable[[Message], Coroutine1[None]]: + """Make an asynchronous `slack` sink.""" + from utilities.slack_sdk import SendSlackError, send_slack_async + + async def sink_async(message: Message, /) -> None: + try: + await send_slack_async(message, url=url) + except SendSlackError as error: + _ = stderr.write(f"{error}\n") # pragma: no cover + + return sink_async + + __all__ = [ "LEVEL_CONFIGS", "GetLoggingLevelNameError", @@ -443,4 +469,6 @@ def filter_func(record: Record, /) -> bool: "logged_sleep_sync", "make_except_hook", "make_filter", + "make_slack_sink", + "make_slack_sink_async", ]