dycw-utilities 0.163.0__tar.gz → 0.164.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/PKG-INFO +1 -1
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/pyproject.toml +2 -2
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_functions.py +0 -233
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_iterables.py +1 -7
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_orjson.py +1 -2
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_traceback.py +8 -1
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_typing.py +228 -10
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_typing_funcs/with_future.py +6 -1
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/dataclasses.py +2 -6
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/functions.py +5 -266
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/iterables.py +1 -16
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/operator.py +1 -1
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/orjson.py +2 -1
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/polars.py +4 -6
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/polars_ols.py +1 -1
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/redis.py +2 -11
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/sqlalchemy.py +7 -9
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/traceback.py +11 -6
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/typing.py +418 -14
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/.gitignore +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/LICENSE +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/README.md +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_aeventkit.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_testbook.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/aeventkit.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/click.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/http.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/json.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/math.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/os.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/random.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/re.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/string.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/testbook.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/text.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/types.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/version.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.163.0 → dycw_utilities-0.164.0}/src/utilities/zoneinfo.py +0 -0
@@ -232,7 +232,7 @@ dependencies = [
|
|
232
232
|
name = "dycw-utilities"
|
233
233
|
readme = "README.md"
|
234
234
|
requires-python = ">= 3.12"
|
235
|
-
version = "0.
|
235
|
+
version = "0.164.0"
|
236
236
|
|
237
237
|
[project.entry-points.pytest11]
|
238
238
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -265,7 +265,7 @@ test = [
|
|
265
265
|
# bump-my-version
|
266
266
|
[tool.bumpversion]
|
267
267
|
allow_dirty = true
|
268
|
-
current_version = "0.
|
268
|
+
current_version = "0.164.0"
|
269
269
|
|
270
270
|
[[tool.bumpversion.files]]
|
271
271
|
filename = "src/utilities/__init__.py"
|
@@ -33,15 +33,12 @@ from utilities.functions import (
|
|
33
33
|
EnsureClassError,
|
34
34
|
EnsureDateError,
|
35
35
|
EnsureFloatError,
|
36
|
-
EnsureHashableError,
|
37
36
|
EnsureIntError,
|
38
37
|
EnsureMemberError,
|
39
38
|
EnsureNotNoneError,
|
40
39
|
EnsureNumberError,
|
41
40
|
EnsurePathError,
|
42
41
|
EnsurePlainDateTimeError,
|
43
|
-
EnsureSizedError,
|
44
|
-
EnsureSizedNotStrError,
|
45
42
|
EnsureStrError,
|
46
43
|
EnsureTimeDeltaError,
|
47
44
|
EnsureTimeError,
|
@@ -54,15 +51,12 @@ from utilities.functions import (
|
|
54
51
|
ensure_class,
|
55
52
|
ensure_date,
|
56
53
|
ensure_float,
|
57
|
-
ensure_hashable,
|
58
54
|
ensure_int,
|
59
55
|
ensure_member,
|
60
56
|
ensure_not_none,
|
61
57
|
ensure_number,
|
62
58
|
ensure_path,
|
63
59
|
ensure_plain_date_time,
|
64
|
-
ensure_sized,
|
65
|
-
ensure_sized_not_str,
|
66
60
|
ensure_str,
|
67
61
|
ensure_time,
|
68
62
|
ensure_time_delta,
|
@@ -73,20 +67,8 @@ from utilities.functions import (
|
|
73
67
|
get_func_name,
|
74
68
|
get_func_qualname,
|
75
69
|
identity,
|
76
|
-
is_dataclass_class,
|
77
|
-
is_dataclass_instance,
|
78
|
-
is_hashable,
|
79
|
-
is_iterable_of,
|
80
70
|
is_none,
|
81
71
|
is_not_none,
|
82
|
-
is_sequence_of,
|
83
|
-
is_sequence_of_tuple_or_str_mapping,
|
84
|
-
is_sized,
|
85
|
-
is_sized_not_str,
|
86
|
-
is_string_mapping,
|
87
|
-
is_tuple,
|
88
|
-
is_tuple_or_str_mapping,
|
89
|
-
make_isinstance,
|
90
72
|
map_object,
|
91
73
|
max_nullable,
|
92
74
|
min_nullable,
|
@@ -232,18 +214,6 @@ class TestEnsureFloat:
|
|
232
214
|
_ = ensure_float(sentinel, nullable=nullable)
|
233
215
|
|
234
216
|
|
235
|
-
class TestEnsureHashable:
|
236
|
-
@given(obj=sampled_from([0, (1, 2, 3)]))
|
237
|
-
def test_main(self, *, obj: Any) -> None:
|
238
|
-
assert ensure_hashable(obj) == obj
|
239
|
-
|
240
|
-
def test_error(self) -> None:
|
241
|
-
with raises(
|
242
|
-
EnsureHashableError, match=r"Object '.*' of type '.*' must be hashable"
|
243
|
-
):
|
244
|
-
_ = ensure_hashable([1, 2, 3])
|
245
|
-
|
246
|
-
|
247
217
|
class TestEnsureInt:
|
248
218
|
@given(case=sampled_from([(0, False), (0, True), (None, True)]))
|
249
219
|
def test_main(self, *, case: tuple[int | None, bool]) -> None:
|
@@ -363,30 +333,6 @@ class TestEnsurePlainDateTime:
|
|
363
333
|
_ = ensure_plain_date_time(sentinel, nullable=nullable)
|
364
334
|
|
365
335
|
|
366
|
-
class TestEnsureSized:
|
367
|
-
@given(obj=sampled_from([[], (), ""]))
|
368
|
-
def test_main(self, *, obj: Any) -> None:
|
369
|
-
_ = ensure_sized(obj)
|
370
|
-
|
371
|
-
def test_error(self) -> None:
|
372
|
-
with raises(EnsureSizedError, match=r"Object '.*' of type '.*' must be sized"):
|
373
|
-
_ = ensure_sized(None)
|
374
|
-
|
375
|
-
|
376
|
-
class TestEnsureSizedNotStr:
|
377
|
-
@given(obj=sampled_from([[], ()]))
|
378
|
-
def test_main(self, *, obj: Any) -> None:
|
379
|
-
_ = ensure_sized_not_str(obj)
|
380
|
-
|
381
|
-
@given(obj=sampled_from([None, '""']))
|
382
|
-
def test_error(self, *, obj: Any) -> None:
|
383
|
-
with raises(
|
384
|
-
EnsureSizedNotStrError,
|
385
|
-
match="Object '.*' of type '.*' must be sized and not a string",
|
386
|
-
):
|
387
|
-
_ = ensure_sized_not_str(obj)
|
388
|
-
|
389
|
-
|
390
336
|
class TestEnsureStr:
|
391
337
|
@given(case=sampled_from([("", False), ("", True), (None, True)]))
|
392
338
|
def test_main(self, *, case: tuple[bool | None, bool]) -> None:
|
@@ -610,72 +556,6 @@ class TestIdentity:
|
|
610
556
|
assert identity(x) == x
|
611
557
|
|
612
558
|
|
613
|
-
class TestIsDataClassClass:
|
614
|
-
def test_main(self) -> None:
|
615
|
-
@dataclass(kw_only=True, slots=True)
|
616
|
-
class Example:
|
617
|
-
x: None = None
|
618
|
-
|
619
|
-
assert is_dataclass_class(Example)
|
620
|
-
assert not is_dataclass_class(Example())
|
621
|
-
|
622
|
-
@given(obj=sampled_from([None, type(None)]))
|
623
|
-
def test_others(self, *, obj: Any) -> None:
|
624
|
-
assert not is_dataclass_class(obj)
|
625
|
-
|
626
|
-
|
627
|
-
class TestIsDataClassInstance:
|
628
|
-
def test_main(self) -> None:
|
629
|
-
@dataclass(kw_only=True, slots=True)
|
630
|
-
class Example:
|
631
|
-
x: None = None
|
632
|
-
|
633
|
-
assert not is_dataclass_instance(Example)
|
634
|
-
assert is_dataclass_instance(Example())
|
635
|
-
|
636
|
-
@given(obj=sampled_from([None, type(None)]))
|
637
|
-
def test_others(self, *, obj: Any) -> None:
|
638
|
-
assert not is_dataclass_instance(obj)
|
639
|
-
|
640
|
-
|
641
|
-
class TestIsHashable:
|
642
|
-
@given(case=sampled_from([(0, True), ((1, 2, 3), True), ([1, 2, 3], False)]))
|
643
|
-
def test_main(self, *, case: tuple[Any, bool]) -> None:
|
644
|
-
obj, expected = case
|
645
|
-
assert is_hashable(obj) is expected
|
646
|
-
|
647
|
-
|
648
|
-
class TestIsIterableOf:
|
649
|
-
@given(
|
650
|
-
case=sampled_from([
|
651
|
-
([0], True),
|
652
|
-
(["0"], False),
|
653
|
-
({0}, True),
|
654
|
-
({0: 0}, True),
|
655
|
-
(None, False),
|
656
|
-
([None], False),
|
657
|
-
])
|
658
|
-
)
|
659
|
-
def test_single(self, *, case: tuple[Any, bool]) -> None:
|
660
|
-
obj, expected = case
|
661
|
-
result = is_iterable_of(obj, int)
|
662
|
-
assert result is expected
|
663
|
-
|
664
|
-
@given(
|
665
|
-
case=sampled_from([
|
666
|
-
([0], True),
|
667
|
-
(["0"], True),
|
668
|
-
([0, "0"], True),
|
669
|
-
(None, False),
|
670
|
-
([None], False),
|
671
|
-
])
|
672
|
-
)
|
673
|
-
def test_multiple(self, *, case: tuple[Any, bool]) -> None:
|
674
|
-
obj, expected = case
|
675
|
-
result = is_iterable_of(obj, (int, str))
|
676
|
-
assert result is expected
|
677
|
-
|
678
|
-
|
679
559
|
class TestIsNoneAndIsNotNone:
|
680
560
|
@given(
|
681
561
|
case=sampled_from([
|
@@ -691,119 +571,6 @@ class TestIsNoneAndIsNotNone:
|
|
691
571
|
assert result is expected
|
692
572
|
|
693
573
|
|
694
|
-
class TestIsSequenceOf:
|
695
|
-
@given(
|
696
|
-
case=sampled_from([
|
697
|
-
([0], True),
|
698
|
-
(["0"], False),
|
699
|
-
({0}, False),
|
700
|
-
({0: 0}, False),
|
701
|
-
(None, False),
|
702
|
-
([None], False),
|
703
|
-
])
|
704
|
-
)
|
705
|
-
def test_single(self, *, case: tuple[Any, bool]) -> None:
|
706
|
-
obj, expected = case
|
707
|
-
result = is_sequence_of(obj, int)
|
708
|
-
assert result is expected
|
709
|
-
|
710
|
-
@given(
|
711
|
-
case=sampled_from([
|
712
|
-
([0], True),
|
713
|
-
(["0"], True),
|
714
|
-
([0, "0"], True),
|
715
|
-
(None, False),
|
716
|
-
([None], False),
|
717
|
-
])
|
718
|
-
)
|
719
|
-
def test_multiple(self, *, case: tuple[Any, bool]) -> None:
|
720
|
-
obj, expected = case
|
721
|
-
result = is_sequence_of(obj, (int, str))
|
722
|
-
assert result is expected
|
723
|
-
|
724
|
-
|
725
|
-
class TestIsSequenceOfTupleOrStrgMapping:
|
726
|
-
@given(
|
727
|
-
case=sampled_from([
|
728
|
-
(None, False),
|
729
|
-
([(1, 2, 3)], True),
|
730
|
-
([{"a": 1, "b": 2, "c": 3}], True),
|
731
|
-
([(1, 2, 3), {"a": 1, "b": 2, "c": 3}], True),
|
732
|
-
])
|
733
|
-
)
|
734
|
-
def test_main(self, *, case: tuple[Any, bool]) -> None:
|
735
|
-
obj, expected = case
|
736
|
-
result = is_sequence_of_tuple_or_str_mapping(obj)
|
737
|
-
assert result is expected
|
738
|
-
|
739
|
-
|
740
|
-
class TestIsSized:
|
741
|
-
@given(case=sampled_from([(None, False), ([], True), ((), True), ("", True)]))
|
742
|
-
def test_main(self, *, case: tuple[Any, bool]) -> None:
|
743
|
-
obj, expected = case
|
744
|
-
assert is_sized(obj) is expected
|
745
|
-
|
746
|
-
|
747
|
-
class TestIsSizedNotStr:
|
748
|
-
@given(case=sampled_from([(None, False), ([], True), ((), True), ("", False)]))
|
749
|
-
def test_main(self, *, case: tuple[Any, bool]) -> None:
|
750
|
-
obj, expected = case
|
751
|
-
assert is_sized_not_str(obj) is expected
|
752
|
-
|
753
|
-
|
754
|
-
class TestIsStringMapping:
|
755
|
-
@given(
|
756
|
-
case=sampled_from([
|
757
|
-
(None, False),
|
758
|
-
({"a": 1, "b": 2, "c": 3}, True),
|
759
|
-
({1: "a", 2: "b", 3: "c"}, False),
|
760
|
-
])
|
761
|
-
)
|
762
|
-
def test_main(self, *, case: tuple[Any, bool]) -> None:
|
763
|
-
obj, expected = case
|
764
|
-
result = is_string_mapping(obj)
|
765
|
-
assert result is expected
|
766
|
-
|
767
|
-
|
768
|
-
class TestIsTuple:
|
769
|
-
@given(case=sampled_from([(None, False), ((1, 2, 3), True), ([1, 2, 3], False)]))
|
770
|
-
def test_main(self, *, case: tuple[Any, bool]) -> None:
|
771
|
-
obj, expected = case
|
772
|
-
result = is_tuple(obj)
|
773
|
-
assert result is expected
|
774
|
-
|
775
|
-
|
776
|
-
class TestIsTupleOrStringMapping:
|
777
|
-
@given(
|
778
|
-
case=sampled_from([
|
779
|
-
(None, False),
|
780
|
-
((1, 2, 3), True),
|
781
|
-
({"a": 1, "b": 2, "c": 3}, True),
|
782
|
-
({1: "a", 2: "b", 3: "c"}, False),
|
783
|
-
])
|
784
|
-
)
|
785
|
-
def test_main(self, *, case: tuple[Any, bool]) -> None:
|
786
|
-
obj, expected = case
|
787
|
-
result = is_tuple_or_str_mapping(obj)
|
788
|
-
assert result is expected
|
789
|
-
|
790
|
-
|
791
|
-
class TestMakeIsInstance:
|
792
|
-
@given(case=sampled_from([(True, True), (False, True), (None, False)]))
|
793
|
-
def test_single(self, *, case: tuple[bool | None, bool]) -> None:
|
794
|
-
obj, expected = case
|
795
|
-
func = make_isinstance(bool)
|
796
|
-
result = func(obj)
|
797
|
-
assert result is expected
|
798
|
-
|
799
|
-
@given(case=sampled_from([(0, True), ("0", True), (None, False)]))
|
800
|
-
def test_multiple(self, *, case: tuple[bool | None, bool]) -> None:
|
801
|
-
obj, expected = case
|
802
|
-
func = make_isinstance((int, str))
|
803
|
-
result = func(obj)
|
804
|
-
assert result is expected
|
805
|
-
|
806
|
-
|
807
574
|
class TestMapObject:
|
808
575
|
@given(x=integers())
|
809
576
|
def test_int(self, *, x: int) -> None:
|
@@ -32,7 +32,6 @@ from hypothesis.strategies import (
|
|
32
32
|
from pytest import mark, param, raises
|
33
33
|
|
34
34
|
from tests.test_objects.objects import objects
|
35
|
-
from utilities.functions import is_sequence_of
|
36
35
|
from utilities.hypothesis import pairs, sentinels, sets_fixed_length, text_ascii
|
37
36
|
from utilities.iterables import (
|
38
37
|
CheckBijectionError,
|
@@ -88,7 +87,6 @@ from utilities.iterables import (
|
|
88
87
|
check_unique_modulo_case,
|
89
88
|
chunked,
|
90
89
|
cmp_nullable,
|
91
|
-
ensure_hashables,
|
92
90
|
ensure_iterable,
|
93
91
|
ensure_iterable_not_str,
|
94
92
|
enumerate_with_edge,
|
@@ -119,6 +117,7 @@ from utilities.iterables import (
|
|
119
117
|
unique_everseen,
|
120
118
|
)
|
121
119
|
from utilities.sentinel import Sentinel, sentinel
|
120
|
+
from utilities.typing import is_sequence_of
|
122
121
|
|
123
122
|
if TYPE_CHECKING:
|
124
123
|
from collections.abc import Iterable, Iterator, Mapping, Sequence
|
@@ -609,11 +608,6 @@ class TestCmpNullable:
|
|
609
608
|
assert result == expected
|
610
609
|
|
611
610
|
|
612
|
-
class TestEnsureHashables:
|
613
|
-
def test_main(self) -> None:
|
614
|
-
assert ensure_hashables(1, 2, a=3, b=4) == ([1, 2], {"a": 3, "b": 4})
|
615
|
-
|
616
|
-
|
617
611
|
class TestEnsureIterable:
|
618
612
|
@mark.parametrize("obj", [param([]), param(()), param("")])
|
619
613
|
def test_main(self, *, obj: Any) -> None:
|
@@ -50,7 +50,6 @@ from tests.test_typing_funcs.with_future import (
|
|
50
50
|
DataClassFutureTypeLiteral,
|
51
51
|
DataClassFutureTypeLiteralNullable,
|
52
52
|
)
|
53
|
-
from utilities.functions import is_sequence_of
|
54
53
|
from utilities.hypothesis import (
|
55
54
|
date_periods,
|
56
55
|
dates,
|
@@ -86,7 +85,7 @@ from utilities.orjson import (
|
|
86
85
|
from utilities.polars import check_polars_dataframe, zoned_date_time_dtype
|
87
86
|
from utilities.sentinel import Sentinel, sentinel
|
88
87
|
from utilities.types import LogLevel, MaybeIterable, PathLike
|
89
|
-
from utilities.typing import get_args
|
88
|
+
from utilities.typing import get_args, is_sequence_of
|
90
89
|
from utilities.tzlocal import LOCAL_TIME_ZONE
|
91
90
|
from utilities.whenever import (
|
92
91
|
HOUR,
|
@@ -114,7 +114,9 @@ class TestMakeExceptHook:
|
|
114
114
|
with raises(MakeExceptHookError, match="No exception to log"):
|
115
115
|
hook(exc_type, exc_val, traceback)
|
116
116
|
|
117
|
-
|
117
|
+
|
118
|
+
class TestMakeExceptHookPurge:
|
119
|
+
def test_main(self, *, tmp_path: Path) -> None:
|
118
120
|
now = get_now()
|
119
121
|
path = tmp_path.joinpath(
|
120
122
|
format_compact(now - 2 * SECOND, path=True)
|
@@ -124,6 +126,11 @@ class TestMakeExceptHook:
|
|
124
126
|
_make_except_hook_purge(tmp_path, SECOND)
|
125
127
|
assert len(list(tmp_path.iterdir())) == 0
|
126
128
|
|
129
|
+
def test_purge_invalid_path(self, *, tmp_path: Path) -> None:
|
130
|
+
tmp_path.joinpath("invalid").touch()
|
131
|
+
_make_except_hook_purge(tmp_path, SECOND)
|
132
|
+
assert len(list(tmp_path.iterdir())) == 1
|
133
|
+
|
127
134
|
|
128
135
|
class TestPathToDots:
|
129
136
|
@given(
|