dycw-utilities 0.148.0__tar.gz → 0.148.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.148.0 → dycw_utilities-0.148.1}/PKG-INFO +2 -2
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/pyproject.toml +6 -6
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_asyncio.py +27 -5
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_errors.py +33 -1
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/asyncio.py +4 -3
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/errors.py +16 -2
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/types.py +5 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/.gitignore +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/LICENSE +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/README.md +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_yield_access/__init__.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_yield_access/script.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_yield_access/script.sh +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/click.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/http.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/json.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/math.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/os.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/period.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/random.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/re.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/string.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/text.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/version.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dycw-utilities
|
3
|
-
Version: 0.148.
|
3
|
+
Version: 0.148.1
|
4
4
|
Author-email: Derek Wan <d.wan@icloud.com>
|
5
5
|
License-File: LICENSE
|
6
6
|
Requires-Python: >=3.12
|
@@ -14,7 +14,7 @@ Provides-Extra: test
|
|
14
14
|
Requires-Dist: dycw-pytest-only<2.2,>=2.1.1; extra == 'test'
|
15
15
|
Requires-Dist: hypothesis<6.136,>=6.135.24; extra == 'test'
|
16
16
|
Requires-Dist: pudb<2025.2,>=2025.1; extra == 'test'
|
17
|
-
Requires-Dist: pytest-asyncio<1.
|
17
|
+
Requires-Dist: pytest-asyncio<1.2,>=1.1.0; extra == 'test'
|
18
18
|
Requires-Dist: pytest-cov<6.3,>=6.2.1; extra == 'test'
|
19
19
|
Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
|
20
20
|
Requires-Dist: pytest-lazy-fixtures<1.2,>=1.1.4; extra == 'test'
|
@@ -23,7 +23,7 @@ core = [
|
|
23
23
|
"whenever >= 0.8.6, < 0.9",
|
24
24
|
]
|
25
25
|
cryptography = ["cryptography >= 45.0.4, < 45.1"]
|
26
|
-
cvxpy = ["cvxpy >= 1.
|
26
|
+
cvxpy = ["cvxpy >= 1.7.0, < 1.8"]
|
27
27
|
dataclasses-test = ["orjson", "polars"]
|
28
28
|
dev = [
|
29
29
|
"coloredlogs >= 15.0.1, < 15.1",
|
@@ -53,7 +53,7 @@ more-itertools = ["more-itertools >= 10.7.0, < 10.8"]
|
|
53
53
|
numpy = ["numpy >= 2.3.1, < 2.4"]
|
54
54
|
operator = ["polars"]
|
55
55
|
optuna = ["optuna >= 4.4.0, < 4.5"]
|
56
|
-
orjson = ["orjson >= 3.
|
56
|
+
orjson = ["orjson >= 3.11.0, < 3.12"]
|
57
57
|
orjson-test = ["polars"]
|
58
58
|
polars = ["polars >= 1.31.0, < 1.32"]
|
59
59
|
polars-ols = ["polars-ols >= 0.3.5, < 0.4"]
|
@@ -67,7 +67,7 @@ pyinstrument = ["pyinstrument >= 5.0.3, < 5.1"]
|
|
67
67
|
pytest = [
|
68
68
|
"pudb >= 2025.1, < 2025.2",
|
69
69
|
"pytest >= 8.4.1, < 8.5",
|
70
|
-
"pytest-asyncio >= 1.
|
70
|
+
"pytest-asyncio >= 1.1.0, < 1.2",
|
71
71
|
"pytest-randomly >= 3.16.0, < 3.17",
|
72
72
|
"pytest-timeout >= 2.4.0, < 2.5",
|
73
73
|
"pytest-xdist >= 3.8.0, < 3.9",
|
@@ -102,7 +102,7 @@ dependencies = [
|
|
102
102
|
name = "dycw-utilities"
|
103
103
|
readme = "README.md"
|
104
104
|
requires-python = ">= 3.12"
|
105
|
-
version = "0.148.
|
105
|
+
version = "0.148.1"
|
106
106
|
|
107
107
|
[project.entry-points.pytest11]
|
108
108
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -117,7 +117,7 @@ test = [
|
|
117
117
|
"hypothesis >= 6.135.24, < 6.136",
|
118
118
|
"pudb >= 2025.1, < 2025.2",
|
119
119
|
"pytest >= 8.4.1, < 8.5",
|
120
|
-
"pytest-asyncio >= 1.
|
120
|
+
"pytest-asyncio >= 1.1.0, < 1.2",
|
121
121
|
"pytest-cov >= 6.2.1, < 6.3",
|
122
122
|
"pytest-instafail >= 0.5.0, < 0.6",
|
123
123
|
"pytest-lazy-fixtures >= 1.1.4, < 1.2",
|
@@ -135,7 +135,7 @@ test = [
|
|
135
135
|
# bump-my-version
|
136
136
|
[tool.bumpversion]
|
137
137
|
allow_dirty = true
|
138
|
-
current_version = "0.148.
|
138
|
+
current_version = "0.148.1"
|
139
139
|
|
140
140
|
[[tool.bumpversion.files]]
|
141
141
|
filename = "src/utilities/__init__.py"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from asyncio import Queue, run
|
3
|
+
from asyncio import Queue, TaskGroup, run
|
4
4
|
from collections.abc import ItemsView, KeysView, ValuesView
|
5
5
|
from contextlib import asynccontextmanager
|
6
6
|
from re import search
|
@@ -323,6 +323,8 @@ class TestLoopUntilSucceed:
|
|
323
323
|
async def test_main(
|
324
324
|
self, *, caplog: LogCaptureFixture, sleep: TimeDelta | None, use_logger: bool
|
325
325
|
) -> None:
|
326
|
+
class CustomError(Exception): ...
|
327
|
+
|
326
328
|
caplog.set_level("DEBUG", logger=(name := unique_str()))
|
327
329
|
counter = 0
|
328
330
|
|
@@ -330,7 +332,7 @@ class TestLoopUntilSucceed:
|
|
330
332
|
nonlocal counter
|
331
333
|
counter += 1
|
332
334
|
if counter <= 3:
|
333
|
-
raise
|
335
|
+
raise CustomError
|
334
336
|
|
335
337
|
assert await loop_until_succeed(
|
336
338
|
lambda: func(), logger=name if use_logger else None, sleep=sleep
|
@@ -346,16 +348,36 @@ class TestLoopUntilSucceed:
|
|
346
348
|
)
|
347
349
|
assert messages == expected
|
348
350
|
|
349
|
-
async def
|
351
|
+
async def test_error_flat(self) -> None:
|
352
|
+
class CustomError(Exception): ...
|
353
|
+
|
350
354
|
counter = 0
|
351
355
|
|
352
356
|
async def func() -> None:
|
353
357
|
nonlocal counter
|
354
358
|
counter += 1
|
355
359
|
if counter <= 3:
|
356
|
-
raise
|
360
|
+
raise CustomError
|
361
|
+
|
362
|
+
assert not await loop_until_succeed(lambda: func(), errors=CustomError)
|
363
|
+
assert counter == 1
|
364
|
+
|
365
|
+
async def test_error_nested(self) -> None:
|
366
|
+
class CustomError(Exception): ...
|
367
|
+
|
368
|
+
counter = 0
|
369
|
+
|
370
|
+
async def func() -> None:
|
371
|
+
async with TaskGroup() as tg:
|
372
|
+
_ = tg.create_task(inner())
|
373
|
+
|
374
|
+
async def inner() -> None:
|
375
|
+
nonlocal counter
|
376
|
+
counter += 1
|
377
|
+
if counter <= 3:
|
378
|
+
raise CustomError
|
357
379
|
|
358
|
-
assert not await loop_until_succeed(lambda: func(), errors=
|
380
|
+
assert not await loop_until_succeed(lambda: func(), errors=CustomError)
|
359
381
|
assert counter == 1
|
360
382
|
|
361
383
|
|
@@ -4,7 +4,7 @@ from asyncio import TaskGroup
|
|
4
4
|
|
5
5
|
from pytest import RaisesGroup, raises
|
6
6
|
|
7
|
-
from utilities.errors import ImpossibleCaseError, repr_error
|
7
|
+
from utilities.errors import ImpossibleCaseError, is_instance_error, repr_error
|
8
8
|
|
9
9
|
|
10
10
|
class TestImpossibleCaseError:
|
@@ -14,6 +14,38 @@ class TestImpossibleCaseError:
|
|
14
14
|
raise ImpossibleCaseError(case=[f"{x=}"])
|
15
15
|
|
16
16
|
|
17
|
+
class TestIsInstanceError:
|
18
|
+
def test_flat(self) -> None:
|
19
|
+
class CustomError(Exception): ...
|
20
|
+
|
21
|
+
with raises(CustomError) as exc_info:
|
22
|
+
raise CustomError
|
23
|
+
|
24
|
+
assert is_instance_error(exc_info.value, CustomError)
|
25
|
+
|
26
|
+
async def test_group(self) -> None:
|
27
|
+
class CustomError(Exception): ...
|
28
|
+
|
29
|
+
async def coroutine() -> None:
|
30
|
+
raise CustomError
|
31
|
+
|
32
|
+
with RaisesGroup(CustomError) as exc_info:
|
33
|
+
async with TaskGroup() as tg:
|
34
|
+
_ = tg.create_task(coroutine())
|
35
|
+
|
36
|
+
assert is_instance_error(exc_info.value, CustomError)
|
37
|
+
|
38
|
+
def test_false(self) -> None:
|
39
|
+
class Custom1Error(Exception): ...
|
40
|
+
|
41
|
+
class Custom2Error(Exception): ...
|
42
|
+
|
43
|
+
with raises(Custom1Error) as exc_info:
|
44
|
+
raise Custom1Error
|
45
|
+
|
46
|
+
assert not is_instance_error(exc_info.value, Custom2Error)
|
47
|
+
|
48
|
+
|
17
49
|
class TestReprError:
|
18
50
|
def test_class(self) -> None:
|
19
51
|
class CustomError(Exception): ...
|
@@ -35,7 +35,7 @@ from typing import (
|
|
35
35
|
override,
|
36
36
|
)
|
37
37
|
|
38
|
-
from utilities.errors import ImpossibleCaseError
|
38
|
+
from utilities.errors import ImpossibleCaseError, is_instance_error
|
39
39
|
from utilities.functions import ensure_int, ensure_not_none, to_bool
|
40
40
|
from utilities.logging import get_logger
|
41
41
|
from utilities.random import SYSTEM_RANDOM
|
@@ -65,6 +65,7 @@ if TYPE_CHECKING:
|
|
65
65
|
from utilities.types import (
|
66
66
|
Coro,
|
67
67
|
Delta,
|
68
|
+
ExceptionTypeLike,
|
68
69
|
LoggerOrName,
|
69
70
|
MaybeCallableBool,
|
70
71
|
MaybeType,
|
@@ -398,7 +399,7 @@ async def loop_until_succeed(
|
|
398
399
|
/,
|
399
400
|
*,
|
400
401
|
logger: LoggerOrName | None = None,
|
401
|
-
errors:
|
402
|
+
errors: ExceptionTypeLike[Exception] | None = None,
|
402
403
|
sleep: Delta | None = None,
|
403
404
|
) -> bool:
|
404
405
|
"""Repeatedly call a coroutine until it succeeds."""
|
@@ -415,7 +416,7 @@ async def loop_until_succeed(
|
|
415
416
|
case=[f"{exc_type=}", f"{exc_value=}"]
|
416
417
|
) from None
|
417
418
|
sys.excepthook(exc_type, exc_value, traceback)
|
418
|
-
if (errors is not None) and
|
419
|
+
if (errors is not None) and is_instance_error(error, errors):
|
419
420
|
return False
|
420
421
|
if sleep is not None:
|
421
422
|
if logger is not None:
|
@@ -4,7 +4,7 @@ from dataclasses import dataclass
|
|
4
4
|
from typing import TYPE_CHECKING, assert_never, override
|
5
5
|
|
6
6
|
if TYPE_CHECKING:
|
7
|
-
from utilities.types import MaybeType
|
7
|
+
from utilities.types import ExceptionTypeLike, MaybeType
|
8
8
|
|
9
9
|
|
10
10
|
@dataclass(kw_only=True, slots=True)
|
@@ -21,6 +21,20 @@ class ImpossibleCaseError(Exception):
|
|
21
21
|
##
|
22
22
|
|
23
23
|
|
24
|
+
def is_instance_error(
|
25
|
+
error: BaseException, class_or_tuple: ExceptionTypeLike[Exception], /
|
26
|
+
) -> bool:
|
27
|
+
"""Check if an instance relationship holds, allowing for groups."""
|
28
|
+
if isinstance(error, class_or_tuple):
|
29
|
+
return True
|
30
|
+
if not isinstance(error, BaseExceptionGroup):
|
31
|
+
return False
|
32
|
+
return any(is_instance_error(e, class_or_tuple) for e in error.exceptions)
|
33
|
+
|
34
|
+
|
35
|
+
##
|
36
|
+
|
37
|
+
|
24
38
|
def repr_error(error: MaybeType[BaseException], /) -> str:
|
25
39
|
"""Get a string representation of an error."""
|
26
40
|
match error:
|
@@ -36,4 +50,4 @@ def repr_error(error: MaybeType[BaseException], /) -> str:
|
|
36
50
|
assert_never(never)
|
37
51
|
|
38
52
|
|
39
|
-
__all__ = ["ImpossibleCaseError", "repr_error"]
|
53
|
+
__all__ = ["ImpossibleCaseError", "is_instance_error", "repr_error"]
|
@@ -105,6 +105,10 @@ type MonthInt = Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
|
|
105
105
|
type EnumLike[E: Enum] = MaybeStr[E]
|
106
106
|
|
107
107
|
|
108
|
+
# errors
|
109
|
+
type ExceptionTypeLike[T: Exception] = type[T] | tuple[type[T], ...]
|
110
|
+
|
111
|
+
|
108
112
|
# ipaddress
|
109
113
|
IPv4AddressLike = MaybeStr[IPv4Address]
|
110
114
|
IPv6AddressLike = MaybeStr[IPv6Address]
|
@@ -265,6 +269,7 @@ __all__ = [
|
|
265
269
|
"Delta",
|
266
270
|
"EnumLike",
|
267
271
|
"ExcInfo",
|
272
|
+
"ExceptionTypeLike",
|
268
273
|
"IPv4AddressLike",
|
269
274
|
"IPv6AddressLike",
|
270
275
|
"IterableHashable",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.148.0 → dycw_utilities-0.148.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.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.148.0 → dycw_utilities-0.148.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
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.148.0 → dycw_utilities-0.148.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
|
{dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
File without changes
|
{dycw_utilities-0.148.0 → dycw_utilities-0.148.1}/src/utilities/pytest_plugins/pytest_regressions.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
|