dycw-utilities 0.112.4__tar.gz → 0.112.5__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.112.4 → dycw_utilities-0.112.5}/PKG-INFO +1 -1
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/pyproject.toml +2 -2
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_dataclasses.py +16 -4
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_parse.py +38 -41
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_typing.py +14 -7
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_typing_funcs/with_future.py +0 -16
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/dataclasses.py +25 -5
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/parse.py +15 -13
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/typing.py +8 -6
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/.gitignore +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/LICENSE +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/README.md +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_async_service/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_async_service/__main__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_async_service/run.sh +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_queue_processor/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_queue_processor/__main__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_queue_processor/run.sh +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/click.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/git.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/http.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/math.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/os.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/period.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/random.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/re.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/text.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/types.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/version.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/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.112.
|
96
|
+
version = "0.112.5"
|
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.112.
|
339
|
+
current_version = "0.112.5"
|
340
340
|
|
341
341
|
[[tool.bumpversion.files]]
|
342
342
|
filename = "src/utilities/__init__.py"
|
@@ -39,9 +39,10 @@ from utilities.dataclasses import (
|
|
39
39
|
StrMappingToFieldMappingError,
|
40
40
|
YieldFieldsError,
|
41
41
|
_parse_dataclass_split_key_value_pairs,
|
42
|
-
_ParseDataClassParseValueError,
|
43
42
|
_ParseDataClassSplitKeyValuePairsDuplicateKeysError,
|
44
43
|
_ParseDataClassSplitKeyValuePairsSplitError,
|
44
|
+
_ParseDataClassTextExtraNonUniqueError,
|
45
|
+
_ParseDataClassTextParseError,
|
45
46
|
_YieldFieldsClass,
|
46
47
|
_YieldFieldsInstance,
|
47
48
|
dataclass_repr,
|
@@ -482,13 +483,24 @@ class TestSerializeAndParseDataClass:
|
|
482
483
|
):
|
483
484
|
_ = parse_dataclass("a=1,b=22a,b=22b,c=3", DataClassFutureInt)
|
484
485
|
|
485
|
-
def
|
486
|
+
def test_error_text_parse(self) -> None:
|
486
487
|
with raises(
|
487
|
-
|
488
|
-
match="Unable to construct 'DataClassFutureInt'
|
488
|
+
_ParseDataClassTextParseError,
|
489
|
+
match="Unable to construct 'DataClassFutureInt' since the field 'int_' of type <class 'int'> could not be parsed; got 'invalid'",
|
489
490
|
):
|
490
491
|
_ = parse_dataclass("int_=invalid", DataClassFutureInt)
|
491
492
|
|
493
|
+
def test_error_text_extra_non_unique(self) -> None:
|
494
|
+
with raises(
|
495
|
+
_ParseDataClassTextExtraNonUniqueError,
|
496
|
+
match="Unable to construct 'DataClassFutureInt' since the field 'int_' of type <class 'int'> must contain exactly one parent class in `extra`; got <class 'int'>, <class 'int'> and perhaps more",
|
497
|
+
):
|
498
|
+
_ = parse_dataclass(
|
499
|
+
"int_=0",
|
500
|
+
DataClassFutureInt,
|
501
|
+
extra_parsers={int | str: int, int | float: int},
|
502
|
+
)
|
503
|
+
|
492
504
|
|
493
505
|
class TestStrMappingToFieldMapping:
|
494
506
|
@given(key=sampled_from(["int_", "INT_"]), int_=integers())
|
@@ -25,13 +25,10 @@ from pytest import raises
|
|
25
25
|
from tests.test_operator import TruthEnum
|
26
26
|
from tests.test_typing_funcs.with_future import (
|
27
27
|
DataClassFutureInt,
|
28
|
-
DataClassFutureIntChild,
|
29
28
|
DataClassFutureIntEven,
|
30
29
|
DataClassFutureIntEvenOrOddTypeUnion,
|
31
30
|
DataClassFutureIntEvenOrOddUnion,
|
32
31
|
DataClassFutureIntOdd,
|
33
|
-
DataClassFutureIntParentFirst,
|
34
|
-
DataClassFutureIntParentSecond,
|
35
32
|
TrueOrFalseFutureLit,
|
36
33
|
TrueOrFalseFutureTypeLit,
|
37
34
|
)
|
@@ -309,7 +306,7 @@ class TestSerializeAndParseObject:
|
|
309
306
|
|
310
307
|
class TestParseObject:
|
311
308
|
@given(text=sampled_from(["F_a_l_s_e", "T_r_u_e"]))
|
312
|
-
def
|
309
|
+
def test_extra(self, *, text: str) -> None:
|
313
310
|
def parser(text: str, /) -> bool:
|
314
311
|
match text:
|
315
312
|
case "F_a_l_s_e":
|
@@ -330,7 +327,7 @@ class TestParseObject:
|
|
330
327
|
assert bool_ is expected
|
331
328
|
|
332
329
|
@given(text=sampled_from(["F_a_l_s_e", "T_r_u_e"]))
|
333
|
-
def
|
330
|
+
def test_extra_both_exact_match_and_non_unique_parents(self, *, text: str) -> None:
|
334
331
|
def parser(text: str, /) -> bool:
|
335
332
|
match text:
|
336
333
|
case "F_a_l_s_e":
|
@@ -340,10 +337,17 @@ class TestParseObject:
|
|
340
337
|
case _:
|
341
338
|
raise ImpossibleCaseError(case=[f"{text=}"])
|
342
339
|
|
343
|
-
|
344
|
-
|
345
|
-
)
|
346
|
-
|
340
|
+
result = parse_object(
|
341
|
+
bool, text, extra={bool: parser, bool | int: bool, bool | float: bool}
|
342
|
+
)
|
343
|
+
match text:
|
344
|
+
case "F_a_l_s_e":
|
345
|
+
expected = False
|
346
|
+
case "T_r_u_e":
|
347
|
+
expected = True
|
348
|
+
case _:
|
349
|
+
raise ImpossibleCaseError(case=[f"{text=}"])
|
350
|
+
assert result is expected
|
347
351
|
|
348
352
|
@given(value=text_ascii(min_size=10) | none())
|
349
353
|
def test_optional_type_with_union_extra_not_used(
|
@@ -412,24 +416,29 @@ class TestParseObject:
|
|
412
416
|
):
|
413
417
|
_ = parse_object(DataClassFutureInt, "invalid", extra={})
|
414
418
|
|
419
|
+
@given(text=sampled_from(["F_a_l_s_e", "T_r_u_e"]))
|
420
|
+
def test_error_extra_empty_bool_does_not_use_int(self, *, text: str) -> None:
|
421
|
+
def parser(text: str, /) -> bool:
|
422
|
+
match text:
|
423
|
+
case "F_a_l_s_e":
|
424
|
+
return False
|
425
|
+
case "T_r_u_e":
|
426
|
+
return True
|
427
|
+
case _:
|
428
|
+
raise ImpossibleCaseError(case=[f"{text=}"])
|
429
|
+
|
430
|
+
with raises(
|
431
|
+
_ParseObjectParseError, match="Unable to parse <class 'bool'>; got '.*'"
|
432
|
+
):
|
433
|
+
_ = parse_object(bool, text, extra={int: parser})
|
434
|
+
|
415
435
|
@given(int_=integers())
|
416
436
|
def test_error_extra_non_unique(self, *, int_: int) -> None:
|
417
437
|
with raises(
|
418
438
|
_ParseObjectExtraNonUniqueError,
|
419
|
-
match="Unable to parse <class '
|
420
|
-
):
|
421
|
-
_ = parse_object(
|
422
|
-
DataClassFutureIntChild,
|
423
|
-
serialize_object(int_),
|
424
|
-
extra={
|
425
|
-
DataClassFutureIntParentFirst: lambda text: DataClassFutureIntChild(
|
426
|
-
int1=int(text), int2=0
|
427
|
-
),
|
428
|
-
DataClassFutureIntParentSecond: lambda text: DataClassFutureIntChild(
|
429
|
-
int1=0, int2=int(text)
|
430
|
-
),
|
431
|
-
},
|
432
|
-
)
|
439
|
+
match="Unable to parse <class 'int'> since `extra` must contain exactly one parent class; got <class 'int'>, <class 'int'> and perhaps more",
|
440
|
+
):
|
441
|
+
_ = parse_object(int, str(int_), extra={int | bool: int, int | float: int})
|
433
442
|
|
434
443
|
def test_error_union_type_extra(self) -> None:
|
435
444
|
with raises(
|
@@ -674,29 +683,17 @@ class TestSerializeObject:
|
|
674
683
|
def test_error_extra_empty(self) -> None:
|
675
684
|
with raises(
|
676
685
|
_SerializeObjectSerializeError,
|
677
|
-
match=r"Unable to serialize object typing\.Final",
|
686
|
+
match=r"Unable to serialize object typing\.Final of type <class 'typing\._SpecialForm'>",
|
678
687
|
):
|
679
688
|
_ = serialize_object(Final, extra={})
|
680
689
|
|
681
|
-
@given(
|
682
|
-
def test_error_extra_non_unique(self, *,
|
683
|
-
def serializer1(obj: DataClassFutureIntParentFirst, /) -> str:
|
684
|
-
return str(obj.int1)
|
685
|
-
|
686
|
-
def serializer2(obj: DataClassFutureIntParentSecond, /) -> str:
|
687
|
-
return str(obj.int2)
|
688
|
-
|
690
|
+
@given(bool_=booleans())
|
691
|
+
def test_error_extra_non_unique(self, *, bool_: bool) -> None:
|
689
692
|
with raises(
|
690
693
|
_SerializeObjectExtraNonUniqueError,
|
691
|
-
match=r"Unable to serialize object
|
692
|
-
):
|
693
|
-
_ = serialize_object(
|
694
|
-
DataClassFutureIntChild(int1=int1, int2=int2),
|
695
|
-
extra={
|
696
|
-
DataClassFutureIntParentFirst: serializer1,
|
697
|
-
DataClassFutureIntParentSecond: serializer2,
|
698
|
-
},
|
699
|
-
)
|
694
|
+
match=r"Unable to serialize object (True|False) of type <class 'bool'> since `extra` must contain exactly one parent class; got <class 'str'>, <class 'str'> and perhaps more",
|
695
|
+
):
|
696
|
+
_ = serialize_object(bool_, extra={bool | int: str, bool | float: str})
|
700
697
|
|
701
698
|
def test_error_not_implemented(self) -> None:
|
702
699
|
with raises(_SerializeObjectSerializeError):
|
@@ -167,14 +167,14 @@ class TestGetTypeClasses:
|
|
167
167
|
def test_error_type(self) -> None:
|
168
168
|
with raises(
|
169
169
|
_GetTypeClassesTypeError,
|
170
|
-
match="Object must be a type, tuple or Union type; got None",
|
170
|
+
match="Object must be a type, tuple or Union type; got None of type <class 'NoneType'>",
|
171
171
|
):
|
172
172
|
_ = get_type_classes(None)
|
173
173
|
|
174
174
|
def test_error_tuple(self) -> None:
|
175
175
|
with raises(
|
176
176
|
_GetTypeClassesTupleError,
|
177
|
-
match="Tuple must contain types, tuples or Union types only; got None",
|
177
|
+
match="Tuple must contain types, tuples or Union types only; got None of type <class 'NoneType'>",
|
178
178
|
):
|
179
179
|
_ = get_type_classes((None,))
|
180
180
|
|
@@ -416,14 +416,14 @@ class TestGetUnionTypeClasses:
|
|
416
416
|
def test_error_union_type(self) -> None:
|
417
417
|
with raises(
|
418
418
|
_GetUnionTypeClassesUnionTypeError,
|
419
|
-
match="Object must be a Union type; got None",
|
419
|
+
match="Object must be a Union type; got None of type <class 'NoneType'>",
|
420
420
|
):
|
421
421
|
_ = get_union_type_classes(None)
|
422
422
|
|
423
|
-
def
|
423
|
+
def test_error_internal_type(self) -> None:
|
424
424
|
with raises(
|
425
425
|
_GetUnionTypeClassesInternalTypeError,
|
426
|
-
match=r"Union type must contain types only; got typing\.Literal\[True\]",
|
426
|
+
match=r"Union type must contain types only; got typing\.Literal\[True\] of type <class 'typing\._LiteralGenericAlias'>",
|
427
427
|
):
|
428
428
|
_ = get_union_type_classes(Literal[True] | None)
|
429
429
|
|
@@ -586,7 +586,8 @@ class TestIsInstanceGen:
|
|
586
586
|
|
587
587
|
def test_error(self) -> None:
|
588
588
|
with raises(
|
589
|
-
IsInstanceGenError,
|
589
|
+
IsInstanceGenError,
|
590
|
+
match=r"Invalid arguments; got None of type <class 'NoneType'> and typing\.Final of type <class 'typing\._SpecialForm'>",
|
590
591
|
):
|
591
592
|
_ = is_instance_gen(None, Final)
|
592
593
|
|
@@ -639,6 +640,9 @@ class TestIsSubclassGen:
|
|
639
640
|
(bool, bool | None, True),
|
640
641
|
(bool | None, bool, False),
|
641
642
|
(bool | None, bool | None, True),
|
643
|
+
(Number, int, False),
|
644
|
+
(Number, float, False),
|
645
|
+
(Number, Number, True),
|
642
646
|
# literals
|
643
647
|
(Literal[1, 2], Literal[1, 2, 3], True),
|
644
648
|
(Literal[1, 2, 3], Literal[1, 2, 3], True),
|
@@ -684,5 +688,8 @@ class TestIsSubclassGen:
|
|
684
688
|
assert is_subclass_gen(MyInt, MyInt)
|
685
689
|
|
686
690
|
def test_error(self) -> None:
|
687
|
-
with raises(
|
691
|
+
with raises(
|
692
|
+
IsSubclassGenError,
|
693
|
+
match="Argument must be a class; got None of type <class 'NoneType'>",
|
694
|
+
):
|
688
695
|
_ = is_subclass_gen(None, NoneType)
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/test_typing_funcs/with_future.py
RENAMED
@@ -87,22 +87,6 @@ class DataClassFutureIntOneAndTwo:
|
|
87
87
|
int2: int
|
88
88
|
|
89
89
|
|
90
|
-
@dataclass(order=True, unsafe_hash=True, kw_only=True)
|
91
|
-
class DataClassFutureIntParentFirst:
|
92
|
-
int1: int
|
93
|
-
|
94
|
-
|
95
|
-
@dataclass(order=True, unsafe_hash=True, kw_only=True)
|
96
|
-
class DataClassFutureIntParentSecond:
|
97
|
-
int2: int
|
98
|
-
|
99
|
-
|
100
|
-
@dataclass(order=True, unsafe_hash=True, kw_only=True)
|
101
|
-
class DataClassFutureIntChild(
|
102
|
-
DataClassFutureIntParentFirst, DataClassFutureIntParentSecond
|
103
|
-
): ...
|
104
|
-
|
105
|
-
|
106
90
|
@dataclass(order=True, unsafe_hash=True, kw_only=True)
|
107
91
|
class DataClassFutureListInts:
|
108
92
|
ints: list[int]
|
@@ -22,7 +22,12 @@ from utilities.functions import (
|
|
22
22
|
)
|
23
23
|
from utilities.iterables import OneStrEmptyError, OneStrNonUniqueError, one_str
|
24
24
|
from utilities.operator import is_equal
|
25
|
-
from utilities.parse import
|
25
|
+
from utilities.parse import (
|
26
|
+
_ParseObjectExtraNonUniqueError,
|
27
|
+
_ParseObjectParseError,
|
28
|
+
parse_object,
|
29
|
+
serialize_object,
|
30
|
+
)
|
26
31
|
from utilities.re import ExtractGroupError, extract_group
|
27
32
|
from utilities.sentinel import Sentinel, sentinel
|
28
33
|
from utilities.text import (
|
@@ -570,8 +575,12 @@ def _parse_dataclass_parse_text(
|
|
570
575
|
case_sensitive=case_sensitive,
|
571
576
|
extra=extra,
|
572
577
|
)
|
573
|
-
except
|
574
|
-
raise
|
578
|
+
except _ParseObjectParseError:
|
579
|
+
raise _ParseDataClassTextParseError(cls=cls, field=field, text=text) from None
|
580
|
+
except _ParseObjectExtraNonUniqueError as error:
|
581
|
+
raise _ParseDataClassTextExtraNonUniqueError(
|
582
|
+
cls=cls, field=field, text=text, first=error.first, second=error.second
|
583
|
+
) from None
|
575
584
|
|
576
585
|
|
577
586
|
@dataclass(kw_only=True, slots=True)
|
@@ -597,12 +606,23 @@ class _ParseDataClassSplitKeyValuePairsDuplicateKeysError(ParseDataClassError):
|
|
597
606
|
|
598
607
|
|
599
608
|
@dataclass(kw_only=True, slots=True)
|
600
|
-
class
|
609
|
+
class _ParseDataClassTextParseError(ParseDataClassError[TDataclass]):
|
610
|
+
field: _YieldFieldsClass[Any]
|
611
|
+
|
612
|
+
@override
|
613
|
+
def __str__(self) -> str:
|
614
|
+
return f"Unable to construct {get_class_name(self.cls)!r} since the field {self.field.name!r} of type {self.field.type_!r} could not be parsed; got {self.text!r}"
|
615
|
+
|
616
|
+
|
617
|
+
@dataclass(kw_only=True, slots=True)
|
618
|
+
class _ParseDataClassTextExtraNonUniqueError(ParseDataClassError[TDataclass]):
|
601
619
|
field: _YieldFieldsClass[Any]
|
620
|
+
first: type[Any]
|
621
|
+
second: type[Any]
|
602
622
|
|
603
623
|
@override
|
604
624
|
def __str__(self) -> str:
|
605
|
-
return f"Unable to construct {get_class_name(self.cls)!r}
|
625
|
+
return f"Unable to construct {get_class_name(self.cls)!r} since the field {self.field.name!r} of type {self.field.type_!r} must contain exactly one parent class in `extra`; got {self.first!r}, {self.second!r} and perhaps more"
|
606
626
|
|
607
627
|
|
608
628
|
##
|
@@ -283,17 +283,19 @@ def _parse_object_dict_type(
|
|
283
283
|
|
284
284
|
def _parse_object_extra(cls: Any, text: str, extra: ParseObjectExtra, /) -> Any:
|
285
285
|
try:
|
286
|
-
parser =
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
type_=cls, text=text
|
294
|
-
|
295
|
-
|
296
|
-
|
286
|
+
parser = extra[cls]
|
287
|
+
except KeyError:
|
288
|
+
try:
|
289
|
+
parser = one(
|
290
|
+
p for c, p in extra.items() if (cls is c) or is_subclass_gen(cls, c)
|
291
|
+
)
|
292
|
+
except (OneEmptyError, TypeError):
|
293
|
+
raise _ParseObjectParseError(type_=cls, text=text) from None
|
294
|
+
except OneNonUniqueError as error:
|
295
|
+
raise _ParseObjectExtraNonUniqueError(
|
296
|
+
type_=cls, text=text, first=error.first, second=error.second
|
297
|
+
) from None
|
298
|
+
return parser(text)
|
297
299
|
|
298
300
|
|
299
301
|
def _parse_object_list_type(
|
@@ -600,7 +602,7 @@ class SerializeObjectError(Exception):
|
|
600
602
|
class _SerializeObjectSerializeError(SerializeObjectError):
|
601
603
|
@override
|
602
604
|
def __str__(self) -> str:
|
603
|
-
return f"Unable to serialize object {self.obj!r}"
|
605
|
+
return f"Unable to serialize object {self.obj!r} of type {type(self.obj)!r}"
|
604
606
|
|
605
607
|
|
606
608
|
@dataclass
|
@@ -610,7 +612,7 @@ class _SerializeObjectExtraNonUniqueError(SerializeObjectError):
|
|
610
612
|
|
611
613
|
@override
|
612
614
|
def __str__(self) -> str:
|
613
|
-
return f"Unable to serialize object {self.obj!r} since `extra` must contain exactly one parent class; got {self.first!r}, {self.second!r} and perhaps more"
|
615
|
+
return f"Unable to serialize object {self.obj!r} of type {type(self.obj)!r} since `extra` must contain exactly one parent class; got {self.first!r}, {self.second!r} and perhaps more"
|
614
616
|
|
615
617
|
|
616
618
|
__all__ = ["parse_object", "serialize_object"]
|
@@ -108,7 +108,7 @@ class GetTypeClassesError(Exception):
|
|
108
108
|
class _GetTypeClassesTypeError(GetTypeClassesError):
|
109
109
|
@override
|
110
110
|
def __str__(self) -> str:
|
111
|
-
return f"Object must be a type, tuple or Union type; got {self.obj}"
|
111
|
+
return f"Object must be a type, tuple or Union type; got {self.obj!r} of type {type(self.obj)!r}"
|
112
112
|
|
113
113
|
|
114
114
|
@dataclass(kw_only=True, slots=True)
|
@@ -117,7 +117,7 @@ class _GetTypeClassesTupleError(GetTypeClassesError):
|
|
117
117
|
|
118
118
|
@override
|
119
119
|
def __str__(self) -> str:
|
120
|
-
return f"Tuple must contain types, tuples or Union types only; got {self.inner}"
|
120
|
+
return f"Tuple must contain types, tuples or Union types only; got {self.inner} of type {type(self.inner)!r}"
|
121
121
|
|
122
122
|
|
123
123
|
##
|
@@ -177,7 +177,9 @@ class GetUnionTypeClassesError(Exception):
|
|
177
177
|
class _GetUnionTypeClassesUnionTypeError(GetUnionTypeClassesError):
|
178
178
|
@override
|
179
179
|
def __str__(self) -> str:
|
180
|
-
return
|
180
|
+
return (
|
181
|
+
f"Object must be a Union type; got {self.obj!r} of type {type(self.obj)!r}"
|
182
|
+
)
|
181
183
|
|
182
184
|
|
183
185
|
@dataclass(kw_only=True, slots=True)
|
@@ -186,7 +188,7 @@ class _GetUnionTypeClassesInternalTypeError(GetUnionTypeClassesError):
|
|
186
188
|
|
187
189
|
@override
|
188
190
|
def __str__(self) -> str:
|
189
|
-
return f"Union type must contain types only; got {self.inner}"
|
191
|
+
return f"Union type must contain types only; got {self.inner} of type {type(self.inner)!r}"
|
190
192
|
|
191
193
|
|
192
194
|
##
|
@@ -272,7 +274,7 @@ class IsInstanceGenError(Exception):
|
|
272
274
|
|
273
275
|
@override
|
274
276
|
def __str__(self) -> str:
|
275
|
-
return f"Invalid arguments; got {self.obj!r} and {self.type_!r}"
|
277
|
+
return f"Invalid arguments; got {self.obj!r} of type {type(self.obj)!r} and {self.type_!r} of type {type(self.type_)!r}"
|
276
278
|
|
277
279
|
|
278
280
|
##
|
@@ -432,7 +434,7 @@ class IsSubclassGenError(Exception):
|
|
432
434
|
|
433
435
|
@override
|
434
436
|
def __str__(self) -> str:
|
435
|
-
return f"Argument must be a class; got {self.cls!r}"
|
437
|
+
return f"Argument must be a class; got {self.cls!r} of type {type(self.cls)!r}"
|
436
438
|
|
437
439
|
|
438
440
|
##
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/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.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/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.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_async_service/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_async_service/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_async_service/run.sh
RENAMED
File without changes
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_queue_processor/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/src/tests/scripts/test_queue_processor/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.112.4 → dycw_utilities-0.112.5}/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
|