dycw-utilities 0.151.8__tar.gz → 0.151.9__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.151.8 → dycw_utilities-0.151.9}/PKG-INFO +1 -1
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/pyproject.toml +2 -2
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_period.py +38 -16
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_whenever.py +1 -6
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/hypothesis.py +6 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/period.py +68 -8
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/.gitignore +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/LICENSE +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/README.md +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_dnspython.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_yield_access/__init__.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_yield_access/script.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_yield_access/script.sh +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/click.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/dnspython.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/http.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/json.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/math.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/os.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/random.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/re.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/string.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/text.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/types.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/version.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/zoneinfo.py +0 -0
@@ -232,7 +232,7 @@ dependencies = [
|
|
232
232
|
name = "dycw-utilities"
|
233
233
|
readme = "README.md"
|
234
234
|
requires-python = ">= 3.12"
|
235
|
-
version = "0.151.
|
235
|
+
version = "0.151.9"
|
236
236
|
|
237
237
|
[project.entry-points.pytest11]
|
238
238
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -265,7 +265,7 @@ test = [
|
|
265
265
|
# bump-my-version
|
266
266
|
[tool.bumpversion]
|
267
267
|
allow_dirty = true
|
268
|
-
current_version = "0.151.
|
268
|
+
current_version = "0.151.9"
|
269
269
|
|
270
270
|
[[tool.bumpversion.files]]
|
271
271
|
filename = "src/utilities/__init__.py"
|
@@ -4,7 +4,7 @@ from re import search
|
|
4
4
|
from typing import TYPE_CHECKING, Any, cast
|
5
5
|
|
6
6
|
from hypothesis import HealthCheck, given, settings
|
7
|
-
from hypothesis.strategies import DataObject, data
|
7
|
+
from hypothesis.strategies import DataObject, data, sampled_from
|
8
8
|
from pytest import mark, param, raises
|
9
9
|
from whenever import Date, Time, ZonedDateTime
|
10
10
|
|
@@ -17,6 +17,7 @@ from utilities.hypothesis import (
|
|
17
17
|
time_deltas,
|
18
18
|
times,
|
19
19
|
zoned_datetimes,
|
20
|
+
zoned_datetimes_2000,
|
20
21
|
)
|
21
22
|
from utilities.period import (
|
22
23
|
DatePeriod,
|
@@ -145,13 +146,20 @@ class TestDatePeriod:
|
|
145
146
|
expected = DatePeriod(start - delta, end - delta)
|
146
147
|
assert result == expected
|
147
148
|
|
148
|
-
@given(dates=pairs(dates(), sorted=True))
|
149
|
-
def
|
149
|
+
@given(data=data(), dates=pairs(dates(), sorted=True))
|
150
|
+
def test_to_and_from_dict(
|
151
|
+
self, *, data: DataObject, dates: tuple[Date, Date]
|
152
|
+
) -> None:
|
150
153
|
start, end = dates
|
151
154
|
period = DatePeriod(start, end)
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
+
dict1 = period.to_dict()
|
156
|
+
dstart, dend = dict1["start"], dict1["end"]
|
157
|
+
dict2 = _PeriodAsDict(
|
158
|
+
start=data.draw(sampled_from([dstart, dstart.py_date()])),
|
159
|
+
end=data.draw(sampled_from([dend, dend.py_date()])),
|
160
|
+
)
|
161
|
+
result = DatePeriod.from_dict(dict2)
|
162
|
+
assert result == period
|
155
163
|
|
156
164
|
@given(dates=pairs(dates(), unique=True, sorted=True))
|
157
165
|
def test_error_period_invalid(self, *, dates: tuple[Date, Date]) -> None:
|
@@ -224,13 +232,20 @@ class TestTimePeriod:
|
|
224
232
|
result,
|
225
233
|
)
|
226
234
|
|
227
|
-
@given(times=pairs(times()))
|
228
|
-
def
|
235
|
+
@given(data=data(), times=pairs(times()))
|
236
|
+
def test_to_and_from_dict(
|
237
|
+
self, *, data: DataObject, times: tuple[Time, Time]
|
238
|
+
) -> None:
|
229
239
|
start, end = times
|
230
240
|
period = TimePeriod(start, end)
|
231
|
-
|
232
|
-
|
233
|
-
|
241
|
+
dict1 = period.to_dict()
|
242
|
+
dstart, dend = dict1["start"], dict1["end"]
|
243
|
+
dict2 = _PeriodAsDict(
|
244
|
+
start=data.draw(sampled_from([dstart, dstart.py_time()])),
|
245
|
+
end=data.draw(sampled_from([dend, dend.py_time()])),
|
246
|
+
)
|
247
|
+
result = TimePeriod.from_dict(dict2)
|
248
|
+
assert result == period
|
234
249
|
|
235
250
|
|
236
251
|
class TestZonedDateTimePeriod:
|
@@ -455,13 +470,20 @@ class TestZonedDateTimePeriod:
|
|
455
470
|
expected = ZonedDateTimePeriod(start - delta, end - delta)
|
456
471
|
assert result == expected
|
457
472
|
|
458
|
-
@given(datetimes=pairs(
|
459
|
-
def
|
473
|
+
@given(data=data(), datetimes=pairs(zoned_datetimes_2000, sorted=True))
|
474
|
+
def test_to_and_from_dict(
|
475
|
+
self, data: DataObject, *, datetimes: tuple[ZonedDateTime, ZonedDateTime]
|
476
|
+
) -> None:
|
460
477
|
start, end = datetimes
|
461
478
|
period = ZonedDateTimePeriod(start, end)
|
462
|
-
|
463
|
-
|
464
|
-
|
479
|
+
dict1 = period.to_dict()
|
480
|
+
dstart, dend = dict1["start"], dict1["end"]
|
481
|
+
dict2 = _PeriodAsDict(
|
482
|
+
start=data.draw(sampled_from([dstart, dstart.py_datetime()])),
|
483
|
+
end=data.draw(sampled_from([dend, dend.py_datetime()])),
|
484
|
+
)
|
485
|
+
result = ZonedDateTimePeriod.from_dict(dict2)
|
486
|
+
assert result == period
|
465
487
|
|
466
488
|
@given(datetimes=pairs(zoned_datetimes(), sorted=True))
|
467
489
|
def test_to_tz(self, *, datetimes: tuple[ZonedDateTime, ZonedDateTime]) -> None:
|
@@ -32,6 +32,7 @@ from utilities.hypothesis import (
|
|
32
32
|
sentinels,
|
33
33
|
times,
|
34
34
|
zoned_datetimes,
|
35
|
+
zoned_datetimes_2000,
|
35
36
|
)
|
36
37
|
from utilities.sentinel import Sentinel, sentinel
|
37
38
|
from utilities.tzdata import HongKong, Tokyo
|
@@ -1184,12 +1185,6 @@ class TestToYears:
|
|
1184
1185
|
_ = to_years(delta)
|
1185
1186
|
|
1186
1187
|
|
1187
|
-
zoned_datetimes_2000 = zoned_datetimes(
|
1188
|
-
min_value=ZonedDateTime(2000, 1, 1, tz=UTC.key),
|
1189
|
-
max_value=ZonedDateTime(2000, 12, 31, tz=UTC.key),
|
1190
|
-
)
|
1191
|
-
|
1192
|
-
|
1193
1188
|
class TestToZonedDateTime:
|
1194
1189
|
@given(date_time=zoned_datetimes())
|
1195
1190
|
def test_date_time(self, *, date_time: ZonedDateTime) -> None:
|
@@ -1415,6 +1415,11 @@ def zoned_datetimes(
|
|
1415
1415
|
return zoned
|
1416
1416
|
|
1417
1417
|
|
1418
|
+
zoned_datetimes_2000 = zoned_datetimes(
|
1419
|
+
min_value=ZonedDateTime(2000, 1, 1, tz=UTC.key),
|
1420
|
+
max_value=ZonedDateTime(2000, 12, 31, tz=UTC.key),
|
1421
|
+
)
|
1422
|
+
|
1418
1423
|
__all__ = [
|
1419
1424
|
"Draw2Error",
|
1420
1425
|
"MaybeSearchStrategy",
|
@@ -1468,4 +1473,5 @@ __all__ = [
|
|
1468
1473
|
"versions",
|
1469
1474
|
"year_months",
|
1470
1475
|
"zoned_datetimes",
|
1476
|
+
"zoned_datetimes_2000",
|
1471
1477
|
]
|
@@ -1,5 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
import datetime as dt
|
3
4
|
from dataclasses import dataclass
|
4
5
|
from typing import TYPE_CHECKING, Any, Self, TypedDict, assert_never, overload, override
|
5
6
|
from zoneinfo import ZoneInfo
|
@@ -16,7 +17,9 @@ if TYPE_CHECKING:
|
|
16
17
|
from utilities.types import TimeZoneLike
|
17
18
|
|
18
19
|
|
19
|
-
class _PeriodAsDict[T:
|
20
|
+
class _PeriodAsDict[T: Date | Time | ZonedDateTime | dt.date | dt.time | dt.datetime](
|
21
|
+
TypedDict
|
22
|
+
):
|
20
23
|
start: T
|
21
24
|
end: T
|
22
25
|
|
@@ -81,6 +84,25 @@ class DatePeriod:
|
|
81
84
|
return f"{fc(start)}-{fc(end, fmt='%m%d')}"
|
82
85
|
return f"{fc(start)}-{fc(end)}"
|
83
86
|
|
87
|
+
@classmethod
|
88
|
+
def from_dict(cls, mapping: _PeriodAsDict[Date | dt.date], /) -> Self:
|
89
|
+
"""Convert the dictionary to a period."""
|
90
|
+
match mapping["start"]:
|
91
|
+
case Date() as start:
|
92
|
+
...
|
93
|
+
case dt.date() as py_date:
|
94
|
+
start = Date.from_py_date(py_date)
|
95
|
+
case never:
|
96
|
+
assert_never(never)
|
97
|
+
match mapping["end"]:
|
98
|
+
case Date() as end:
|
99
|
+
...
|
100
|
+
case dt.date() as py_date:
|
101
|
+
end = Date.from_py_date(py_date)
|
102
|
+
case never:
|
103
|
+
assert_never(never)
|
104
|
+
return cls(start=start, end=end)
|
105
|
+
|
84
106
|
def replace(
|
85
107
|
self, *, start: Date | Sentinel = sentinel, end: Date | Sentinel = sentinel
|
86
108
|
) -> Self:
|
@@ -104,12 +126,6 @@ class TimePeriod:
|
|
104
126
|
cls = get_class_name(self)
|
105
127
|
return f"{cls}({self.start}, {self.end})"
|
106
128
|
|
107
|
-
def replace(
|
108
|
-
self, *, start: Time | Sentinel = sentinel, end: Time | Sentinel = sentinel
|
109
|
-
) -> Self:
|
110
|
-
"""Replace elements of the period."""
|
111
|
-
return replace_non_sentinel(self, start=start, end=end)
|
112
|
-
|
113
129
|
def at(
|
114
130
|
self, obj: Date | tuple[Date, Date], /, *, time_zone: TimeZoneLike = UTC
|
115
131
|
) -> ZonedDateTimePeriod:
|
@@ -123,6 +139,31 @@ class TimePeriod:
|
|
123
139
|
assert_never(never)
|
124
140
|
return DatePeriod(start, end).at((self.start, self.end), time_zone=time_zone)
|
125
141
|
|
142
|
+
@classmethod
|
143
|
+
def from_dict(cls, mapping: _PeriodAsDict[Time | dt.time], /) -> Self:
|
144
|
+
"""Convert the dictionary to a period."""
|
145
|
+
match mapping["start"]:
|
146
|
+
case Time() as start:
|
147
|
+
...
|
148
|
+
case dt.time() as py_time:
|
149
|
+
start = Time.from_py_time(py_time)
|
150
|
+
case never:
|
151
|
+
assert_never(never)
|
152
|
+
match mapping["end"]:
|
153
|
+
case Time() as end:
|
154
|
+
...
|
155
|
+
case dt.time() as py_time:
|
156
|
+
end = Time.from_py_time(py_time)
|
157
|
+
case never:
|
158
|
+
assert_never(never)
|
159
|
+
return cls(start=start, end=end)
|
160
|
+
|
161
|
+
def replace(
|
162
|
+
self, *, start: Time | Sentinel = sentinel, end: Time | Sentinel = sentinel
|
163
|
+
) -> Self:
|
164
|
+
"""Replace elements of the period."""
|
165
|
+
return replace_non_sentinel(self, start=start, end=end)
|
166
|
+
|
126
167
|
def to_dict(self) -> _PeriodAsDict[Time]:
|
127
168
|
"""Convert the period to a dictionary."""
|
128
169
|
return _PeriodAsDict(start=self.start, end=self.end)
|
@@ -229,6 +270,25 @@ class ZonedDateTimePeriod:
|
|
229
270
|
return f"{fc(start.to_plain())}-{fc(end, fmt='%Y%m%dT%H%M')}"
|
230
271
|
return f"{fc(start.to_plain())}-{fc(end, fmt='%Y%m%dT%H')}"
|
231
272
|
|
273
|
+
@classmethod
|
274
|
+
def from_dict(cls, mapping: _PeriodAsDict[ZonedDateTime | dt.datetime], /) -> Self:
|
275
|
+
"""Convert the dictionary to a period."""
|
276
|
+
match mapping["start"]:
|
277
|
+
case ZonedDateTime() as start:
|
278
|
+
...
|
279
|
+
case dt.date() as py_datetime:
|
280
|
+
start = ZonedDateTime.from_py_datetime(py_datetime)
|
281
|
+
case never:
|
282
|
+
assert_never(never)
|
283
|
+
match mapping["end"]:
|
284
|
+
case ZonedDateTime() as end:
|
285
|
+
...
|
286
|
+
case dt.date() as py_datetime:
|
287
|
+
end = ZonedDateTime.from_py_datetime(py_datetime)
|
288
|
+
case never:
|
289
|
+
assert_never(never)
|
290
|
+
return cls(start=start, end=end)
|
291
|
+
|
232
292
|
def replace(
|
233
293
|
self,
|
234
294
|
*,
|
@@ -258,7 +318,7 @@ class PeriodError(Exception): ...
|
|
258
318
|
|
259
319
|
|
260
320
|
@dataclass(kw_only=True, slots=True)
|
261
|
-
class _PeriodInvalidError[T:
|
321
|
+
class _PeriodInvalidError[T: Date | ZonedDateTime](PeriodError):
|
262
322
|
start: T
|
263
323
|
end: T
|
264
324
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/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.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/tests/test_typing_funcs/with_future.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
File without changes
|
{dycw_utilities-0.151.8 → dycw_utilities-0.151.9}/src/utilities/pytest_plugins/pytest_regressions.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|