dycw-utilities 0.109.24__tar.gz → 0.109.25__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.24 → dycw_utilities-0.109.25}/PKG-INFO +1 -1
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/pyproject.toml +2 -2
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_pqdm.py +3 -3
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_text.py +13 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/dataclasses.py +3 -5
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/text.py +58 -4
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/types.py +2 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/.gitignore +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/LICENSE +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/README.md +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/scripts/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/scripts/test_async_service/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/scripts/test_async_service/__main__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/scripts/test_async_service/run.sh +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/scripts/test_queue_processor/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/scripts/test_queue_processor/__main__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/scripts/test_queue_processor/run.sh +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/click.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/git.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/http.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/math.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/os.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/period.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/random.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/re.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/version.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/utilities/zoneinfo.py +0 -0
@@ -93,7 +93,7 @@ dependencies = [
|
|
93
93
|
name = "dycw-utilities"
|
94
94
|
readme = "README.md"
|
95
95
|
requires-python = ">= 3.12"
|
96
|
-
version = "0.109.
|
96
|
+
version = "0.109.25"
|
97
97
|
|
98
98
|
[project.optional-dependencies]
|
99
99
|
test = [
|
@@ -336,7 +336,7 @@ zzz-test-zoneinfo = [
|
|
336
336
|
# bump-my-version
|
337
337
|
[tool.bumpversion]
|
338
338
|
allow_dirty = true
|
339
|
-
current_version = "0.109.
|
339
|
+
current_version = "0.109.25"
|
340
340
|
|
341
341
|
[[tool.bumpversion.files]]
|
342
342
|
filename = "src/utilities/__init__.py"
|
@@ -14,11 +14,11 @@ from utilities.hypothesis import int32s, pairs, settings_with_reduced_examples
|
|
14
14
|
from utilities.iterables import transpose
|
15
15
|
from utilities.pqdm import _get_desc, pqdm_map, pqdm_starmap
|
16
16
|
from utilities.sentinel import Sentinel, sentinel
|
17
|
-
from utilities.types import Parallelism
|
17
|
+
from utilities.types import Parallelism, StrStrMapping
|
18
18
|
from utilities.typing import get_args
|
19
19
|
|
20
20
|
if TYPE_CHECKING:
|
21
|
-
from collections.abc import Callable
|
21
|
+
from collections.abc import Callable
|
22
22
|
|
23
23
|
|
24
24
|
class TestGetDesc:
|
@@ -36,7 +36,7 @@ class TestGetDesc:
|
|
36
36
|
*,
|
37
37
|
desc: str | None | Sentinel,
|
38
38
|
func: Callable[..., Any],
|
39
|
-
expected:
|
39
|
+
expected: StrStrMapping,
|
40
40
|
) -> None:
|
41
41
|
assert _get_desc(desc, func) == expected
|
42
42
|
|
@@ -20,6 +20,7 @@ from utilities.hypothesis import text_ascii
|
|
20
20
|
from utilities.text import (
|
21
21
|
ParseBoolError,
|
22
22
|
ParseNoneError,
|
23
|
+
SplitKeyValuePairsError,
|
23
24
|
SplitStrError,
|
24
25
|
join_strs,
|
25
26
|
parse_bool,
|
@@ -92,6 +93,18 @@ class TestSplitKeyValuePairs:
|
|
92
93
|
result = split_key_value_pairs(text)
|
93
94
|
assert result == expected
|
94
95
|
|
96
|
+
def test_mapping(self) -> None:
|
97
|
+
result = split_key_value_pairs("a=1,b=22,c=333", mapping=True)
|
98
|
+
expected = {"a": "1", "b": "22", "c": "333"}
|
99
|
+
assert result == expected
|
100
|
+
|
101
|
+
def test_error(self) -> None:
|
102
|
+
with raises(
|
103
|
+
SplitKeyValuePairsError,
|
104
|
+
match=r"Unable to split 'a=1,a=22,a=333' into a mapping since there are duplicate keys; got \{'a': 3\}",
|
105
|
+
):
|
106
|
+
_ = split_key_value_pairs("a=1,a=22,a=333", mapping=True)
|
107
|
+
|
95
108
|
|
96
109
|
class TestSplitStrAndJoinStr:
|
97
110
|
@given(
|
@@ -24,7 +24,7 @@ from utilities.iterables import OneStrEmptyError, OneStrNonUniqueError, one_str
|
|
24
24
|
from utilities.operator import is_equal
|
25
25
|
from utilities.parse import ParseTextError, parse_text
|
26
26
|
from utilities.sentinel import Sentinel, sentinel
|
27
|
-
from utilities.types import ParseTextExtra, TDataclass
|
27
|
+
from utilities.types import ParseTextExtra, StrStrMapping, TDataclass
|
28
28
|
from utilities.typing import get_type_hints
|
29
29
|
|
30
30
|
if TYPE_CHECKING:
|
@@ -444,7 +444,7 @@ class StrMappingToFieldMappingError(Exception):
|
|
444
444
|
|
445
445
|
|
446
446
|
def text_to_dataclass(
|
447
|
-
text_or_mapping: str |
|
447
|
+
text_or_mapping: str | StrStrMapping,
|
448
448
|
cls: type[TDataclass],
|
449
449
|
/,
|
450
450
|
*,
|
@@ -499,9 +499,7 @@ def text_to_dataclass(
|
|
499
499
|
)
|
500
500
|
|
501
501
|
|
502
|
-
def _text_to_dataclass_split_text(
|
503
|
-
text: str, cls: type[TDataclass], /
|
504
|
-
) -> Mapping[str, str]:
|
502
|
+
def _text_to_dataclass_split_text(text: str, cls: type[TDataclass], /) -> StrStrMapping:
|
505
503
|
pairs = (t for t in text.split(",") if t != "")
|
506
504
|
return dict(_text_to_dataclass_split_key_value_pair(pair, cls) for pair in pairs)
|
507
505
|
|
@@ -6,8 +6,13 @@ from re import IGNORECASE, Match, search
|
|
6
6
|
from textwrap import dedent
|
7
7
|
from typing import TYPE_CHECKING, Any, Literal, overload, override
|
8
8
|
|
9
|
+
from utilities.iterables import CheckDuplicatesError, check_duplicates
|
10
|
+
from utilities.reprlib import get_repr
|
11
|
+
|
9
12
|
if TYPE_CHECKING:
|
10
|
-
from collections.abc import Iterable, Sequence
|
13
|
+
from collections.abc import Iterable, Mapping, Sequence
|
14
|
+
|
15
|
+
from utilities.types import StrStrMapping
|
11
16
|
|
12
17
|
|
13
18
|
def parse_bool(text: str, /) -> bool:
|
@@ -81,14 +86,63 @@ def _snake_case_title(match: Match[str], /) -> str:
|
|
81
86
|
##
|
82
87
|
|
83
88
|
|
89
|
+
@overload
|
90
|
+
def split_key_value_pairs(
|
91
|
+
text: str,
|
92
|
+
/,
|
93
|
+
*,
|
94
|
+
list_separator: str = ",",
|
95
|
+
pair_separator: str = "=",
|
96
|
+
mapping: Literal[True],
|
97
|
+
) -> StrStrMapping: ...
|
98
|
+
@overload
|
99
|
+
def split_key_value_pairs(
|
100
|
+
text: str,
|
101
|
+
/,
|
102
|
+
*,
|
103
|
+
list_separator: str = ",",
|
104
|
+
pair_separator: str = "=",
|
105
|
+
mapping: Literal[False] = False,
|
106
|
+
) -> Sequence[tuple[str, str]]: ...
|
107
|
+
@overload
|
108
|
+
def split_key_value_pairs(
|
109
|
+
text: str,
|
110
|
+
/,
|
111
|
+
*,
|
112
|
+
list_separator: str = ",",
|
113
|
+
pair_separator: str = "=",
|
114
|
+
mapping: bool = False,
|
115
|
+
) -> Sequence[tuple[str, str]] | StrStrMapping: ...
|
84
116
|
def split_key_value_pairs(
|
85
|
-
text: str,
|
86
|
-
|
117
|
+
text: str,
|
118
|
+
/,
|
119
|
+
*,
|
120
|
+
list_separator: str = ",",
|
121
|
+
pair_separator: str = "=",
|
122
|
+
mapping: bool = False,
|
123
|
+
) -> Sequence[tuple[str, str]] | StrStrMapping:
|
87
124
|
"""Split a string into key-value pairs."""
|
88
|
-
|
125
|
+
pairs = [
|
89
126
|
split_str(text_i, separator=pair_separator, n=2)
|
90
127
|
for text_i in split_str(text, separator=list_separator)
|
91
128
|
]
|
129
|
+
if not mapping:
|
130
|
+
return pairs
|
131
|
+
try:
|
132
|
+
check_duplicates(k for k, _ in pairs)
|
133
|
+
except CheckDuplicatesError as error:
|
134
|
+
raise SplitKeyValuePairsError(text=text, counts=error.counts) from None
|
135
|
+
return dict(pairs)
|
136
|
+
|
137
|
+
|
138
|
+
@dataclass(kw_only=True, slots=True)
|
139
|
+
class SplitKeyValuePairsError(Exception):
|
140
|
+
text: str
|
141
|
+
counts: Mapping[str, int]
|
142
|
+
|
143
|
+
@override
|
144
|
+
def __str__(self) -> str:
|
145
|
+
return f"Unable to split {self.text!r} into a mapping since there are duplicate keys; got {get_repr(self.counts)}"
|
92
146
|
|
93
147
|
|
94
148
|
##
|
@@ -46,6 +46,7 @@ type OpenMode = Literal[
|
|
46
46
|
"a+b",
|
47
47
|
]
|
48
48
|
type StrMapping = Mapping[str, Any]
|
49
|
+
type StrStrMapping = Mapping[str, str]
|
49
50
|
type TupleOrStrMapping = tuple[Any, ...] | StrMapping
|
50
51
|
type MaybeCallable[_T] = _T | Callable[[], _T]
|
51
52
|
type MaybeStr[_T] = _T | str
|
@@ -288,6 +289,7 @@ __all__ = [
|
|
288
289
|
"RoundMode",
|
289
290
|
"Seed",
|
290
291
|
"StrMapping",
|
292
|
+
"StrStrMapping",
|
291
293
|
"SupportsAbs",
|
292
294
|
"SupportsAdd",
|
293
295
|
"SupportsBytes",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_with/outer_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/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.24 → dycw_utilities-0.109.25}/src/tests/scripts/test_async_service/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/scripts/test_async_service/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/scripts/test_async_service/run.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/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
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/src/tests/test_typing_funcs/no_future.py
RENAMED
File without changes
|
{dycw_utilities-0.109.24 → dycw_utilities-0.109.25}/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
|