dycw-utilities 0.122.0__tar.gz → 0.122.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/PKG-INFO +1 -1
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/pyproject.toml +2 -2
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_asyncio.py +38 -2
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/asyncio.py +23 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/.gitignore +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/LICENSE +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/README.md +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/click.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/git.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/http.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/math.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/os.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/period.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/random.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/re.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/text.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/types.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/version.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/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.122.
|
95
|
+
version = "0.122.1"
|
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.122.
|
337
|
+
current_version = "0.122.1"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
from asyncio import CancelledError, Event, Queue, TaskGroup, run, sleep, timeout
|
4
|
+
from contextlib import asynccontextmanager
|
4
5
|
from dataclasses import dataclass, field
|
5
6
|
from functools import partial
|
6
7
|
from itertools import chain, count
|
@@ -53,7 +54,7 @@ from utilities.sentinel import Sentinel, sentinel
|
|
53
54
|
from utilities.timer import Timer
|
54
55
|
|
55
56
|
if TYPE_CHECKING:
|
56
|
-
from collections.abc import Callable, Iterator
|
57
|
+
from collections.abc import AsyncIterator, Callable, Iterator
|
57
58
|
|
58
59
|
from utilities.types import (
|
59
60
|
Coroutine1,
|
@@ -65,6 +66,41 @@ if TYPE_CHECKING:
|
|
65
66
|
|
66
67
|
|
67
68
|
class TestEnhancedTaskGroup:
|
69
|
+
async def test_context_managers(self) -> None:
|
70
|
+
first: bool = False
|
71
|
+
|
72
|
+
@asynccontextmanager
|
73
|
+
async def yield_first() -> AsyncIterator[None]:
|
74
|
+
nonlocal first
|
75
|
+
try:
|
76
|
+
first = True
|
77
|
+
yield
|
78
|
+
finally:
|
79
|
+
first = False
|
80
|
+
|
81
|
+
second: bool = False
|
82
|
+
|
83
|
+
@asynccontextmanager
|
84
|
+
async def yield_second() -> AsyncIterator[None]:
|
85
|
+
nonlocal second
|
86
|
+
try:
|
87
|
+
second = True
|
88
|
+
yield
|
89
|
+
finally:
|
90
|
+
second = False
|
91
|
+
|
92
|
+
async with EnhancedTaskGroup() as tg:
|
93
|
+
assert not first
|
94
|
+
assert not second
|
95
|
+
_ = await tg.enter_async_context(yield_first())
|
96
|
+
assert first
|
97
|
+
assert not second
|
98
|
+
_ = await tg.enter_async_context(yield_second())
|
99
|
+
assert first
|
100
|
+
assert second
|
101
|
+
assert not first
|
102
|
+
assert not second
|
103
|
+
|
68
104
|
async def test_max_tasks_disabled(self) -> None:
|
69
105
|
with Timer() as timer:
|
70
106
|
async with EnhancedTaskGroup() as tg:
|
@@ -346,7 +382,7 @@ class TestInfiniteLooper:
|
|
346
382
|
...
|
347
383
|
assert 4 <= looper.initializations <= 6
|
348
384
|
assert 0 <= looper.counter <= 7
|
349
|
-
assert
|
385
|
+
assert 14 <= external <= 21
|
350
386
|
|
351
387
|
async def test_with_coroutine_self_error(self) -> None:
|
352
388
|
class CustomError(Exception): ...
|
@@ -19,6 +19,7 @@ from asyncio import (
|
|
19
19
|
)
|
20
20
|
from collections.abc import Callable, Hashable, Iterable, Iterator, Mapping
|
21
21
|
from contextlib import (
|
22
|
+
AbstractAsyncContextManager,
|
22
23
|
AsyncExitStack,
|
23
24
|
_AsyncGeneratorContextManager,
|
24
25
|
asynccontextmanager,
|
@@ -85,6 +86,8 @@ class EnhancedTaskGroup(TaskGroup):
|
|
85
86
|
_semaphore: Semaphore | None
|
86
87
|
_timeout: Duration | None
|
87
88
|
_error: type[Exception]
|
89
|
+
_stack: AsyncExitStack
|
90
|
+
_stack_entered: bool
|
88
91
|
_timeout_cm: _AsyncGeneratorContextManager[None] | None
|
89
92
|
|
90
93
|
@override
|
@@ -99,8 +102,25 @@ class EnhancedTaskGroup(TaskGroup):
|
|
99
102
|
self._semaphore = None if max_tasks is None else Semaphore(max_tasks)
|
100
103
|
self._timeout = timeout
|
101
104
|
self._error = error
|
105
|
+
self._stack = AsyncExitStack()
|
106
|
+
self._stack_entered = False # TOOD: no need
|
102
107
|
self._timeout_cm = None
|
103
108
|
|
109
|
+
@override
|
110
|
+
async def __aenter__(self) -> Self:
|
111
|
+
_ = await self._stack.__aenter__()
|
112
|
+
return await super().__aenter__()
|
113
|
+
|
114
|
+
@override
|
115
|
+
async def __aexit__(
|
116
|
+
self,
|
117
|
+
et: type[BaseException] | None,
|
118
|
+
exc: BaseException | None,
|
119
|
+
tb: TracebackType | None,
|
120
|
+
) -> None:
|
121
|
+
_ = await self._stack.__aexit__(et, exc, tb)
|
122
|
+
_ = await super().__aexit__(et, exc, tb)
|
123
|
+
|
104
124
|
@override
|
105
125
|
def create_task(
|
106
126
|
self,
|
@@ -116,6 +136,9 @@ class EnhancedTaskGroup(TaskGroup):
|
|
116
136
|
coroutine = self._wrap_with_timeout(coroutine)
|
117
137
|
return super().create_task(coroutine, name=name, context=context)
|
118
138
|
|
139
|
+
async def enter_async_context(self, cm: AbstractAsyncContextManager[_T], /) -> _T:
|
140
|
+
return await self._stack.enter_async_context(cm)
|
141
|
+
|
119
142
|
async def _wrap_with_semaphore(
|
120
143
|
self, semaphore: Semaphore, coroutine: _CoroutineLike[_T], /
|
121
144
|
) -> _T:
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/modules/package_without/module_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/decorated_async.py
RENAMED
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.122.0 → dycw_utilities-0.122.1}/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.0 → dycw_utilities-0.122.1}/src/tests/test_typing_funcs/with_future.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|