dycw-utilities 0.110.7__tar.gz → 0.110.8__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.110.7 → dycw_utilities-0.110.8}/PKG-INFO +1 -1
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/pyproject.toml +2 -2
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_typing.py +33 -1
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/typing.py +46 -4
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/.gitignore +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/LICENSE +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/README.md +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_async_service/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_async_service/__main__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_async_service/run.sh +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_queue_processor/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_queue_processor/__main__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_queue_processor/run.sh +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/click.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/git.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/http.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/math.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/os.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/period.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/random.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/re.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/text.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/types.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/version.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/utilities/zoneinfo.py +0 -0
@@ -94,7 +94,7 @@ dependencies = [
|
|
94
94
|
name = "dycw-utilities"
|
95
95
|
readme = "README.md"
|
96
96
|
requires-python = ">= 3.12"
|
97
|
-
version = "0.110.
|
97
|
+
version = "0.110.8"
|
98
98
|
|
99
99
|
[project.optional-dependencies]
|
100
100
|
test = [
|
@@ -337,7 +337,7 @@ zzz-test-zoneinfo = [
|
|
337
337
|
# bump-my-version
|
338
338
|
[tool.bumpversion]
|
339
339
|
allow_dirty = true
|
340
|
-
current_version = "0.110.
|
340
|
+
current_version = "0.110.8"
|
341
341
|
|
342
342
|
[[tool.bumpversion.files]]
|
343
343
|
filename = "src/utilities/__init__.py"
|
@@ -4,6 +4,7 @@ import datetime as dt
|
|
4
4
|
from collections.abc import Mapping, Sequence
|
5
5
|
from dataclasses import dataclass
|
6
6
|
from pathlib import Path
|
7
|
+
from random import Random
|
7
8
|
from types import NoneType
|
8
9
|
from typing import TYPE_CHECKING, Any, Literal, NamedTuple, Self
|
9
10
|
from uuid import UUID
|
@@ -39,12 +40,15 @@ from tests.test_typing_funcs.with_future import (
|
|
39
40
|
TrueOrFalseFutureTypeLit,
|
40
41
|
)
|
41
42
|
from utilities.sentinel import Sentinel
|
42
|
-
from utilities.types import LogLevel, Parallelism
|
43
|
+
from utilities.types import Duration, LogLevel, Number, Parallelism, Seed
|
43
44
|
from utilities.typing import (
|
45
|
+
_GetUnionTypeClassesNotATypeError,
|
46
|
+
_GetUnionTypeClassesNotAUnionTypeError,
|
44
47
|
contains_self,
|
45
48
|
get_args,
|
46
49
|
get_literal_elements,
|
47
50
|
get_type_hints,
|
51
|
+
get_union_type_classes,
|
48
52
|
is_dict_type,
|
49
53
|
is_frozenset_type,
|
50
54
|
is_list_type,
|
@@ -335,6 +339,34 @@ class TestGetTypeHints:
|
|
335
339
|
_ = get_type_hints(Outer, warn_name_errors=True)
|
336
340
|
|
337
341
|
|
342
|
+
class TestGetUnionTypeClasses:
|
343
|
+
@given(
|
344
|
+
case=sampled_from([
|
345
|
+
(Duration, (int, float, dt.timedelta)),
|
346
|
+
(Number, (int, float)),
|
347
|
+
(Seed, (int, float, str, bytes, bytearray, Random)),
|
348
|
+
])
|
349
|
+
)
|
350
|
+
def test_main(self, *, case: tuple[Any, tuple[type[Any], ...]]) -> None:
|
351
|
+
obj, expected = case
|
352
|
+
result = get_union_type_classes(obj)
|
353
|
+
assert result == expected
|
354
|
+
|
355
|
+
def test_error_not_a_union_type(self) -> None:
|
356
|
+
with raises(
|
357
|
+
_GetUnionTypeClassesNotAUnionTypeError,
|
358
|
+
match="Object must be a Union type; got None",
|
359
|
+
):
|
360
|
+
_ = get_union_type_classes(None)
|
361
|
+
|
362
|
+
def test_error_not_a_type(self) -> None:
|
363
|
+
with raises(
|
364
|
+
_GetUnionTypeClassesNotATypeError,
|
365
|
+
match=r"Union type must contain types only; got typing\.Literal\[True\]",
|
366
|
+
):
|
367
|
+
_ = get_union_type_classes(Literal[True] | None)
|
368
|
+
|
369
|
+
|
338
370
|
class TestIsAnnotationOfType:
|
339
371
|
@mark.parametrize(
|
340
372
|
("func", "obj", "expected"),
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
import datetime as dt
|
4
4
|
from collections.abc import Mapping, Sequence
|
5
|
+
from dataclasses import dataclass
|
5
6
|
from itertools import chain
|
6
7
|
from pathlib import Path
|
7
8
|
from types import NoneType, UnionType
|
@@ -15,6 +16,7 @@ from typing import (
|
|
15
16
|
TypeGuard,
|
16
17
|
Union, # pyright: ignore[reportDeprecated]
|
17
18
|
get_origin,
|
19
|
+
override,
|
18
20
|
)
|
19
21
|
from typing import get_args as _get_args
|
20
22
|
from typing import get_type_hints as _get_type_hints
|
@@ -64,7 +66,7 @@ def _get_literal_elements_inner(obj: Any, /) -> list[Any]:
|
|
64
66
|
|
65
67
|
|
66
68
|
def get_type_hints(
|
67
|
-
|
69
|
+
obj: Any,
|
68
70
|
/,
|
69
71
|
*,
|
70
72
|
globalns: StrMapping | None = None,
|
@@ -72,15 +74,15 @@ def get_type_hints(
|
|
72
74
|
warn_name_errors: bool = False,
|
73
75
|
) -> dict[str, Any]:
|
74
76
|
"""Get the type hints of an object."""
|
75
|
-
result: dict[str, Any] =
|
77
|
+
result: dict[str, Any] = obj.__annotations__
|
76
78
|
_ = {Literal, Path, Sentinel, StrMapping, UUID, dt}
|
77
79
|
globalns_use = globals() | ({} if globalns is None else dict(globalns))
|
78
80
|
localns_use = {} if localns is None else dict(localns)
|
79
81
|
try:
|
80
|
-
hints = _get_type_hints(
|
82
|
+
hints = _get_type_hints(obj, globalns=globalns_use, localns=localns_use)
|
81
83
|
except NameError as error:
|
82
84
|
if warn_name_errors:
|
83
|
-
warn(f"Error getting type hints for {
|
85
|
+
warn(f"Error getting type hints for {obj!r}; {error}", stacklevel=2)
|
84
86
|
else:
|
85
87
|
result.update({
|
86
88
|
key: value
|
@@ -93,6 +95,44 @@ def get_type_hints(
|
|
93
95
|
##
|
94
96
|
|
95
97
|
|
98
|
+
def get_union_type_classes(obj: Any, /) -> tuple[type[Any], ...]:
|
99
|
+
if not is_union_type(obj):
|
100
|
+
raise _GetUnionTypeClassesNotAUnionTypeError(obj=obj)
|
101
|
+
types_: Sequence[type[Any]] = []
|
102
|
+
for arg in get_args(obj):
|
103
|
+
if isinstance(arg, type):
|
104
|
+
types_.append(arg)
|
105
|
+
elif is_union_type(arg):
|
106
|
+
types_.extend(get_union_type_classes(arg))
|
107
|
+
else:
|
108
|
+
raise _GetUnionTypeClassesNotATypeError(obj=obj, inner=arg)
|
109
|
+
return tuple(types_)
|
110
|
+
|
111
|
+
|
112
|
+
@dataclass(kw_only=True, slots=True)
|
113
|
+
class GetUnionTypeClassesError(Exception):
|
114
|
+
obj: Any
|
115
|
+
|
116
|
+
|
117
|
+
@dataclass(kw_only=True, slots=True)
|
118
|
+
class _GetUnionTypeClassesNotAUnionTypeError(GetUnionTypeClassesError):
|
119
|
+
@override
|
120
|
+
def __str__(self) -> str:
|
121
|
+
return f"Object must be a Union type; got {self.obj}"
|
122
|
+
|
123
|
+
|
124
|
+
@dataclass(kw_only=True, slots=True)
|
125
|
+
class _GetUnionTypeClassesNotATypeError(GetUnionTypeClassesError):
|
126
|
+
inner: Any
|
127
|
+
|
128
|
+
@override
|
129
|
+
def __str__(self) -> str:
|
130
|
+
return f"Union type must contain types only; got {self.inner}"
|
131
|
+
|
132
|
+
|
133
|
+
##
|
134
|
+
|
135
|
+
|
96
136
|
def is_dict_type(obj: Any, /) -> bool:
|
97
137
|
"""Check if an object is a dict type annotation."""
|
98
138
|
return _is_annotation_of_type(obj, dict)
|
@@ -207,9 +247,11 @@ def _is_annotation_of_type(obj: Any, origin: Any, /) -> bool:
|
|
207
247
|
|
208
248
|
|
209
249
|
__all__ = [
|
250
|
+
"GetUnionTypeClassesError",
|
210
251
|
"contains_self",
|
211
252
|
"get_literal_elements",
|
212
253
|
"get_type_hints",
|
254
|
+
"get_union_type_classes",
|
213
255
|
"is_dict_type",
|
214
256
|
"is_frozenset_type",
|
215
257
|
"is_list_type",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/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.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/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.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_async_service/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_async_service/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_async_service/run.sh
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_queue_processor/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/scripts/test_queue_processor/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/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
|
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/decorated_async.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.110.7 → dycw_utilities-0.110.8}/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
|
File without changes
|