dycw-utilities 0.132.3__tar.gz → 0.132.4__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.132.3 → dycw_utilities-0.132.4}/PKG-INFO +1 -1
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/pyproject.toml +3 -2
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_click.py +5 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_parse.py +14 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/click.py +58 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/parse.py +13 -8
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/types.py +8 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/.gitignore +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/LICENSE +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/README.md +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_aiolimiter.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_asyncio_classes/loopers.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/aiolimiter.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/git.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/http.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/math.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/os.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/period.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/random.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/re.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/string.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/text.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/version.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/utilities/zoneinfo.py +0 -0
@@ -102,7 +102,7 @@ dependencies = [
|
|
102
102
|
name = "dycw-utilities"
|
103
103
|
readme = "README.md"
|
104
104
|
requires-python = ">= 3.12"
|
105
|
-
version = "0.132.
|
105
|
+
version = "0.132.4"
|
106
106
|
|
107
107
|
[project.optional-dependencies]
|
108
108
|
logging = [
|
@@ -128,7 +128,7 @@ test = [
|
|
128
128
|
# bump-my-version
|
129
129
|
[tool.bumpversion]
|
130
130
|
allow_dirty = true
|
131
|
-
current_version = "0.132.
|
131
|
+
current_version = "0.132.4"
|
132
132
|
|
133
133
|
[[tool.bumpversion.files]]
|
134
134
|
filename = "src/utilities/__init__.py"
|
@@ -236,6 +236,7 @@ asyncio_mode = "auto"
|
|
236
236
|
filterwarnings = [
|
237
237
|
"error",
|
238
238
|
"ignore:.*utcfromtimestamp.* is deprecated and scheduled for removal in a future version:DeprecationWarning", # luigi
|
239
|
+
"ignore:Exception ignored in.* <coroutine object .* at .*>:pytest.PytestUnraisableExceptionWarning",
|
239
240
|
"ignore:Implicitly cleaning up <TemporaryDirectory '.*'>:ResourceWarning",
|
240
241
|
"ignore:ResourceTracker called reentrantly for resource cleanup, which is unsupported:UserWarning",
|
241
242
|
"ignore:Task .* without outputs has no custom complete.* method:UserWarning", # luigi
|
@@ -16,6 +16,7 @@ from hypothesis.strategies import (
|
|
16
16
|
booleans,
|
17
17
|
data,
|
18
18
|
frozensets,
|
19
|
+
ip_addresses,
|
19
20
|
lists,
|
20
21
|
sampled_from,
|
21
22
|
)
|
@@ -36,6 +37,8 @@ from utilities.click import (
|
|
36
37
|
FrozenSetChoices,
|
37
38
|
FrozenSetEnums,
|
38
39
|
FrozenSetStrs,
|
40
|
+
IPv4Address,
|
41
|
+
IPv6Address,
|
39
42
|
ListEnums,
|
40
43
|
ListStrs,
|
41
44
|
Month,
|
@@ -227,6 +230,8 @@ class TestParameters:
|
|
227
230
|
_lift_serializer(str, sort=True),
|
228
231
|
False,
|
229
232
|
),
|
233
|
+
param(IPv4Address(), "IPV4 ADDRESS", ip_addresses(v=4), str, True),
|
234
|
+
param(IPv6Address(), "IPV6 ADDRESS", ip_addresses(v=6), str, True),
|
230
235
|
param(
|
231
236
|
ListEnums(_ExampleEnum),
|
232
237
|
"LIST[ENUM[_ExampleEnum]]",
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
from collections.abc import Iterable
|
4
|
+
from ipaddress import IPv4Address, IPv6Address
|
4
5
|
from pathlib import Path
|
5
6
|
from types import NoneType
|
6
7
|
from typing import Final, Literal
|
@@ -12,6 +13,7 @@ from hypothesis.strategies import (
|
|
12
13
|
floats,
|
13
14
|
frozensets,
|
14
15
|
integers,
|
16
|
+
ip_addresses,
|
15
17
|
lists,
|
16
18
|
none,
|
17
19
|
sampled_from,
|
@@ -110,6 +112,18 @@ class TestSerializeAndParseObject:
|
|
110
112
|
result = parse_object(int, serialized)
|
111
113
|
assert result == int_
|
112
114
|
|
115
|
+
@given(address=ip_addresses(v=4))
|
116
|
+
def test_ipv4_address(self, *, address: IPv4Address) -> None:
|
117
|
+
serialized = serialize_object(address)
|
118
|
+
result = parse_object(IPv4Address, serialized)
|
119
|
+
assert result == address
|
120
|
+
|
121
|
+
@given(address=ip_addresses(v=6))
|
122
|
+
def test_ipv6_address(self, *, address: IPv6Address) -> None:
|
123
|
+
serialized = serialize_object(address)
|
124
|
+
result = parse_object(IPv6Address, serialized)
|
125
|
+
assert result == address
|
126
|
+
|
113
127
|
@given(ints=lists(int64s()))
|
114
128
|
def test_list(self, *, ints: list[int]) -> None:
|
115
129
|
serialized = serialize_object(ints)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
import ipaddress
|
3
4
|
import pathlib
|
4
5
|
from typing import TYPE_CHECKING, Generic, TypedDict, TypeVar, assert_never, override
|
5
6
|
|
@@ -12,12 +13,15 @@ import utilities.whenever
|
|
12
13
|
from utilities.enum import EnsureEnumError, ensure_enum
|
13
14
|
from utilities.functions import EnsureStrError, ensure_str, get_class_name
|
14
15
|
from utilities.iterables import is_iterable_not_str
|
16
|
+
from utilities.parse import ParseObjectError, parse_object
|
15
17
|
from utilities.text import split_str
|
16
18
|
from utilities.types import (
|
17
19
|
DateDeltaLike,
|
18
20
|
DateLike,
|
19
21
|
DateTimeDeltaLike,
|
20
22
|
EnumLike,
|
23
|
+
IPv4AddressLike,
|
24
|
+
IPv6AddressLike,
|
21
25
|
MaybeStr,
|
22
26
|
PlainDateTimeLike,
|
23
27
|
TEnum,
|
@@ -173,6 +177,58 @@ class Enum(ParamType, Generic[TEnum]):
|
|
173
177
|
return _make_metavar(param, desc)
|
174
178
|
|
175
179
|
|
180
|
+
class IPv4Address(ParamType):
|
181
|
+
"""An IPv4 address-valued parameter."""
|
182
|
+
|
183
|
+
name = "ipv4 address"
|
184
|
+
|
185
|
+
@override
|
186
|
+
def __repr__(self) -> str:
|
187
|
+
return self.name.upper()
|
188
|
+
|
189
|
+
@override
|
190
|
+
def convert(
|
191
|
+
self, value: IPv4AddressLike, param: Parameter | None, ctx: Context | None
|
192
|
+
) -> ipaddress.IPv4Address:
|
193
|
+
"""Convert a value into the `IPv4Address` type."""
|
194
|
+
match value:
|
195
|
+
case ipaddress.IPv4Address():
|
196
|
+
return value
|
197
|
+
case str():
|
198
|
+
try:
|
199
|
+
return parse_object(ipaddress.IPv4Address, value)
|
200
|
+
except ParseObjectError as error:
|
201
|
+
self.fail(str(error), param, ctx)
|
202
|
+
case _ as never:
|
203
|
+
assert_never(never)
|
204
|
+
|
205
|
+
|
206
|
+
class IPv6Address(ParamType):
|
207
|
+
"""An IPv6 address-valued parameter."""
|
208
|
+
|
209
|
+
name = "ipv6 address"
|
210
|
+
|
211
|
+
@override
|
212
|
+
def __repr__(self) -> str:
|
213
|
+
return self.name.upper()
|
214
|
+
|
215
|
+
@override
|
216
|
+
def convert(
|
217
|
+
self, value: IPv6AddressLike, param: Parameter | None, ctx: Context | None
|
218
|
+
) -> ipaddress.IPv6Address:
|
219
|
+
"""Convert a value into the `IPv6Address` type."""
|
220
|
+
match value:
|
221
|
+
case ipaddress.IPv6Address():
|
222
|
+
return value
|
223
|
+
case str():
|
224
|
+
try:
|
225
|
+
return parse_object(ipaddress.IPv6Address, value)
|
226
|
+
except ParseObjectError as error:
|
227
|
+
self.fail(str(error), param, ctx)
|
228
|
+
case _ as never:
|
229
|
+
assert_never(never)
|
230
|
+
|
231
|
+
|
176
232
|
class Month(ParamType):
|
177
233
|
"""A month-valued parameter."""
|
178
234
|
|
@@ -467,6 +523,8 @@ __all__ = [
|
|
467
523
|
"FrozenSetEnums",
|
468
524
|
"FrozenSetParameter",
|
469
525
|
"FrozenSetStrs",
|
526
|
+
"IPv4Address",
|
527
|
+
"IPv6Address",
|
470
528
|
"ListEnums",
|
471
529
|
"ListParameter",
|
472
530
|
"ListStrs",
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
3
3
|
from contextlib import suppress
|
4
4
|
from dataclasses import dataclass
|
5
5
|
from enum import Enum
|
6
|
+
from ipaddress import IPv4Address, IPv6Address
|
6
7
|
from pathlib import Path
|
7
8
|
from re import DOTALL
|
8
9
|
from types import NoneType
|
@@ -176,14 +177,9 @@ def _parse_object_type(
|
|
176
177
|
return parse_bool(text)
|
177
178
|
except ParseBoolError:
|
178
179
|
raise _ParseObjectParseError(type_=cls, text=text) from None
|
179
|
-
if is_subclass_gen(cls, int):
|
180
|
+
if is_subclass_gen(cls, int | float | IPv4Address | IPv6Address):
|
180
181
|
try:
|
181
|
-
return
|
182
|
-
except ValueError:
|
183
|
-
raise _ParseObjectParseError(type_=cls, text=text) from None
|
184
|
-
if issubclass(cls, float):
|
185
|
-
try:
|
186
|
-
return float(text)
|
182
|
+
return cls(text)
|
187
183
|
except ValueError:
|
188
184
|
raise _ParseObjectParseError(type_=cls, text=text) from None
|
189
185
|
if issubclass(cls, Enum):
|
@@ -443,7 +439,16 @@ def serialize_object(
|
|
443
439
|
with suppress(_SerializeObjectSerializeError):
|
444
440
|
return _serialize_object_extra(obj, extra)
|
445
441
|
if (obj is None) or isinstance(
|
446
|
-
obj,
|
442
|
+
obj,
|
443
|
+
bool
|
444
|
+
| int
|
445
|
+
| float
|
446
|
+
| str
|
447
|
+
| IPv4Address
|
448
|
+
| IPv6Address
|
449
|
+
| Path
|
450
|
+
| Sentinel
|
451
|
+
| Version,
|
447
452
|
):
|
448
453
|
return str(obj)
|
449
454
|
if isinstance(
|
@@ -4,6 +4,7 @@ import datetime as dt
|
|
4
4
|
from asyncio import Event
|
5
5
|
from collections.abc import Awaitable, Callable, Coroutine, Hashable, Iterable, Mapping
|
6
6
|
from enum import Enum
|
7
|
+
from ipaddress import IPv4Address, IPv6Address
|
7
8
|
from logging import Logger
|
8
9
|
from pathlib import Path
|
9
10
|
from random import Random
|
@@ -112,6 +113,11 @@ THashable1 = TypeVar("THashable1", bound=Hashable)
|
|
112
113
|
THashable2 = TypeVar("THashable2", bound=Hashable)
|
113
114
|
|
114
115
|
|
116
|
+
# ipaddress
|
117
|
+
IPv4AddressLike = MaybeStr[IPv4Address]
|
118
|
+
IPv6AddressLike = MaybeStr[IPv6Address]
|
119
|
+
|
120
|
+
|
115
121
|
# iterables
|
116
122
|
type MaybeIterable[_T] = _T | Iterable[_T]
|
117
123
|
type IterableHashable[_THashable: Hashable] = (
|
@@ -295,6 +301,8 @@ __all__ = [
|
|
295
301
|
"DateTimeRoundUnit",
|
296
302
|
"EnumLike",
|
297
303
|
"ExcInfo",
|
304
|
+
"IPv4AddressLike",
|
305
|
+
"IPv6AddressLike",
|
298
306
|
"IterableHashable",
|
299
307
|
"LogLevel",
|
300
308
|
"LoggerOrName",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/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.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.132.3 → dycw_utilities-0.132.4}/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.132.3 → dycw_utilities-0.132.4}/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.132.3 → dycw_utilities-0.132.4}/src/tests/test_typing_funcs/with_future.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|