dycw-utilities 0.125.17__tar.gz → 0.125.19__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.17 → dycw_utilities-0.125.19}/PKG-INFO +1 -1
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/pyproject.toml +2 -2
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_asyncio.py +121 -74
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_typing.py +14 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_typing_funcs/with_future.py +5 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/.gitignore +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/LICENSE +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/README.md +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/click.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/git.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/http.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/math.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/os.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/period.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/random.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/re.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/string.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/text.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/types.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/version.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/utilities/zoneinfo.py +0 -0
@@ -93,7 +93,7 @@ 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.19"
|
97
97
|
|
98
98
|
[project.optional-dependencies]
|
99
99
|
test = [
|
@@ -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.19"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -921,6 +921,11 @@ class _ExampleOuterLooper(_ExampleLooper):
|
|
921
921
|
|
922
922
|
|
923
923
|
class TestLooper:
|
924
|
+
sleep_if_failure_cases: ClassVar[list[Any]] = [
|
925
|
+
param(True, "; sleeping for .*"),
|
926
|
+
param(False, ""),
|
927
|
+
]
|
928
|
+
|
924
929
|
async def test_main_with_nothing(self) -> None:
|
925
930
|
looper = _ExampleLooper()
|
926
931
|
async with looper:
|
@@ -995,13 +1000,10 @@ class TestLooper:
|
|
995
1000
|
_ = await looper.initialize(sleep_if_failure=False)
|
996
1001
|
_ = one(m for m in caplog.messages if search(": already initializing$", m))
|
997
1002
|
|
998
|
-
@
|
999
|
-
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
|
1003
|
+
@mark.parametrize(("sleep_if_failure", "extra"), sleep_if_failure_cases)
|
1000
1004
|
async def test_initialize_failure(
|
1001
|
-
self, *,
|
1005
|
+
self, *, sleep_if_failure: bool, extra: str, caplog: LogCaptureFixture
|
1002
1006
|
) -> None:
|
1003
|
-
sleep_if_failure, extra = case
|
1004
|
-
|
1005
1007
|
class Example(_ExampleLooper):
|
1006
1008
|
@override
|
1007
1009
|
async def _initialize_core(self) -> None:
|
@@ -1011,13 +1013,8 @@ class TestLooper:
|
|
1011
1013
|
|
1012
1014
|
looper = Example()
|
1013
1015
|
_ = await looper.initialize(sleep_if_failure=sleep_if_failure)
|
1014
|
-
|
1015
|
-
|
1016
|
-
for m in caplog.messages
|
1017
|
-
if search(
|
1018
|
-
rf": encountered _ExampleLooperError\(\) whilst initializing{extra}$", m
|
1019
|
-
)
|
1020
|
-
)
|
1016
|
+
pattern = rf": encountered _ExampleLooperError\(\) whilst initializing{extra}$"
|
1017
|
+
_ = one(m for m in caplog.messages if search(pattern, m))
|
1021
1018
|
|
1022
1019
|
def test_len_and_qsize(self) -> None:
|
1023
1020
|
looper = _ExampleLooper()
|
@@ -1136,13 +1133,10 @@ class TestLooper:
|
|
1136
1133
|
if search(r": already requested stop when empty$", m)
|
1137
1134
|
)
|
1138
1135
|
|
1139
|
-
@
|
1140
|
-
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
|
1136
|
+
@mark.parametrize(("sleep_if_failure", "extra"), sleep_if_failure_cases)
|
1141
1137
|
async def test_restart_failure_during_initialization(
|
1142
|
-
self, *,
|
1138
|
+
self, *, sleep_if_failure: bool, extra: str, caplog: LogCaptureFixture
|
1143
1139
|
) -> None:
|
1144
|
-
sleep_if_failure, extra = case
|
1145
|
-
|
1146
1140
|
class Example(_ExampleLooper):
|
1147
1141
|
@override
|
1148
1142
|
async def _initialize_core(self) -> None:
|
@@ -1152,22 +1146,13 @@ class TestLooper:
|
|
1152
1146
|
|
1153
1147
|
looper = Example()
|
1154
1148
|
await looper.restart(sleep_if_failure=sleep_if_failure)
|
1155
|
-
|
1156
|
-
|
1157
|
-
for m in caplog.messages
|
1158
|
-
if search(
|
1159
|
-
rf": encountered _ExampleLooperError\(\) whilst restarting \(initialize\){extra}$",
|
1160
|
-
m,
|
1161
|
-
)
|
1162
|
-
)
|
1149
|
+
pattern = rf": encountered _ExampleLooperError\(\) whilst restarting \(initialize\){extra}$"
|
1150
|
+
_ = one(m for m in caplog.messages if search(pattern, m))
|
1163
1151
|
|
1164
|
-
@
|
1165
|
-
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
|
1152
|
+
@mark.parametrize(("sleep_if_failure", "extra"), sleep_if_failure_cases)
|
1166
1153
|
async def test_restart_failure_during_tear_down(
|
1167
|
-
self, *,
|
1154
|
+
self, *, sleep_if_failure: bool, extra: str, caplog: LogCaptureFixture
|
1168
1155
|
) -> None:
|
1169
|
-
sleep_if_failure, extra = case
|
1170
|
-
|
1171
1156
|
class Example(_ExampleLooper):
|
1172
1157
|
@override
|
1173
1158
|
async def _tear_down_core(self) -> None:
|
@@ -1177,22 +1162,13 @@ class TestLooper:
|
|
1177
1162
|
|
1178
1163
|
looper = Example()
|
1179
1164
|
await looper.restart(sleep_if_failure=sleep_if_failure)
|
1180
|
-
|
1181
|
-
|
1182
|
-
for m in caplog.messages
|
1183
|
-
if search(
|
1184
|
-
rf": encountered _ExampleLooperError\(\) whilst restarting \(tear down\){extra}$",
|
1185
|
-
m,
|
1186
|
-
)
|
1187
|
-
)
|
1165
|
+
pattern = rf": encountered _ExampleLooperError\(\) whilst restarting \(tear down\){extra}$"
|
1166
|
+
_ = one(m for m in caplog.messages if search(pattern, m))
|
1188
1167
|
|
1189
|
-
@
|
1190
|
-
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
|
1168
|
+
@mark.parametrize(("sleep_if_failure", "extra"), sleep_if_failure_cases)
|
1191
1169
|
async def test_restart_failure_during_tear_down_and_initialization(
|
1192
|
-
self, *,
|
1170
|
+
self, *, sleep_if_failure: bool, extra: str, caplog: LogCaptureFixture
|
1193
1171
|
) -> None:
|
1194
|
-
sleep_if_failure, extra = case
|
1195
|
-
|
1196
1172
|
class Example(_ExampleLooper):
|
1197
1173
|
@override
|
1198
1174
|
async def _initialize_core(self) -> None:
|
@@ -1208,18 +1184,15 @@ class TestLooper:
|
|
1208
1184
|
|
1209
1185
|
looper = Example()
|
1210
1186
|
await looper.restart(sleep_if_failure=sleep_if_failure)
|
1211
|
-
|
1212
|
-
|
1213
|
-
for m in caplog.messages
|
1214
|
-
if search(
|
1215
|
-
rf": encountered _ExampleLooperError\(\) \(tear down\) and then _ExampleLooperError\(\) \(initialization\) whilst restarting{extra}$",
|
1216
|
-
m,
|
1217
|
-
)
|
1218
|
-
)
|
1187
|
+
pattern = rf": encountered _ExampleLooperError\(\) \(tear down\) and then _ExampleLooperError\(\) \(initialization\) whilst restarting{extra}$"
|
1188
|
+
_ = one(m for m in caplog.messages if search(pattern, m))
|
1219
1189
|
|
1220
|
-
|
1190
|
+
@mark.parametrize("auto_start", [param(True), param(False)])
|
1191
|
+
async def test_sub_looper_one(
|
1192
|
+
self, *, auto_start: bool, caplog: LogCaptureFixture
|
1193
|
+
) -> None:
|
1221
1194
|
looper = _ExampleOuterLooper(auto_start=True, timeout=SECOND)
|
1222
|
-
looper.inner.auto_start =
|
1195
|
+
looper.inner.auto_start = auto_start
|
1223
1196
|
async with looper:
|
1224
1197
|
...
|
1225
1198
|
self._assert_stats(looper, stops=1)
|
@@ -1232,19 +1205,101 @@ class TestLooper:
|
|
1232
1205
|
restart_successes=13,
|
1233
1206
|
stops=1,
|
1234
1207
|
)
|
1208
|
+
pattern = r": changing sub-looper _ExampleLooper\(.*?\) to auto-start\.\.\.$"
|
1209
|
+
matches = [m for m in caplog.messages if bool(search(pattern, m))]
|
1210
|
+
if auto_start:
|
1211
|
+
assert len(matches) == 0
|
1212
|
+
else:
|
1213
|
+
_ = one(matches)
|
1235
1214
|
|
1236
|
-
async def
|
1237
|
-
|
1238
|
-
|
1239
|
-
|
1215
|
+
async def test_sub_loopers_multiple(self) -> None:
|
1216
|
+
@dataclass(kw_only=True)
|
1217
|
+
class Example(_ExampleLooper):
|
1218
|
+
inner1: _ExampleLooper = field(init=False, repr=False)
|
1219
|
+
inner2: _ExampleLooper = field(init=False, repr=False)
|
1220
|
+
|
1221
|
+
@override
|
1222
|
+
def __post_init__(self) -> None:
|
1223
|
+
super().__post_init__()
|
1224
|
+
self.inner1 = _ExampleLooper(
|
1225
|
+
freq=self.freq / 2,
|
1226
|
+
backoff=self.backoff / 2,
|
1227
|
+
logger=self.logger,
|
1228
|
+
timeout=self.timeout,
|
1229
|
+
timeout_error=self.timeout_error,
|
1230
|
+
max_count=round(self.max_count / 2),
|
1231
|
+
)
|
1232
|
+
self.inner2 = _ExampleLooper(
|
1233
|
+
freq=self.freq / 2,
|
1234
|
+
backoff=self.backoff / 2,
|
1235
|
+
logger=self.logger,
|
1236
|
+
timeout=self.timeout,
|
1237
|
+
timeout_error=self.timeout_error,
|
1238
|
+
max_count=round(self.max_count / 2),
|
1239
|
+
)
|
1240
|
+
|
1241
|
+
@override
|
1242
|
+
def _yield_sub_loopers(self) -> Iterator[Looper]:
|
1243
|
+
yield self.inner1
|
1244
|
+
yield self.inner2
|
1245
|
+
|
1246
|
+
looper = Example(auto_start=True, timeout=SECOND)
|
1240
1247
|
async with looper:
|
1241
1248
|
...
|
1242
|
-
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1249
|
+
self._assert_stats(looper, stops=1)
|
1250
|
+
for inner in [looper.inner1, looper.inner2]:
|
1251
|
+
self._assert_stats(
|
1252
|
+
inner,
|
1253
|
+
core_successes=56,
|
1254
|
+
core_failures=13,
|
1255
|
+
initialization_successes=14,
|
1256
|
+
tear_down_successes=13,
|
1257
|
+
restart_successes=13,
|
1258
|
+
stops=1,
|
1247
1259
|
)
|
1260
|
+
|
1261
|
+
async def test_sub_loopers_nested(self) -> None:
|
1262
|
+
@dataclass(kw_only=True)
|
1263
|
+
class Example(_ExampleLooper):
|
1264
|
+
middle: _ExampleOuterLooper = field(init=False, repr=False)
|
1265
|
+
|
1266
|
+
@override
|
1267
|
+
def __post_init__(self) -> None:
|
1268
|
+
super().__post_init__()
|
1269
|
+
self.middle = _ExampleOuterLooper(
|
1270
|
+
freq=self.freq / 2,
|
1271
|
+
backoff=self.backoff / 2,
|
1272
|
+
logger=self.logger,
|
1273
|
+
timeout=self.timeout,
|
1274
|
+
timeout_error=self.timeout_error,
|
1275
|
+
max_count=round(self.max_count / 2),
|
1276
|
+
)
|
1277
|
+
|
1278
|
+
@override
|
1279
|
+
def _yield_sub_loopers(self) -> Iterator[Looper]:
|
1280
|
+
yield self.middle
|
1281
|
+
|
1282
|
+
looper = Example(auto_start=True, timeout=SECOND)
|
1283
|
+
async with looper:
|
1284
|
+
...
|
1285
|
+
self._assert_stats(looper, stops=1)
|
1286
|
+
self._assert_stats(
|
1287
|
+
looper.middle,
|
1288
|
+
core_successes=56,
|
1289
|
+
core_failures=13,
|
1290
|
+
initialization_successes=14,
|
1291
|
+
tear_down_successes=13,
|
1292
|
+
restart_successes=13,
|
1293
|
+
stops=1,
|
1294
|
+
)
|
1295
|
+
self._assert_stats(
|
1296
|
+
looper.middle.inner,
|
1297
|
+
core_successes=34,
|
1298
|
+
core_failures=34,
|
1299
|
+
initialization_successes=34,
|
1300
|
+
tear_down_successes=33,
|
1301
|
+
restart_successes=33,
|
1302
|
+
stops=1,
|
1248
1303
|
)
|
1249
1304
|
|
1250
1305
|
async def test_tear_down_already_tearing_down(
|
@@ -1261,13 +1316,10 @@ class TestLooper:
|
|
1261
1316
|
_ = await looper.tear_down(sleep_if_failure=False)
|
1262
1317
|
_ = one(m for m in caplog.messages if search(": already tearing down$", m))
|
1263
1318
|
|
1264
|
-
@
|
1265
|
-
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
|
1319
|
+
@mark.parametrize(("sleep_if_failure", "extra"), sleep_if_failure_cases)
|
1266
1320
|
async def test_tear_down_failure(
|
1267
|
-
self, *,
|
1321
|
+
self, *, sleep_if_failure: bool, extra: str, caplog: LogCaptureFixture
|
1268
1322
|
) -> None:
|
1269
|
-
sleep_if_failure, extra = case
|
1270
|
-
|
1271
1323
|
class Example(_ExampleLooper):
|
1272
1324
|
@override
|
1273
1325
|
async def _tear_down_core(self) -> None:
|
@@ -1277,13 +1329,8 @@ class TestLooper:
|
|
1277
1329
|
|
1278
1330
|
looper = Example()
|
1279
1331
|
_ = await looper.tear_down(sleep_if_failure=sleep_if_failure)
|
1280
|
-
|
1281
|
-
|
1282
|
-
for m in caplog.messages
|
1283
|
-
if search(
|
1284
|
-
rf": encountered _ExampleLooperError\(\) whilst tearing down{extra}$", m
|
1285
|
-
)
|
1286
|
-
)
|
1332
|
+
pattern = rf": encountered _ExampleLooperError\(\) whilst tearing down{extra}$"
|
1333
|
+
_ = one(m for m in caplog.messages if search(pattern, m))
|
1287
1334
|
|
1288
1335
|
def test_with_auto_start(self) -> None:
|
1289
1336
|
looper = _ExampleLooper()
|
@@ -48,6 +48,7 @@ from tests.test_typing_funcs.with_future import (
|
|
48
48
|
DataClassFutureSentinel,
|
49
49
|
DataClassFutureStr,
|
50
50
|
DataClassFutureTimeDelta,
|
51
|
+
DataClassFutureTimeDeltaNullable,
|
51
52
|
DataClassFutureTypeLiteral,
|
52
53
|
DataClassFutureUUID,
|
53
54
|
TrueOrFalseFutureLit,
|
@@ -347,6 +348,19 @@ class TestGetTypeHints:
|
|
347
348
|
expected = {"timedelta": dt.timedelta}
|
348
349
|
assert hints == expected
|
349
350
|
|
351
|
+
@given(data=data())
|
352
|
+
def test_timedelta_nullable(self, *, data: DataObject) -> None:
|
353
|
+
@dataclass(kw_only=True, slots=True)
|
354
|
+
class Example:
|
355
|
+
timedelta: dt.timedelta | None
|
356
|
+
|
357
|
+
cls = data.draw(sampled_from([Example, DataClassFutureTimeDeltaNullable]))
|
358
|
+
globalns = data.draw(just(globals()) | none())
|
359
|
+
localns = data.draw(just(locals()) | none())
|
360
|
+
hints = get_type_hints(cls, globalns=globalns, localns=localns)
|
361
|
+
expected = {"timedelta": dt.timedelta | None}
|
362
|
+
assert hints == expected
|
363
|
+
|
350
364
|
@given(data=data())
|
351
365
|
def test_type_literal(self, *, data: DataObject) -> None:
|
352
366
|
@dataclass(kw_only=True, slots=True)
|
{dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/test_typing_funcs/with_future.py
RENAMED
@@ -157,6 +157,11 @@ class DataClassFutureTimeDelta:
|
|
157
157
|
timedelta: dt.timedelta
|
158
158
|
|
159
159
|
|
160
|
+
@dataclass(order=True, unsafe_hash=True, kw_only=True)
|
161
|
+
class DataClassFutureTimeDeltaNullable:
|
162
|
+
timedelta: dt.timedelta | None = None
|
163
|
+
|
164
|
+
|
160
165
|
@dataclass(order=True, unsafe_hash=True, kw_only=True)
|
161
166
|
class DataClassFutureTypeLiteral:
|
162
167
|
truth: TrueOrFalseFutureTypeLit
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_with/outer_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.125.17 → dycw_utilities-0.125.19}/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
|