dycw-utilities 0.133.3__tar.gz → 0.133.7__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.133.3 → dycw_utilities-0.133.7}/PKG-INFO +2 -1
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/pyproject.toml +4 -3
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_click.py +196 -103
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/click.py +34 -8
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/types.py +4 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/.gitignore +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/LICENSE +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/README.md +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_aiolimiter.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_arq.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_asyncio_classes/loopers.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/aiolimiter.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/arq.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/git.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/http.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/math.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/os.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/period.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/random.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/re.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/string.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/text.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/version.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dycw-utilities
|
3
|
-
Version: 0.133.
|
3
|
+
Version: 0.133.7
|
4
4
|
Author-email: Derek Wan <d.wan@icloud.com>
|
5
5
|
License-File: LICENSE
|
6
6
|
Requires-Python: >=3.12
|
@@ -17,6 +17,7 @@ Requires-Dist: pytest-asyncio<1.1,>=1.0.0; extra == 'test'
|
|
17
17
|
Requires-Dist: pytest-cov<6.2,>=6.1.1; extra == 'test'
|
18
18
|
Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
|
19
19
|
Requires-Dist: pytest-lazy-fixtures<1.2,>=1.1.4; extra == 'test'
|
20
|
+
Requires-Dist: pytest-randomly<3.17,>=3.16.0; extra == 'test'
|
20
21
|
Requires-Dist: pytest-regressions<2.9,>=2.8.0; extra == 'test'
|
21
22
|
Requires-Dist: pytest-rerunfailures<16,>=15.1; extra == 'test'
|
22
23
|
Requires-Dist: pytest-rng<1.1,>=1.0.0; extra == 'test'
|
@@ -53,7 +53,7 @@ memory-profiler = ["memory-profiler >= 0.61.0, < 0.62"]
|
|
53
53
|
more-itertools = ["more-itertools >= 10.7.0, < 10.8"]
|
54
54
|
numpy = ["numpy >= 2.3.0, < 2.4"]
|
55
55
|
operator = ["polars-lts-cpu"]
|
56
|
-
optuna = ["optuna >= 4.
|
56
|
+
optuna = ["optuna >= 4.4.0, < 4.5"]
|
57
57
|
orjson = ["orjson >= 3.10.18, < 3.11"]
|
58
58
|
orjson-test = ["polars-lts-cpu"]
|
59
59
|
polars = ["polars-lts-cpu >= 1.30.0, < 1.31"]
|
@@ -104,7 +104,7 @@ dependencies = [
|
|
104
104
|
name = "dycw-utilities"
|
105
105
|
readme = "README.md"
|
106
106
|
requires-python = ">= 3.12"
|
107
|
-
version = "0.133.
|
107
|
+
version = "0.133.7"
|
108
108
|
|
109
109
|
[project.optional-dependencies]
|
110
110
|
logging = [
|
@@ -118,6 +118,7 @@ test = [
|
|
118
118
|
"pytest-cov >= 6.1.1, < 6.2",
|
119
119
|
"pytest-instafail >= 0.5.0, < 0.6",
|
120
120
|
"pytest-lazy-fixtures >= 1.1.4, < 1.2",
|
121
|
+
"pytest-randomly >= 3.16.0, < 3.17",
|
121
122
|
"pytest-regressions >= 2.8.0, < 2.9",
|
122
123
|
"pytest-rerunfailures >= 15.1, < 16",
|
123
124
|
"pytest-rng >= 1.0.0, < 1.1",
|
@@ -130,7 +131,7 @@ test = [
|
|
130
131
|
# bump-my-version
|
131
132
|
[tool.bumpversion]
|
132
133
|
allow_dirty = true
|
133
|
-
current_version = "0.133.
|
134
|
+
current_version = "0.133.7"
|
134
135
|
|
135
136
|
[[tool.bumpversion.files]]
|
136
137
|
filename = "src/utilities/__init__.py"
|
@@ -1,10 +1,11 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import enum
|
4
|
+
from dataclasses import dataclass
|
4
5
|
from enum import auto
|
5
6
|
from operator import attrgetter
|
6
7
|
from re import search
|
7
|
-
from typing import TYPE_CHECKING, Any, TypeVar
|
8
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Generic, TypeVar
|
8
9
|
|
9
10
|
import whenever
|
10
11
|
from click import ParamType, argument, command, echo, option
|
@@ -13,7 +14,6 @@ from hypothesis import given
|
|
13
14
|
from hypothesis.strategies import (
|
14
15
|
DataObject,
|
15
16
|
SearchStrategy,
|
16
|
-
booleans,
|
17
17
|
data,
|
18
18
|
frozensets,
|
19
19
|
ip_addresses,
|
@@ -40,6 +40,7 @@ from utilities.click import (
|
|
40
40
|
FrozenSetStrs,
|
41
41
|
IPv4Address,
|
42
42
|
IPv6Address,
|
43
|
+
ListChoices,
|
43
44
|
ListEnums,
|
44
45
|
ListStrs,
|
45
46
|
Month,
|
@@ -54,7 +55,6 @@ from utilities.hypothesis import (
|
|
54
55
|
dates,
|
55
56
|
freqs,
|
56
57
|
months,
|
57
|
-
pairs,
|
58
58
|
plain_datetimes,
|
59
59
|
text_ascii,
|
60
60
|
time_deltas,
|
@@ -184,124 +184,217 @@ def _lift_serializer(
|
|
184
184
|
return wrapped
|
185
185
|
|
186
186
|
|
187
|
+
@dataclass(kw_only=True, slots=True)
|
188
|
+
class _Case(Generic[_T]):
|
189
|
+
param: ParamType
|
190
|
+
name: str
|
191
|
+
repr: str | None = None
|
192
|
+
strategy: SearchStrategy[_T]
|
193
|
+
serialize: Callable[[_T], str]
|
194
|
+
failable: bool = False
|
195
|
+
|
196
|
+
|
187
197
|
class TestParameters:
|
188
|
-
|
198
|
+
cases: ClassVar[list[_Case]] = [
|
199
|
+
_Case(
|
200
|
+
param=Date(),
|
201
|
+
name="date",
|
202
|
+
strategy=dates(),
|
203
|
+
serialize=whenever.Date.format_common_iso,
|
204
|
+
failable=True,
|
205
|
+
),
|
206
|
+
_Case(
|
207
|
+
param=DateDelta(),
|
208
|
+
name="date delta",
|
209
|
+
strategy=date_deltas(parsable=True),
|
210
|
+
serialize=whenever.DateDelta.format_common_iso,
|
211
|
+
failable=True,
|
212
|
+
),
|
213
|
+
_Case(
|
214
|
+
param=DateTimeDelta(),
|
215
|
+
name="date-time delta",
|
216
|
+
strategy=date_time_deltas(parsable=True),
|
217
|
+
serialize=whenever.DateTimeDelta.format_common_iso,
|
218
|
+
failable=True,
|
219
|
+
),
|
220
|
+
_Case(
|
221
|
+
param=Enum(_ExampleEnum),
|
222
|
+
name="enum[_ExampleEnum]",
|
223
|
+
repr="ENUM[_ExampleEnum]",
|
224
|
+
strategy=sampled_from(_ExampleEnum),
|
225
|
+
serialize=attrgetter("name"),
|
226
|
+
failable=True,
|
227
|
+
),
|
228
|
+
_Case(
|
229
|
+
param=Freq(),
|
230
|
+
name="freq",
|
231
|
+
strategy=freqs(),
|
232
|
+
serialize=utilities.whenever.Freq.serialize,
|
233
|
+
failable=True,
|
234
|
+
),
|
235
|
+
_Case(
|
236
|
+
param=FrozenSetChoices(["a", "b", "c"]),
|
237
|
+
name="frozenset[choice]",
|
238
|
+
repr="FROZENSET[Choice(['a', 'b', 'c'])]",
|
239
|
+
strategy=frozensets(sampled_from(["a", "b", "c"])),
|
240
|
+
serialize=_lift_serializer(str, sort=True),
|
241
|
+
failable=True,
|
242
|
+
),
|
243
|
+
_Case(
|
244
|
+
param=FrozenSetEnums(_ExampleEnum),
|
245
|
+
name="frozenset[enum[_ExampleEnum]]",
|
246
|
+
repr="FROZENSET[ENUM[_ExampleEnum]]",
|
247
|
+
strategy=frozensets(sampled_from(_ExampleEnum)),
|
248
|
+
serialize=_lift_serializer(attrgetter("name"), sort=True),
|
249
|
+
failable=True,
|
250
|
+
),
|
251
|
+
_Case(
|
252
|
+
param=FrozenSetStrs(),
|
253
|
+
name="frozenset[text]",
|
254
|
+
repr="FROZENSET[STRING]",
|
255
|
+
strategy=frozensets(text_ascii()),
|
256
|
+
serialize=_lift_serializer(str, sort=True),
|
257
|
+
),
|
258
|
+
_Case(
|
259
|
+
param=IPv4Address(),
|
260
|
+
name="ipv4 address",
|
261
|
+
strategy=ip_addresses(v=4),
|
262
|
+
serialize=str,
|
263
|
+
failable=True,
|
264
|
+
),
|
265
|
+
_Case(
|
266
|
+
param=IPv6Address(),
|
267
|
+
name="ipv6 address",
|
268
|
+
strategy=ip_addresses(v=6),
|
269
|
+
serialize=str,
|
270
|
+
failable=True,
|
271
|
+
),
|
272
|
+
_Case(
|
273
|
+
param=ListChoices(["a", "b", "c"]),
|
274
|
+
name="list[choice]",
|
275
|
+
repr="LIST[Choice(['a', 'b', 'c'])]",
|
276
|
+
strategy=frozensets(sampled_from(["a", "b", "c"])),
|
277
|
+
serialize=_lift_serializer(str, sort=True),
|
278
|
+
failable=True,
|
279
|
+
),
|
280
|
+
_Case(
|
281
|
+
param=ListEnums(_ExampleEnum),
|
282
|
+
name="list[enum[_ExampleEnum]]",
|
283
|
+
repr="LIST[ENUM[_ExampleEnum]]",
|
284
|
+
strategy=lists(sampled_from(_ExampleEnum)),
|
285
|
+
serialize=_lift_serializer(attrgetter("name")),
|
286
|
+
failable=True,
|
287
|
+
),
|
288
|
+
_Case(
|
289
|
+
param=Month(),
|
290
|
+
name="month",
|
291
|
+
strategy=months(),
|
292
|
+
serialize=utilities.whenever.Month.format_common_iso,
|
293
|
+
failable=True,
|
294
|
+
),
|
295
|
+
_Case(
|
296
|
+
param=PlainDateTime(),
|
297
|
+
name="plain date-time",
|
298
|
+
strategy=plain_datetimes(),
|
299
|
+
serialize=whenever.PlainDateTime.format_common_iso,
|
300
|
+
failable=True,
|
301
|
+
),
|
302
|
+
_Case(
|
303
|
+
param=Time(),
|
304
|
+
name="time",
|
305
|
+
strategy=times(),
|
306
|
+
serialize=whenever.Time.format_common_iso,
|
307
|
+
failable=True,
|
308
|
+
),
|
309
|
+
_Case(
|
310
|
+
param=TimeDelta(),
|
311
|
+
name="time-delta",
|
312
|
+
strategy=time_deltas(),
|
313
|
+
serialize=whenever.TimeDelta.format_common_iso,
|
314
|
+
failable=True,
|
315
|
+
),
|
316
|
+
_Case(
|
317
|
+
param=ZonedDateTime(),
|
318
|
+
name="zoned date-time",
|
319
|
+
strategy=zoned_datetimes(),
|
320
|
+
serialize=whenever.ZonedDateTime.format_common_iso,
|
321
|
+
failable=True,
|
322
|
+
),
|
323
|
+
]
|
324
|
+
|
325
|
+
@given(data=data())
|
189
326
|
@mark.parametrize(
|
190
|
-
("param", "
|
191
|
-
[
|
192
|
-
param(Date(), "DATE", dates(), whenever.Date.format_common_iso, True),
|
193
|
-
param(
|
194
|
-
DateDelta(),
|
195
|
-
"DATE DELTA",
|
196
|
-
date_deltas(parsable=True),
|
197
|
-
whenever.DateDelta.format_common_iso,
|
198
|
-
True,
|
199
|
-
),
|
200
|
-
param(
|
201
|
-
DateTimeDelta(),
|
202
|
-
"DATE-TIME DELTA",
|
203
|
-
date_time_deltas(parsable=True),
|
204
|
-
whenever.DateTimeDelta.format_common_iso,
|
205
|
-
True,
|
206
|
-
),
|
207
|
-
param(
|
208
|
-
Enum(_ExampleEnum),
|
209
|
-
"ENUM[_ExampleEnum]",
|
210
|
-
sampled_from(_ExampleEnum),
|
211
|
-
attrgetter("name"),
|
212
|
-
True,
|
213
|
-
),
|
214
|
-
param(Freq(), "FREQ", freqs(), utilities.whenever.Freq.serialize, True),
|
215
|
-
param(
|
216
|
-
FrozenSetChoices(["a", "b", "c"]),
|
217
|
-
"FROZENSET[Choice(['a', 'b', 'c'])]",
|
218
|
-
frozensets(sampled_from(["a", "b", "c"])),
|
219
|
-
_lift_serializer(str, sort=True),
|
220
|
-
True,
|
221
|
-
),
|
222
|
-
param(
|
223
|
-
FrozenSetEnums(_ExampleEnum),
|
224
|
-
"FROZENSET[ENUM[_ExampleEnum]]",
|
225
|
-
frozensets(sampled_from(_ExampleEnum)),
|
226
|
-
_lift_serializer(attrgetter("name"), sort=True),
|
227
|
-
True,
|
228
|
-
),
|
229
|
-
param(
|
230
|
-
FrozenSetStrs(),
|
231
|
-
"FROZENSET[STRING]",
|
232
|
-
frozensets(text_ascii()),
|
233
|
-
_lift_serializer(str, sort=True),
|
234
|
-
False,
|
235
|
-
),
|
236
|
-
param(IPv4Address(), "IPV4 ADDRESS", ip_addresses(v=4), str, True),
|
237
|
-
param(IPv6Address(), "IPV6 ADDRESS", ip_addresses(v=6), str, True),
|
238
|
-
param(
|
239
|
-
ListEnums(_ExampleEnum),
|
240
|
-
"LIST[ENUM[_ExampleEnum]]",
|
241
|
-
lists(sampled_from(_ExampleEnum)),
|
242
|
-
_lift_serializer(attrgetter("name")),
|
243
|
-
True,
|
244
|
-
),
|
245
|
-
param(
|
246
|
-
Month(),
|
247
|
-
"MONTH",
|
248
|
-
months(),
|
249
|
-
utilities.whenever.Month.format_common_iso,
|
250
|
-
True,
|
251
|
-
),
|
252
|
-
param(
|
253
|
-
PlainDateTime(),
|
254
|
-
"PLAIN DATE-TIME",
|
255
|
-
plain_datetimes(),
|
256
|
-
whenever.PlainDateTime.format_common_iso,
|
257
|
-
True,
|
258
|
-
),
|
259
|
-
param(Time(), "TIME", times(), whenever.Time.format_common_iso, True),
|
260
|
-
param(
|
261
|
-
TimeDelta(),
|
262
|
-
"TIME-DELTA",
|
263
|
-
time_deltas(),
|
264
|
-
whenever.TimeDelta.format_common_iso,
|
265
|
-
True,
|
266
|
-
),
|
267
|
-
param(
|
268
|
-
ZonedDateTime(),
|
269
|
-
"ZONED DATE-TIME",
|
270
|
-
zoned_datetimes(),
|
271
|
-
whenever.ZonedDateTime.format_common_iso,
|
272
|
-
True,
|
273
|
-
),
|
274
|
-
],
|
327
|
+
("param", "strategy", "serialize"),
|
328
|
+
[param(c.param, c.strategy, c.serialize) for c in cases],
|
275
329
|
)
|
276
|
-
def
|
330
|
+
def test_default(
|
277
331
|
self,
|
278
332
|
*,
|
279
333
|
data: DataObject,
|
280
334
|
param: ParamType,
|
281
|
-
exp_repr: str,
|
282
335
|
strategy: SearchStrategy[Any],
|
283
336
|
serialize: Callable[[Any], str],
|
284
|
-
use_value: bool,
|
285
|
-
failable: bool,
|
286
337
|
) -> None:
|
287
|
-
|
288
|
-
|
289
|
-
default, value = data.draw(pairs(strategy))
|
338
|
+
default = data.draw(strategy)
|
290
339
|
|
291
340
|
@command()
|
292
341
|
@option("--value", type=param, default=default)
|
293
342
|
def cli(*, value: Any) -> None:
|
294
343
|
echo(f"value = {serialize(value)}")
|
295
344
|
|
296
|
-
|
297
|
-
result
|
345
|
+
result = CliRunner().invoke(cli, args=[])
|
346
|
+
assert result.exit_code == 0
|
347
|
+
assert result.stdout == f"value = {serialize(default)}\n"
|
348
|
+
|
349
|
+
@given(data=data())
|
350
|
+
@mark.parametrize(
|
351
|
+
("param", "strategy", "serialize"),
|
352
|
+
[param(c.param, c.strategy, c.serialize) for c in cases],
|
353
|
+
)
|
354
|
+
def test_cli_value(
|
355
|
+
self,
|
356
|
+
*,
|
357
|
+
data: DataObject,
|
358
|
+
param: ParamType,
|
359
|
+
strategy: SearchStrategy[Any],
|
360
|
+
serialize: Callable[[Any], str],
|
361
|
+
) -> None:
|
362
|
+
@command()
|
363
|
+
@option("--value", type=param)
|
364
|
+
def cli(*, value: Any) -> None:
|
365
|
+
echo(f"value = {serialize(value)}")
|
366
|
+
|
367
|
+
value = data.draw(strategy)
|
368
|
+
ser = serialize(value)
|
369
|
+
result = CliRunner().invoke(cli, args=[f"--value={ser}"])
|
298
370
|
assert result.exit_code == 0
|
299
|
-
|
300
|
-
assert result.stdout == f"value = {expected_str}\n"
|
371
|
+
assert result.stdout == f"value = {ser}\n"
|
301
372
|
|
302
|
-
|
303
|
-
|
304
|
-
|
373
|
+
@mark.parametrize(
|
374
|
+
("param", "serialize"),
|
375
|
+
[param(c.param, c.serialize) for c in cases if c.failable],
|
376
|
+
)
|
377
|
+
def test_cli_fail(
|
378
|
+
self, *, param: ParamType, serialize: Callable[[Any], str]
|
379
|
+
) -> None:
|
380
|
+
@command()
|
381
|
+
@option("--value", type=param)
|
382
|
+
def cli(*, value: Any) -> None:
|
383
|
+
echo(f"value = {serialize(value)}")
|
384
|
+
|
385
|
+
result = CliRunner().invoke(cli, args=["--value=invalid"])
|
386
|
+
assert result.exit_code == 2
|
387
|
+
|
388
|
+
@mark.parametrize(("param", "name"), [param(c.param, c.name) for c in cases])
|
389
|
+
def test_name(self, *, param: ParamType, name: str) -> None:
|
390
|
+
assert param.name == name
|
391
|
+
|
392
|
+
@mark.parametrize(
|
393
|
+
("param", "repr_", "name"), [param(c.param, c.repr, c.name) for c in cases]
|
394
|
+
)
|
395
|
+
def test_repr(self, *, param: ParamType, repr_: str | None, name: str) -> None:
|
396
|
+
expected = name.upper() if repr_ is None else repr_
|
397
|
+
assert repr(param) == expected
|
305
398
|
|
306
399
|
@mark.parametrize(
|
307
400
|
"param",
|
@@ -148,9 +148,10 @@ class DateTimeDelta(ParamType):
|
|
148
148
|
class Enum(ParamType, Generic[TEnum]):
|
149
149
|
"""An enum-valued parameter."""
|
150
150
|
|
151
|
+
@override
|
151
152
|
def __init__(self, enum: type[TEnum], /, *, case_sensitive: bool = False) -> None:
|
152
153
|
cls = get_class_name(enum)
|
153
|
-
self.name = f"
|
154
|
+
self.name = f"enum[{cls}]"
|
154
155
|
self._enum = enum
|
155
156
|
self._case_sensitive = case_sensitive
|
156
157
|
super().__init__()
|
@@ -180,9 +181,11 @@ class Enum(ParamType, Generic[TEnum]):
|
|
180
181
|
class Freq(ParamType):
|
181
182
|
"""An frequency-valued parameter."""
|
182
183
|
|
184
|
+
name = "freq"
|
185
|
+
|
183
186
|
@override
|
184
187
|
def __repr__(self) -> str:
|
185
|
-
return
|
188
|
+
return self.name.upper()
|
186
189
|
|
187
190
|
@override
|
188
191
|
def convert(
|
@@ -383,16 +386,16 @@ class ZonedDateTime(ParamType):
|
|
383
386
|
class FrozenSetParameter(ParamType, Generic[_TParam, _T]):
|
384
387
|
"""A frozenset-valued parameter."""
|
385
388
|
|
389
|
+
@override
|
386
390
|
def __init__(self, param: _TParam, /, *, separator: str = ",") -> None:
|
387
|
-
self.name = f"
|
391
|
+
self.name = f"frozenset[{param.name}]"
|
388
392
|
self._param = param
|
389
393
|
self._separator = separator
|
390
394
|
super().__init__()
|
391
395
|
|
392
396
|
@override
|
393
397
|
def __repr__(self) -> str:
|
394
|
-
|
395
|
-
return f"FROZENSET[{desc}]"
|
398
|
+
return f"FROZENSET[{self._param!r}]"
|
396
399
|
|
397
400
|
@override
|
398
401
|
def convert(
|
@@ -425,6 +428,7 @@ class FrozenSetParameter(ParamType, Generic[_TParam, _T]):
|
|
425
428
|
class FrozenSetChoices(FrozenSetParameter[Choice, str]):
|
426
429
|
"""A frozenset-of-choices-valued parameter."""
|
427
430
|
|
431
|
+
@override
|
428
432
|
def __init__(
|
429
433
|
self,
|
430
434
|
choices: Sequence[str],
|
@@ -441,6 +445,7 @@ class FrozenSetChoices(FrozenSetParameter[Choice, str]):
|
|
441
445
|
class FrozenSetEnums(FrozenSetParameter[Enum[TEnum], TEnum]):
|
442
446
|
"""A frozenset-of-enums-valued parameter."""
|
443
447
|
|
448
|
+
@override
|
444
449
|
def __init__(
|
445
450
|
self,
|
446
451
|
enum: type[TEnum],
|
@@ -455,6 +460,7 @@ class FrozenSetEnums(FrozenSetParameter[Enum[TEnum], TEnum]):
|
|
455
460
|
class FrozenSetStrs(FrozenSetParameter[StringParamType, str]):
|
456
461
|
"""A frozenset-of-strs-valued parameter."""
|
457
462
|
|
463
|
+
@override
|
458
464
|
def __init__(self, *, separator: str = ",") -> None:
|
459
465
|
super().__init__(StringParamType(), separator=separator)
|
460
466
|
|
@@ -465,16 +471,16 @@ class FrozenSetStrs(FrozenSetParameter[StringParamType, str]):
|
|
465
471
|
class ListParameter(ParamType, Generic[_TParam, _T]):
|
466
472
|
"""A list-valued parameter."""
|
467
473
|
|
474
|
+
@override
|
468
475
|
def __init__(self, param: _TParam, /, *, separator: str = ",") -> None:
|
469
|
-
self.name = f"
|
476
|
+
self.name = f"list[{param.name}]"
|
470
477
|
self._param = param
|
471
478
|
self._separator = separator
|
472
479
|
super().__init__()
|
473
480
|
|
474
481
|
@override
|
475
482
|
def __repr__(self) -> str:
|
476
|
-
|
477
|
-
return f"LIST[{desc}]"
|
483
|
+
return f"LIST[{self._param!r}]"
|
478
484
|
|
479
485
|
@override
|
480
486
|
def convert(
|
@@ -504,9 +510,27 @@ class ListParameter(ParamType, Generic[_TParam, _T]):
|
|
504
510
|
return _make_metavar(param, desc)
|
505
511
|
|
506
512
|
|
513
|
+
class ListChoices(ListParameter[Choice, str]):
|
514
|
+
"""A frozenset-of-choices-valued parameter."""
|
515
|
+
|
516
|
+
@override
|
517
|
+
def __init__(
|
518
|
+
self,
|
519
|
+
choices: Sequence[str],
|
520
|
+
/,
|
521
|
+
*,
|
522
|
+
case_sensitive: bool = False,
|
523
|
+
separator: str = ",",
|
524
|
+
) -> None:
|
525
|
+
super().__init__(
|
526
|
+
Choice(choices, case_sensitive=case_sensitive), separator=separator
|
527
|
+
)
|
528
|
+
|
529
|
+
|
507
530
|
class ListEnums(ListParameter[Enum[TEnum], TEnum]):
|
508
531
|
"""A list-of-enums-valued parameter."""
|
509
532
|
|
533
|
+
@override
|
510
534
|
def __init__(
|
511
535
|
self,
|
512
536
|
enum: type[TEnum],
|
@@ -521,6 +545,7 @@ class ListEnums(ListParameter[Enum[TEnum], TEnum]):
|
|
521
545
|
class ListStrs(ListParameter[StringParamType, str]):
|
522
546
|
"""A list-of-strs-valued parameter."""
|
523
547
|
|
548
|
+
@override
|
524
549
|
def __init__(self, *, separator: str = ",") -> None:
|
525
550
|
super().__init__(StringParamType(), separator=separator)
|
526
551
|
|
@@ -550,6 +575,7 @@ __all__ = [
|
|
550
575
|
"FrozenSetStrs",
|
551
576
|
"IPv4Address",
|
552
577
|
"IPv6Address",
|
578
|
+
"ListChoices",
|
553
579
|
"ListEnums",
|
554
580
|
"ListParameter",
|
555
581
|
"ListStrs",
|
@@ -82,6 +82,9 @@ TCallable2 = TypeVar("TCallable2", bound=Callable[..., Any])
|
|
82
82
|
TCallableCoroutine1 = TypeVar(
|
83
83
|
"TCallableCoroutine1", bound=Callable[..., Coroutine1[Any]]
|
84
84
|
)
|
85
|
+
TCallableCoroutine1None = TypeVar(
|
86
|
+
"TCallableCoroutine1None", bound=Callable[..., Coroutine1[None]]
|
87
|
+
)
|
85
88
|
TCallableMaybeCoroutine1None = TypeVar(
|
86
89
|
"TCallableMaybeCoroutine1None", bound=Callable[..., MaybeCoroutine1[None]]
|
87
90
|
)
|
@@ -352,6 +355,7 @@ __all__ = [
|
|
352
355
|
"TCallable1",
|
353
356
|
"TCallable2",
|
354
357
|
"TCallableCoroutine1",
|
358
|
+
"TCallableCoroutine1None",
|
355
359
|
"TCallableMaybeCoroutine1None",
|
356
360
|
"TDataclass",
|
357
361
|
"TEnum",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/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.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/src/tests/modules/package_without/module_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.133.3 → dycw_utilities-0.133.7}/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
|