dycw-utilities 0.109.25__tar.gz → 0.109.27__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.25 → dycw_utilities-0.109.27}/PKG-INFO +1 -1
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/pyproject.toml +2 -2
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_text.py +11 -3
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_whenever.py +7 -7
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/text.py +24 -5
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/.gitignore +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/LICENSE +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/README.md +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/scripts/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/scripts/test_async_service/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/scripts/test_async_service/__main__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/scripts/test_async_service/run.sh +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/scripts/test_queue_processor/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/scripts/test_queue_processor/__main__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/scripts/test_queue_processor/run.sh +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/click.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/git.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/http.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/math.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/os.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/period.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/random.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/re.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/types.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/version.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/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.27"
|
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.27"
|
340
340
|
|
341
341
|
[[tool.bumpversion.files]]
|
342
342
|
filename = "src/utilities/__init__.py"
|
@@ -20,8 +20,9 @@ from utilities.hypothesis import text_ascii
|
|
20
20
|
from utilities.text import (
|
21
21
|
ParseBoolError,
|
22
22
|
ParseNoneError,
|
23
|
-
SplitKeyValuePairsError,
|
24
23
|
SplitStrError,
|
24
|
+
_SplitKeyValuePairsDuplicateKeysError,
|
25
|
+
_SplitKeyValuePairsSplitError,
|
25
26
|
join_strs,
|
26
27
|
parse_bool,
|
27
28
|
parse_none,
|
@@ -98,9 +99,16 @@ class TestSplitKeyValuePairs:
|
|
98
99
|
expected = {"a": "1", "b": "22", "c": "333"}
|
99
100
|
assert result == expected
|
100
101
|
|
101
|
-
def
|
102
|
+
def test_error_split(self) -> None:
|
103
|
+
with raises(
|
104
|
+
_SplitKeyValuePairsSplitError,
|
105
|
+
match=r"Unable to split 'a=1,b=22=22,c=333' into key-value pairs; got 'b=22=22'",
|
106
|
+
):
|
107
|
+
_ = split_key_value_pairs("a=1,b=22=22,c=333")
|
108
|
+
|
109
|
+
def test_error_duplicate_keys(self) -> None:
|
102
110
|
with raises(
|
103
|
-
|
111
|
+
_SplitKeyValuePairsDuplicateKeysError,
|
104
112
|
match=r"Unable to split 'a=1,a=22,a=333' into a mapping since there are duplicate keys; got \{'a': 3\}",
|
105
113
|
):
|
106
114
|
_ = split_key_value_pairs("a=1,a=22,a=333", mapping=True)
|
@@ -120,7 +120,7 @@ class TestCheckValidZonedDateTime:
|
|
120
120
|
check_valid_zoned_datetime(datetime)
|
121
121
|
|
122
122
|
|
123
|
-
class
|
123
|
+
class TestSerializeAndParseDate:
|
124
124
|
@given(date=dates())
|
125
125
|
def test_main(self, *, date: dt.date) -> None:
|
126
126
|
serialized = serialize_date(date)
|
@@ -156,7 +156,7 @@ class TestParseAndSerializeDate:
|
|
156
156
|
_ = ensure_date("invalid")
|
157
157
|
|
158
158
|
|
159
|
-
class
|
159
|
+
class TestSerializeAndParseDateTime:
|
160
160
|
@given(
|
161
161
|
datetime=local_datetimes()
|
162
162
|
| zoned_datetimes(time_zone=timezones() | just(dt.UTC), valid=True)
|
@@ -191,7 +191,7 @@ class TestParseAndSerializeDateTime:
|
|
191
191
|
_ = ensure_datetime("invalid")
|
192
192
|
|
193
193
|
|
194
|
-
class
|
194
|
+
class TestSerializeAndParseDuration:
|
195
195
|
@given(duration=datetime_durations())
|
196
196
|
def test_main(self, *, duration: Duration) -> None:
|
197
197
|
with assume_does_not_raise(SerializeDurationError):
|
@@ -226,7 +226,7 @@ class TestParseAndSerializeDuration:
|
|
226
226
|
_ = ensure_duration("invalid")
|
227
227
|
|
228
228
|
|
229
|
-
class
|
229
|
+
class TestSerializeAndParseLocalDateTime:
|
230
230
|
@given(datetime=datetimes())
|
231
231
|
def test_main(self, *, datetime: dt.datetime) -> None:
|
232
232
|
serialized = serialize_local_datetime(datetime)
|
@@ -278,7 +278,7 @@ class TestParseAndSerializeLocalDateTime:
|
|
278
278
|
_ = ensure_local_datetime("invalid")
|
279
279
|
|
280
280
|
|
281
|
-
class
|
281
|
+
class TestSerializeAndParseTime:
|
282
282
|
@given(time=times())
|
283
283
|
def test_main(self, *, time: dt.time) -> None:
|
284
284
|
serialized = serialize_time(time)
|
@@ -300,7 +300,7 @@ class TestParseAndSerializeTime:
|
|
300
300
|
_ = ensure_time("invalid")
|
301
301
|
|
302
302
|
|
303
|
-
class
|
303
|
+
class TestSerializeAndParseTimedelta:
|
304
304
|
@given(
|
305
305
|
timedelta=timedeltas(
|
306
306
|
min_value=MIN_SERIALIZABLE_TIMEDELTA, max_value=MAX_SERIALIZABLE_TIMEDELTA
|
@@ -374,7 +374,7 @@ class TestParseAndSerializeTimedelta:
|
|
374
374
|
_ = ensure_timedelta("PT0.111222333S")
|
375
375
|
|
376
376
|
|
377
|
-
class
|
377
|
+
class TestSerializeAndParseZonedDateTime:
|
378
378
|
@given(datetime=zoned_datetimes(time_zone=timezones() | just(dt.UTC), valid=True))
|
379
379
|
@SKIPIF_CI_AND_WINDOWS
|
380
380
|
def test_main(self, *, datetime: dt.datetime) -> None:
|
@@ -122,22 +122,40 @@ def split_key_value_pairs(
|
|
122
122
|
mapping: bool = False,
|
123
123
|
) -> Sequence[tuple[str, str]] | StrStrMapping:
|
124
124
|
"""Split a string into key-value pairs."""
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
125
|
+
try:
|
126
|
+
pairs = [
|
127
|
+
split_str(text_i, separator=pair_separator, n=2)
|
128
|
+
for text_i in split_str(text, separator=list_separator)
|
129
|
+
]
|
130
|
+
except SplitStrError as error:
|
131
|
+
raise _SplitKeyValuePairsSplitError(text=text, inner=error.text) from None
|
129
132
|
if not mapping:
|
130
133
|
return pairs
|
131
134
|
try:
|
132
135
|
check_duplicates(k for k, _ in pairs)
|
133
136
|
except CheckDuplicatesError as error:
|
134
|
-
raise
|
137
|
+
raise _SplitKeyValuePairsDuplicateKeysError(
|
138
|
+
text=text, counts=error.counts
|
139
|
+
) from None
|
135
140
|
return dict(pairs)
|
136
141
|
|
137
142
|
|
138
143
|
@dataclass(kw_only=True, slots=True)
|
139
144
|
class SplitKeyValuePairsError(Exception):
|
140
145
|
text: str
|
146
|
+
|
147
|
+
|
148
|
+
@dataclass(kw_only=True, slots=True)
|
149
|
+
class _SplitKeyValuePairsSplitError(SplitKeyValuePairsError):
|
150
|
+
inner: str
|
151
|
+
|
152
|
+
@override
|
153
|
+
def __str__(self) -> str:
|
154
|
+
return f"Unable to split {self.text!r} into key-value pairs; got {self.inner!r}"
|
155
|
+
|
156
|
+
|
157
|
+
@dataclass(kw_only=True, slots=True)
|
158
|
+
class _SplitKeyValuePairsDuplicateKeysError(SplitKeyValuePairsError):
|
141
159
|
counts: Mapping[str, int]
|
142
160
|
|
143
161
|
@override
|
@@ -236,6 +254,7 @@ def strip_and_dedent(text: str, /, *, trailing: bool = False) -> str:
|
|
236
254
|
__all__ = [
|
237
255
|
"ParseBoolError",
|
238
256
|
"ParseNoneError",
|
257
|
+
"SplitKeyValuePairsError",
|
239
258
|
"SplitStrError",
|
240
259
|
"join_strs",
|
241
260
|
"parse_bool",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/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.25 → dycw_utilities-0.109.27}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/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.25 → dycw_utilities-0.109.27}/src/tests/scripts/test_async_service/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/scripts/test_async_service/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/scripts/test_async_service/run.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/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
|
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_typing_funcs/no_future.py
RENAMED
File without changes
|
{dycw_utilities-0.109.25 → dycw_utilities-0.109.27}/src/tests/test_typing_funcs/with_future.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|