dycw-utilities 0.136.7__tar.gz → 0.136.9__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.136.7 → dycw_utilities-0.136.9}/PKG-INFO +1 -1
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/pyproject.toml +2 -2
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_pottery.py +1 -1
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_typed_settings.py +72 -1
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/typed_settings.py +20 -2
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/.gitignore +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/LICENSE +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/README.md +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_aiolimiter.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_asyncio_classes/loopers.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/aiolimiter.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/click.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/git.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/http.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/math.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/more_itertools.py +39 -39
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/os.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/period.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/random.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/re.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/string.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/text.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/types.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/version.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/utilities/zoneinfo.py +0 -0
@@ -105,7 +105,7 @@ dependencies = [
|
|
105
105
|
name = "dycw-utilities"
|
106
106
|
readme = "README.md"
|
107
107
|
requires-python = ">= 3.12"
|
108
|
-
version = "0.136.
|
108
|
+
version = "0.136.9"
|
109
109
|
|
110
110
|
[project.optional-dependencies]
|
111
111
|
logging = [
|
@@ -133,7 +133,7 @@ test = [
|
|
133
133
|
# bump-my-version
|
134
134
|
[tool.bumpversion]
|
135
135
|
allow_dirty = true
|
136
|
-
current_version = "0.136.
|
136
|
+
current_version = "0.136.9"
|
137
137
|
|
138
138
|
[[tool.bumpversion.files]]
|
139
139
|
filename = "src/utilities/__init__.py"
|
@@ -66,7 +66,7 @@ class TestYieldAccess:
|
|
66
66
|
) -> None:
|
67
67
|
with Timer() as timer:
|
68
68
|
await _func_access(num_tasks, unique_str(), num_locks=num_locks)
|
69
|
-
assert (min_multiple * _DELTA) <= timer <= (
|
69
|
+
assert (min_multiple * _DELTA) <= timer <= (5 * min_multiple * _DELTA)
|
70
70
|
|
71
71
|
async def test_error_num_locks(self) -> None:
|
72
72
|
key = unique_str()
|
@@ -2,10 +2,18 @@ from collections.abc import Callable
|
|
2
2
|
from dataclasses import dataclass
|
3
3
|
from ipaddress import IPv4Address, IPv6Address
|
4
4
|
from pathlib import Path
|
5
|
+
from typing import assert_never
|
5
6
|
|
6
7
|
import typed_settings
|
7
8
|
from hypothesis import given
|
8
|
-
from hypothesis.strategies import
|
9
|
+
from hypothesis.strategies import (
|
10
|
+
DataObject,
|
11
|
+
SearchStrategy,
|
12
|
+
booleans,
|
13
|
+
data,
|
14
|
+
ip_addresses,
|
15
|
+
tuples,
|
16
|
+
)
|
9
17
|
from pytest import mark, param, raises
|
10
18
|
from typed_settings import EnvLoader, FileLoader, TomlFormat
|
11
19
|
from whenever import (
|
@@ -23,6 +31,7 @@ from utilities.hypothesis import (
|
|
23
31
|
date_time_deltas,
|
24
32
|
dates,
|
25
33
|
freqs,
|
34
|
+
paths,
|
26
35
|
plain_datetimes,
|
27
36
|
temp_paths,
|
28
37
|
text_ascii,
|
@@ -99,6 +108,68 @@ class TestExtendedTSConverter:
|
|
99
108
|
)
|
100
109
|
assert settings_loaded.value == value
|
101
110
|
|
111
|
+
@given(
|
112
|
+
root=temp_paths(),
|
113
|
+
app_name=app_names,
|
114
|
+
env_name=text_ascii(min_size=1).map(lambda text: f"TEST_{text}".upper()),
|
115
|
+
env_value=text_ascii(min_size=1),
|
116
|
+
)
|
117
|
+
def test_path_env_var(
|
118
|
+
self, *, root: str, app_name: str, env_name: str, env_value: str
|
119
|
+
) -> None:
|
120
|
+
@dataclass(frozen=True, kw_only=True, slots=True)
|
121
|
+
class Settings:
|
122
|
+
value: Path
|
123
|
+
|
124
|
+
file = Path(root, "file.toml")
|
125
|
+
_ = file.write_text(
|
126
|
+
strip_and_dedent(f"""
|
127
|
+
[{app_name}]
|
128
|
+
value = '${env_name}'
|
129
|
+
""")
|
130
|
+
)
|
131
|
+
with temp_environ({env_name: env_value}):
|
132
|
+
settings = typed_settings.load_settings(
|
133
|
+
Settings,
|
134
|
+
loaders=[
|
135
|
+
FileLoader(formats={"*.toml": TomlFormat(app_name)}, files=[file])
|
136
|
+
],
|
137
|
+
converter=ExtendedTSConverter(resolve_paths=False),
|
138
|
+
)
|
139
|
+
expected = Path(env_value)
|
140
|
+
assert settings.value == expected
|
141
|
+
|
142
|
+
@given(root=temp_paths(), app_name=app_names, path=paths(), resolve=booleans())
|
143
|
+
def test_path_resolution(
|
144
|
+
self, *, root: str, app_name: str, path: Path, resolve: bool
|
145
|
+
) -> None:
|
146
|
+
@dataclass(frozen=True, kw_only=True, slots=True)
|
147
|
+
class Settings:
|
148
|
+
value: Path
|
149
|
+
|
150
|
+
file = Path(root, "file.toml")
|
151
|
+
_ = file.write_text(
|
152
|
+
strip_and_dedent(f"""
|
153
|
+
[{app_name}]
|
154
|
+
value = '{path!s}'
|
155
|
+
""")
|
156
|
+
)
|
157
|
+
settings = typed_settings.load_settings(
|
158
|
+
Settings,
|
159
|
+
loaders=[
|
160
|
+
FileLoader(formats={"*.toml": TomlFormat(app_name)}, files=[file])
|
161
|
+
],
|
162
|
+
converter=ExtendedTSConverter(resolve_paths=resolve),
|
163
|
+
)
|
164
|
+
match resolve:
|
165
|
+
case True:
|
166
|
+
expected = Path.cwd().joinpath(path)
|
167
|
+
case False:
|
168
|
+
expected = Path(path)
|
169
|
+
case _ as never:
|
170
|
+
assert_never(never)
|
171
|
+
assert settings.value == expected
|
172
|
+
|
102
173
|
|
103
174
|
class TestLoadSettings:
|
104
175
|
@given(root=temp_paths(), datetime=zoned_datetimes())
|
@@ -1,10 +1,12 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
from dataclasses import dataclass
|
4
|
+
from functools import partial
|
4
5
|
from ipaddress import IPv4Address, IPv6Address
|
6
|
+
from os import environ
|
5
7
|
from pathlib import Path
|
6
8
|
from re import search
|
7
|
-
from typing import TYPE_CHECKING, Any, override
|
9
|
+
from typing import TYPE_CHECKING, Any, assert_never, override
|
8
10
|
|
9
11
|
import typed_settings
|
10
12
|
from typed_settings import EnvLoader, FileLoader, find
|
@@ -21,6 +23,8 @@ from whenever import (
|
|
21
23
|
)
|
22
24
|
|
23
25
|
from utilities.iterables import always_iterable
|
26
|
+
from utilities.pathlib import get_path
|
27
|
+
from utilities.string import substitute_environ
|
24
28
|
from utilities.whenever import Freq
|
25
29
|
|
26
30
|
if TYPE_CHECKING:
|
@@ -29,7 +33,7 @@ if TYPE_CHECKING:
|
|
29
33
|
from typed_settings.loaders import Loader
|
30
34
|
from typed_settings.processors import Processor
|
31
35
|
|
32
|
-
from utilities.types import MaybeIterable, PathLike
|
36
|
+
from utilities.types import MaybeCallablePathLike, MaybeIterable, PathLike
|
33
37
|
|
34
38
|
|
35
39
|
##
|
@@ -53,6 +57,7 @@ class ExtendedTSConverter(TSConverter):
|
|
53
57
|
(Freq, Freq.parse),
|
54
58
|
(IPv4Address, IPv4Address),
|
55
59
|
(IPv6Address, IPv6Address),
|
60
|
+
(Path, partial(_parse_path, resolve=resolve_paths, pwd=Path.cwd())),
|
56
61
|
(PlainDateTime, PlainDateTime.parse_common_iso),
|
57
62
|
(Time, Time.parse_common_iso),
|
58
63
|
(TimeDelta, TimeDelta.parse_common_iso),
|
@@ -76,6 +81,19 @@ def _make_converter[T](
|
|
76
81
|
return hook
|
77
82
|
|
78
83
|
|
84
|
+
def _parse_path(
|
85
|
+
path: str, /, *, resolve: bool = False, pwd: MaybeCallablePathLike | None = None
|
86
|
+
) -> Path:
|
87
|
+
path = substitute_environ(path, **environ)
|
88
|
+
match resolve:
|
89
|
+
case True:
|
90
|
+
return get_path(path=pwd).joinpath(path).resolve()
|
91
|
+
case False:
|
92
|
+
return Path(path)
|
93
|
+
case _ as never:
|
94
|
+
assert_never(never)
|
95
|
+
|
96
|
+
|
79
97
|
##
|
80
98
|
|
81
99
|
_BASE_DIR: Path = Path()
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/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.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/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
|
{dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/src/tests/test_asyncio_classes/__init__.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
|
{dycw_utilities-0.136.7 → dycw_utilities-0.136.9}/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
|