dycw-utilities 0.161.0__tar.gz → 0.161.2__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.161.0 → dycw_utilities-0.161.2}/PKG-INFO +1 -1
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/pyproject.toml +2 -2
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_hypothesis.py +25 -12
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_whenever.py +54 -38
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_zoneinfo.py +18 -25
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/hypothesis.py +20 -3
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/types.py +6 -1
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/whenever.py +19 -12
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/zoneinfo.py +2 -2
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/.gitignore +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/LICENSE +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/README.md +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/click.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/http.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/json.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/math.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/os.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/random.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/re.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/string.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/text.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/version.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/utilities/zipfile.py +0 -0
@@ -227,7 +227,7 @@ dependencies = [
|
|
227
227
|
name = "dycw-utilities"
|
228
228
|
readme = "README.md"
|
229
229
|
requires-python = ">= 3.12"
|
230
|
-
version = "0.161.
|
230
|
+
version = "0.161.2"
|
231
231
|
|
232
232
|
[project.entry-points.pytest11]
|
233
233
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -259,7 +259,7 @@ test = [
|
|
259
259
|
# bump-my-version
|
260
260
|
[tool.bumpversion]
|
261
261
|
allow_dirty = true
|
262
|
-
current_version = "0.161.
|
262
|
+
current_version = "0.161.2"
|
263
263
|
|
264
264
|
[[tool.bumpversion.files]]
|
265
265
|
filename = "src/utilities/__init__.py"
|
@@ -5,6 +5,7 @@ from itertools import pairwise
|
|
5
5
|
from pathlib import Path
|
6
6
|
from re import search
|
7
7
|
from typing import TYPE_CHECKING, Any, cast
|
8
|
+
from zoneinfo import ZoneInfo
|
8
9
|
|
9
10
|
from hypothesis import assume, given, settings
|
10
11
|
from hypothesis.errors import InvalidArgument
|
@@ -20,7 +21,6 @@ from hypothesis.strategies import (
|
|
20
21
|
just,
|
21
22
|
none,
|
22
23
|
sets,
|
23
|
-
timezones,
|
24
24
|
)
|
25
25
|
from libcst import Import, ImportFrom
|
26
26
|
from numpy import inf, int64, isfinite, isinf, isnan, ravel, rint
|
@@ -34,7 +34,6 @@ from whenever import (
|
|
34
34
|
PlainDateTime,
|
35
35
|
Time,
|
36
36
|
TimeDelta,
|
37
|
-
TimeZoneNotFoundError,
|
38
37
|
YearMonth,
|
39
38
|
ZonedDateTime,
|
40
39
|
)
|
@@ -97,6 +96,7 @@ from utilities.hypothesis import (
|
|
97
96
|
urls,
|
98
97
|
versions,
|
99
98
|
year_months,
|
99
|
+
zone_infos,
|
100
100
|
zoned_date_time_periods,
|
101
101
|
zoned_date_times,
|
102
102
|
)
|
@@ -125,7 +125,7 @@ from utilities.math import (
|
|
125
125
|
MIN_UINT64,
|
126
126
|
)
|
127
127
|
from utilities.os import temp_environ
|
128
|
-
from utilities.platform import maybe_yield_lower_case
|
128
|
+
from utilities.platform import IS_LINUX, maybe_yield_lower_case
|
129
129
|
from utilities.sentinel import is_sentinel
|
130
130
|
from utilities.version import Version
|
131
131
|
from utilities.whenever import (
|
@@ -134,6 +134,7 @@ from utilities.whenever import (
|
|
134
134
|
DatePeriod,
|
135
135
|
TimePeriod,
|
136
136
|
ZonedDateTimePeriod,
|
137
|
+
get_now,
|
137
138
|
to_days,
|
138
139
|
to_nanoseconds,
|
139
140
|
to_py_time_delta,
|
@@ -141,7 +142,6 @@ from utilities.whenever import (
|
|
141
142
|
|
142
143
|
if TYPE_CHECKING:
|
143
144
|
from collections.abc import Set as AbstractSet
|
144
|
-
from zoneinfo import ZoneInfo
|
145
145
|
|
146
146
|
from utilities.sentinel import Sentinel
|
147
147
|
from utilities.tempfile import TemporaryDirectory
|
@@ -1186,11 +1186,23 @@ class TestYearMonths:
|
|
1186
1186
|
assert year_month.on_day(28) <= DATE_TWO_DIGIT_YEAR_MAX
|
1187
1187
|
|
1188
1188
|
|
1189
|
+
class TestZoneInfos:
|
1190
|
+
@given(data=data())
|
1191
|
+
def test_main(self, *, data: DataObject) -> None:
|
1192
|
+
time_zone = data.draw(zone_infos())
|
1193
|
+
assert isinstance(time_zone, ZoneInfo)
|
1194
|
+
if IS_LINUX:
|
1195
|
+
_ = assume(time_zone.key not in {"Etc/UTC", "localtime"})
|
1196
|
+
assert time_zone.key not in {"Etc/UTC", "localtime"}
|
1197
|
+
_ = get_now(time_zone)
|
1198
|
+
|
1199
|
+
|
1189
1200
|
class TestZonedDateTimePeriods:
|
1190
|
-
@given(data=data()
|
1191
|
-
def test_main(self, *, data: DataObject
|
1201
|
+
@given(data=data())
|
1202
|
+
def test_main(self, *, data: DataObject) -> None:
|
1192
1203
|
min_value = data.draw(zoned_date_times() | none())
|
1193
1204
|
max_value = data.draw(zoned_date_times() | none())
|
1205
|
+
time_zone = data.draw(zone_infos())
|
1194
1206
|
with assume_does_not_raise(InvalidArgument):
|
1195
1207
|
period = data.draw(
|
1196
1208
|
zoned_date_time_periods(
|
@@ -1206,10 +1218,11 @@ class TestZonedDateTimePeriods:
|
|
1206
1218
|
|
1207
1219
|
|
1208
1220
|
class TestZonedDateTimes:
|
1209
|
-
@given(data=data()
|
1210
|
-
def test_main(self, *, data: DataObject
|
1221
|
+
@given(data=data())
|
1222
|
+
def test_main(self, *, data: DataObject) -> None:
|
1211
1223
|
min_value = data.draw(zoned_date_times() | none())
|
1212
1224
|
max_value = data.draw(zoned_date_times() | none())
|
1225
|
+
time_zone = data.draw(zone_infos())
|
1213
1226
|
with assume_does_not_raise(InvalidArgument):
|
1214
1227
|
datetime = data.draw(
|
1215
1228
|
zoned_date_times(
|
@@ -1225,9 +1238,9 @@ class TestZonedDateTimes:
|
|
1225
1238
|
if max_value is not None:
|
1226
1239
|
assert datetime <= max_value
|
1227
1240
|
|
1228
|
-
@given(data=data()
|
1229
|
-
def test_examples(self, *, data: DataObject
|
1230
|
-
|
1231
|
-
|
1241
|
+
@given(data=data())
|
1242
|
+
def test_examples(self, *, data: DataObject) -> None:
|
1243
|
+
time_zone = data.draw(zone_infos())
|
1244
|
+
max_value = ZonedDateTime(1, 1, 2, tz=time_zone.key)
|
1232
1245
|
datetime = data.draw(zoned_date_times(max_value=max_value, time_zone=time_zone))
|
1233
1246
|
_ = datetime.py_datetime()
|
@@ -8,14 +8,7 @@ from typing import TYPE_CHECKING, Any, ClassVar, Self, cast
|
|
8
8
|
from zoneinfo import ZoneInfo
|
9
9
|
|
10
10
|
from hypothesis import HealthCheck, given, settings
|
11
|
-
from hypothesis.strategies import
|
12
|
-
DataObject,
|
13
|
-
data,
|
14
|
-
integers,
|
15
|
-
none,
|
16
|
-
sampled_from,
|
17
|
-
timezones,
|
18
|
-
)
|
11
|
+
from hypothesis.strategies import DataObject, data, integers, none, sampled_from
|
19
12
|
from pytest import mark, param, raises
|
20
13
|
from whenever import (
|
21
14
|
Date,
|
@@ -24,7 +17,6 @@ from whenever import (
|
|
24
17
|
PlainDateTime,
|
25
18
|
Time,
|
26
19
|
TimeDelta,
|
27
|
-
TimeZoneNotFoundError,
|
28
20
|
Weekday,
|
29
21
|
YearMonth,
|
30
22
|
ZonedDateTime,
|
@@ -41,6 +33,7 @@ from utilities.hypothesis import (
|
|
41
33
|
time_deltas,
|
42
34
|
time_periods,
|
43
35
|
times,
|
36
|
+
zone_infos,
|
44
37
|
zoned_date_time_periods,
|
45
38
|
zoned_date_times,
|
46
39
|
zoned_date_times_2000,
|
@@ -382,7 +375,7 @@ class TestFormatCompact:
|
|
382
375
|
|
383
376
|
class TestFromTimeStamp:
|
384
377
|
@given(
|
385
|
-
datetime=zoned_date_times(time_zone=
|
378
|
+
datetime=zoned_date_times(time_zone=zone_infos()).map(
|
386
379
|
lambda d: d.round("second")
|
387
380
|
)
|
388
381
|
)
|
@@ -392,7 +385,7 @@ class TestFromTimeStamp:
|
|
392
385
|
assert result == datetime
|
393
386
|
|
394
387
|
@given(
|
395
|
-
datetime=zoned_date_times(time_zone=
|
388
|
+
datetime=zoned_date_times(time_zone=zone_infos()).map(
|
396
389
|
lambda d: d.round("millisecond")
|
397
390
|
)
|
398
391
|
)
|
@@ -401,7 +394,7 @@ class TestFromTimeStamp:
|
|
401
394
|
result = from_timestamp_millis(timestamp, time_zone=ZoneInfo(datetime.tz))
|
402
395
|
assert result == datetime
|
403
396
|
|
404
|
-
@given(datetime=zoned_date_times(time_zone=
|
397
|
+
@given(datetime=zoned_date_times(time_zone=zone_infos()))
|
405
398
|
def test_nanos(self, *, datetime: ZonedDateTime) -> None:
|
406
399
|
timestamp = datetime.timestamp_nanos()
|
407
400
|
result = from_timestamp_nanos(timestamp, time_zone=ZoneInfo(datetime.tz))
|
@@ -409,10 +402,9 @@ class TestFromTimeStamp:
|
|
409
402
|
|
410
403
|
|
411
404
|
class TestGetNow:
|
412
|
-
@given(time_zone=
|
405
|
+
@given(time_zone=zone_infos())
|
413
406
|
def test_function(self, *, time_zone: ZoneInfo) -> None:
|
414
|
-
|
415
|
-
now = get_now(time_zone)
|
407
|
+
now = get_now(time_zone)
|
416
408
|
assert isinstance(now, ZonedDateTime)
|
417
409
|
assert now.tz == time_zone.key
|
418
410
|
|
@@ -436,10 +428,9 @@ class TestGetNowLocal:
|
|
436
428
|
|
437
429
|
|
438
430
|
class TestGetNowPlain:
|
439
|
-
@given(time_zone=
|
431
|
+
@given(time_zone=zone_infos())
|
440
432
|
def test_function(self, *, time_zone: ZoneInfo) -> None:
|
441
|
-
|
442
|
-
now = get_now_plain(time_zone)
|
433
|
+
now = get_now_plain(time_zone)
|
443
434
|
assert isinstance(now, PlainDateTime)
|
444
435
|
|
445
436
|
def test_constant(self) -> None:
|
@@ -1395,32 +1386,57 @@ class TestToZonedDateTime:
|
|
1395
1386
|
def test_default(self) -> None:
|
1396
1387
|
assert abs(to_zoned_date_time() - get_now()) <= SECOND
|
1397
1388
|
|
1398
|
-
@given(date_time=zoned_date_times())
|
1399
|
-
def
|
1400
|
-
|
1389
|
+
@given(date_time=zoned_date_times(time_zone=zone_infos()))
|
1390
|
+
def test_date_time_without_time_zone(self, *, date_time: ZonedDateTime) -> None:
|
1391
|
+
result = to_zoned_date_time(date_time)
|
1392
|
+
assert result.exact_eq(date_time)
|
1401
1393
|
|
1402
|
-
@given(date_time=zoned_date_times())
|
1403
|
-
def
|
1404
|
-
|
1394
|
+
@given(date_time=zoned_date_times(), time_zone=zone_infos())
|
1395
|
+
def test_date_time_with_time_zone(
|
1396
|
+
self, *, date_time: ZonedDateTime, time_zone: ZoneInfo
|
1397
|
+
) -> None:
|
1398
|
+
result = to_zoned_date_time(date_time, time_zone=time_zone)
|
1399
|
+
expected = date_time.to_tz(time_zone.key)
|
1400
|
+
assert result.exact_eq(expected)
|
1401
|
+
|
1402
|
+
@given(date_time=zoned_date_times(), time_zone=zone_infos())
|
1403
|
+
def test_str(self, *, date_time: ZonedDateTime, time_zone: ZoneInfo) -> None:
|
1404
|
+
result = to_zoned_date_time(date_time.format_common_iso(), time_zone=time_zone)
|
1405
|
+
expected = date_time.to_tz(time_zone.key)
|
1406
|
+
assert result.exact_eq(expected)
|
1405
1407
|
|
1406
|
-
@given(date_time=zoned_date_times_2000)
|
1407
|
-
def test_py_date_time_zone_info(
|
1408
|
-
|
1408
|
+
@given(date_time=zoned_date_times_2000, time_zone=zone_infos())
|
1409
|
+
def test_py_date_time_zone_info(
|
1410
|
+
self, *, date_time: ZonedDateTime, time_zone: ZoneInfo
|
1411
|
+
) -> None:
|
1412
|
+
result = to_zoned_date_time(date_time.py_datetime(), time_zone=time_zone)
|
1413
|
+
expected = date_time.to_tz(time_zone.key)
|
1414
|
+
assert result.exact_eq(expected)
|
1409
1415
|
|
1410
|
-
@given(date_time=zoned_date_times_2000)
|
1411
|
-
def test_py_date_time_dt_utc(
|
1412
|
-
|
1413
|
-
|
1416
|
+
@given(date_time=zoned_date_times_2000, time_zone=zone_infos())
|
1417
|
+
def test_py_date_time_dt_utc(
|
1418
|
+
self, *, date_time: ZonedDateTime, time_zone: ZoneInfo
|
1419
|
+
) -> None:
|
1420
|
+
result = to_zoned_date_time(
|
1421
|
+
date_time.py_datetime().astimezone(dt.UTC), time_zone=time_zone
|
1422
|
+
)
|
1423
|
+
expected = date_time.to_tz(time_zone.key)
|
1424
|
+
assert result.exact_eq(expected)
|
1414
1425
|
|
1415
|
-
@given(date_time=zoned_date_times())
|
1416
|
-
def test_callable(self, *, date_time: ZonedDateTime) -> None:
|
1417
|
-
|
1426
|
+
@given(date_time=zoned_date_times(), time_zone=zone_infos())
|
1427
|
+
def test_callable(self, *, date_time: ZonedDateTime, time_zone: ZoneInfo) -> None:
|
1428
|
+
result = to_zoned_date_time(lambda: date_time, time_zone=time_zone)
|
1429
|
+
expected = date_time.to_tz(time_zone.key)
|
1430
|
+
assert result.exact_eq(expected)
|
1418
1431
|
|
1419
|
-
|
1420
|
-
|
1432
|
+
@given(time_zone=zone_infos())
|
1433
|
+
def test_none(self, *, time_zone: ZoneInfo) -> None:
|
1434
|
+
result = to_zoned_date_time(None, time_zone=time_zone)
|
1435
|
+
assert abs(result - get_now(time_zone)) <= SECOND
|
1421
1436
|
|
1422
|
-
|
1423
|
-
|
1437
|
+
@given(time_zone=zone_infos())
|
1438
|
+
def test_sentinel(self, *, time_zone: ZoneInfo) -> None:
|
1439
|
+
assert to_zoned_date_time(sentinel, time_zone=time_zone) is sentinel
|
1424
1440
|
|
1425
1441
|
@given(date_times=pairs(zoned_date_times()))
|
1426
1442
|
def test_replace_non_sentinel(
|
@@ -1,22 +1,14 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import datetime as dt
|
4
|
-
from typing import TYPE_CHECKING, cast
|
4
|
+
from typing import TYPE_CHECKING, Literal, cast
|
5
5
|
from zoneinfo import ZoneInfo
|
6
6
|
|
7
7
|
from hypothesis import given
|
8
|
-
from hypothesis.strategies import
|
9
|
-
|
10
|
-
data,
|
11
|
-
datetimes,
|
12
|
-
just,
|
13
|
-
sampled_from,
|
14
|
-
timezones,
|
15
|
-
)
|
16
|
-
from pytest import raises
|
8
|
+
from hypothesis.strategies import DataObject, data, datetimes, just, sampled_from
|
9
|
+
from pytest import mark, param, raises
|
17
10
|
|
18
|
-
from
|
19
|
-
from utilities.hypothesis import zoned_date_times
|
11
|
+
from utilities.hypothesis import zone_infos, zoned_date_times
|
20
12
|
from utilities.tzdata import HongKong, Tokyo
|
21
13
|
from utilities.tzlocal import LOCAL_TIME_ZONE, LOCAL_TIME_ZONE_NAME
|
22
14
|
from utilities.zoneinfo import (
|
@@ -35,22 +27,23 @@ if TYPE_CHECKING:
|
|
35
27
|
|
36
28
|
|
37
29
|
class TestToZoneInfo:
|
38
|
-
@given(time_zone=
|
30
|
+
@given(time_zone=zone_infos())
|
39
31
|
def test_zone_info(self, *, time_zone: ZoneInfo) -> None:
|
40
32
|
result = to_zone_info(time_zone)
|
41
33
|
assert result is time_zone
|
42
34
|
|
43
|
-
@given(data=data(), time_zone=
|
35
|
+
@given(data=data(), time_zone=zone_infos())
|
44
36
|
def test_zoned_date_time(self, *, data: DataObject, time_zone: ZoneInfo) -> None:
|
45
37
|
date_time = data.draw(zoned_date_times(time_zone=time_zone))
|
46
38
|
result = to_zone_info(date_time)
|
47
39
|
assert result is time_zone
|
48
40
|
|
49
|
-
|
50
|
-
|
41
|
+
@mark.parametrize("time_zone", [param("local"), param("localtime")])
|
42
|
+
def test_local(self, *, time_zone: Literal["local", "localtime"]) -> None:
|
43
|
+
result = to_zone_info(time_zone)
|
51
44
|
assert result is LOCAL_TIME_ZONE
|
52
45
|
|
53
|
-
@given(time_zone=
|
46
|
+
@given(time_zone=zone_infos())
|
54
47
|
def test_str(self, *, time_zone: ZoneInfo) -> None:
|
55
48
|
result = to_zone_info(cast("TimeZoneLike", time_zone.key))
|
56
49
|
assert result is time_zone
|
@@ -59,7 +52,7 @@ class TestToZoneInfo:
|
|
59
52
|
result = to_zone_info(dt.UTC)
|
60
53
|
assert result is UTC
|
61
54
|
|
62
|
-
@given(data=data(), time_zone=
|
55
|
+
@given(data=data(), time_zone=zone_infos())
|
63
56
|
def test_py_zoned_date_time(self, *, data: DataObject, time_zone: ZoneInfo) -> None:
|
64
57
|
date_time = data.draw(datetimes(timezones=just(time_zone)))
|
65
58
|
result = to_zone_info(date_time)
|
@@ -79,25 +72,25 @@ class TestToZoneInfo:
|
|
79
72
|
|
80
73
|
|
81
74
|
class TestToTimeZoneName:
|
82
|
-
@given(time_zone=
|
75
|
+
@given(time_zone=zone_infos())
|
83
76
|
def test_zone_info(self, *, time_zone: ZoneInfo) -> None:
|
84
77
|
result = to_time_zone_name(time_zone)
|
85
78
|
expected = time_zone.key
|
86
79
|
assert result == expected
|
87
80
|
|
88
|
-
@given(data=data(), time_zone=
|
81
|
+
@given(data=data(), time_zone=zone_infos())
|
89
82
|
def test_zoned_date_time(self, *, data: DataObject, time_zone: ZoneInfo) -> None:
|
90
83
|
date_time = data.draw(zoned_date_times(time_zone=time_zone))
|
91
84
|
result = to_time_zone_name(date_time)
|
92
85
|
expected = time_zone.key
|
93
86
|
assert result == expected
|
94
87
|
|
95
|
-
|
96
|
-
|
88
|
+
@mark.parametrize("time_zone", [param("local"), param("localtime")])
|
89
|
+
def test_local(self, *, time_zone: Literal["local", "localtime"]) -> None:
|
90
|
+
result = to_time_zone_name(time_zone)
|
97
91
|
assert result == LOCAL_TIME_ZONE_NAME
|
98
92
|
|
99
|
-
@given(time_zone=
|
100
|
-
@SKIPIF_CI_AND_LINUX
|
93
|
+
@given(time_zone=zone_infos())
|
101
94
|
def test_str(self, *, time_zone: ZoneInfo) -> None:
|
102
95
|
result = to_time_zone_name(cast("TimeZoneLike", time_zone.key))
|
103
96
|
expected = time_zone.key
|
@@ -108,7 +101,7 @@ class TestToTimeZoneName:
|
|
108
101
|
expected = UTC.key
|
109
102
|
assert result == expected
|
110
103
|
|
111
|
-
@given(data=data(), time_zone=
|
104
|
+
@given(data=data(), time_zone=zone_infos())
|
112
105
|
def test_py_zoned_date_time(self, *, data: DataObject, time_zone: ZoneInfo) -> None:
|
113
106
|
date_time = data.draw(datetimes(timezones=just(time_zone)))
|
114
107
|
result = to_time_zone_name(date_time)
|
@@ -32,6 +32,7 @@ from hypothesis.strategies import (
|
|
32
32
|
sampled_from,
|
33
33
|
sets,
|
34
34
|
text,
|
35
|
+
timezones,
|
35
36
|
uuids,
|
36
37
|
)
|
37
38
|
from hypothesis.utils.conventions import not_set
|
@@ -76,7 +77,7 @@ from utilities.math import (
|
|
76
77
|
)
|
77
78
|
from utilities.os import get_env_var
|
78
79
|
from utilities.pathlib import module_path, temp_cwd
|
79
|
-
from utilities.platform import IS_WINDOWS
|
80
|
+
from utilities.platform import IS_LINUX, IS_WINDOWS
|
80
81
|
from utilities.sentinel import Sentinel, is_sentinel, sentinel
|
81
82
|
from utilities.tempfile import TEMP_DIR, TemporaryDirectory
|
82
83
|
from utilities.version import Version
|
@@ -97,6 +98,7 @@ from utilities.whenever import (
|
|
97
98
|
DatePeriod,
|
98
99
|
TimePeriod,
|
99
100
|
ZonedDateTimePeriod,
|
101
|
+
get_now,
|
100
102
|
to_date_time_delta,
|
101
103
|
to_days,
|
102
104
|
to_nanoseconds,
|
@@ -105,6 +107,7 @@ from utilities.zoneinfo import UTC, to_zone_info
|
|
105
107
|
|
106
108
|
if TYPE_CHECKING:
|
107
109
|
from collections.abc import Collection, Hashable, Iterable, Iterator
|
110
|
+
from zoneinfo import ZoneInfo
|
108
111
|
|
109
112
|
from hypothesis.database import ExampleDatabase
|
110
113
|
from libcst import Import, ImportFrom
|
@@ -835,7 +838,7 @@ def paths(
|
|
835
838
|
@composite
|
836
839
|
def _path_parts(draw: DrawFn, /) -> str:
|
837
840
|
part = draw(text_ascii(min_size=1, max_size=10))
|
838
|
-
reserved = {"AUX", "NUL", "nuL"}
|
841
|
+
reserved = {"AUX", "NUL", "nuL", "pRn"}
|
839
842
|
_ = assume(part not in reserved)
|
840
843
|
return part
|
841
844
|
|
@@ -1476,6 +1479,20 @@ def year_months(
|
|
1476
1479
|
##
|
1477
1480
|
|
1478
1481
|
|
1482
|
+
@composite
|
1483
|
+
def zone_infos(draw: DrawFn, /) -> ZoneInfo:
|
1484
|
+
"""Strategy for generating time-zones."""
|
1485
|
+
time_zone = draw(timezones())
|
1486
|
+
if IS_LINUX:
|
1487
|
+
_ = assume(time_zone.key not in {"Etc/UTC", "localtime"})
|
1488
|
+
with assume_does_not_raise(TimeZoneNotFoundError):
|
1489
|
+
_ = get_now(time_zone)
|
1490
|
+
return time_zone
|
1491
|
+
|
1492
|
+
|
1493
|
+
##
|
1494
|
+
|
1495
|
+
|
1479
1496
|
@composite
|
1480
1497
|
def zoned_date_time_periods(
|
1481
1498
|
draw: DrawFn,
|
@@ -1530,7 +1547,6 @@ def zoned_date_times(
|
|
1530
1547
|
with (
|
1531
1548
|
assume_does_not_raise(RepeatedTime),
|
1532
1549
|
assume_does_not_raise(SkippedTime),
|
1533
|
-
assume_does_not_raise(TimeZoneNotFoundError),
|
1534
1550
|
assume_does_not_raise(ValueError, match="Resulting datetime is out of range"),
|
1535
1551
|
):
|
1536
1552
|
zoned = plain.assume_tz(time_zone_.key, disambiguate="raise")
|
@@ -1602,6 +1618,7 @@ __all__ = [
|
|
1602
1618
|
"urls",
|
1603
1619
|
"versions",
|
1604
1620
|
"year_months",
|
1621
|
+
"zone_infos",
|
1605
1622
|
"zoned_date_time_periods",
|
1606
1623
|
"zoned_date_times",
|
1607
1624
|
"zoned_date_times_2000",
|
@@ -276,7 +276,12 @@ TIME_ZONES: list[TimeZone] = list(get_args(TimeZone.__value__))
|
|
276
276
|
|
277
277
|
|
278
278
|
type TimeZoneLike = (
|
279
|
-
ZoneInfo
|
279
|
+
ZoneInfo
|
280
|
+
| ZonedDateTime
|
281
|
+
| Literal["local", "localtime"]
|
282
|
+
| TimeZone
|
283
|
+
| dt.tzinfo
|
284
|
+
| dt.datetime
|
280
285
|
)
|
281
286
|
|
282
287
|
|
@@ -1621,39 +1621,46 @@ class _ToYearsTimeError(ToYearsError):
|
|
1621
1621
|
|
1622
1622
|
@overload
|
1623
1623
|
def to_zoned_date_time(
|
1624
|
-
date_time: Sentinel, /, *, time_zone: TimeZoneLike =
|
1624
|
+
date_time: Sentinel, /, *, time_zone: TimeZoneLike | None = None
|
1625
1625
|
) -> Sentinel: ...
|
1626
1626
|
@overload
|
1627
1627
|
def to_zoned_date_time(
|
1628
1628
|
date_time: MaybeCallableZonedDateTimeLike | dt.datetime | None = get_now,
|
1629
1629
|
/,
|
1630
1630
|
*,
|
1631
|
-
time_zone: TimeZoneLike =
|
1631
|
+
time_zone: TimeZoneLike | None = None,
|
1632
1632
|
) -> ZonedDateTime: ...
|
1633
1633
|
def to_zoned_date_time(
|
1634
1634
|
date_time: MaybeCallableZonedDateTimeLike | dt.datetime | None | Sentinel = get_now,
|
1635
1635
|
/,
|
1636
1636
|
*,
|
1637
|
-
time_zone: TimeZoneLike =
|
1637
|
+
time_zone: TimeZoneLike | None = None,
|
1638
1638
|
) -> ZonedDateTime | Sentinel:
|
1639
1639
|
"""Convert to a zoned date-time."""
|
1640
1640
|
match date_time:
|
1641
|
-
case ZonedDateTime()
|
1642
|
-
|
1641
|
+
case ZonedDateTime() as date_time_use:
|
1642
|
+
...
|
1643
|
+
case Sentinel():
|
1644
|
+
return sentinel
|
1643
1645
|
case None:
|
1644
|
-
return get_now(time_zone)
|
1646
|
+
return get_now(UTC if time_zone is None else time_zone)
|
1645
1647
|
case str():
|
1646
|
-
|
1647
|
-
case dt.datetime():
|
1648
|
+
date_time_use = ZonedDateTime.parse_common_iso(date_time)
|
1649
|
+
case dt.datetime() as py_date_time:
|
1648
1650
|
if isinstance(date_time.tzinfo, ZoneInfo):
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1651
|
+
py_date_time_use = py_date_time
|
1652
|
+
elif date_time.tzinfo is dt.UTC:
|
1653
|
+
py_date_time_use = py_date_time.astimezone(UTC)
|
1654
|
+
else:
|
1655
|
+
raise ToZonedDateTimeError(date_time=date_time)
|
1656
|
+
date_time_use = ZonedDateTime.from_py_datetime(py_date_time_use)
|
1653
1657
|
case Callable() as func:
|
1654
1658
|
return to_zoned_date_time(func(), time_zone=time_zone)
|
1655
1659
|
case never:
|
1656
1660
|
assert_never(never)
|
1661
|
+
if time_zone is None:
|
1662
|
+
return date_time_use
|
1663
|
+
return date_time_use.to_tz(to_time_zone_name(time_zone))
|
1657
1664
|
|
1658
1665
|
|
1659
1666
|
@dataclass(kw_only=True, slots=True)
|
@@ -27,7 +27,7 @@ def to_zone_info(obj: TimeZoneLike, /) -> ZoneInfo:
|
|
27
27
|
return zone_info
|
28
28
|
case ZonedDateTime() as date_time:
|
29
29
|
return ZoneInfo(date_time.tz)
|
30
|
-
case "local":
|
30
|
+
case "local" | "localtime":
|
31
31
|
return LOCAL_TIME_ZONE
|
32
32
|
case str() as key:
|
33
33
|
return ZoneInfo(key)
|
@@ -75,7 +75,7 @@ def to_time_zone_name(obj: TimeZoneLike, /) -> TimeZone:
|
|
75
75
|
return cast("TimeZone", zone_info.key)
|
76
76
|
case ZonedDateTime() as date_time:
|
77
77
|
return cast("TimeZone", date_time.tz)
|
78
|
-
case "local":
|
78
|
+
case "local" | "localtime":
|
79
79
|
return LOCAL_TIME_ZONE_NAME
|
80
80
|
case str() as time_zone:
|
81
81
|
if time_zone in TIME_ZONES:
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.161.0 → dycw_utilities-0.161.2}/src/tests/modules/package_without/module_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|