dycw-utilities 0.133.7__tar.gz → 0.134.0__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.133.7 → dycw_utilities-0.134.0}/PKG-INFO +1 -1
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/pyproject.toml +3 -2
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_arq.py +3 -3
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_click.py +8 -11
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_eventkit.py +3 -7
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_functions.py +8 -13
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_timer.py +4 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_typed_settings.py +4 -8
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_types.py +2 -2
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/arq.py +13 -20
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/asyncio.py +59 -74
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/atools.py +10 -13
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/cachetools.py +11 -17
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/click.py +31 -51
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/concurrent.py +7 -10
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/dataclasses.py +69 -91
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/enum.py +24 -21
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/eventkit.py +34 -48
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/functions.py +133 -168
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/functools.py +14 -18
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/hypothesis.py +34 -44
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/iterables.py +165 -179
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/luigi.py +3 -15
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/memory_profiler.py +11 -15
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/more_itertools.py +85 -94
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/operator.py +5 -7
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/optuna.py +6 -6
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/pathlib.py +1 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/period.py +7 -9
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/polars.py +5 -16
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/pqdm.py +7 -8
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/pydantic.py +2 -4
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/pytest.py +14 -23
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/python_dotenv.py +5 -9
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/random.py +2 -3
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/redis.py +163 -181
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/slack_sdk.py +2 -2
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/sqlalchemy.py +4 -14
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/timer.py +6 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/typed_settings.py +7 -10
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/types.py +10 -94
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/typing.py +32 -43
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/uuid.py +1 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/.gitignore +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/LICENSE +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/README.md +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_aiolimiter.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_asyncio_classes/loopers.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/aiolimiter.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/git.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/http.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/math.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/os.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/re.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/string.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/text.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/version.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.133.7 → dycw_utilities-0.134.0}/src/utilities/zoneinfo.py +0 -0
@@ -104,7 +104,7 @@ dependencies = [
|
|
104
104
|
name = "dycw-utilities"
|
105
105
|
readme = "README.md"
|
106
106
|
requires-python = ">= 3.12"
|
107
|
-
version = "0.
|
107
|
+
version = "0.134.0"
|
108
108
|
|
109
109
|
[project.optional-dependencies]
|
110
110
|
logging = [
|
@@ -131,7 +131,7 @@ test = [
|
|
131
131
|
# bump-my-version
|
132
132
|
[tool.bumpversion]
|
133
133
|
allow_dirty = true
|
134
|
-
current_version = "0.
|
134
|
+
current_version = "0.134.0"
|
135
135
|
|
136
136
|
[[tool.bumpversion.files]]
|
137
137
|
filename = "src/utilities/__init__.py"
|
@@ -292,6 +292,7 @@ ignore = [
|
|
292
292
|
"E501", # line-too-long
|
293
293
|
"PD", # pandas-vet
|
294
294
|
"PERF203", # try-except-in-loop
|
295
|
+
"PLC0415", # import-outside-top-level
|
295
296
|
"PLR0911", # too-many-return-statements
|
296
297
|
"PLR0912", # too-many-branches
|
297
298
|
"PLR0913", # too-many-arguments
|
@@ -12,11 +12,11 @@ from utilities.arq import Worker, cron_raw, job_enqueuer
|
|
12
12
|
from utilities.iterables import one
|
13
13
|
|
14
14
|
if TYPE_CHECKING:
|
15
|
-
from collections.abc import Sequence
|
15
|
+
from collections.abc import Callable, Sequence
|
16
16
|
|
17
17
|
from arq.typing import WorkerCoroutine
|
18
18
|
|
19
|
-
from utilities.types import
|
19
|
+
from utilities.types import Coro
|
20
20
|
|
21
21
|
|
22
22
|
class TestCronRaw:
|
@@ -51,7 +51,7 @@ class TestWorker:
|
|
51
51
|
return x + y
|
52
52
|
|
53
53
|
class Example(Worker):
|
54
|
-
functions_raw: Sequence[
|
54
|
+
functions_raw: Sequence[Callable[..., Coro[Any]]] = [func]
|
55
55
|
|
56
56
|
func_use = cast("WorkerCoroutine", one(Example.functions))
|
57
57
|
result = await func_use({}, x, y)
|
@@ -5,7 +5,7 @@ from dataclasses import dataclass
|
|
5
5
|
from enum import auto
|
6
6
|
from operator import attrgetter
|
7
7
|
from re import search
|
8
|
-
from typing import TYPE_CHECKING, Any, ClassVar
|
8
|
+
from typing import TYPE_CHECKING, Any, ClassVar
|
9
9
|
|
10
10
|
import whenever
|
11
11
|
from click import ParamType, argument, command, echo, option
|
@@ -68,9 +68,6 @@ if TYPE_CHECKING:
|
|
68
68
|
from pathlib import Path
|
69
69
|
|
70
70
|
|
71
|
-
_T = TypeVar("_T")
|
72
|
-
|
73
|
-
|
74
71
|
class TestContextSettingsHelpOptionNames:
|
75
72
|
@given(help_=sampled_from(["-h", "--help"]))
|
76
73
|
def test_main(self, *, help_: str) -> None:
|
@@ -175,22 +172,22 @@ class _ExampleEnum(enum.Enum):
|
|
175
172
|
c = auto()
|
176
173
|
|
177
174
|
|
178
|
-
def _lift_serializer(
|
179
|
-
serializer: Callable[[
|
180
|
-
) -> Callable[[Iterable[
|
181
|
-
def wrapped(values: Iterable[
|
175
|
+
def _lift_serializer[T](
|
176
|
+
serializer: Callable[[T], str], /, *, sort: bool = False
|
177
|
+
) -> Callable[[Iterable[T]], str]:
|
178
|
+
def wrapped(values: Iterable[T], /) -> str:
|
182
179
|
return join_strs(map(serializer, values), sort=sort)
|
183
180
|
|
184
181
|
return wrapped
|
185
182
|
|
186
183
|
|
187
184
|
@dataclass(kw_only=True, slots=True)
|
188
|
-
class _Case
|
185
|
+
class _Case[T]:
|
189
186
|
param: ParamType
|
190
187
|
name: str
|
191
188
|
repr: str | None = None
|
192
|
-
strategy: SearchStrategy[
|
193
|
-
serialize: Callable[[
|
189
|
+
strategy: SearchStrategy[T]
|
190
|
+
serialize: Callable[[T], str]
|
194
191
|
failable: bool = False
|
195
192
|
|
196
193
|
|
@@ -6,7 +6,7 @@ from functools import wraps
|
|
6
6
|
from io import StringIO
|
7
7
|
from logging import StreamHandler, getLogger
|
8
8
|
from re import search
|
9
|
-
from typing import TYPE_CHECKING, Literal
|
9
|
+
from typing import TYPE_CHECKING, Literal
|
10
10
|
|
11
11
|
from eventkit import Event
|
12
12
|
from hypothesis import given
|
@@ -26,10 +26,6 @@ if TYPE_CHECKING:
|
|
26
26
|
from pathlib import Path
|
27
27
|
|
28
28
|
|
29
|
-
_P = ParamSpec("_P")
|
30
|
-
_R = TypeVar("_R")
|
31
|
-
|
32
|
-
|
33
29
|
class TestAddListener:
|
34
30
|
@given(sync_or_async=sampled_from(["sync", "async"]))
|
35
31
|
async def test_main(self, *, sync_or_async: Literal["sync", "async"]) -> None:
|
@@ -210,9 +206,9 @@ class TestAddListener:
|
|
210
206
|
nonlocal counter
|
211
207
|
counter += 1
|
212
208
|
|
213
|
-
def increment(func: Callable[
|
209
|
+
def increment[**P, R](func: Callable[P, R], /) -> Callable[P, R]:
|
214
210
|
@wraps(func)
|
215
|
-
def wrapped(*args:
|
211
|
+
def wrapped(*args: P.args, **kwargs: P.kwargs) -> R:
|
216
212
|
nonlocal counter
|
217
213
|
counter += 1
|
218
214
|
return func(*args, **kwargs)
|
@@ -7,7 +7,7 @@ from itertools import chain
|
|
7
7
|
from operator import neg
|
8
8
|
from pathlib import Path
|
9
9
|
from types import NoneType
|
10
|
-
from typing import TYPE_CHECKING, Any, ClassVar,
|
10
|
+
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
11
11
|
|
12
12
|
from hypothesis import given
|
13
13
|
from hypothesis.strategies import (
|
@@ -106,11 +106,6 @@ if TYPE_CHECKING:
|
|
106
106
|
from utilities.types import Number
|
107
107
|
|
108
108
|
|
109
|
-
_P = ParamSpec("_P")
|
110
|
-
_R = TypeVar("_R")
|
111
|
-
_T = TypeVar("_T")
|
112
|
-
|
113
|
-
|
114
109
|
class TestApplyDecorators:
|
115
110
|
@given(n=integers())
|
116
111
|
def test_main(self, *, n: int) -> None:
|
@@ -119,9 +114,9 @@ class TestApplyDecorators:
|
|
119
114
|
def negate(x: int, /) -> int:
|
120
115
|
return -x
|
121
116
|
|
122
|
-
def increment(func: Callable[
|
117
|
+
def increment[**P, T](func: Callable[P, T], /) -> Callable[P, T]:
|
123
118
|
@wraps(func)
|
124
|
-
def wrapped(*args:
|
119
|
+
def wrapped(*args: P.args, **kwargs: P.kwargs) -> T:
|
125
120
|
nonlocal counter
|
126
121
|
counter += 1
|
127
122
|
return func(*args, **kwargs)
|
@@ -538,7 +533,7 @@ class TestGetFuncNameAndGetFuncQualName:
|
|
538
533
|
|
539
534
|
def test_decorated(self) -> None:
|
540
535
|
@wraps(identity)
|
541
|
-
def wrapped(x:
|
536
|
+
def wrapped[T](x: T, /) -> T:
|
542
537
|
return identity(x)
|
543
538
|
|
544
539
|
assert get_func_name(wrapped) == "identity"
|
@@ -557,7 +552,7 @@ class TestGetFuncNameAndGetFuncQualName:
|
|
557
552
|
|
558
553
|
def test_object(self) -> None:
|
559
554
|
class Example:
|
560
|
-
def __call__(self, x:
|
555
|
+
def __call__[T](self, x: T, /) -> T:
|
561
556
|
return identity(x)
|
562
557
|
|
563
558
|
obj = Example()
|
@@ -566,7 +561,7 @@ class TestGetFuncNameAndGetFuncQualName:
|
|
566
561
|
|
567
562
|
def test_obj_method(self) -> None:
|
568
563
|
class Example:
|
569
|
-
def obj_method(self, x:
|
564
|
+
def obj_method[T](self, x: T) -> T:
|
570
565
|
return identity(x)
|
571
566
|
|
572
567
|
obj = Example()
|
@@ -579,7 +574,7 @@ class TestGetFuncNameAndGetFuncQualName:
|
|
579
574
|
def test_obj_classmethod(self) -> None:
|
580
575
|
class Example:
|
581
576
|
@classmethod
|
582
|
-
def obj_classmethod(cls:
|
577
|
+
def obj_classmethod[T](cls: T) -> T:
|
583
578
|
return identity(cls)
|
584
579
|
|
585
580
|
assert get_func_name(Example.obj_classmethod) == "Example.obj_classmethod"
|
@@ -591,7 +586,7 @@ class TestGetFuncNameAndGetFuncQualName:
|
|
591
586
|
def test_obj_staticmethod(self) -> None:
|
592
587
|
class Example:
|
593
588
|
@staticmethod
|
594
|
-
def obj_staticmethod(x:
|
589
|
+
def obj_staticmethod[T](x: T) -> T:
|
595
590
|
return identity(x)
|
596
591
|
|
597
592
|
assert get_func_name(Example.obj_staticmethod) == "Example.obj_staticmethod"
|
@@ -101,6 +101,10 @@ class TestTimer:
|
|
101
101
|
await sleep_td(2 * delta)
|
102
102
|
assert timer >= delta
|
103
103
|
|
104
|
+
def test_hashable(self) -> None:
|
105
|
+
timer = Timer()
|
106
|
+
_ = hash(timer)
|
107
|
+
|
104
108
|
@mark.parametrize("func", [param(repr), param(str)])
|
105
109
|
async def test_repr_and_str(self, *, func: Callable[[Timer], str]) -> None:
|
106
110
|
with Timer() as timer:
|
@@ -2,7 +2,6 @@ from collections.abc import Callable
|
|
2
2
|
from dataclasses import dataclass
|
3
3
|
from ipaddress import IPv4Address, IPv6Address
|
4
4
|
from pathlib import Path
|
5
|
-
from typing import TypeVar
|
6
5
|
|
7
6
|
import typed_settings
|
8
7
|
from hypothesis import given
|
@@ -43,9 +42,6 @@ from utilities.whenever import Freq
|
|
43
42
|
app_names = text_ascii(min_size=1).map(str.lower)
|
44
43
|
|
45
44
|
|
46
|
-
_T = TypeVar("_T")
|
47
|
-
|
48
|
-
|
49
45
|
class TestExtendedTSConverter:
|
50
46
|
@given(data=data(), root=temp_paths(), app_name=app_names)
|
51
47
|
@mark.parametrize(
|
@@ -67,15 +63,15 @@ class TestExtendedTSConverter:
|
|
67
63
|
param(ZonedDateTime, zoned_datetimes(), ZonedDateTime.format_common_iso),
|
68
64
|
],
|
69
65
|
)
|
70
|
-
def test_main(
|
66
|
+
def test_main[T](
|
71
67
|
self,
|
72
68
|
*,
|
73
69
|
data: DataObject,
|
74
70
|
root: Path,
|
75
71
|
app_name: str,
|
76
|
-
test_cls: type[
|
77
|
-
strategy: SearchStrategy[
|
78
|
-
serialize: Callable[[
|
72
|
+
test_cls: type[T],
|
73
|
+
strategy: SearchStrategy[T],
|
74
|
+
serialize: Callable[[T], str],
|
79
75
|
) -> None:
|
80
76
|
default, value = data.draw(tuples(strategy, strategy))
|
81
77
|
|
@@ -9,13 +9,13 @@ from hypothesis.strategies import sampled_from
|
|
9
9
|
from pytest import mark, param
|
10
10
|
|
11
11
|
from utilities.platform import SYSTEM
|
12
|
-
from utilities.types import Number, PathLike,
|
12
|
+
from utilities.types import Dataclass, Number, PathLike, TimeZone
|
13
13
|
from utilities.typing import get_literal_elements
|
14
14
|
|
15
15
|
|
16
16
|
class TestDataClassProtocol:
|
17
17
|
def test_main(self) -> None:
|
18
|
-
def identity(x:
|
18
|
+
def identity[T: Dataclass](x: T, /) -> T:
|
19
19
|
return x
|
20
20
|
|
21
21
|
@dataclass(kw_only=True, slots=True)
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
3
3
|
from dataclasses import dataclass
|
4
4
|
from functools import wraps
|
5
5
|
from itertools import chain
|
6
|
-
from typing import TYPE_CHECKING, Any,
|
6
|
+
from typing import TYPE_CHECKING, Any, Self, cast, override
|
7
7
|
|
8
8
|
from arq.constants import default_queue_name, expires_extra_ms
|
9
9
|
from arq.cron import cron
|
@@ -27,18 +27,11 @@ if TYPE_CHECKING:
|
|
27
27
|
)
|
28
28
|
from arq.worker import Function
|
29
29
|
|
30
|
-
from utilities.types import
|
31
|
-
|
32
|
-
|
33
|
-
_P = ParamSpec("_P")
|
34
|
-
_T = TypeVar("_T")
|
35
|
-
|
36
|
-
|
37
|
-
##
|
30
|
+
from utilities.types import Coro, StrMapping
|
38
31
|
|
39
32
|
|
40
33
|
def cron_raw(
|
41
|
-
coroutine:
|
34
|
+
coroutine: Callable[..., Coro[Any]],
|
42
35
|
/,
|
43
36
|
*,
|
44
37
|
name: str | None = None,
|
@@ -83,13 +76,13 @@ def cron_raw(
|
|
83
76
|
)
|
84
77
|
|
85
78
|
|
86
|
-
def _lift_cron(
|
87
|
-
func: Callable[
|
79
|
+
def _lift_cron[**P, T](
|
80
|
+
func: Callable[P, Coro[T]], *args: P.args, **kwargs: P.kwargs
|
88
81
|
) -> WorkerCoroutine:
|
89
82
|
"""Lift a coroutine function & call arg/kwargs for `cron`."""
|
90
83
|
|
91
84
|
@wraps(func)
|
92
|
-
async def wrapped(ctx: StrMapping, /) ->
|
85
|
+
async def wrapped(ctx: StrMapping, /) -> T:
|
93
86
|
_ = ctx
|
94
87
|
return await func(*args, **kwargs)
|
95
88
|
|
@@ -110,12 +103,12 @@ class _JobEnqueuer:
|
|
110
103
|
expires: int | float | timedelta | None = None
|
111
104
|
job_try: int | None = None
|
112
105
|
|
113
|
-
async def __call__(
|
106
|
+
async def __call__[**P, T](
|
114
107
|
self,
|
115
108
|
redis: ArqRedis,
|
116
|
-
function: Callable[
|
117
|
-
*args:
|
118
|
-
**kwargs:
|
109
|
+
function: Callable[P, Coro[T]],
|
110
|
+
*args: P.args,
|
111
|
+
**kwargs: P.kwargs,
|
119
112
|
) -> Job | None:
|
120
113
|
return await redis.enqueue_job( # skipif-ci-and-not-linux
|
121
114
|
function.__name__,
|
@@ -171,11 +164,11 @@ class _WorkerMeta(type):
|
|
171
164
|
return cls
|
172
165
|
|
173
166
|
@classmethod
|
174
|
-
def _lift(cls, func: Callable[
|
167
|
+
def _lift[**P, T](cls, func: Callable[P, Coro[T]]) -> WorkerCoroutine:
|
175
168
|
"""Lift a coroutine function to accept the required `ctx` argument."""
|
176
169
|
|
177
170
|
@wraps(func)
|
178
|
-
async def wrapped(ctx: StrMapping, *args:
|
171
|
+
async def wrapped(ctx: StrMapping, *args: P.args, **kwargs: P.kwargs) -> T:
|
179
172
|
_ = ctx
|
180
173
|
return await func(*args, **kwargs)
|
181
174
|
|
@@ -187,7 +180,7 @@ class Worker(metaclass=_WorkerMeta):
|
|
187
180
|
"""Base class for all workers."""
|
188
181
|
|
189
182
|
functions: Sequence[Function | WorkerCoroutine] = ()
|
190
|
-
functions_raw: Sequence[
|
183
|
+
functions_raw: Sequence[Callable[..., Coro[Any]]] = ()
|
191
184
|
queue_name: str | None = default_queue_name
|
192
185
|
cron_jobs: Sequence[CronJob] | None = None
|
193
186
|
redis_settings: RedisSettings | None = None
|