dycw-utilities 0.125.20__tar.gz → 0.125.21__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.20 → dycw_utilities-0.125.21}/PKG-INFO +3 -3
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/pyproject.toml +5 -5
- dycw_utilities-0.125.21/src/tests/test_contextlib.py +75 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/__init__.py +1 -1
- dycw_utilities-0.125.21/src/utilities/contextlib.py +44 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/errors.py +1 -0
- dycw_utilities-0.125.20/src/tests/test_contextlib.py +0 -15
- dycw_utilities-0.125.20/src/utilities/contextlib.py +0 -23
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/.gitignore +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/LICENSE +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/README.md +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/click.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/git.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/http.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/math.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/os.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/period.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/random.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/re.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/string.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/text.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/types.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/version.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/utilities/zoneinfo.py +0 -0
@@ -1,12 +1,12 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dycw-utilities
|
3
|
-
Version: 0.125.
|
3
|
+
Version: 0.125.21
|
4
4
|
Author-email: Derek Wan <d.wan@icloud.com>
|
5
5
|
License-File: LICENSE
|
6
6
|
Requires-Python: >=3.12
|
7
7
|
Requires-Dist: typing-extensions<4.14,>=4.13.1
|
8
8
|
Provides-Extra: test
|
9
|
-
Requires-Dist: hypothesis<6.132,>=6.131.
|
9
|
+
Requires-Dist: hypothesis<6.132,>=6.131.32; extra == 'test'
|
10
10
|
Requires-Dist: pytest-asyncio<1.1,>=1.0.0; extra == 'test'
|
11
11
|
Requires-Dist: pytest-cov<6.2,>=6.1.1; extra == 'test'
|
12
12
|
Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
|
@@ -78,7 +78,7 @@ Provides-Extra: zzz-test-hypothesis
|
|
78
78
|
Requires-Dist: aiosqlite<0.22,>=0.21.0; extra == 'zzz-test-hypothesis'
|
79
79
|
Requires-Dist: asyncpg<0.31,>=0.30.0; extra == 'zzz-test-hypothesis'
|
80
80
|
Requires-Dist: greenlet<3.3,>=3.2.0; extra == 'zzz-test-hypothesis'
|
81
|
-
Requires-Dist: hypothesis<6.132,>=6.131.
|
81
|
+
Requires-Dist: hypothesis<6.132,>=6.131.32; extra == 'zzz-test-hypothesis'
|
82
82
|
Requires-Dist: luigi<3.7,>=3.6.0; extra == 'zzz-test-hypothesis'
|
83
83
|
Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-hypothesis'
|
84
84
|
Requires-Dist: pathvalidate<3.3,>=3.2.3; extra == 'zzz-test-hypothesis'
|
@@ -25,7 +25,7 @@ dev = [
|
|
25
25
|
"fpdf2 >= 2.8.3, < 2.9",
|
26
26
|
"greenlet >= 3.2.0, < 3.3", # for sqlalchemy async
|
27
27
|
"httpx >= 0.28.1, < 0.29", # for fastapi
|
28
|
-
"hypothesis >= 6.131.
|
28
|
+
"hypothesis >= 6.131.32, < 6.132",
|
29
29
|
"img2pdf >= 0.6.0, < 0.7",
|
30
30
|
"lightweight-charts >= 2.1, < 2.2",
|
31
31
|
"loguru >= 0.7.3, < 0.8",
|
@@ -93,11 +93,11 @@ 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.21"
|
97
97
|
|
98
98
|
[project.optional-dependencies]
|
99
99
|
test = [
|
100
|
-
"hypothesis >= 6.131.
|
100
|
+
"hypothesis >= 6.131.32, < 6.132",
|
101
101
|
"pytest >= 8.3.5, < 8.4",
|
102
102
|
"pytest-asyncio >= 1.0.0, < 1.1",
|
103
103
|
"pytest-cov >= 6.1.1, < 6.2",
|
@@ -174,7 +174,7 @@ zzz-test-hypothesis = [
|
|
174
174
|
"aiosqlite >= 0.21.0, < 0.22",
|
175
175
|
"asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
|
176
176
|
"greenlet >= 3.2.0, < 3.3", # for sqlalchemy async
|
177
|
-
"hypothesis >= 6.131.
|
177
|
+
"hypothesis >= 6.131.32, < 6.132",
|
178
178
|
"luigi >= 3.6.0, < 3.7",
|
179
179
|
"numpy >= 2.2.6, < 2.3",
|
180
180
|
"pathvalidate >= 3.2.3, < 3.3",
|
@@ -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.21"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -0,0 +1,75 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from dataclasses import dataclass
|
4
|
+
from typing import override
|
5
|
+
|
6
|
+
from pytest import raises
|
7
|
+
|
8
|
+
from utilities.contextlib import (
|
9
|
+
NoOpContextManager,
|
10
|
+
suppress_super_object_attribute_error,
|
11
|
+
)
|
12
|
+
|
13
|
+
|
14
|
+
class TestNoOpContextManager:
|
15
|
+
def test_main(self) -> None:
|
16
|
+
with NoOpContextManager():
|
17
|
+
pass
|
18
|
+
|
19
|
+
def test_error(self) -> None:
|
20
|
+
with raises(RuntimeError), NoOpContextManager():
|
21
|
+
raise RuntimeError
|
22
|
+
|
23
|
+
|
24
|
+
class TestSuppressSuperObjectAttributeError:
|
25
|
+
def test_main(self) -> None:
|
26
|
+
inits: list[str] = []
|
27
|
+
|
28
|
+
@dataclass(kw_only=True)
|
29
|
+
class A:
|
30
|
+
def __post_init__(self) -> None:
|
31
|
+
with suppress_super_object_attribute_error():
|
32
|
+
super().__post_init__() # pyright:ignore [reportAttributeAccessIssue]
|
33
|
+
nonlocal inits
|
34
|
+
inits.append("A")
|
35
|
+
|
36
|
+
@dataclass(kw_only=True)
|
37
|
+
class B: ...
|
38
|
+
|
39
|
+
@dataclass(kw_only=True)
|
40
|
+
class C:
|
41
|
+
def __post_init__(self) -> None:
|
42
|
+
with suppress_super_object_attribute_error():
|
43
|
+
super().__post_init__() # pyright:ignore [reportAttributeAccessIssue]
|
44
|
+
nonlocal inits
|
45
|
+
inits.append("C")
|
46
|
+
|
47
|
+
@dataclass(kw_only=True)
|
48
|
+
class D: ...
|
49
|
+
|
50
|
+
@dataclass(kw_only=True)
|
51
|
+
class E(A, B, C, D):
|
52
|
+
@override
|
53
|
+
def __post_init__(self) -> None:
|
54
|
+
super().__post_init__()
|
55
|
+
nonlocal inits
|
56
|
+
inits.append("E")
|
57
|
+
|
58
|
+
_ = E()
|
59
|
+
assert inits == ["C", "A", "E"]
|
60
|
+
|
61
|
+
def test_error(self) -> None:
|
62
|
+
@dataclass(kw_only=True)
|
63
|
+
class Parent:
|
64
|
+
def __post_init__(self) -> None:
|
65
|
+
with suppress_super_object_attribute_error():
|
66
|
+
_ = self.error # pyright:ignore [reportAttributeAccessIssue]
|
67
|
+
|
68
|
+
@dataclass(kw_only=True)
|
69
|
+
class Child(Parent):
|
70
|
+
@override
|
71
|
+
def __post_init__(self) -> None:
|
72
|
+
super().__post_init__()
|
73
|
+
|
74
|
+
with raises(AttributeError, match="'Child' object has no attribute 'error'"):
|
75
|
+
_ = Child()
|
@@ -0,0 +1,44 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import re
|
4
|
+
from contextlib import contextmanager
|
5
|
+
from typing import TYPE_CHECKING
|
6
|
+
|
7
|
+
if TYPE_CHECKING:
|
8
|
+
from collections.abc import Iterator
|
9
|
+
from types import TracebackType
|
10
|
+
|
11
|
+
|
12
|
+
class NoOpContextManager:
|
13
|
+
"""Context-manager for no-op."""
|
14
|
+
|
15
|
+
def __enter__(self) -> None:
|
16
|
+
return None
|
17
|
+
|
18
|
+
def __exit__(
|
19
|
+
self,
|
20
|
+
exc_type: type[BaseException] | None,
|
21
|
+
exc_val: BaseException | None,
|
22
|
+
traceback: TracebackType | None,
|
23
|
+
) -> bool:
|
24
|
+
_ = (exc_type, exc_val, traceback)
|
25
|
+
return False
|
26
|
+
|
27
|
+
|
28
|
+
##
|
29
|
+
|
30
|
+
|
31
|
+
_SUPER_OBJECT_HAS_NO_ATTRIBUTE = re.compile(r"'super' object has no attribute '\w+'")
|
32
|
+
|
33
|
+
|
34
|
+
@contextmanager
|
35
|
+
def suppress_super_object_attribute_error() -> Iterator[None]:
|
36
|
+
"""Suppress the super() attribute error, for mix-ins."""
|
37
|
+
try:
|
38
|
+
yield
|
39
|
+
except AttributeError as error:
|
40
|
+
if not _SUPER_OBJECT_HAS_NO_ATTRIBUTE.search(error.args[0]):
|
41
|
+
raise
|
42
|
+
|
43
|
+
|
44
|
+
__all__ = ["NoOpContextManager", "suppress_super_object_attribute_error"]
|
@@ -1,15 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from pytest import raises
|
4
|
-
|
5
|
-
from utilities.contextlib import NoOpContextManager
|
6
|
-
|
7
|
-
|
8
|
-
class TestNoOpContextManager:
|
9
|
-
def test_main(self) -> None:
|
10
|
-
with NoOpContextManager():
|
11
|
-
pass
|
12
|
-
|
13
|
-
def test_error(self) -> None:
|
14
|
-
with raises(RuntimeError), NoOpContextManager():
|
15
|
-
raise RuntimeError
|
@@ -1,23 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from typing import TYPE_CHECKING
|
4
|
-
|
5
|
-
if TYPE_CHECKING:
|
6
|
-
from types import TracebackType
|
7
|
-
|
8
|
-
|
9
|
-
class NoOpContextManager:
|
10
|
-
def __enter__(self) -> None:
|
11
|
-
return None
|
12
|
-
|
13
|
-
def __exit__(
|
14
|
-
self,
|
15
|
-
exc_type: type[BaseException] | None,
|
16
|
-
exc_val: BaseException | None,
|
17
|
-
traceback: TracebackType | None,
|
18
|
-
) -> bool:
|
19
|
-
_ = (exc_type, exc_val, traceback)
|
20
|
-
return False
|
21
|
-
|
22
|
-
|
23
|
-
__all__ = ["NoOpContextManager"]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/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.20 → dycw_utilities-0.125.21}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/modules/package_without/module_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/src/tests/test_typing_funcs/no_future.py
RENAMED
File without changes
|
{dycw_utilities-0.125.20 → dycw_utilities-0.125.21}/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
|