dycw-utilities 0.131.15__tar.gz → 0.131.16__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.131.15 → dycw_utilities-0.131.16}/PKG-INFO +1 -1
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/pyproject.toml +2 -2
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_click.py +37 -135
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_hypothesis.py +35 -12
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_typed_settings.py +15 -1
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_whenever.py +0 -123
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_whenever2.py +91 -100
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/click.py +128 -179
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/hypothesis.py +57 -19
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/whenever.py +1 -192
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/whenever2.py +209 -8
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/.gitignore +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/LICENSE +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/README.md +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_aiolimiter.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_asyncio_classes/loopers.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/aiolimiter.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/git.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/http.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/math.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/os.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/period.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/random.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/re.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/string.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/text.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/types.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/version.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/zoneinfo.py +0 -0
@@ -95,7 +95,7 @@ dependencies = [
|
|
95
95
|
name = "dycw-utilities"
|
96
96
|
readme = "README.md"
|
97
97
|
requires-python = ">= 3.12"
|
98
|
-
version = "0.131.
|
98
|
+
version = "0.131.16"
|
99
99
|
|
100
100
|
[project.optional-dependencies]
|
101
101
|
logging = [
|
@@ -122,7 +122,7 @@ test = [
|
|
122
122
|
# bump-my-version
|
123
123
|
[tool.bumpversion]
|
124
124
|
allow_dirty = true
|
125
|
-
current_version = "0.131.
|
125
|
+
current_version = "0.131.16"
|
126
126
|
|
127
127
|
[[tool.bumpversion.files]]
|
128
128
|
filename = "src/utilities/__init__.py"
|
@@ -6,6 +6,7 @@ from operator import attrgetter
|
|
6
6
|
from re import search
|
7
7
|
from typing import TYPE_CHECKING, Any, TypeVar
|
8
8
|
|
9
|
+
import whenever
|
9
10
|
from click import ParamType, argument, command, echo, option
|
10
11
|
from click.testing import CliRunner
|
11
12
|
from hypothesis import given
|
@@ -14,70 +15,47 @@ from hypothesis.strategies import (
|
|
14
15
|
SearchStrategy,
|
15
16
|
booleans,
|
16
17
|
data,
|
17
|
-
dates,
|
18
|
-
datetimes,
|
19
|
-
floats,
|
20
18
|
frozensets,
|
21
|
-
integers,
|
22
|
-
just,
|
23
19
|
lists,
|
24
20
|
sampled_from,
|
25
|
-
times,
|
26
|
-
uuids,
|
27
21
|
)
|
28
22
|
from pytest import mark, param
|
29
23
|
|
30
|
-
import utilities.click
|
31
|
-
import utilities.datetime
|
32
|
-
import utilities.types
|
33
24
|
from utilities.click import (
|
34
25
|
CONTEXT_SETTINGS_HELP_OPTION_NAMES,
|
35
26
|
Date,
|
27
|
+
DateDelta,
|
28
|
+
DateTimeDelta,
|
36
29
|
DirPath,
|
37
30
|
Enum,
|
38
31
|
ExistingDirPath,
|
39
32
|
ExistingFilePath,
|
40
33
|
FilePath,
|
41
|
-
FrozenSetBools,
|
42
34
|
FrozenSetChoices,
|
43
|
-
FrozenSetDates,
|
44
35
|
FrozenSetEnums,
|
45
|
-
FrozenSetFloats,
|
46
|
-
FrozenSetInts,
|
47
|
-
FrozenSetMonths,
|
48
36
|
FrozenSetStrs,
|
49
|
-
FrozenSetUUIDs,
|
50
|
-
ListBools,
|
51
|
-
ListDates,
|
52
37
|
ListEnums,
|
53
|
-
ListFloats,
|
54
|
-
ListInts,
|
55
|
-
ListMonths,
|
56
38
|
ListStrs,
|
57
|
-
|
39
|
+
Month,
|
58
40
|
PlainDateTime,
|
59
41
|
Time,
|
60
|
-
|
42
|
+
TimeDelta,
|
61
43
|
ZonedDateTime,
|
62
44
|
)
|
63
|
-
from utilities.datetime import
|
45
|
+
from utilities.datetime import serialize_month
|
64
46
|
from utilities.hypothesis import (
|
65
|
-
|
47
|
+
date_deltas_whenever,
|
48
|
+
date_time_deltas_whenever,
|
49
|
+
dates_whenever,
|
66
50
|
months,
|
67
51
|
pairs,
|
52
|
+
plain_datetimes_whenever,
|
68
53
|
text_ascii,
|
69
|
-
|
54
|
+
time_deltas_whenever,
|
55
|
+
times_whenever,
|
56
|
+
zoned_datetimes_whenever,
|
70
57
|
)
|
71
58
|
from utilities.text import join_strs, strip_and_dedent
|
72
|
-
from utilities.whenever import (
|
73
|
-
serialize_date,
|
74
|
-
serialize_duration,
|
75
|
-
serialize_plain_datetime,
|
76
|
-
serialize_time,
|
77
|
-
serialize_timedelta,
|
78
|
-
serialize_zoned_datetime,
|
79
|
-
)
|
80
|
-
from utilities.zoneinfo import UTC
|
81
59
|
|
82
60
|
if TYPE_CHECKING:
|
83
61
|
from collections.abc import Callable, Iterable
|
@@ -205,7 +183,9 @@ class TestParameters:
|
|
205
183
|
@mark.parametrize(
|
206
184
|
("param", "exp_repr", "strategy", "serialize", "failable"),
|
207
185
|
[
|
208
|
-
param(
|
186
|
+
param(
|
187
|
+
Date(), "DATE", dates_whenever(), whenever.Date.format_common_iso, True
|
188
|
+
),
|
209
189
|
param(
|
210
190
|
Enum(_ExampleEnum),
|
211
191
|
"ENUM[_ExampleEnum]",
|
@@ -214,24 +194,17 @@ class TestParameters:
|
|
214
194
|
True,
|
215
195
|
),
|
216
196
|
param(
|
217
|
-
|
218
|
-
"
|
219
|
-
|
220
|
-
|
197
|
+
DateDelta(),
|
198
|
+
"DATE DELTA",
|
199
|
+
date_deltas_whenever(parsable=True),
|
200
|
+
whenever.DateDelta.format_common_iso,
|
221
201
|
True,
|
222
202
|
),
|
223
203
|
param(
|
224
|
-
|
225
|
-
"
|
226
|
-
|
227
|
-
|
228
|
-
True,
|
229
|
-
),
|
230
|
-
param(
|
231
|
-
FrozenSetDates(),
|
232
|
-
"FROZENSET[DATE]",
|
233
|
-
frozensets(dates()),
|
234
|
-
_lift_serializer(serialize_date, sort=True),
|
204
|
+
DateTimeDelta(),
|
205
|
+
"DATE-TIME DELTA",
|
206
|
+
date_time_deltas_whenever(parsable=True),
|
207
|
+
whenever.DateTimeDelta.format_common_iso,
|
235
208
|
True,
|
236
209
|
),
|
237
210
|
param(
|
@@ -248,27 +221,6 @@ class TestParameters:
|
|
248
221
|
_lift_serializer(attrgetter("name"), sort=True),
|
249
222
|
True,
|
250
223
|
),
|
251
|
-
param(
|
252
|
-
FrozenSetFloats(),
|
253
|
-
"FROZENSET[FLOAT]",
|
254
|
-
frozensets(floats(0, 10)),
|
255
|
-
_lift_serializer(str, sort=True),
|
256
|
-
True,
|
257
|
-
),
|
258
|
-
param(
|
259
|
-
FrozenSetInts(),
|
260
|
-
"FROZENSET[INT]",
|
261
|
-
frozensets(integers(0, 10)),
|
262
|
-
_lift_serializer(str, sort=True),
|
263
|
-
True,
|
264
|
-
),
|
265
|
-
param(
|
266
|
-
FrozenSetMonths(),
|
267
|
-
"FROZENSET[MONTH]",
|
268
|
-
frozensets(months()),
|
269
|
-
_lift_serializer(serialize_month, sort=True),
|
270
|
-
True,
|
271
|
-
),
|
272
224
|
param(
|
273
225
|
FrozenSetStrs(),
|
274
226
|
"FROZENSET[STRING]",
|
@@ -276,27 +228,6 @@ class TestParameters:
|
|
276
228
|
_lift_serializer(str, sort=True),
|
277
229
|
False,
|
278
230
|
),
|
279
|
-
param(
|
280
|
-
FrozenSetUUIDs(),
|
281
|
-
"FROZENSET[UUID]",
|
282
|
-
frozensets(uuids()),
|
283
|
-
_lift_serializer(str, sort=True),
|
284
|
-
True,
|
285
|
-
),
|
286
|
-
param(
|
287
|
-
ListBools(),
|
288
|
-
"LIST[BOOL]",
|
289
|
-
lists(booleans()),
|
290
|
-
_lift_serializer(str),
|
291
|
-
True,
|
292
|
-
),
|
293
|
-
param(
|
294
|
-
ListDates(),
|
295
|
-
"LIST[DATE]",
|
296
|
-
lists(dates()),
|
297
|
-
_lift_serializer(serialize_date),
|
298
|
-
True,
|
299
|
-
),
|
300
231
|
param(
|
301
232
|
ListEnums(_ExampleEnum),
|
302
233
|
"LIST[ENUM[_ExampleEnum]]",
|
@@ -304,58 +235,29 @@ class TestParameters:
|
|
304
235
|
_lift_serializer(attrgetter("name")),
|
305
236
|
True,
|
306
237
|
),
|
238
|
+
param(Month(), "MONTH", months(), serialize_month, True),
|
307
239
|
param(
|
308
|
-
|
309
|
-
"
|
310
|
-
|
311
|
-
|
312
|
-
True,
|
313
|
-
),
|
314
|
-
param(
|
315
|
-
ListInts(),
|
316
|
-
"LIST[INT]",
|
317
|
-
lists(integers(0, 10)),
|
318
|
-
_lift_serializer(str),
|
319
|
-
True,
|
320
|
-
),
|
321
|
-
param(
|
322
|
-
ListMonths(),
|
323
|
-
"LIST[MONTH]",
|
324
|
-
lists(months()),
|
325
|
-
_lift_serializer(serialize_month),
|
240
|
+
PlainDateTime(),
|
241
|
+
"PLAIN DATE-TIME",
|
242
|
+
plain_datetimes_whenever(),
|
243
|
+
whenever.PlainDateTime.format_common_iso,
|
326
244
|
True,
|
327
245
|
),
|
328
246
|
param(
|
329
|
-
|
330
|
-
"LIST[STRING]",
|
331
|
-
lists(text_ascii()),
|
332
|
-
_lift_serializer(str),
|
333
|
-
False,
|
334
|
-
),
|
335
|
-
param(
|
336
|
-
ListUUIDs(), "LIST[UUID]", lists(uuids()), _lift_serializer(str), True
|
337
|
-
),
|
338
|
-
param(utilities.click.Month(), "MONTH", months(), serialize_month, True),
|
339
|
-
param(
|
340
|
-
PlainDateTime(),
|
341
|
-
"PLAIN DATETIME",
|
342
|
-
datetimes(),
|
343
|
-
serialize_plain_datetime,
|
344
|
-
True,
|
247
|
+
Time(), "TIME", times_whenever(), whenever.Time.format_common_iso, True
|
345
248
|
),
|
346
|
-
param(Time(), "TIME", times(), serialize_time, True),
|
347
249
|
param(
|
348
|
-
|
349
|
-
"
|
350
|
-
|
351
|
-
|
250
|
+
TimeDelta(),
|
251
|
+
"TIME-DELTA",
|
252
|
+
time_deltas_whenever(),
|
253
|
+
whenever.TimeDelta.format_common_iso,
|
352
254
|
True,
|
353
255
|
),
|
354
256
|
param(
|
355
257
|
ZonedDateTime(),
|
356
|
-
"ZONED
|
357
|
-
|
358
|
-
|
258
|
+
"ZONED DATE-TIME",
|
259
|
+
zoned_datetimes_whenever(),
|
260
|
+
whenever.ZonedDateTime.format_common_iso,
|
359
261
|
True,
|
360
262
|
),
|
361
263
|
],
|
@@ -28,7 +28,15 @@ from luigi import Task
|
|
28
28
|
from numpy import inf, int64, isfinite, isinf, isnan, ravel, rint
|
29
29
|
from pathvalidate import validate_filepath
|
30
30
|
from pytest import mark, raises
|
31
|
-
from whenever import
|
31
|
+
from whenever import (
|
32
|
+
Date,
|
33
|
+
DateDelta,
|
34
|
+
DateTimeDelta,
|
35
|
+
PlainDateTime,
|
36
|
+
Time,
|
37
|
+
TimeDelta,
|
38
|
+
ZonedDateTime,
|
39
|
+
)
|
32
40
|
|
33
41
|
from tests.conftest import SKIPIF_CI_AND_WINDOWS
|
34
42
|
from utilities.datetime import (
|
@@ -52,6 +60,7 @@ from utilities.hypothesis import (
|
|
52
60
|
bool_arrays,
|
53
61
|
date_deltas_whenever,
|
54
62
|
date_durations,
|
63
|
+
date_time_deltas_whenever,
|
55
64
|
dates_two_digit_year,
|
56
65
|
dates_whenever,
|
57
66
|
datetime_durations,
|
@@ -127,6 +136,7 @@ from utilities.whenever import (
|
|
127
136
|
serialize_duration,
|
128
137
|
serialize_timedelta,
|
129
138
|
)
|
139
|
+
from utilities.whenever2 import to_days, to_nanos
|
130
140
|
|
131
141
|
if TYPE_CHECKING:
|
132
142
|
from collections.abc import Iterable
|
@@ -193,19 +203,11 @@ class TestDateDeltasWhenever:
|
|
193
203
|
)
|
194
204
|
)
|
195
205
|
assert isinstance(delta, DateDelta)
|
196
|
-
|
197
|
-
assert years == 0
|
198
|
-
assert months == 0
|
206
|
+
days = to_days(delta)
|
199
207
|
if min_value is not None:
|
200
|
-
|
201
|
-
assert min_years == 0
|
202
|
-
assert min_months == 0
|
203
|
-
assert days >= min_days
|
208
|
+
assert days >= to_days(min_value)
|
204
209
|
if max_value is not None:
|
205
|
-
|
206
|
-
assert max_years == 0
|
207
|
-
assert max_months == 0
|
208
|
-
assert days <= max_days
|
210
|
+
assert days <= to_days(max_value)
|
209
211
|
if parsable:
|
210
212
|
assert DateDelta.parse_common_iso(delta.format_common_iso()) == delta
|
211
213
|
|
@@ -274,6 +276,27 @@ class TestDateDurations:
|
|
274
276
|
_ = parse_duration(ser)
|
275
277
|
|
276
278
|
|
279
|
+
class TestDateTimeDeltasWhenever:
|
280
|
+
@given(data=data(), parsable=booleans())
|
281
|
+
def test_main(self, *, data: DataObject, parsable: bool) -> None:
|
282
|
+
min_value = data.draw(date_time_deltas_whenever() | none())
|
283
|
+
max_value = data.draw(date_time_deltas_whenever() | none())
|
284
|
+
with assume_does_not_raise(InvalidArgument):
|
285
|
+
delta = data.draw(
|
286
|
+
date_time_deltas_whenever(
|
287
|
+
min_value=min_value, max_value=max_value, parsable=parsable
|
288
|
+
)
|
289
|
+
)
|
290
|
+
assert isinstance(delta, DateTimeDelta)
|
291
|
+
nanos = to_nanos(delta)
|
292
|
+
if min_value is not None:
|
293
|
+
assert nanos >= to_nanos(min_value)
|
294
|
+
if max_value is not None:
|
295
|
+
assert nanos <= to_nanos(max_value)
|
296
|
+
if parsable:
|
297
|
+
assert DateTimeDelta.parse_common_iso(delta.format_common_iso()) == delta
|
298
|
+
|
299
|
+
|
277
300
|
class TestDatesTwoDigitYear:
|
278
301
|
@given(data=data())
|
279
302
|
def test_main(self, *, data: DataObject) -> None:
|
@@ -8,10 +8,19 @@ from hypothesis import given
|
|
8
8
|
from hypothesis.strategies import DataObject, SearchStrategy, data, tuples
|
9
9
|
from pytest import mark, param
|
10
10
|
from typed_settings import FileLoader, TomlFormat, load_settings
|
11
|
-
from whenever import
|
11
|
+
from whenever import (
|
12
|
+
Date,
|
13
|
+
DateDelta,
|
14
|
+
DateTimeDelta,
|
15
|
+
PlainDateTime,
|
16
|
+
Time,
|
17
|
+
TimeDelta,
|
18
|
+
ZonedDateTime,
|
19
|
+
)
|
12
20
|
|
13
21
|
from utilities.hypothesis import (
|
14
22
|
date_deltas_whenever,
|
23
|
+
date_time_deltas_whenever,
|
15
24
|
dates_whenever,
|
16
25
|
plain_datetimes_whenever,
|
17
26
|
temp_paths,
|
@@ -39,6 +48,11 @@ class TestExtendedTSConverter:
|
|
39
48
|
date_deltas_whenever(parsable=True),
|
40
49
|
DateDelta.format_common_iso,
|
41
50
|
),
|
51
|
+
param(
|
52
|
+
DateTimeDelta,
|
53
|
+
date_time_deltas_whenever(parsable=True),
|
54
|
+
DateTimeDelta.format_common_iso,
|
55
|
+
),
|
42
56
|
param(
|
43
57
|
PlainDateTime,
|
44
58
|
plain_datetimes_whenever(),
|
@@ -8,8 +8,6 @@ from zoneinfo import ZoneInfo
|
|
8
8
|
|
9
9
|
from hypothesis import assume, example, given
|
10
10
|
from hypothesis.strategies import (
|
11
|
-
DataObject,
|
12
|
-
data,
|
13
11
|
dates,
|
14
12
|
datetimes,
|
15
13
|
integers,
|
@@ -37,19 +35,12 @@ from utilities.hypothesis import (
|
|
37
35
|
assume_does_not_raise,
|
38
36
|
datetime_durations,
|
39
37
|
plain_datetimes,
|
40
|
-
timedeltas_2w,
|
41
38
|
zoned_datetimes,
|
42
39
|
)
|
43
40
|
from utilities.tzdata import HongKong
|
44
41
|
from utilities.whenever import (
|
45
42
|
MAX_SERIALIZABLE_TIMEDELTA,
|
46
43
|
MIN_SERIALIZABLE_TIMEDELTA,
|
47
|
-
EnsureDateError,
|
48
|
-
EnsureDateTimeError,
|
49
|
-
EnsureDurationError,
|
50
|
-
EnsurePlainDateTimeError,
|
51
|
-
EnsureTimeError,
|
52
|
-
EnsureZonedDateTimeError,
|
53
44
|
ParseDateError,
|
54
45
|
ParseDateTimeError,
|
55
46
|
ParseDurationError,
|
@@ -61,20 +52,11 @@ from utilities.whenever import (
|
|
61
52
|
SerializeTimeDeltaError,
|
62
53
|
SerializeZonedDateTimeError,
|
63
54
|
_CheckValidZonedDateTimeUnequalError,
|
64
|
-
_EnsureTimedeltaNanosecondError,
|
65
|
-
_EnsureTimedeltaParseError,
|
66
55
|
_ParseTimedeltaNanosecondError,
|
67
56
|
_ParseTimedeltaParseError,
|
68
57
|
_to_datetime_delta,
|
69
58
|
_ToDateTimeDeltaError,
|
70
59
|
check_valid_zoned_datetime,
|
71
|
-
ensure_date,
|
72
|
-
ensure_datetime,
|
73
|
-
ensure_duration,
|
74
|
-
ensure_plain_datetime,
|
75
|
-
ensure_time,
|
76
|
-
ensure_timedelta,
|
77
|
-
ensure_zoned_datetime,
|
78
60
|
parse_date,
|
79
61
|
parse_datetime,
|
80
62
|
parse_duration,
|
@@ -147,16 +129,6 @@ class TestSerializeAndParseDate:
|
|
147
129
|
with raises(ParseDateError, match="Unable to parse date; got 'invalid'"):
|
148
130
|
_ = parse_date("invalid")
|
149
131
|
|
150
|
-
@given(data=data(), date=dates())
|
151
|
-
def test_ensure(self, *, data: DataObject, date: dt.date) -> None:
|
152
|
-
str_or_value = data.draw(sampled_from([date, serialize_date(date)]))
|
153
|
-
result = ensure_date(str_or_value)
|
154
|
-
assert result == date
|
155
|
-
|
156
|
-
def test_error_ensure(self) -> None:
|
157
|
-
with raises(EnsureDateError, match="Unable to ensure date; got 'invalid'"):
|
158
|
-
_ = ensure_date("invalid")
|
159
|
-
|
160
132
|
|
161
133
|
class TestSerializeAndParseDateTime:
|
162
134
|
@given(
|
@@ -175,23 +147,6 @@ class TestSerializeAndParseDateTime:
|
|
175
147
|
):
|
176
148
|
_ = parse_datetime("invalid")
|
177
149
|
|
178
|
-
@given(
|
179
|
-
data=data(),
|
180
|
-
datetime=plain_datetimes()
|
181
|
-
| zoned_datetimes(time_zone=timezones() | just(dt.UTC), valid=True),
|
182
|
-
)
|
183
|
-
@SKIPIF_CI_AND_WINDOWS
|
184
|
-
def test_ensure(self, *, data: DataObject, datetime: dt.datetime) -> None:
|
185
|
-
str_or_value = data.draw(sampled_from([datetime, serialize_datetime(datetime)]))
|
186
|
-
result = ensure_datetime(str_or_value)
|
187
|
-
assert result == datetime
|
188
|
-
|
189
|
-
def test_error_ensure(self) -> None:
|
190
|
-
with raises(
|
191
|
-
EnsureDateTimeError, match="Unable to ensure datetime; got 'invalid'"
|
192
|
-
):
|
193
|
-
_ = ensure_datetime("invalid")
|
194
|
-
|
195
150
|
|
196
151
|
class TestSerializeAndParseDuration:
|
197
152
|
@given(duration=datetime_durations())
|
@@ -215,18 +170,6 @@ class TestSerializeAndParseDuration:
|
|
215
170
|
):
|
216
171
|
_ = serialize_duration(duration)
|
217
172
|
|
218
|
-
@given(data=data(), duration=datetime_durations(two_way=True))
|
219
|
-
def test_ensure(self, *, data: DataObject, duration: Duration) -> None:
|
220
|
-
str_or_value = data.draw(sampled_from([duration, serialize_duration(duration)]))
|
221
|
-
result = ensure_duration(str_or_value)
|
222
|
-
assert result == duration
|
223
|
-
|
224
|
-
def test_error_ensure(self) -> None:
|
225
|
-
with raises(
|
226
|
-
EnsureDurationError, match="Unable to ensure duration; got 'invalid'"
|
227
|
-
):
|
228
|
-
_ = ensure_duration("invalid")
|
229
|
-
|
230
173
|
|
231
174
|
class TestSerializeAndParsePlainDateTime:
|
232
175
|
@given(datetime=datetimes())
|
@@ -264,21 +207,6 @@ class TestSerializeAndParsePlainDateTime:
|
|
264
207
|
):
|
265
208
|
_ = serialize_plain_datetime(datetime)
|
266
209
|
|
267
|
-
@given(data=data(), datetime=datetimes())
|
268
|
-
def test_ensure(self, *, data: DataObject, datetime: dt.datetime) -> None:
|
269
|
-
str_or_value = data.draw(
|
270
|
-
sampled_from([datetime, serialize_plain_datetime(datetime)])
|
271
|
-
)
|
272
|
-
result = ensure_plain_datetime(str_or_value)
|
273
|
-
assert result == datetime
|
274
|
-
|
275
|
-
def test_error_ensure(self) -> None:
|
276
|
-
with raises(
|
277
|
-
EnsurePlainDateTimeError,
|
278
|
-
match="Unable to ensure plain datetime; got 'invalid'",
|
279
|
-
):
|
280
|
-
_ = ensure_plain_datetime("invalid")
|
281
|
-
|
282
210
|
|
283
211
|
class TestSerializeAndParseTime:
|
284
212
|
@given(time=times())
|
@@ -291,16 +219,6 @@ class TestSerializeAndParseTime:
|
|
291
219
|
with raises(ParseTimeError, match="Unable to parse time; got 'invalid'"):
|
292
220
|
_ = parse_time("invalid")
|
293
221
|
|
294
|
-
@given(data=data(), time=times())
|
295
|
-
def test_ensure(self, *, data: DataObject, time: dt.time) -> None:
|
296
|
-
str_or_value = data.draw(sampled_from([time, serialize_time(time)]))
|
297
|
-
result = ensure_time(str_or_value)
|
298
|
-
assert result == time
|
299
|
-
|
300
|
-
def test_error_ensure(self) -> None:
|
301
|
-
with raises(EnsureTimeError, match="Unable to ensure time; got 'invalid'"):
|
302
|
-
_ = ensure_time("invalid")
|
303
|
-
|
304
222
|
|
305
223
|
class TestSerializeAndParseTimedelta:
|
306
224
|
@given(
|
@@ -353,28 +271,6 @@ class TestSerializeAndParseTimedelta:
|
|
353
271
|
):
|
354
272
|
_ = serialize_timedelta(timedelta)
|
355
273
|
|
356
|
-
@given(data=data(), timedelta=timedeltas_2w())
|
357
|
-
def test_ensure(self, *, data: DataObject, timedelta: dt.timedelta) -> None:
|
358
|
-
str_or_value = data.draw(
|
359
|
-
sampled_from([timedelta, serialize_timedelta(timedelta)])
|
360
|
-
)
|
361
|
-
result = ensure_timedelta(str_or_value)
|
362
|
-
assert result == timedelta
|
363
|
-
|
364
|
-
def test_error_ensure(self) -> None:
|
365
|
-
with raises(
|
366
|
-
_EnsureTimedeltaParseError,
|
367
|
-
match="Unable to ensure timedelta; got 'invalid'",
|
368
|
-
):
|
369
|
-
_ = ensure_timedelta("invalid")
|
370
|
-
|
371
|
-
def test_error_ensure_nano_seconds(self) -> None:
|
372
|
-
with raises(
|
373
|
-
_EnsureTimedeltaNanosecondError,
|
374
|
-
match="Unable to ensure timedelta; got 333 nanoseconds",
|
375
|
-
):
|
376
|
-
_ = ensure_timedelta("PT0.111222333S")
|
377
|
-
|
378
274
|
|
379
275
|
class TestSerializeAndParseZonedDateTime:
|
380
276
|
@given(datetime=zoned_datetimes(valid=True))
|
@@ -436,25 +332,6 @@ class TestSerializeAndParseZonedDateTime:
|
|
436
332
|
):
|
437
333
|
_ = serialize_zoned_datetime(datetime)
|
438
334
|
|
439
|
-
@given(
|
440
|
-
data=data(),
|
441
|
-
datetime=zoned_datetimes(time_zone=timezones() | just(dt.UTC), valid=True),
|
442
|
-
)
|
443
|
-
@SKIPIF_CI_AND_WINDOWS
|
444
|
-
def test_ensure(self, *, data: DataObject, datetime: dt.datetime) -> None:
|
445
|
-
str_or_value = data.draw(
|
446
|
-
sampled_from([datetime, serialize_zoned_datetime(datetime)])
|
447
|
-
)
|
448
|
-
result = ensure_zoned_datetime(str_or_value)
|
449
|
-
assert result == datetime
|
450
|
-
|
451
|
-
def test_error_ensure(self) -> None:
|
452
|
-
with raises(
|
453
|
-
EnsureZonedDateTimeError,
|
454
|
-
match="Unable to ensure zoned datetime; got 'invalid'",
|
455
|
-
):
|
456
|
-
_ = ensure_zoned_datetime("invalid")
|
457
|
-
|
458
335
|
|
459
336
|
class TestToDateTimeDelta:
|
460
337
|
@given(days=integers(), microseconds=integers())
|