dycw-utilities 0.125.5__tar.gz → 0.125.7__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.125.5 → dycw_utilities-0.125.7}/PKG-INFO +4 -4
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/pyproject.toml +8 -9
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_asyncio.py +50 -1
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/asyncio.py +25 -6
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/errors.py +2 -2
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/.gitignore +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/LICENSE +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/README.md +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/click.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/git.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/http.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/math.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/os.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/period.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/random.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/re.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/text.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/types.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/version.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/utilities/zoneinfo.py +0 -0
@@ -1,13 +1,13 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dycw-utilities
|
3
|
-
Version: 0.125.
|
3
|
+
Version: 0.125.7
|
4
4
|
Author-email: Derek Wan <d.wan@icloud.com>
|
5
5
|
License-File: LICENSE
|
6
6
|
Requires-Python: >=3.12
|
7
7
|
Requires-Dist: typing-extensions<4.14,>=4.13.1
|
8
8
|
Provides-Extra: test
|
9
9
|
Requires-Dist: hypothesis<6.132,>=6.131.28; extra == 'test'
|
10
|
-
Requires-Dist: pytest-asyncio<
|
10
|
+
Requires-Dist: pytest-asyncio<1.1,>=1.0.0; extra == 'test'
|
11
11
|
Requires-Dist: pytest-cov<6.2,>=6.1.1; extra == 'test'
|
12
12
|
Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
|
13
13
|
Requires-Dist: pytest-lazy-fixtures<1.2,>=1.1.3; extra == 'test'
|
@@ -17,7 +17,7 @@ Requires-Dist: pytest-regressions<2.8,>=2.7.0; extra == 'test'
|
|
17
17
|
Requires-Dist: pytest-rerunfailures<16,>=15.1; extra == 'test'
|
18
18
|
Requires-Dist: pytest-rng<1.1,>=1.0.0; extra == 'test'
|
19
19
|
Requires-Dist: pytest-timeout<2.5,>=2.4.0; extra == 'test'
|
20
|
-
Requires-Dist: pytest-xdist<3.
|
20
|
+
Requires-Dist: pytest-xdist<3.8,>=3.7.0; extra == 'test'
|
21
21
|
Requires-Dist: pytest<8.4,>=8.3.5; extra == 'test'
|
22
22
|
Requires-Dist: setuptools>=78.0.2; extra == 'test'
|
23
23
|
Provides-Extra: zzz-test-altair
|
@@ -174,7 +174,7 @@ Requires-Dist: scipy<1.16,>=1.15.3; extra == 'zzz-test-scipy'
|
|
174
174
|
Provides-Extra: zzz-test-sentinel
|
175
175
|
Provides-Extra: zzz-test-shelve
|
176
176
|
Provides-Extra: zzz-test-slack-sdk
|
177
|
-
Requires-Dist: aiohttp<3.
|
177
|
+
Requires-Dist: aiohttp<3.12.1,>=3.12.0; extra == 'zzz-test-slack-sdk'
|
178
178
|
Requires-Dist: slack-sdk<3.36,>=3.35.0; extra == 'zzz-test-slack-sdk'
|
179
179
|
Provides-Extra: zzz-test-socket
|
180
180
|
Provides-Extra: zzz-test-sqlalchemy
|
@@ -8,7 +8,7 @@ requires = ["hatchling"]
|
|
8
8
|
# dependency groups
|
9
9
|
[dependency-groups]
|
10
10
|
dev = [
|
11
|
-
"aiohttp >= 3.12.0, < 3.
|
11
|
+
"aiohttp >= 3.12.0, < 3.12.1", # for slack
|
12
12
|
"aiosqlite >= 0.21.0, < 0.22",
|
13
13
|
"altair >= 5.5.0, < 5.6",
|
14
14
|
"asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
|
@@ -69,7 +69,7 @@ dev = [
|
|
69
69
|
"whenever >= 0.8.2, < 0.9",
|
70
70
|
# test
|
71
71
|
"coverage-conditional-plugin >= 0.9.0, < 0.10",
|
72
|
-
"pytest-asyncio >= 0.
|
72
|
+
"pytest-asyncio >= 1.0.0, < 1.1",
|
73
73
|
"pytest-cov >= 6.1.1, < 6.2",
|
74
74
|
"pytest-instafail >= 0.5.0, < 0.6",
|
75
75
|
"pytest-lazy-fixtures >= 1.1.3, < 1.2",
|
@@ -78,7 +78,7 @@ dev = [
|
|
78
78
|
"pytest-rerunfailures >= 15.1, < 16",
|
79
79
|
"pytest-rng >= 1.0.0, < 1.1",
|
80
80
|
"pytest-timeout >= 2.4.0, < 2.5",
|
81
|
-
"pytest-xdist >= 3.
|
81
|
+
"pytest-xdist >= 3.7.0, < 3.8",
|
82
82
|
# CI
|
83
83
|
"win32_setctime >= 1.2.0, < 1.3", # https://github.com/Delgan/loguru/issues/147
|
84
84
|
"setuptools >= 78.1.0", # https://github.com/theY4Kman/pytest-only/issues/14
|
@@ -93,13 +93,13 @@ dependencies = [
|
|
93
93
|
name = "dycw-utilities"
|
94
94
|
readme = "README.md"
|
95
95
|
requires-python = ">= 3.12"
|
96
|
-
version = "0.125.
|
96
|
+
version = "0.125.7"
|
97
97
|
|
98
98
|
[project.optional-dependencies]
|
99
99
|
test = [
|
100
100
|
"hypothesis >= 6.131.28, < 6.132",
|
101
101
|
"pytest >= 8.3.5, < 8.4",
|
102
|
-
"pytest-asyncio >= 0.
|
102
|
+
"pytest-asyncio >= 1.0.0, < 1.1",
|
103
103
|
"pytest-cov >= 6.1.1, < 6.2",
|
104
104
|
"pytest-instafail >= 0.5.0, < 0.6",
|
105
105
|
"pytest-lazy-fixtures >= 1.1.3, < 1.2",
|
@@ -109,7 +109,7 @@ test = [
|
|
109
109
|
"pytest-rerunfailures >= 15.1, < 16",
|
110
110
|
"pytest-rng >= 1.0.0, < 1.1",
|
111
111
|
"pytest-timeout >= 2.4.0, < 2.5",
|
112
|
-
"pytest-xdist >= 3.
|
112
|
+
"pytest-xdist >= 3.7.0, < 3.8",
|
113
113
|
"setuptools >= 78.0.2", # https://github.com/theY4Kman/pytest-only/issues/14
|
114
114
|
]
|
115
115
|
zzz-test-altair = [
|
@@ -270,7 +270,7 @@ zzz-test-scipy = ["scipy >= 1.15.3, < 1.16"]
|
|
270
270
|
zzz-test-sentinel = []
|
271
271
|
zzz-test-shelve = []
|
272
272
|
zzz-test-slack-sdk = [
|
273
|
-
"aiohttp >= 3.12.0, < 3.
|
273
|
+
"aiohttp >= 3.12.0, < 3.12.1", # for slack
|
274
274
|
"slack-sdk >= 3.35.0, < 3.36",
|
275
275
|
]
|
276
276
|
zzz-test-socket = []
|
@@ -334,7 +334,7 @@ zzz-test-zoneinfo = [
|
|
334
334
|
# bump-my-version
|
335
335
|
[tool.bumpversion]
|
336
336
|
allow_dirty = true
|
337
|
-
current_version = "0.125.
|
337
|
+
current_version = "0.125.7"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -436,7 +436,6 @@ addopts = [
|
|
436
436
|
"--strict-markers",
|
437
437
|
"--timeout=300",
|
438
438
|
]
|
439
|
-
asyncio_default_fixture_loop_scope = "function"
|
440
439
|
asyncio_mode = "auto"
|
441
440
|
filterwarnings = [
|
442
441
|
"error",
|
@@ -322,6 +322,27 @@ class TestInfiniteLooper:
|
|
322
322
|
assert 0 <= looper.counter <= 5
|
323
323
|
assert 3 <= looper.teardowns <= 5
|
324
324
|
|
325
|
+
async def test_blacklisted_errors(self) -> None:
|
326
|
+
class CustomError(Exception): ...
|
327
|
+
|
328
|
+
@dataclass(kw_only=True)
|
329
|
+
class Example(InfiniteLooper[None]):
|
330
|
+
counter: int = 0
|
331
|
+
|
332
|
+
@override
|
333
|
+
async def _core(self) -> None:
|
334
|
+
self.counter += 1
|
335
|
+
if self.counter >= 5:
|
336
|
+
raise CustomError
|
337
|
+
|
338
|
+
@override
|
339
|
+
def _yield_blacklisted_errors(self) -> Iterator[type[Exception]]:
|
340
|
+
yield CustomError
|
341
|
+
|
342
|
+
with raises(CustomError):
|
343
|
+
async with Example(sleep_core=0.05):
|
344
|
+
...
|
345
|
+
|
325
346
|
async def test_cancelled_error(self) -> None:
|
326
347
|
@dataclass(kw_only=True)
|
327
348
|
class Example(InfiniteLooper[None]):
|
@@ -417,7 +438,7 @@ class TestInfiniteLooper:
|
|
417
438
|
self._set_event(event=n % 2 == 0)
|
418
439
|
|
419
440
|
@override
|
420
|
-
def _error_upon_core(self, error:
|
441
|
+
def _error_upon_core(self, error: BaseException, /) -> None:
|
421
442
|
if isinstance(error, TrueError):
|
422
443
|
self.true_counter += 1
|
423
444
|
elif isinstance(error, FalseError):
|
@@ -440,6 +461,34 @@ class TestInfiniteLooper:
|
|
440
461
|
assert looper.true_counter == 0
|
441
462
|
assert looper.false_counter >= 1
|
442
463
|
|
464
|
+
async def test_whitelisted_errors(self) -> None:
|
465
|
+
class CustomError(BaseException): ...
|
466
|
+
|
467
|
+
@dataclass(kw_only=True)
|
468
|
+
class Example(InfiniteLooper[None]):
|
469
|
+
initializations: int = 0
|
470
|
+
counter: int = 0
|
471
|
+
|
472
|
+
@override
|
473
|
+
async def _initialize(self) -> None:
|
474
|
+
self.initializations += 1
|
475
|
+
self.counter = 0
|
476
|
+
|
477
|
+
@override
|
478
|
+
async def _core(self) -> None:
|
479
|
+
self.counter += 1
|
480
|
+
if self.counter >= 5:
|
481
|
+
raise CustomError
|
482
|
+
|
483
|
+
@override
|
484
|
+
def _yield_whitelisted_errors(self) -> Iterator[type[BaseException]]:
|
485
|
+
yield CustomError
|
486
|
+
|
487
|
+
async with timeout(1.0), Example(sleep_core=0.05, sleep_restart=0.05) as looper:
|
488
|
+
...
|
489
|
+
assert 3 <= looper.initializations <= 7
|
490
|
+
assert 0 <= looper.counter <= 8
|
491
|
+
|
443
492
|
async def test_with_coroutine_self_set_event(self) -> None:
|
444
493
|
external: int = 0
|
445
494
|
|
@@ -400,6 +400,8 @@ class InfiniteLooper(ABC, Generic[THashable]):
|
|
400
400
|
|
401
401
|
async def _run_looper_by_itself(self) -> None:
|
402
402
|
"""Run the looper by itself."""
|
403
|
+
whitelisted = tuple(self._yield_whitelisted_errors())
|
404
|
+
blacklisted = tuple(self._yield_blacklisted_errors())
|
403
405
|
while True:
|
404
406
|
try:
|
405
407
|
self._reset_events()
|
@@ -423,12 +425,21 @@ class InfiniteLooper(ABC, Generic[THashable]):
|
|
423
425
|
self._raise_error(event)
|
424
426
|
except InfiniteLooperError:
|
425
427
|
raise
|
426
|
-
except
|
427
|
-
|
428
|
+
except BaseException as error1:
|
429
|
+
match error1:
|
430
|
+
case Exception():
|
431
|
+
if isinstance(error1, blacklisted):
|
432
|
+
raise
|
433
|
+
case BaseException():
|
434
|
+
if not isinstance(error1, whitelisted):
|
435
|
+
raise
|
436
|
+
case _ as never:
|
437
|
+
assert_never(never)
|
438
|
+
self._error_upon_core(error1)
|
428
439
|
try:
|
429
440
|
await self._teardown()
|
430
|
-
except
|
431
|
-
self._error_upon_teardown(
|
441
|
+
except BaseException as error2: # noqa: BLE001
|
442
|
+
self._error_upon_teardown(error2)
|
432
443
|
finally:
|
433
444
|
await self._run_sleep(self.sleep_restart)
|
434
445
|
|
@@ -471,7 +482,7 @@ class InfiniteLooper(ABC, Generic[THashable]):
|
|
471
482
|
self._sleep_restart_desc,
|
472
483
|
)
|
473
484
|
|
474
|
-
def _error_upon_core(self, error:
|
485
|
+
def _error_upon_core(self, error: BaseException, /) -> None:
|
475
486
|
"""Handle any errors upon running the core function."""
|
476
487
|
if self.logger is not None:
|
477
488
|
getLogger(name=self.logger).error(
|
@@ -481,7 +492,7 @@ class InfiniteLooper(ABC, Generic[THashable]):
|
|
481
492
|
self._sleep_restart_desc,
|
482
493
|
)
|
483
494
|
|
484
|
-
def _error_upon_teardown(self, error:
|
495
|
+
def _error_upon_teardown(self, error: BaseException, /) -> None:
|
485
496
|
"""Handle any errors upon tearing down the looper."""
|
486
497
|
if self.logger is not None:
|
487
498
|
getLogger(name=self.logger).error(
|
@@ -561,6 +572,14 @@ class InfiniteLooper(ABC, Generic[THashable]):
|
|
561
572
|
"""Yield any other loopers which must also be run."""
|
562
573
|
yield from []
|
563
574
|
|
575
|
+
def _yield_blacklisted_errors(self) -> Iterator[type[Exception]]:
|
576
|
+
"""Yield any exceptions which the looper ought to catch terminate upon."""
|
577
|
+
yield from []
|
578
|
+
|
579
|
+
def _yield_whitelisted_errors(self) -> Iterator[type[BaseException]]:
|
580
|
+
"""Yield any exceptions which the looper ought to catch and allow running."""
|
581
|
+
yield from []
|
582
|
+
|
564
583
|
|
565
584
|
@dataclass(kw_only=True, slots=True)
|
566
585
|
class InfiniteLooperError(Exception):
|
@@ -20,10 +20,10 @@ class ImpossibleCaseError(Exception):
|
|
20
20
|
##
|
21
21
|
|
22
22
|
|
23
|
-
def repr_error(error: MaybeType[
|
23
|
+
def repr_error(error: MaybeType[BaseException], /) -> str:
|
24
24
|
"""Get a string representation of an error."""
|
25
25
|
match error:
|
26
|
-
case
|
26
|
+
case BaseException() as error_obj:
|
27
27
|
return f"{error_obj.__class__.__name__}({error_obj})"
|
28
28
|
case type() as error_cls:
|
29
29
|
return error_cls.__name__
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/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.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/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
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/decorated_async.py
RENAMED
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.5 → dycw_utilities-0.125.7}/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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|