dycw-utilities 0.157.0__tar.gz → 0.157.2__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.157.0 → dycw_utilities-0.157.2}/PKG-INFO +1 -1
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/pyproject.toml +2 -2
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_eventkit.py +3 -7
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_logging.py +1 -7
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/eventkit.py +2 -5
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/fastapi.py +8 -3
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/logging.py +4 -12
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/slack_sdk.py +8 -3
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/sqlalchemy.py +6 -2
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/sqlalchemy_polars.py +4 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/.gitignore +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/LICENSE +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/README.md +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/click.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/http.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/json.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/math.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/os.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/random.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/re.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/string.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/text.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/types.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/version.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/zoneinfo.py +0 -0
@@ -227,7 +227,7 @@ dependencies = [
|
|
227
227
|
name = "dycw-utilities"
|
228
228
|
readme = "README.md"
|
229
229
|
requires-python = ">= 3.12"
|
230
|
-
version = "0.157.
|
230
|
+
version = "0.157.2"
|
231
231
|
|
232
232
|
[project.entry-points.pytest11]
|
233
233
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -259,7 +259,7 @@ test = [
|
|
259
259
|
# bump-my-version
|
260
260
|
[tool.bumpversion]
|
261
261
|
allow_dirty = true
|
262
|
-
current_version = "0.157.
|
262
|
+
current_version = "0.157.2"
|
263
263
|
|
264
264
|
[[tool.bumpversion.files]]
|
265
265
|
filename = "src/utilities/__init__.py"
|
@@ -65,17 +65,13 @@ class TestAddListener:
|
|
65
65
|
|
66
66
|
def listener_sync() -> None: ...
|
67
67
|
|
68
|
-
_ = add_listener(
|
69
|
-
event, listener_sync, logger=str(root), logger_allow_pytest=True
|
70
|
-
)
|
68
|
+
_ = add_listener(event, listener_sync, logger=str(root))
|
71
69
|
case "async":
|
72
70
|
|
73
71
|
async def listener_async() -> None:
|
74
72
|
await sleep(0.01)
|
75
73
|
|
76
|
-
_ = add_listener(
|
77
|
-
event, listener_async, logger=str(root), logger_allow_pytest=True
|
78
|
-
)
|
74
|
+
_ = add_listener(event, listener_async, logger=str(root))
|
79
75
|
|
80
76
|
event.emit(None)
|
81
77
|
await sleep(0.01)
|
@@ -237,7 +233,7 @@ class TestLiftListener:
|
|
237
233
|
LiftListenerError,
|
238
234
|
match="Synchronous listener .* cannot be paired with an asynchronous error handler .*",
|
239
235
|
):
|
240
|
-
_ = lift_listener(listener, Event(), error=error
|
236
|
+
_ = lift_listener(listener, Event(), error=error)
|
241
237
|
|
242
238
|
|
243
239
|
class TestLiftedEvent:
|
@@ -78,7 +78,7 @@ class TestBasicConfig:
|
|
78
78
|
) -> None:
|
79
79
|
name = unique_str()
|
80
80
|
with set_log_factory:
|
81
|
-
basic_config(obj=name, filters=filters, plain=plain
|
81
|
+
basic_config(obj=name, filters=filters, plain=plain)
|
82
82
|
getLogger(name).warning("message")
|
83
83
|
record = one(r for r in caplog.records if r.name == name)
|
84
84
|
assert record.message == "message"
|
@@ -535,11 +535,5 @@ class TestToLogger:
|
|
535
535
|
name = unique_str()
|
536
536
|
assert to_logger(name).name == name
|
537
537
|
|
538
|
-
@mark.parametrize(("allow_pytest", "expected"), [param(False, 1), param(True, 0)])
|
539
|
-
def test_allow_pytest(self, *, allow_pytest: bool, expected: int) -> None:
|
540
|
-
name = unique_str()
|
541
|
-
logger = to_logger(name, allow_pytest=allow_pytest)
|
542
|
-
assert len(logger.filters) == expected
|
543
|
-
|
544
538
|
def test_none(self) -> None:
|
545
539
|
assert to_logger(None).name == "root"
|
@@ -48,7 +48,6 @@ def add_listener[E: Event, F: Callable](
|
|
48
48
|
error: Callable[[Event, BaseException], MaybeCoro[None]] | None = None,
|
49
49
|
ignore: TypeLike[BaseException] | None = None,
|
50
50
|
logger: LoggerLike | None = None,
|
51
|
-
logger_allow_pytest: bool = False,
|
52
51
|
decorators: MaybeIterable[Callable[[F], F]] | None = None,
|
53
52
|
done: Callable[..., MaybeCoro[None]] | None = None,
|
54
53
|
keep_ref: bool = False,
|
@@ -60,7 +59,6 @@ def add_listener[E: Event, F: Callable](
|
|
60
59
|
error=error,
|
61
60
|
ignore=ignore,
|
62
61
|
logger=logger,
|
63
|
-
logger_allow_pytest=logger_allow_pytest,
|
64
62
|
decorators=decorators,
|
65
63
|
)
|
66
64
|
return cast("E", event.connect(lifted, done=done, keep_ref=keep_ref))
|
@@ -286,7 +284,6 @@ def lift_listener[F1: Callable[..., MaybeCoro[None]], F2: Callable](
|
|
286
284
|
error: Callable[[Event, BaseException], MaybeCoro[None]] | None = None,
|
287
285
|
ignore: TypeLike[BaseException] | None = None,
|
288
286
|
logger: LoggerLike | None = None,
|
289
|
-
logger_allow_pytest: bool = False,
|
290
287
|
decorators: MaybeIterable[Callable[[F2], F2]] | None = None,
|
291
288
|
) -> F1:
|
292
289
|
match error, bool(iscoroutinefunction(listener)):
|
@@ -300,7 +297,7 @@ def lift_listener[F1: Callable[..., MaybeCoro[None]], F2: Callable](
|
|
300
297
|
except Exception as exc: # noqa: BLE001
|
301
298
|
if (ignore is not None) and isinstance(exc, ignore):
|
302
299
|
return
|
303
|
-
to_logger(logger
|
300
|
+
to_logger(logger).exception("")
|
304
301
|
|
305
302
|
lifted = listener_no_error_sync
|
306
303
|
|
@@ -314,7 +311,7 @@ def lift_listener[F1: Callable[..., MaybeCoro[None]], F2: Callable](
|
|
314
311
|
except Exception as exc: # noqa: BLE001
|
315
312
|
if (ignore is not None) and isinstance(exc, ignore):
|
316
313
|
return
|
317
|
-
to_logger(logger
|
314
|
+
to_logger(logger).exception("")
|
318
315
|
|
319
316
|
lifted = listener_no_error_async
|
320
317
|
case _, _:
|
@@ -13,7 +13,7 @@ from utilities.whenever import get_now_local
|
|
13
13
|
if TYPE_CHECKING:
|
14
14
|
from collections.abc import AsyncIterator
|
15
15
|
|
16
|
-
from utilities.types import Delta
|
16
|
+
from utilities.types import Delta, MaybeType
|
17
17
|
|
18
18
|
|
19
19
|
_TASKS: list[Task[None]] = []
|
@@ -35,14 +35,19 @@ class _PingerReceiverApp(FastAPI):
|
|
35
35
|
|
36
36
|
@enhanced_async_context_manager
|
37
37
|
async def yield_ping_receiver(
|
38
|
-
port: int,
|
38
|
+
port: int,
|
39
|
+
/,
|
40
|
+
*,
|
41
|
+
host: str = "localhost",
|
42
|
+
timeout: Delta | None = None,
|
43
|
+
error: MaybeType[BaseException] = TimeoutError,
|
39
44
|
) -> AsyncIterator[None]:
|
40
45
|
"""Yield the ping receiver."""
|
41
46
|
app = _PingerReceiverApp() # skipif-ci
|
42
47
|
server = Server(Config(app, host=host, port=port)) # skipif-ci
|
43
48
|
_TASKS.append(create_task(server.serve())) # skipif-ci
|
44
49
|
try: # skipif-ci
|
45
|
-
async with timeout_td(timeout):
|
50
|
+
async with timeout_td(timeout, error=error):
|
46
51
|
yield
|
47
52
|
finally: # skipif-ci
|
48
53
|
await server.shutdown()
|
@@ -37,7 +37,6 @@ from utilities.atomicwrites import move_many
|
|
37
37
|
from utilities.dataclasses import replace_non_sentinel
|
38
38
|
from utilities.errors import ImpossibleCaseError
|
39
39
|
from utilities.iterables import OneEmptyError, always_iterable, one
|
40
|
-
from utilities.os import is_pytest
|
41
40
|
from utilities.pathlib import ensure_suffix, to_path
|
42
41
|
from utilities.re import (
|
43
42
|
ExtractGroupError,
|
@@ -96,7 +95,6 @@ def basic_config(
|
|
96
95
|
filters: MaybeIterable[_FilterType] | None = None,
|
97
96
|
plain: bool = False,
|
98
97
|
color_field_styles: Mapping[str, _FieldStyleKeys] | None = None,
|
99
|
-
allow_pytest: bool = False,
|
100
98
|
) -> None:
|
101
99
|
"""Do the basic config."""
|
102
100
|
match obj:
|
@@ -122,7 +120,7 @@ def basic_config(
|
|
122
120
|
)
|
123
121
|
case str() as name:
|
124
122
|
basic_config(
|
125
|
-
obj=to_logger(name
|
123
|
+
obj=to_logger(name),
|
126
124
|
format_=format_,
|
127
125
|
prefix=prefix,
|
128
126
|
hostname=hostname,
|
@@ -262,7 +260,6 @@ def setup_logging(
|
|
262
260
|
console_level: LogLevel = "INFO",
|
263
261
|
console_prefix: str = "❯", # noqa: RUF001
|
264
262
|
console_filters: MaybeIterable[_FilterType] | None = None,
|
265
|
-
allow_pytest: bool = False,
|
266
263
|
files_dir: MaybeCallablePathLike = Path.cwd,
|
267
264
|
files_max_bytes: int = _DEFAULT_MAX_BYTES,
|
268
265
|
files_when: _When = _DEFAULT_WHEN,
|
@@ -279,7 +276,7 @@ def setup_logging(
|
|
279
276
|
level=console_level,
|
280
277
|
filters=console_filters,
|
281
278
|
)
|
282
|
-
logger_use = to_logger(logger
|
279
|
+
logger_use = to_logger(logger)
|
283
280
|
name = logger_use.name
|
284
281
|
levels: list[LogLevel] = ["DEBUG", "INFO", "ERROR"]
|
285
282
|
for level in levels:
|
@@ -578,18 +575,13 @@ class _Rotation:
|
|
578
575
|
##
|
579
576
|
|
580
577
|
|
581
|
-
def to_logger(
|
582
|
-
logger: LoggerLike | None = None, /, *, allow_pytest: bool = False
|
583
|
-
) -> Logger:
|
578
|
+
def to_logger(logger: LoggerLike | None = None, /) -> Logger:
|
584
579
|
"""Convert to a logger."""
|
585
580
|
match logger:
|
586
581
|
case Logger():
|
587
582
|
return logger
|
588
583
|
case str() | None:
|
589
|
-
|
590
|
-
if not allow_pytest:
|
591
|
-
_ = logger.addFilter(lambda _: not is_pytest())
|
592
|
-
return logger
|
584
|
+
return getLogger(logger)
|
593
585
|
case never:
|
594
586
|
assert_never(never)
|
595
587
|
|
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
|
|
15
15
|
from slack_sdk.webhook import WebhookResponse
|
16
16
|
from whenever import TimeDelta
|
17
17
|
|
18
|
-
from utilities.types import Delta
|
18
|
+
from utilities.types import Delta, MaybeType
|
19
19
|
|
20
20
|
|
21
21
|
_TIMEOUT: Delta = MINUTE
|
@@ -39,11 +39,16 @@ def _get_client(url: str, /, *, timeout: Delta = _TIMEOUT) -> WebhookClient:
|
|
39
39
|
|
40
40
|
|
41
41
|
async def send_to_slack_async(
|
42
|
-
url: str,
|
42
|
+
url: str,
|
43
|
+
text: str,
|
44
|
+
/,
|
45
|
+
*,
|
46
|
+
timeout: TimeDelta = _TIMEOUT,
|
47
|
+
error: MaybeType[BaseException] = TimeoutError,
|
43
48
|
) -> None:
|
44
49
|
"""Send a message via Slack."""
|
45
50
|
client = _get_async_client(url, timeout=timeout)
|
46
|
-
async with timeout_td(timeout):
|
51
|
+
async with timeout_td(timeout, error=error):
|
47
52
|
response = await client.send(text=text)
|
48
53
|
if response.status_code != HTTPStatus.OK: # pragma: no cover
|
49
54
|
raise SendToSlackError(text=text, response=response)
|
@@ -134,11 +134,15 @@ def check_connect(engine: Engine, /) -> bool:
|
|
134
134
|
|
135
135
|
|
136
136
|
async def check_connect_async(
|
137
|
-
engine: AsyncEngine,
|
137
|
+
engine: AsyncEngine,
|
138
|
+
/,
|
139
|
+
*,
|
140
|
+
timeout: Delta | None = None,
|
141
|
+
error: MaybeType[BaseException] = TimeoutError,
|
138
142
|
) -> bool:
|
139
143
|
"""Check if an engine can connect."""
|
140
144
|
try:
|
141
|
-
async with timeout_td(timeout), engine.connect() as conn:
|
145
|
+
async with timeout_td(timeout, error=error), engine.connect() as conn:
|
142
146
|
return bool((await conn.execute(_SELECT)).scalar_one())
|
143
147
|
except (
|
144
148
|
gaierror,
|
@@ -229,6 +229,7 @@ async def select_to_dataframe(
|
|
229
229
|
in_clauses_chunk_size: int | None = None,
|
230
230
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
231
231
|
timeout: Delta | None = None,
|
232
|
+
error: MaybeType[BaseException] = TimeoutError,
|
232
233
|
**kwargs: Any,
|
233
234
|
) -> DataFrame: ...
|
234
235
|
@overload
|
@@ -244,6 +245,7 @@ async def select_to_dataframe(
|
|
244
245
|
in_clauses_chunk_size: int | None = None,
|
245
246
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
246
247
|
timeout: Delta | None = None,
|
248
|
+
error: MaybeType[BaseException] = TimeoutError,
|
247
249
|
**kwargs: Any,
|
248
250
|
) -> Iterable[DataFrame]: ...
|
249
251
|
@overload
|
@@ -259,6 +261,7 @@ async def select_to_dataframe(
|
|
259
261
|
in_clauses_chunk_size: int | None = None,
|
260
262
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
261
263
|
timeout: Delta | None = None,
|
264
|
+
error: MaybeType[BaseException] = TimeoutError,
|
262
265
|
**kwargs: Any,
|
263
266
|
) -> AsyncIterable[DataFrame]: ...
|
264
267
|
@overload
|
@@ -274,6 +277,7 @@ async def select_to_dataframe(
|
|
274
277
|
in_clauses_chunk_size: int | None = None,
|
275
278
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
276
279
|
timeout: Delta | None = None,
|
280
|
+
error: MaybeType[BaseException] = TimeoutError,
|
277
281
|
**kwargs: Any,
|
278
282
|
) -> DataFrame | Iterable[DataFrame] | AsyncIterable[DataFrame]: ...
|
279
283
|
async def select_to_dataframe(
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/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.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/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
|
{dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/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
|
{dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
File without changes
|
{dycw_utilities-0.157.0 → dycw_utilities-0.157.2}/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
|