dycw-utilities 0.109.2__tar.gz → 0.109.3__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.109.2 → dycw_utilities-0.109.3}/PKG-INFO +1 -1
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/pyproject.toml +2 -2
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_parse.py +19 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_typing.py +44 -5
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/parse.py +15 -1
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/typing.py +9 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/.gitignore +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/LICENSE +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/README.md +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_async_service/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_async_service/__main__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_async_service/run.sh +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_queue_processor/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_queue_processor/__main__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_queue_processor/run.sh +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/click.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/git.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/http.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/math.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/os.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/period.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/random.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/re.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/text.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/types.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/version.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/utilities/zoneinfo.py +0 -0
@@ -89,7 +89,7 @@ dependencies = [
|
|
89
89
|
name = "dycw-utilities"
|
90
90
|
readme = "README.md"
|
91
91
|
requires-python = ">= 3.12"
|
92
|
-
version = "0.109.
|
92
|
+
version = "0.109.3"
|
93
93
|
|
94
94
|
[project.optional-dependencies]
|
95
95
|
test = [
|
@@ -332,7 +332,7 @@ zzz-test-zoneinfo = [
|
|
332
332
|
# bump-my-version
|
333
333
|
[tool.bumpversion]
|
334
334
|
allow_dirty = true
|
335
|
-
current_version = "0.109.
|
335
|
+
current_version = "0.109.3"
|
336
336
|
|
337
337
|
[[tool.bumpversion.files]]
|
338
338
|
filename = "src/utilities/__init__.py"
|
@@ -135,6 +135,12 @@ class TestParseText:
|
|
135
135
|
result = parse_text(dt.timedelta, text)
|
136
136
|
assert result == timedelta
|
137
137
|
|
138
|
+
@given(x=integers(), y=integers())
|
139
|
+
def test_tuple(self, *, x: int, y: int) -> None:
|
140
|
+
text = f"({x}, {y})"
|
141
|
+
result = parse_text(tuple[int, int], text)
|
142
|
+
assert result == (x, y)
|
143
|
+
|
138
144
|
@given(truth=sampled_from(["true", "false"]))
|
139
145
|
def test_type_literal(self, *, truth: Literal["true", "false"]) -> None:
|
140
146
|
result = parse_text(TrueOrFalseFutureTypeLit, truth)
|
@@ -228,6 +234,19 @@ class TestParseText:
|
|
228
234
|
):
|
229
235
|
_ = parse_text(dt.timedelta, "invalid")
|
230
236
|
|
237
|
+
def test_error_tuple_invalid_text(self) -> None:
|
238
|
+
with raises(
|
239
|
+
ParseTextError, match=r"Unable to parse tuple\[int, int\]; got 'invalid'"
|
240
|
+
):
|
241
|
+
_ = parse_text(tuple[int, int], "invalid")
|
242
|
+
|
243
|
+
def test_error_tuple_inconsistent_args_and_texts(self) -> None:
|
244
|
+
with raises(
|
245
|
+
ParseTextError,
|
246
|
+
match=r"Unable to parse tuple\[int, int\]; got '\(text1, text2, text3\)'",
|
247
|
+
):
|
248
|
+
_ = parse_text(tuple[int, int], "(text1, text2, text3)")
|
249
|
+
|
231
250
|
def test_error_unknown_annotation(self) -> None:
|
232
251
|
with raises(ParseTextError, match=r"Unable to parse int \| str; got 'invalid'"):
|
233
252
|
_ = parse_text(int | str, "invalid")
|
@@ -55,6 +55,7 @@ from utilities.typing import (
|
|
55
55
|
is_optional_type,
|
56
56
|
is_sequence_type,
|
57
57
|
is_set_type,
|
58
|
+
is_tuple_type,
|
58
59
|
is_union_type,
|
59
60
|
)
|
60
61
|
|
@@ -338,25 +339,63 @@ class TestIsAnnotationOfType:
|
|
338
339
|
@mark.parametrize(
|
339
340
|
("func", "obj", "expected"),
|
340
341
|
[
|
342
|
+
param(is_dict_type, Mapping[int, int], False),
|
343
|
+
param(is_dict_type, Sequence[int], False),
|
341
344
|
param(is_dict_type, dict[int, int], True),
|
345
|
+
param(is_dict_type, frozenset[int], False),
|
342
346
|
param(is_dict_type, list[int], False),
|
347
|
+
param(is_dict_type, set[int], False),
|
348
|
+
param(is_dict_type, tuple[int, int], False),
|
349
|
+
param(is_frozenset_type, Mapping[int, int], False),
|
350
|
+
param(is_frozenset_type, Sequence[int], False),
|
351
|
+
param(is_frozenset_type, dict[int, int], False),
|
343
352
|
param(is_frozenset_type, frozenset[int], True),
|
344
353
|
param(is_frozenset_type, list[int], False),
|
354
|
+
param(is_frozenset_type, set[int], False),
|
355
|
+
param(is_frozenset_type, tuple[int, int], False),
|
356
|
+
param(is_list_type, Mapping[int, int], False),
|
357
|
+
param(is_list_type, Sequence[int], False),
|
358
|
+
param(is_list_type, dict[int, int], False),
|
359
|
+
param(is_list_type, frozenset[int], False),
|
345
360
|
param(is_list_type, list[int], True),
|
346
361
|
param(is_list_type, set[int], False),
|
347
|
-
param(
|
348
|
-
param(is_mapping_type, list[int], False),
|
362
|
+
param(is_list_type, tuple[int, int], False),
|
349
363
|
param(is_literal_type, Literal["a", "b", "c"], True),
|
350
364
|
param(is_literal_type, list[int], False),
|
365
|
+
param(is_mapping_type, Mapping[int, int], True),
|
366
|
+
param(is_mapping_type, Sequence[int], False),
|
367
|
+
param(is_mapping_type, dict[int, int], False),
|
368
|
+
param(is_mapping_type, frozenset[int], False),
|
369
|
+
param(is_mapping_type, list[int], False),
|
370
|
+
param(is_mapping_type, set[int], False),
|
371
|
+
param(is_mapping_type, tuple[int, int], False),
|
372
|
+
param(is_optional_type, Literal["a", "b", "c"] | None, True),
|
373
|
+
param(is_optional_type, Literal["a", "b", "c"], False),
|
351
374
|
param(is_optional_type, int | None, True),
|
352
375
|
param(is_optional_type, int | str, False),
|
353
|
-
param(is_optional_type, list[int], False),
|
354
376
|
param(is_optional_type, list[int] | None, True),
|
355
|
-
param(is_optional_type,
|
356
|
-
param(
|
377
|
+
param(is_optional_type, list[int], False),
|
378
|
+
param(is_sequence_type, Mapping[int, int], False),
|
357
379
|
param(is_sequence_type, Sequence[int], True),
|
380
|
+
param(is_sequence_type, dict[int, int], False),
|
381
|
+
param(is_sequence_type, frozenset[int], False),
|
358
382
|
param(is_sequence_type, list[int], False),
|
383
|
+
param(is_sequence_type, set[int], False),
|
384
|
+
param(is_sequence_type, tuple[int, int], False),
|
385
|
+
param(is_set_type, Mapping[int, int], False),
|
386
|
+
param(is_set_type, Sequence[int], False),
|
387
|
+
param(is_set_type, dict[int, int], False),
|
388
|
+
param(is_set_type, frozenset[int], False),
|
359
389
|
param(is_set_type, list[int], False),
|
390
|
+
param(is_set_type, set[int], True),
|
391
|
+
param(is_set_type, tuple[int, int], False),
|
392
|
+
param(is_tuple_type, Mapping[int, int], False),
|
393
|
+
param(is_tuple_type, Sequence[int], False),
|
394
|
+
param(is_tuple_type, dict[int, int], False),
|
395
|
+
param(is_tuple_type, frozenset[int], False),
|
396
|
+
param(is_tuple_type, list[int], False),
|
397
|
+
param(is_tuple_type, set[int], False),
|
398
|
+
param(is_tuple_type, tuple[int, int], True),
|
360
399
|
param(is_union_type, int | str, True),
|
361
400
|
param(is_union_type, list[int], False),
|
362
401
|
],
|
@@ -5,6 +5,7 @@ from contextlib import suppress
|
|
5
5
|
from dataclasses import dataclass
|
6
6
|
from enum import Enum
|
7
7
|
from pathlib import Path
|
8
|
+
from re import DOTALL
|
8
9
|
from types import NoneType
|
9
10
|
from typing import Any, override
|
10
11
|
|
@@ -12,9 +13,10 @@ from utilities.datetime import is_subclass_date_not_datetime
|
|
12
13
|
from utilities.enum import ParseEnumError, parse_enum
|
13
14
|
from utilities.functions import is_subclass_int_not_bool
|
14
15
|
from utilities.iterables import one, one_str
|
16
|
+
from utilities.re import ExtractGroupError, extract_group
|
15
17
|
from utilities.sentinel import ParseSentinelError, Sentinel, parse_sentinel
|
16
18
|
from utilities.text import ParseBoolError, ParseNoneError, parse_bool, parse_none
|
17
|
-
from utilities.typing import get_args, is_literal_type, is_optional_type
|
19
|
+
from utilities.typing import get_args, is_literal_type, is_optional_type, is_tuple_type
|
18
20
|
from utilities.version import ParseVersionError, Version, parse_version
|
19
21
|
|
20
22
|
|
@@ -42,6 +44,18 @@ def parse_text(
|
|
42
44
|
return _parse_text_type(inner, text, case_sensitive=case_sensitive)
|
43
45
|
except ParseTextError:
|
44
46
|
raise ParseTextError(obj=obj, text=text) from None
|
47
|
+
if is_tuple_type(obj):
|
48
|
+
args = get_args(obj)
|
49
|
+
try:
|
50
|
+
texts = extract_group(r"^\((.*)\)$", text, flags=DOTALL).split(", ")
|
51
|
+
except ExtractGroupError:
|
52
|
+
raise ParseTextError(obj=obj, text=text) from None
|
53
|
+
if len(args) != len(texts):
|
54
|
+
raise ParseTextError(obj=obj, text=text)
|
55
|
+
return tuple(
|
56
|
+
parse_text(arg, text, case_sensitive=case_sensitive, head=head)
|
57
|
+
for arg, text in zip(args, texts, strict=True)
|
58
|
+
)
|
45
59
|
raise ParseTextError(obj=obj, text=text) from None
|
46
60
|
|
47
61
|
|
@@ -182,6 +182,14 @@ def is_set_type(obj: Any, /) -> bool:
|
|
182
182
|
##
|
183
183
|
|
184
184
|
|
185
|
+
def is_tuple_type(obj: Any, /) -> bool:
|
186
|
+
"""Check if an object is a tuple type annotation."""
|
187
|
+
return _is_annotation_of_type(obj, tuple)
|
188
|
+
|
189
|
+
|
190
|
+
##
|
191
|
+
|
192
|
+
|
185
193
|
def is_union_type(obj: Any, /) -> bool:
|
186
194
|
"""Check if an object is a union type annotation."""
|
187
195
|
is_old_union = _is_annotation_of_type(obj, Union) # pyright: ignore[reportDeprecated]
|
@@ -212,5 +220,6 @@ __all__ = [
|
|
212
220
|
"is_optional_type",
|
213
221
|
"is_sequence_type",
|
214
222
|
"is_set_type",
|
223
|
+
"is_tuple_type",
|
215
224
|
"is_union_type",
|
216
225
|
]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/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.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/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
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_async_service/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_async_service/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_async_service/run.sh
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_queue_processor/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_queue_processor/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/scripts/test_queue_processor/run.sh
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
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/decorated_async.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.2 → dycw_utilities-0.109.3}/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
|