dycw-utilities 0.122.1__tar.gz → 0.123.0__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.122.1 → dycw_utilities-0.123.0}/PKG-INFO +1 -1
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/pyproject.toml +3 -2
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_asyncio.py +34 -28
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/asyncio.py +12 -20
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/.gitignore +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/LICENSE +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/README.md +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/click.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/git.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/http.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/math.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/os.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/period.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/random.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/re.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/text.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/types.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/version.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/utilities/zoneinfo.py +0 -0
@@ -92,7 +92,7 @@ dependencies = [
|
|
92
92
|
name = "dycw-utilities"
|
93
93
|
readme = "README.md"
|
94
94
|
requires-python = ">= 3.12"
|
95
|
-
version = "0.
|
95
|
+
version = "0.123.0"
|
96
96
|
|
97
97
|
[project.optional-dependencies]
|
98
98
|
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.
|
337
|
+
current_version = "0.123.0"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -433,6 +433,7 @@ addopts = [
|
|
433
433
|
"--durations=10",
|
434
434
|
"--durations-min=10",
|
435
435
|
"--strict-markers",
|
436
|
+
"--timeout=300",
|
436
437
|
]
|
437
438
|
asyncio_default_fixture_loop_scope = "function"
|
438
439
|
asyncio_mode = "auto"
|
@@ -66,40 +66,46 @@ if TYPE_CHECKING:
|
|
66
66
|
|
67
67
|
|
68
68
|
class TestEnhancedTaskGroup:
|
69
|
-
async def
|
70
|
-
|
69
|
+
async def test_create_task_context_coroutine(self) -> None:
|
70
|
+
flag: bool = False
|
71
71
|
|
72
72
|
@asynccontextmanager
|
73
|
-
async def
|
74
|
-
nonlocal
|
73
|
+
async def yield_true() -> AsyncIterator[None]:
|
74
|
+
nonlocal flag
|
75
75
|
try:
|
76
|
-
|
76
|
+
flag = True
|
77
77
|
yield
|
78
78
|
finally:
|
79
|
-
|
79
|
+
flag = False
|
80
80
|
|
81
|
-
|
81
|
+
assert not flag
|
82
|
+
async with EnhancedTaskGroup(timeout=0.1) as tg:
|
83
|
+
_ = tg.create_task_context(yield_true())
|
84
|
+
await sleep(0.05)
|
85
|
+
assert flag
|
86
|
+
assert not flag
|
82
87
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
assert
|
100
|
-
|
101
|
-
|
102
|
-
|
88
|
+
async def test_create_task_context_looper(self) -> None:
|
89
|
+
@dataclass(kw_only=True)
|
90
|
+
class Example(InfiniteLooper[None]):
|
91
|
+
running: bool = False
|
92
|
+
|
93
|
+
@override
|
94
|
+
async def _initialize(self) -> None:
|
95
|
+
self.running = True
|
96
|
+
|
97
|
+
@override
|
98
|
+
async def _teardown(self) -> None:
|
99
|
+
self.running = False
|
100
|
+
|
101
|
+
looper = Example(duration=0.1)
|
102
|
+
assert not looper.running
|
103
|
+
async with EnhancedTaskGroup(timeout=0.1) as tg:
|
104
|
+
assert not looper.running
|
105
|
+
_ = tg.create_task_context(looper)
|
106
|
+
await sleep(0.05)
|
107
|
+
assert looper.running
|
108
|
+
assert not looper.running
|
103
109
|
|
104
110
|
async def test_max_tasks_disabled(self) -> None:
|
105
111
|
with Timer() as timer:
|
@@ -350,7 +356,7 @@ class TestInfiniteLooper:
|
|
350
356
|
|
351
357
|
async def inc_external(obj: Example, /) -> None:
|
352
358
|
nonlocal external
|
353
|
-
|
359
|
+
for _ in range(100): # infinite doesn't work on CI
|
354
360
|
external += 1
|
355
361
|
obj.counter += 1
|
356
362
|
await sleep(0.05)
|
@@ -87,7 +87,6 @@ class EnhancedTaskGroup(TaskGroup):
|
|
87
87
|
_timeout: Duration | None
|
88
88
|
_error: type[Exception]
|
89
89
|
_stack: AsyncExitStack
|
90
|
-
_stack_entered: bool
|
91
90
|
_timeout_cm: _AsyncGeneratorContextManager[None] | None
|
92
91
|
|
93
92
|
@override
|
@@ -103,7 +102,6 @@ class EnhancedTaskGroup(TaskGroup):
|
|
103
102
|
self._timeout = timeout
|
104
103
|
self._error = error
|
105
104
|
self._stack = AsyncExitStack()
|
106
|
-
self._stack_entered = False # TOOD: no need
|
107
105
|
self._timeout_cm = None
|
108
106
|
|
109
107
|
@override
|
@@ -136,8 +134,10 @@ class EnhancedTaskGroup(TaskGroup):
|
|
136
134
|
coroutine = self._wrap_with_timeout(coroutine)
|
137
135
|
return super().create_task(coroutine, name=name, context=context)
|
138
136
|
|
139
|
-
|
140
|
-
|
137
|
+
def create_task_context(self, cm: AbstractAsyncContextManager[_T], /) -> Task[_T]:
|
138
|
+
"""Have the TaskGroup start an asynchronous context manager."""
|
139
|
+
_ = self._stack.push_async_callback(cm.__aexit__, None, None, None)
|
140
|
+
return self.create_task(cm.__aenter__())
|
141
141
|
|
142
142
|
async def _wrap_with_semaphore(
|
143
143
|
self, semaphore: Semaphore, coroutine: _CoroutineLike[_T], /
|
@@ -178,18 +178,12 @@ class InfiniteLooper(ABC, Generic[THashable]):
|
|
178
178
|
|
179
179
|
async def __aenter__(self) -> Self:
|
180
180
|
"""Context manager entry."""
|
181
|
-
if
|
182
|
-
_ = await self._stack.__aenter__()
|
181
|
+
if self._depth == 0:
|
183
182
|
self._task = create_task(self._run_looper())
|
184
183
|
if self._await_upon_aenter:
|
185
184
|
with suppress(CancelledError):
|
186
185
|
await self._task
|
187
|
-
|
188
|
-
...
|
189
|
-
else:
|
190
|
-
raise ImpossibleCaseError( # pragma: no cover
|
191
|
-
case=[f"{self._task=}", f"{self._depth=}"]
|
192
|
-
)
|
186
|
+
_ = await self._stack.__aenter__()
|
193
187
|
self._depth += 1
|
194
188
|
return self
|
195
189
|
|
@@ -201,18 +195,16 @@ class InfiniteLooper(ABC, Generic[THashable]):
|
|
201
195
|
) -> None:
|
202
196
|
"""Context manager exit."""
|
203
197
|
_ = (exc_type, exc_value, traceback)
|
204
|
-
|
205
|
-
|
206
|
-
case=[f"{self._task=}", f"{self._depth=}"]
|
207
|
-
)
|
208
|
-
self._depth -= 1
|
209
|
-
if self._depth == 0:
|
210
|
-
_ = await self._stack.__aexit__(exc_type, exc_value, traceback)
|
198
|
+
self._depth = max(self._depth - 1, 0)
|
199
|
+
if (self._depth == 0) and (self._task is not None):
|
211
200
|
with suppress(CancelledError):
|
212
201
|
await self._task
|
213
202
|
self._task = None
|
214
|
-
|
203
|
+
try:
|
215
204
|
await self._teardown()
|
205
|
+
except Exception as error: # noqa: BLE001
|
206
|
+
self._error_upon_teardown(error)
|
207
|
+
_ = await self._stack.__aexit__(exc_type, exc_value, traceback)
|
216
208
|
|
217
209
|
async def stop(self) -> None:
|
218
210
|
"""Stop the service."""
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/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.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/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.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/decorated_async.py
RENAMED
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.122.1 → dycw_utilities-0.123.0}/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.122.1 → dycw_utilities-0.123.0}/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
|
File without changes
|