dycw-utilities 0.164.0__tar.gz → 0.164.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/PKG-INFO +1 -1
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/pyproject.toml +2 -2
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_logging.py +29 -4
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/logging.py +34 -1
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/typing.py +1 -1
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/.gitignore +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/LICENSE +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/README.md +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_aeventkit.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_testbook.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/aeventkit.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/click.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/http.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/json.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/math.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/os.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/random.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/re.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/string.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/testbook.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/text.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/types.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/version.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/zoneinfo.py +0 -0
@@ -232,7 +232,7 @@ dependencies = [
|
|
232
232
|
name = "dycw-utilities"
|
233
233
|
readme = "README.md"
|
234
234
|
requires-python = ">= 3.12"
|
235
|
-
version = "0.164.
|
235
|
+
version = "0.164.1"
|
236
236
|
|
237
237
|
[project.entry-points.pytest11]
|
238
238
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -265,7 +265,7 @@ test = [
|
|
265
265
|
# bump-my-version
|
266
266
|
[tool.bumpversion]
|
267
267
|
allow_dirty = true
|
268
|
-
current_version = "0.164.
|
268
|
+
current_version = "0.164.1"
|
269
269
|
|
270
270
|
[[tool.bumpversion.files]]
|
271
271
|
filename = "src/utilities/__init__.py"
|
@@ -1,14 +1,15 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
from asyncio import sleep
|
4
|
+
from dataclasses import dataclass, field
|
4
5
|
from io import StringIO
|
5
|
-
from logging import Formatter, StreamHandler, getLogger
|
6
|
+
from logging import Formatter, LoggerAdapter, StreamHandler, getLogger
|
6
7
|
from pathlib import Path
|
7
8
|
from re import search
|
8
9
|
from typing import TYPE_CHECKING, Any, cast
|
9
10
|
|
10
11
|
from hypothesis import given
|
11
|
-
from hypothesis.strategies import
|
12
|
+
from hypothesis.strategies import integers
|
12
13
|
from pytest import LogCaptureFixture, mark, param, raises
|
13
14
|
|
14
15
|
from tests.conftest import SKIPIF_CI_AND_WINDOWS
|
@@ -20,6 +21,7 @@ from utilities.logging import (
|
|
20
21
|
_compute_rollover_actions,
|
21
22
|
_FieldStyleKeys,
|
22
23
|
_RotatingLogFile,
|
24
|
+
add_adapter,
|
23
25
|
add_filters,
|
24
26
|
basic_config,
|
25
27
|
get_format_str,
|
@@ -41,14 +43,37 @@ if TYPE_CHECKING:
|
|
41
43
|
from whenever import ZonedDateTime
|
42
44
|
|
43
45
|
|
46
|
+
class TestAddAdapter:
|
47
|
+
def test_main(self, *, caplog: LogCaptureFixture) -> None:
|
48
|
+
logger = getLogger(name := unique_str())
|
49
|
+
logger.setLevel("DEBUG")
|
50
|
+
|
51
|
+
def process(msg: str, x: int, /) -> str:
|
52
|
+
return f"x={x}: {msg}"
|
53
|
+
|
54
|
+
@dataclass
|
55
|
+
class Example:
|
56
|
+
x: int = 0
|
57
|
+
logger: LoggerAdapter = field(init=False)
|
58
|
+
|
59
|
+
def __post_init__(self) -> None:
|
60
|
+
self.logger = add_adapter(logger, process, self.x)
|
61
|
+
self.logger.info("Initializing...")
|
62
|
+
|
63
|
+
_ = Example()
|
64
|
+
record = one(r for r in caplog.records if r.name == name)
|
65
|
+
assert record.message == "x=0: Initializing..."
|
66
|
+
|
67
|
+
|
44
68
|
class TestAddFilters:
|
45
|
-
@
|
69
|
+
@mark.parametrize("expected", [param(True), param(False)])
|
46
70
|
def test_main(self, *, expected: bool) -> None:
|
47
71
|
logger = getLogger(unique_str())
|
48
72
|
logger.addHandler(handler := StreamHandler(buffer := StringIO()))
|
73
|
+
logger.setLevel("DEBUG")
|
49
74
|
add_filters(handler, lambda _: expected)
|
50
75
|
assert len(handler.filters) == 1
|
51
|
-
logger.
|
76
|
+
logger.info("message")
|
52
77
|
result = buffer.getvalue() != ""
|
53
78
|
assert result is expected
|
54
79
|
|
@@ -8,6 +8,7 @@ from logging import (
|
|
8
8
|
Formatter,
|
9
9
|
Handler,
|
10
10
|
Logger,
|
11
|
+
LoggerAdapter,
|
11
12
|
LogRecord,
|
12
13
|
StreamHandler,
|
13
14
|
basicConfig,
|
@@ -22,6 +23,7 @@ from socket import gethostname
|
|
22
23
|
from typing import (
|
23
24
|
TYPE_CHECKING,
|
24
25
|
Any,
|
26
|
+
Concatenate,
|
25
27
|
Literal,
|
26
28
|
NotRequired,
|
27
29
|
Self,
|
@@ -53,7 +55,7 @@ from utilities.whenever import (
|
|
53
55
|
)
|
54
56
|
|
55
57
|
if TYPE_CHECKING:
|
56
|
-
from collections.abc import Iterable, Mapping
|
58
|
+
from collections.abc import Callable, Iterable, Mapping, MutableMapping
|
57
59
|
from datetime import time
|
58
60
|
from logging import _FilterType
|
59
61
|
|
@@ -63,6 +65,7 @@ if TYPE_CHECKING:
|
|
63
65
|
MaybeCallablePathLike,
|
64
66
|
MaybeIterable,
|
65
67
|
PathLike,
|
68
|
+
StrMapping,
|
66
69
|
)
|
67
70
|
|
68
71
|
|
@@ -75,6 +78,35 @@ _DEFAULT_WHEN: _When = "D"
|
|
75
78
|
##
|
76
79
|
|
77
80
|
|
81
|
+
def add_adapter[**P](
|
82
|
+
logger: Logger,
|
83
|
+
process: Callable[Concatenate[str, P], str],
|
84
|
+
/,
|
85
|
+
*args: P.args,
|
86
|
+
**kwargs: P.kwargs,
|
87
|
+
) -> LoggerAdapter:
|
88
|
+
"""Add an adapter to a logger."""
|
89
|
+
|
90
|
+
class CustomAdapter(LoggerAdapter):
|
91
|
+
@override
|
92
|
+
def process(
|
93
|
+
self, msg: str, kwargs: MutableMapping[str, Any]
|
94
|
+
) -> tuple[str, MutableMapping[str, Any]]:
|
95
|
+
extra = cast("_ArgsAndKwargs", self.extra)
|
96
|
+
new_msg = process(msg, *extra["args"], **extra["kwargs"])
|
97
|
+
return new_msg, kwargs
|
98
|
+
|
99
|
+
return CustomAdapter(logger, extra=_ArgsAndKwargs(args=args, kwargs=kwargs))
|
100
|
+
|
101
|
+
|
102
|
+
class _ArgsAndKwargs(TypedDict):
|
103
|
+
args: tuple[Any, ...]
|
104
|
+
kwargs: StrMapping
|
105
|
+
|
106
|
+
|
107
|
+
##
|
108
|
+
|
109
|
+
|
78
110
|
def add_filters(handler: Handler, /, *filters: _FilterType) -> None:
|
79
111
|
"""Add a set of filters to a handler."""
|
80
112
|
for filter_i in filters:
|
@@ -589,6 +621,7 @@ def to_logger(logger: LoggerLike | None = None, /) -> Logger:
|
|
589
621
|
__all__ = [
|
590
622
|
"GetLoggingLevelNumberError",
|
591
623
|
"SizeAndTimeRotatingFileHandler",
|
624
|
+
"add_adapter",
|
592
625
|
"add_filters",
|
593
626
|
"basic_config",
|
594
627
|
"get_format_str",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/modules/package_without/module_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/tests/test_typing_funcs/with_future.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
File without changes
|
{dycw_utilities-0.164.0 → dycw_utilities-0.164.1}/src/utilities/pytest_plugins/pytest_regressions.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|