dycw-utilities 0.131.19__tar.gz → 0.132.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.131.19 → dycw_utilities-0.132.0}/PKG-INFO +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/pyproject.toml +3 -3
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/conftest.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_aiolimiter.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_altair.py +4 -4
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_asyncio.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_asyncio_classes/loopers.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_atools.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_cachetools.py +3 -5
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_click.py +30 -27
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_fastapi.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_functions.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_http.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_hypothesis.py +65 -79
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_logging.py +6 -11
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_luigi.py +2 -2
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_objects/objects.py +13 -15
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_operator.py +13 -15
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_orjson.py +9 -9
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_parse.py +10 -10
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_period.py +29 -44
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_platform.py +12 -2
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_polars.py +4 -4
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pottery.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_psutil.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_redis.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_slack_sdk.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_sqlalchemy.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_sqlalchemy_polars.py +2 -2
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_timer.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_typed_settings.py +14 -26
- dycw_utilities-0.131.19/src/tests/test_whenever2.py → dycw_utilities-0.132.0/src/tests/test_whenever.py +143 -31
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_zoneinfo.py +2 -2
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/asyncio.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/click.py +6 -6
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/fastapi.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/fpdf2.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/hypothesis.py +49 -53
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/logging.py +1 -6
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/orjson.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/platform.py +18 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pottery.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/psutil.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pyinstrument.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pytest.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/redis.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/slack_sdk.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/sqlalchemy.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/timer.py +1 -1
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/traceback.py +1 -1
- dycw_utilities-0.131.19/src/utilities/whenever2.py → dycw_utilities-0.132.0/src/utilities/whenever.py +152 -14
- dycw_utilities-0.131.19/src/tests/test_datetime.py +0 -161
- dycw_utilities-0.131.19/src/utilities/datetime.py +0 -222
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/.gitignore +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/LICENSE +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/README.md +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/aiolimiter.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/git.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/http.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/math.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/os.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/period.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/random.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/re.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/string.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/text.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/types.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/version.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/utilities/zoneinfo.py +0 -0
@@ -14,7 +14,7 @@ dev = [
|
|
14
14
|
"altair >= 5.5.0, < 5.6",
|
15
15
|
"asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
|
16
16
|
"atools >= 0.14.2, < 0.15",
|
17
|
-
"cachetools >= 5.5.2, < 5.6",
|
17
|
+
"cachetools >= 5.5.2, < 5.6", # blocked by streamlit
|
18
18
|
"click >= 8.2.1, < 8.3",
|
19
19
|
"coloredlogs >= 15.0.1, < 15.1",
|
20
20
|
"cryptography >= 45.0.4, < 45.1",
|
@@ -94,7 +94,7 @@ dependencies = [
|
|
94
94
|
name = "dycw-utilities"
|
95
95
|
readme = "README.md"
|
96
96
|
requires-python = ">= 3.12"
|
97
|
-
version = "0.
|
97
|
+
version = "0.132.0"
|
98
98
|
|
99
99
|
[project.optional-dependencies]
|
100
100
|
logging = [
|
@@ -121,7 +121,7 @@ test = [
|
|
121
121
|
# bump-my-version
|
122
122
|
[tool.bumpversion]
|
123
123
|
allow_dirty = true
|
124
|
-
current_version = "0.
|
124
|
+
current_version = "0.132.0"
|
125
125
|
|
126
126
|
[[tool.bumpversion.files]]
|
127
127
|
filename = "src/utilities/__init__.py"
|
@@ -14,7 +14,7 @@ from whenever import PlainDateTime
|
|
14
14
|
from utilities.platform import IS_NOT_LINUX, IS_WINDOWS
|
15
15
|
from utilities.re import ExtractGroupError, extract_group
|
16
16
|
from utilities.tzlocal import LOCAL_TIME_ZONE_NAME
|
17
|
-
from utilities.
|
17
|
+
from utilities.whenever import MINUTE, get_now
|
18
18
|
|
19
19
|
if TYPE_CHECKING:
|
20
20
|
from collections.abc import Iterator, Sequence
|
@@ -6,7 +6,7 @@ from typing import ClassVar
|
|
6
6
|
from utilities.aiolimiter import get_async_limiter
|
7
7
|
from utilities.text import unique_str
|
8
8
|
from utilities.timer import Timer
|
9
|
-
from utilities.
|
9
|
+
from utilities.whenever import SECOND
|
10
10
|
|
11
11
|
|
12
12
|
class TestGetAsyncLimiter:
|
@@ -27,10 +27,10 @@ from utilities.altair import (
|
|
27
27
|
vconcat_charts,
|
28
28
|
)
|
29
29
|
from utilities.functions import ensure_class
|
30
|
-
from utilities.hypothesis import
|
30
|
+
from utilities.hypothesis import dates, text_ascii, zoned_datetimes
|
31
31
|
from utilities.polars import DatetimeUTC, zoned_datetime
|
32
32
|
from utilities.tzdata import HongKong, Tokyo
|
33
|
-
from utilities.
|
33
|
+
from utilities.whenever import get_now
|
34
34
|
from utilities.zoneinfo import UTC
|
35
35
|
|
36
36
|
if TYPE_CHECKING:
|
@@ -105,7 +105,7 @@ class TestPlotDataFrames:
|
|
105
105
|
expected = dt.datetime(2000, 1, 1, 12, tzinfo=time_zone).replace(tzinfo=None)
|
106
106
|
assert datetime == expected
|
107
107
|
|
108
|
-
@given(data=lists(tuples(
|
108
|
+
@given(data=lists(tuples(dates(), floats(-10, 10))))
|
109
109
|
def test_tooltip_format_date(
|
110
110
|
self, *, data: list[tuple[whenever.Date, float]]
|
111
111
|
) -> None:
|
@@ -116,7 +116,7 @@ class TestPlotDataFrames:
|
|
116
116
|
)
|
117
117
|
_ = plot_dataframes(df, x="index", y="value")
|
118
118
|
|
119
|
-
@given(data=lists(tuples(
|
119
|
+
@given(data=lists(tuples(zoned_datetimes(), floats(-10, 10))))
|
120
120
|
def test_tooltip_format_date_time(
|
121
121
|
self, *, data: list[tuple[ZonedDateTime, float]]
|
122
122
|
) -> None:
|
@@ -63,7 +63,7 @@ from utilities.iterables import one, unique_everseen
|
|
63
63
|
from utilities.pytest import skipif_windows
|
64
64
|
from utilities.sentinel import Sentinel, sentinel
|
65
65
|
from utilities.timer import Timer
|
66
|
-
from utilities.
|
66
|
+
from utilities.whenever import SECOND, get_now
|
67
67
|
|
68
68
|
if TYPE_CHECKING:
|
69
69
|
from collections.abc import AsyncIterator
|
{dycw_utilities-0.131.19 → dycw_utilities-0.132.0}/src/tests/test_asyncio_classes/loopers.py
RENAMED
@@ -8,7 +8,7 @@ from pytest import approx
|
|
8
8
|
from tests.conftest import IS_CI
|
9
9
|
from utilities.asyncio import Looper
|
10
10
|
from utilities.contextlib import suppress_super_object_attribute_error
|
11
|
-
from utilities.
|
11
|
+
from utilities.whenever import SECOND
|
12
12
|
|
13
13
|
if TYPE_CHECKING:
|
14
14
|
from collections.abc import Iterator
|
@@ -7,8 +7,8 @@ from hypothesis.strategies import integers, none
|
|
7
7
|
|
8
8
|
from utilities.asyncio import sleep_td
|
9
9
|
from utilities.cachetools import TTLSet, cache
|
10
|
-
from utilities.hypothesis import
|
11
|
-
from utilities.
|
10
|
+
from utilities.hypothesis import time_deltas
|
11
|
+
from utilities.whenever import SECOND
|
12
12
|
|
13
13
|
if TYPE_CHECKING:
|
14
14
|
from whenever import TimeDelta
|
@@ -21,9 +21,7 @@ class TestCache:
|
|
21
21
|
@example(max_size=1, max_duration=SECOND)
|
22
22
|
@given(
|
23
23
|
max_size=integers(1, 10) | none(),
|
24
|
-
max_duration=
|
25
|
-
min_value=0.1 * SECOND, max_value=10.0 * SECOND
|
26
|
-
)
|
24
|
+
max_duration=time_deltas(min_value=0.1 * SECOND, max_value=10.0 * SECOND)
|
27
25
|
| none(),
|
28
26
|
)
|
29
27
|
def test_main(self, *, max_size: int, max_duration: TimeDelta) -> None:
|
@@ -21,6 +21,8 @@ from hypothesis.strategies import (
|
|
21
21
|
)
|
22
22
|
from pytest import mark, param
|
23
23
|
|
24
|
+
import utilities
|
25
|
+
import utilities.whenever
|
24
26
|
from utilities.click import (
|
25
27
|
CONTEXT_SETTINGS_HELP_OPTION_NAMES,
|
26
28
|
Date,
|
@@ -42,18 +44,17 @@ from utilities.click import (
|
|
42
44
|
TimeDelta,
|
43
45
|
ZonedDateTime,
|
44
46
|
)
|
45
|
-
from utilities.datetime import serialize_month
|
46
47
|
from utilities.hypothesis import (
|
47
|
-
|
48
|
-
|
49
|
-
|
48
|
+
date_deltas,
|
49
|
+
date_time_deltas,
|
50
|
+
dates,
|
50
51
|
months,
|
51
52
|
pairs,
|
52
|
-
|
53
|
+
plain_datetimes,
|
53
54
|
text_ascii,
|
54
|
-
|
55
|
-
|
56
|
-
|
55
|
+
time_deltas,
|
56
|
+
times,
|
57
|
+
zoned_datetimes,
|
57
58
|
)
|
58
59
|
from utilities.text import join_strs, strip_and_dedent
|
59
60
|
|
@@ -183,30 +184,28 @@ class TestParameters:
|
|
183
184
|
@mark.parametrize(
|
184
185
|
("param", "exp_repr", "strategy", "serialize", "failable"),
|
185
186
|
[
|
186
|
-
param(
|
187
|
-
Date(), "DATE", dates_whenever(), whenever.Date.format_common_iso, True
|
188
|
-
),
|
189
|
-
param(
|
190
|
-
Enum(_ExampleEnum),
|
191
|
-
"ENUM[_ExampleEnum]",
|
192
|
-
sampled_from(_ExampleEnum),
|
193
|
-
attrgetter("name"),
|
194
|
-
True,
|
195
|
-
),
|
187
|
+
param(Date(), "DATE", dates(), whenever.Date.format_common_iso, True),
|
196
188
|
param(
|
197
189
|
DateDelta(),
|
198
190
|
"DATE DELTA",
|
199
|
-
|
191
|
+
date_deltas(parsable=True),
|
200
192
|
whenever.DateDelta.format_common_iso,
|
201
193
|
True,
|
202
194
|
),
|
203
195
|
param(
|
204
196
|
DateTimeDelta(),
|
205
197
|
"DATE-TIME DELTA",
|
206
|
-
|
198
|
+
date_time_deltas(parsable=True),
|
207
199
|
whenever.DateTimeDelta.format_common_iso,
|
208
200
|
True,
|
209
201
|
),
|
202
|
+
param(
|
203
|
+
Enum(_ExampleEnum),
|
204
|
+
"ENUM[_ExampleEnum]",
|
205
|
+
sampled_from(_ExampleEnum),
|
206
|
+
attrgetter("name"),
|
207
|
+
True,
|
208
|
+
),
|
210
209
|
param(
|
211
210
|
FrozenSetChoices(["a", "b", "c"]),
|
212
211
|
"FROZENSET[Choice(['a', 'b', 'c'])]",
|
@@ -235,28 +234,32 @@ class TestParameters:
|
|
235
234
|
_lift_serializer(attrgetter("name")),
|
236
235
|
True,
|
237
236
|
),
|
238
|
-
param(
|
237
|
+
param(
|
238
|
+
Month(),
|
239
|
+
"MONTH",
|
240
|
+
months(),
|
241
|
+
utilities.whenever.Month.format_common_iso,
|
242
|
+
True,
|
243
|
+
),
|
239
244
|
param(
|
240
245
|
PlainDateTime(),
|
241
246
|
"PLAIN DATE-TIME",
|
242
|
-
|
247
|
+
plain_datetimes(),
|
243
248
|
whenever.PlainDateTime.format_common_iso,
|
244
249
|
True,
|
245
250
|
),
|
246
|
-
param(
|
247
|
-
Time(), "TIME", times_whenever(), whenever.Time.format_common_iso, True
|
248
|
-
),
|
251
|
+
param(Time(), "TIME", times(), whenever.Time.format_common_iso, True),
|
249
252
|
param(
|
250
253
|
TimeDelta(),
|
251
254
|
"TIME-DELTA",
|
252
|
-
|
255
|
+
time_deltas(),
|
253
256
|
whenever.TimeDelta.format_common_iso,
|
254
257
|
True,
|
255
258
|
),
|
256
259
|
param(
|
257
260
|
ZonedDateTime(),
|
258
261
|
"ZONED DATE-TIME",
|
259
|
-
|
262
|
+
zoned_datetimes(),
|
260
263
|
whenever.ZonedDateTime.format_common_iso,
|
261
264
|
True,
|
262
265
|
),
|
@@ -95,7 +95,7 @@ from utilities.functions import (
|
|
95
95
|
yield_object_properties,
|
96
96
|
)
|
97
97
|
from utilities.sentinel import sentinel
|
98
|
-
from utilities.
|
98
|
+
from utilities.whenever import NOW_UTC, ZERO_TIME, get_now, get_today
|
99
99
|
|
100
100
|
if TYPE_CHECKING:
|
101
101
|
import datetime as dt
|
@@ -5,7 +5,7 @@ from pathlib import Path
|
|
5
5
|
from re import search
|
6
6
|
from typing import TYPE_CHECKING, Any, cast
|
7
7
|
|
8
|
-
from hypothesis import
|
8
|
+
from hypothesis import Phase, assume, given, settings
|
9
9
|
from hypothesis.errors import InvalidArgument
|
10
10
|
from hypothesis.extra.numpy import array_shapes
|
11
11
|
from hypothesis.strategies import (
|
@@ -36,11 +36,6 @@ from whenever import (
|
|
36
36
|
ZonedDateTime,
|
37
37
|
)
|
38
38
|
|
39
|
-
from utilities.datetime import (
|
40
|
-
MAX_DATE_TWO_DIGIT_YEAR,
|
41
|
-
MIN_DATE_TWO_DIGIT_YEAR,
|
42
|
-
parse_two_digit_year,
|
43
|
-
)
|
44
39
|
from utilities.functions import ensure_int
|
45
40
|
from utilities.hypothesis import (
|
46
41
|
Shape,
|
@@ -48,10 +43,9 @@ from utilities.hypothesis import (
|
|
48
43
|
_Draw2InputResolvedToSentinelError,
|
49
44
|
assume_does_not_raise,
|
50
45
|
bool_arrays,
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
dates_whenever,
|
46
|
+
date_deltas,
|
47
|
+
date_time_deltas,
|
48
|
+
dates,
|
55
49
|
draw2,
|
56
50
|
float32s,
|
57
51
|
float64s,
|
@@ -68,7 +62,7 @@ from utilities.hypothesis import (
|
|
68
62
|
numbers,
|
69
63
|
pairs,
|
70
64
|
paths,
|
71
|
-
|
65
|
+
plain_datetimes,
|
72
66
|
random_states,
|
73
67
|
sentinels,
|
74
68
|
sets_fixed_length,
|
@@ -84,13 +78,13 @@ from utilities.hypothesis import (
|
|
84
78
|
text_clean,
|
85
79
|
text_digits,
|
86
80
|
text_printable,
|
87
|
-
|
88
|
-
|
81
|
+
time_deltas,
|
82
|
+
times,
|
89
83
|
triples,
|
90
84
|
uint32s,
|
91
85
|
uint64s,
|
92
86
|
versions,
|
93
|
-
|
87
|
+
zoned_datetimes,
|
94
88
|
)
|
95
89
|
from utilities.math import (
|
96
90
|
MAX_FLOAT32,
|
@@ -110,14 +104,19 @@ from utilities.os import temp_environ
|
|
110
104
|
from utilities.platform import maybe_yield_lower_case
|
111
105
|
from utilities.sentinel import Sentinel
|
112
106
|
from utilities.version import Version
|
113
|
-
from utilities.
|
107
|
+
from utilities.whenever import (
|
108
|
+
DATE_TWO_DIGIT_YEAR_MAX,
|
109
|
+
DATE_TWO_DIGIT_YEAR_MIN,
|
110
|
+
Month,
|
111
|
+
to_days,
|
112
|
+
to_nanos,
|
113
|
+
)
|
114
114
|
|
115
115
|
if TYPE_CHECKING:
|
116
116
|
from collections.abc import Iterable
|
117
117
|
from collections.abc import Set as AbstractSet
|
118
118
|
from zoneinfo import ZoneInfo
|
119
119
|
|
120
|
-
from utilities.datetime import Month
|
121
120
|
from utilities.tempfile import TemporaryDirectory
|
122
121
|
from utilities.types import Number
|
123
122
|
|
@@ -165,16 +164,14 @@ class TestBoolArrays:
|
|
165
164
|
assert array.shape == shape
|
166
165
|
|
167
166
|
|
168
|
-
class
|
167
|
+
class TestDateDeltas:
|
169
168
|
@given(data=data(), parsable=booleans())
|
170
169
|
def test_main(self, *, data: DataObject, parsable: bool) -> None:
|
171
|
-
min_value = data.draw(
|
172
|
-
max_value = data.draw(
|
170
|
+
min_value = data.draw(date_deltas() | none())
|
171
|
+
max_value = data.draw(date_deltas() | none())
|
173
172
|
with assume_does_not_raise(InvalidArgument):
|
174
173
|
delta = data.draw(
|
175
|
-
|
176
|
-
min_value=min_value, max_value=max_value, parsable=parsable
|
177
|
-
)
|
174
|
+
date_deltas(min_value=min_value, max_value=max_value, parsable=parsable)
|
178
175
|
)
|
179
176
|
assert isinstance(delta, DateDelta)
|
180
177
|
days = to_days(delta)
|
@@ -186,14 +183,14 @@ class TestDateDeltasWhenever:
|
|
186
183
|
assert DateDelta.parse_common_iso(delta.format_common_iso()) == delta
|
187
184
|
|
188
185
|
|
189
|
-
class
|
186
|
+
class TestDateTimeDeltas:
|
190
187
|
@given(data=data(), parsable=booleans())
|
191
188
|
def test_main(self, *, data: DataObject, parsable: bool) -> None:
|
192
|
-
min_value = data.draw(
|
193
|
-
max_value = data.draw(
|
189
|
+
min_value = data.draw(date_time_deltas() | none())
|
190
|
+
max_value = data.draw(date_time_deltas() | none())
|
194
191
|
with assume_does_not_raise(InvalidArgument):
|
195
192
|
delta = data.draw(
|
196
|
-
|
193
|
+
date_time_deltas(
|
197
194
|
min_value=min_value, max_value=max_value, parsable=parsable
|
198
195
|
)
|
199
196
|
)
|
@@ -207,34 +204,23 @@ class TestDateTimeDeltasWhenever:
|
|
207
204
|
assert DateTimeDelta.parse_common_iso(delta.format_common_iso()) == delta
|
208
205
|
|
209
206
|
|
210
|
-
class
|
211
|
-
@given(data=data())
|
212
|
-
def test_main(self, *, data: DataObject) -> None:
|
213
|
-
min_value
|
214
|
-
|
215
|
-
assert (
|
216
|
-
max(min_value, MIN_DATE_TWO_DIGIT_YEAR)
|
217
|
-
<= date
|
218
|
-
<= min(max_value, MAX_DATE_TWO_DIGIT_YEAR)
|
219
|
-
)
|
220
|
-
year = f"{date:%y}"
|
221
|
-
parsed = parse_two_digit_year(year)
|
222
|
-
assert date.year == parsed
|
223
|
-
|
224
|
-
|
225
|
-
class TestDatesWhenever:
|
226
|
-
@given(data=data())
|
227
|
-
def test_main(self, *, data: DataObject) -> None:
|
228
|
-
min_value = data.draw(dates_whenever() | none())
|
229
|
-
max_value = data.draw(dates_whenever() | none())
|
207
|
+
class TestDates:
|
208
|
+
@given(data=data(), two_digit=booleans())
|
209
|
+
def test_main(self, *, data: DataObject, two_digit: bool) -> None:
|
210
|
+
min_value = data.draw(dates() | none())
|
211
|
+
max_value = data.draw(dates() | none())
|
230
212
|
with assume_does_not_raise(InvalidArgument):
|
231
|
-
date = data.draw(
|
213
|
+
date = data.draw(
|
214
|
+
dates(min_value=min_value, max_value=max_value, two_digit=two_digit)
|
215
|
+
)
|
232
216
|
assert isinstance(date, Date)
|
233
217
|
assert Date.parse_common_iso(date.format_common_iso()) == date
|
234
218
|
if min_value is not None:
|
235
219
|
assert date >= min_value
|
236
220
|
if max_value is not None:
|
237
221
|
assert date <= max_value
|
222
|
+
if two_digit:
|
223
|
+
assert DATE_TWO_DIGIT_YEAR_MIN <= date <= DATE_TWO_DIGIT_YEAR_MAX
|
238
224
|
|
239
225
|
|
240
226
|
class TestDraw2:
|
@@ -579,18 +565,23 @@ class TestListsFixedLength:
|
|
579
565
|
|
580
566
|
|
581
567
|
class TestMonths:
|
582
|
-
@given(data=data())
|
583
|
-
def test_main(self, *, data: DataObject) -> None:
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
568
|
+
@given(data=data(), two_digit=booleans())
|
569
|
+
def test_main(self, *, data: DataObject, two_digit: bool) -> None:
|
570
|
+
min_value = data.draw(months() | none())
|
571
|
+
max_value = data.draw(months() | none())
|
572
|
+
with assume_does_not_raise(InvalidArgument):
|
573
|
+
month = data.draw(
|
574
|
+
months(min_value=min_value, max_value=max_value, two_digit=two_digit)
|
575
|
+
)
|
576
|
+
assert isinstance(month, Month)
|
577
|
+
assert Month.parse_common_iso(month.format_common_iso()) == month
|
578
|
+
if min_value is not None:
|
579
|
+
assert month >= min_value
|
580
|
+
if max_value is not None:
|
581
|
+
assert month <= max_value
|
582
|
+
if two_digit:
|
583
|
+
assert month.to_date() >= DATE_TWO_DIGIT_YEAR_MIN
|
584
|
+
assert month.to_date() <= DATE_TWO_DIGIT_YEAR_MAX
|
594
585
|
|
595
586
|
|
596
587
|
class TestNamespaceMixins:
|
@@ -651,14 +642,14 @@ class TestPaths:
|
|
651
642
|
validate_filepath(str(path))
|
652
643
|
|
653
644
|
|
654
|
-
class
|
645
|
+
class TestPlainDateTimes:
|
655
646
|
@given(data=data())
|
656
647
|
def test_main(self, *, data: DataObject) -> None:
|
657
|
-
min_value = data.draw(
|
658
|
-
max_value = data.draw(
|
648
|
+
min_value = data.draw(plain_datetimes() | none())
|
649
|
+
max_value = data.draw(plain_datetimes() | none())
|
659
650
|
with assume_does_not_raise(InvalidArgument):
|
660
651
|
datetime = data.draw(
|
661
|
-
|
652
|
+
plain_datetimes(min_value=min_value, max_value=max_value)
|
662
653
|
)
|
663
654
|
assert isinstance(datetime, PlainDateTime)
|
664
655
|
assert PlainDateTime.parse_common_iso(datetime.format_common_iso()) == datetime
|
@@ -897,12 +888,10 @@ class TestTextPrintable:
|
|
897
888
|
class TestTimeDeltas:
|
898
889
|
@given(data=data())
|
899
890
|
def test_main(self, *, data: DataObject) -> None:
|
900
|
-
min_value = data.draw(
|
901
|
-
max_value = data.draw(
|
891
|
+
min_value = data.draw(time_deltas() | none())
|
892
|
+
max_value = data.draw(time_deltas() | none())
|
902
893
|
with assume_does_not_raise(InvalidArgument):
|
903
|
-
delta = data.draw(
|
904
|
-
time_deltas_whenever(min_value=min_value, max_value=max_value)
|
905
|
-
)
|
894
|
+
delta = data.draw(time_deltas(min_value=min_value, max_value=max_value))
|
906
895
|
assert isinstance(delta, TimeDelta)
|
907
896
|
assert TimeDelta.parse_common_iso(delta.format_common_iso()) == delta
|
908
897
|
if min_value is not None:
|
@@ -914,10 +903,10 @@ class TestTimeDeltas:
|
|
914
903
|
class TestTimes:
|
915
904
|
@given(data=data())
|
916
905
|
def test_main(self, *, data: DataObject) -> None:
|
917
|
-
min_value = data.draw(
|
918
|
-
max_value = data.draw(
|
906
|
+
min_value = data.draw(times() | none())
|
907
|
+
max_value = data.draw(times() | none())
|
919
908
|
with assume_does_not_raise(InvalidArgument):
|
920
|
-
time = data.draw(
|
909
|
+
time = data.draw(times(min_value=min_value, max_value=max_value))
|
921
910
|
assert isinstance(time, Time)
|
922
911
|
assert Time.parse_common_iso(time.format_common_iso()) == time
|
923
912
|
if min_value is not None:
|
@@ -967,15 +956,14 @@ class TestVersions:
|
|
967
956
|
assert version.suffix is None
|
968
957
|
|
969
958
|
|
970
|
-
class
|
959
|
+
class TestZonedDateTimes:
|
971
960
|
@given(data=data(), time_zone=timezones())
|
972
|
-
@settings(suppress_health_check={HealthCheck.filter_too_much})
|
973
961
|
def test_main(self, *, data: DataObject, time_zone: ZoneInfo) -> None:
|
974
|
-
min_value = data.draw(
|
975
|
-
max_value = data.draw(
|
962
|
+
min_value = data.draw(zoned_datetimes() | none())
|
963
|
+
max_value = data.draw(zoned_datetimes() | none())
|
976
964
|
with assume_does_not_raise(InvalidArgument):
|
977
965
|
datetime = data.draw(
|
978
|
-
|
966
|
+
zoned_datetimes(
|
979
967
|
min_value=min_value, max_value=max_value, time_zone=time_zone
|
980
968
|
)
|
981
969
|
)
|
@@ -992,7 +980,5 @@ class TestZonedDateTimesWhenever:
|
|
992
980
|
def test_examples(self, *, data: DataObject, time_zone: ZoneInfo) -> None:
|
993
981
|
with assume_does_not_raise(TimeZoneNotFoundError):
|
994
982
|
max_value = ZonedDateTime(1, 1, 2, tz=time_zone.key)
|
995
|
-
datetime = data.draw(
|
996
|
-
zoned_datetimes_whenever(max_value=max_value, time_zone=time_zone)
|
997
|
-
)
|
983
|
+
datetime = data.draw(zoned_datetimes(max_value=max_value, time_zone=time_zone))
|
998
984
|
_ = datetime.py_datetime()
|
@@ -17,7 +17,7 @@ from utilities.hypothesis import (
|
|
17
17
|
pairs,
|
18
18
|
temp_paths,
|
19
19
|
text_ascii,
|
20
|
-
|
20
|
+
zoned_datetimes,
|
21
21
|
)
|
22
22
|
from utilities.iterables import one
|
23
23
|
from utilities.logging import (
|
@@ -38,7 +38,7 @@ from utilities.logging import (
|
|
38
38
|
from utilities.text import unique_str
|
39
39
|
from utilities.types import LogLevel
|
40
40
|
from utilities.typing import get_args
|
41
|
-
from utilities.
|
41
|
+
from utilities.whenever import format_compact, get_now
|
42
42
|
|
43
43
|
if TYPE_CHECKING:
|
44
44
|
from collections.abc import Mapping
|
@@ -315,7 +315,7 @@ class TestRotatingLogFile:
|
|
315
315
|
assert result.start is None
|
316
316
|
assert result.end is None
|
317
317
|
|
318
|
-
@given(index=integers(min_value=1), end=
|
318
|
+
@given(index=integers(min_value=1), end=zoned_datetimes())
|
319
319
|
def test_from_path_with_index_and_end(
|
320
320
|
self, *, index: int, end: ZonedDateTime
|
321
321
|
) -> None:
|
@@ -328,10 +328,7 @@ class TestRotatingLogFile:
|
|
328
328
|
assert result.start is None
|
329
329
|
assert result.end == end.round()
|
330
330
|
|
331
|
-
@given(
|
332
|
-
index=integers(min_value=1),
|
333
|
-
datetimes=pairs(zoned_datetimes_whenever(), sorted=True),
|
334
|
-
)
|
331
|
+
@given(index=integers(min_value=1), datetimes=pairs(zoned_datetimes(), sorted=True))
|
335
332
|
def test_from_path_with_index_start_and_end(
|
336
333
|
self, *, index: int, datetimes: tuple[ZonedDateTime, ZonedDateTime]
|
337
334
|
) -> None:
|
@@ -359,9 +356,7 @@ class TestRotatingLogFile:
|
|
359
356
|
file = _RotatingLogFile(directory=root, stem="log", suffix=".txt", index=index)
|
360
357
|
assert file.path == root.joinpath(f"log.{index}.txt")
|
361
358
|
|
362
|
-
@given(
|
363
|
-
root=temp_paths(), index=integers(min_value=1), end=zoned_datetimes_whenever()
|
364
|
-
)
|
359
|
+
@given(root=temp_paths(), index=integers(min_value=1), end=zoned_datetimes())
|
365
360
|
def test_path_with_index_and_end(
|
366
361
|
self, *, root: Path, index: int, end: ZonedDateTime
|
367
362
|
) -> None:
|
@@ -373,7 +368,7 @@ class TestRotatingLogFile:
|
|
373
368
|
@given(
|
374
369
|
root=temp_paths(),
|
375
370
|
index=integers(min_value=1),
|
376
|
-
datetimes=pairs(
|
371
|
+
datetimes=pairs(zoned_datetimes(), sorted=True),
|
377
372
|
)
|
378
373
|
def test_path_with_index_start_and_end(
|
379
374
|
self, *, root: Path, index: int, datetimes: tuple[ZonedDateTime, ZonedDateTime]
|
@@ -8,7 +8,7 @@ from hypothesis.strategies import booleans
|
|
8
8
|
from luigi import BoolParameter, Task
|
9
9
|
from pytest import mark, param
|
10
10
|
|
11
|
-
from utilities.hypothesis import namespace_mixins, temp_paths,
|
11
|
+
from utilities.hypothesis import namespace_mixins, temp_paths, zoned_datetimes
|
12
12
|
from utilities.luigi import (
|
13
13
|
ExternalFile,
|
14
14
|
ExternalTask,
|
@@ -31,7 +31,7 @@ class TestBuild:
|
|
31
31
|
|
32
32
|
|
33
33
|
class TestDateTimeParameter:
|
34
|
-
@given(datetime=
|
34
|
+
@given(datetime=zoned_datetimes())
|
35
35
|
@mark.parametrize("type_", [param("datetime"), param("str")])
|
36
36
|
def test_main(
|
37
37
|
self, *, datetime: ZonedDateTime, type_: Literal["datetime", "str"]
|