dycw-utilities 0.153.5__tar.gz → 0.153.7__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.153.5 → dycw_utilities-0.153.7}/PKG-INFO +1 -1
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/pyproject.toml +2 -2
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_functions.py +45 -17
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/functions.py +16 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/postgres.py +31 -35
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/.gitignore +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/LICENSE +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/README.md +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_yield_access/__init__.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_yield_access/script.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_yield_access/script.sh +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/click.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/http.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/json.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/math.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/os.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/random.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/re.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/string.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/text.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/types.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/version.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/zoneinfo.py +0 -0
@@ -229,7 +229,7 @@ dependencies = [
|
|
229
229
|
name = "dycw-utilities"
|
230
230
|
readme = "README.md"
|
231
231
|
requires-python = ">= 3.12"
|
232
|
-
version = "0.153.
|
232
|
+
version = "0.153.7"
|
233
233
|
|
234
234
|
[project.entry-points.pytest11]
|
235
235
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -262,7 +262,7 @@ test = [
|
|
262
262
|
# bump-my-version
|
263
263
|
[tool.bumpversion]
|
264
264
|
allow_dirty = true
|
265
|
-
current_version = "0.153.
|
265
|
+
current_version = "0.153.7"
|
266
266
|
|
267
267
|
[[tool.bumpversion.files]]
|
268
268
|
filename = "src/utilities/__init__.py"
|
@@ -6,6 +6,8 @@ from functools import cache, cached_property, lru_cache, partial, wraps
|
|
6
6
|
from itertools import chain
|
7
7
|
from operator import neg
|
8
8
|
from pathlib import Path
|
9
|
+
from subprocess import check_output
|
10
|
+
from sys import executable
|
9
11
|
from types import NoneType
|
10
12
|
from typing import TYPE_CHECKING, Any, ClassVar, cast
|
11
13
|
|
@@ -22,7 +24,7 @@ from hypothesis.strategies import (
|
|
22
24
|
permutations,
|
23
25
|
sampled_from,
|
24
26
|
)
|
25
|
-
from pytest import raises
|
27
|
+
from pytest import mark, param, raises
|
26
28
|
|
27
29
|
from utilities.errors import ImpossibleCaseError
|
28
30
|
from utilities.functions import (
|
@@ -95,6 +97,7 @@ from utilities.functions import (
|
|
95
97
|
yield_object_properties,
|
96
98
|
)
|
97
99
|
from utilities.sentinel import sentinel
|
100
|
+
from utilities.text import parse_bool, strip_and_dedent
|
98
101
|
from utilities.whenever import NOW_UTC, ZERO_TIME, get_now, get_today
|
99
102
|
|
100
103
|
if TYPE_CHECKING:
|
@@ -131,40 +134,40 @@ class TestApplyDecorators:
|
|
131
134
|
assert counter == 1
|
132
135
|
|
133
136
|
|
134
|
-
class
|
135
|
-
@given(case=sampled_from([(
|
136
|
-
def test_main(self, *, case: tuple[
|
137
|
+
class TestEnsureBool:
|
138
|
+
@given(case=sampled_from([(True, False), (True, True), (None, True)]))
|
139
|
+
def test_main(self, *, case: tuple[bool | None, bool]) -> None:
|
137
140
|
obj, nullable = case
|
138
|
-
_ =
|
141
|
+
_ = ensure_bool(obj, nullable=nullable)
|
139
142
|
|
140
143
|
@given(
|
141
144
|
case=sampled_from([
|
142
|
-
(False, "Object '.*' of type '.*' must be a
|
143
|
-
(True, "Object '.*' of type '.*' must be a
|
145
|
+
(False, "Object '.*' of type '.*' must be a boolean"),
|
146
|
+
(True, "Object '.*' of type '.*' must be a boolean or None"),
|
144
147
|
])
|
145
148
|
)
|
146
149
|
def test_error(self, *, case: tuple[bool, str]) -> None:
|
147
150
|
nullable, match = case
|
148
|
-
with raises(
|
149
|
-
_ =
|
151
|
+
with raises(EnsureBoolError, match=match):
|
152
|
+
_ = ensure_bool(sentinel, nullable=nullable)
|
150
153
|
|
151
154
|
|
152
|
-
class
|
153
|
-
@given(case=sampled_from([(
|
154
|
-
def test_main(self, *, case: tuple[
|
155
|
+
class TestEnsureBytes:
|
156
|
+
@given(case=sampled_from([(b"", False), (b"", True), (None, True)]))
|
157
|
+
def test_main(self, *, case: tuple[bytes | None, bool]) -> None:
|
155
158
|
obj, nullable = case
|
156
|
-
_ =
|
159
|
+
_ = ensure_bytes(obj, nullable=nullable)
|
157
160
|
|
158
161
|
@given(
|
159
162
|
case=sampled_from([
|
160
|
-
(False, "Object '.*' of type '.*' must be a
|
161
|
-
(True, "Object '.*' of type '.*' must be a
|
163
|
+
(False, "Object '.*' of type '.*' must be a byte string"),
|
164
|
+
(True, "Object '.*' of type '.*' must be a byte string or None"),
|
162
165
|
])
|
163
166
|
)
|
164
167
|
def test_error(self, *, case: tuple[bool, str]) -> None:
|
165
168
|
nullable, match = case
|
166
|
-
with raises(
|
167
|
-
_ =
|
169
|
+
with raises(EnsureBytesError, match=match):
|
170
|
+
_ = ensure_bytes(sentinel, nullable=nullable)
|
168
171
|
|
169
172
|
|
170
173
|
class TestEnsureClass:
|
@@ -915,6 +918,31 @@ class TestSecond:
|
|
915
918
|
assert second(pair) == y
|
916
919
|
|
917
920
|
|
921
|
+
class TestSkipIfOptimize:
|
922
|
+
@mark.parametrize("optimize", [param(True), param(False)])
|
923
|
+
def test_main(self, *, optimize: bool) -> None:
|
924
|
+
code = strip_and_dedent("""
|
925
|
+
from utilities.functions import skip_if_optimize
|
926
|
+
|
927
|
+
is_run = False
|
928
|
+
|
929
|
+
@skip_if_optimize
|
930
|
+
def func() -> None:
|
931
|
+
global is_run
|
932
|
+
is_run = True
|
933
|
+
|
934
|
+
func()
|
935
|
+
print(is_run)
|
936
|
+
""")
|
937
|
+
|
938
|
+
args = [executable]
|
939
|
+
if optimize:
|
940
|
+
args.append("-O")
|
941
|
+
args.extend(["-c", code])
|
942
|
+
is_run = parse_bool(check_output(args, text=True))
|
943
|
+
assert is_run is not optimize
|
944
|
+
|
945
|
+
|
918
946
|
class TestYieldObjectAttributes:
|
919
947
|
@given(n=integers())
|
920
948
|
def test_main(self, *, n: int) -> None:
|
@@ -935,6 +935,21 @@ def second[U](pair: tuple[Any, U], /) -> U:
|
|
935
935
|
##
|
936
936
|
|
937
937
|
|
938
|
+
def skip_if_optimize[**P](func: Callable[P, None], /) -> Callable[P, None]:
|
939
|
+
"""Skip a function if we are in the optimized mode."""
|
940
|
+
if __debug__:
|
941
|
+
return func
|
942
|
+
|
943
|
+
@wraps(func)
|
944
|
+
def wrapped(*args: P.args, **kwargs: P.kwargs) -> None:
|
945
|
+
_ = (args, kwargs)
|
946
|
+
|
947
|
+
return wrapped
|
948
|
+
|
949
|
+
|
950
|
+
##
|
951
|
+
|
952
|
+
|
938
953
|
def yield_object_attributes(
|
939
954
|
obj: Any,
|
940
955
|
/,
|
@@ -1043,6 +1058,7 @@ __all__ = [
|
|
1043
1058
|
"min_nullable",
|
1044
1059
|
"not_func",
|
1045
1060
|
"second",
|
1061
|
+
"skip_if_optimize",
|
1046
1062
|
"yield_object_attributes",
|
1047
1063
|
"yield_object_cached_properties",
|
1048
1064
|
"yield_object_properties",
|
@@ -54,7 +54,7 @@ async def pg_dump(
|
|
54
54
|
docker: str | None = None,
|
55
55
|
dry_run: bool = False,
|
56
56
|
logger: LoggerLike | None = None,
|
57
|
-
) ->
|
57
|
+
) -> bool:
|
58
58
|
"""Run `pg_dump`."""
|
59
59
|
path = _path_pg_dump(path, format_=format_)
|
60
60
|
path.parent.mkdir(parents=True, exist_ok=True)
|
@@ -80,7 +80,7 @@ async def pg_dump(
|
|
80
80
|
if dry_run:
|
81
81
|
if logger is not None:
|
82
82
|
to_logger(logger).info("Would run:\n\t%r", str(cmd))
|
83
|
-
return
|
83
|
+
return True
|
84
84
|
with temp_environ(PGPASSWORD=url.password), Timer() as timer: # pragma: no cover
|
85
85
|
try:
|
86
86
|
output = await stream_command(cmd)
|
@@ -90,22 +90,20 @@ async def pg_dump(
|
|
90
90
|
"Cancelled backup to %r after %s", str(path), timer
|
91
91
|
)
|
92
92
|
rmtree(path, ignore_errors=True)
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
)
|
108
|
-
rmtree(path, ignore_errors=True)
|
93
|
+
return False
|
94
|
+
if output.return_code != 0:
|
95
|
+
if logger is not None:
|
96
|
+
to_logger(logger).exception(
|
97
|
+
"Backup to %r failed after %s\nstderr:\n%s",
|
98
|
+
str(path),
|
99
|
+
timer,
|
100
|
+
output.stderr,
|
101
|
+
)
|
102
|
+
rmtree(path, ignore_errors=True)
|
103
|
+
return False
|
104
|
+
if logger is not None: # pragma: no cover
|
105
|
+
to_logger(logger).info("Backup to %r finished after %s", str(path), timer)
|
106
|
+
return True # pragma: no cover
|
109
107
|
|
110
108
|
|
111
109
|
def _build_pg_dump(
|
@@ -218,7 +216,7 @@ async def restore(
|
|
218
216
|
docker: str | None = None,
|
219
217
|
dry_run: bool = False,
|
220
218
|
logger: LoggerLike | None = None,
|
221
|
-
) ->
|
219
|
+
) -> bool:
|
222
220
|
"""Run `pg_restore`/`psql`."""
|
223
221
|
cmd = _build_pg_restore_or_psql(
|
224
222
|
url,
|
@@ -237,7 +235,7 @@ async def restore(
|
|
237
235
|
if dry_run:
|
238
236
|
if logger is not None:
|
239
237
|
to_logger(logger).info("Would run:\n\t%r", str(cmd))
|
240
|
-
return
|
238
|
+
return True
|
241
239
|
with temp_environ(PGPASSWORD=url.password), Timer() as timer: # pragma: no cover
|
242
240
|
try:
|
243
241
|
output = await stream_command(cmd)
|
@@ -246,21 +244,19 @@ async def restore(
|
|
246
244
|
to_logger(logger).info(
|
247
245
|
"Cancelled restore from %r after %s", str(path), timer
|
248
246
|
)
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
output.stderr,
|
263
|
-
)
|
247
|
+
return False
|
248
|
+
if output.return_code != 0:
|
249
|
+
if logger is not None:
|
250
|
+
to_logger(logger).exception(
|
251
|
+
"Restore from %r failed after %s\nstderr:\n%s",
|
252
|
+
str(path),
|
253
|
+
timer,
|
254
|
+
output.stderr,
|
255
|
+
)
|
256
|
+
return False
|
257
|
+
if logger is not None: # pragma: no cover
|
258
|
+
to_logger(logger).info("Restore from %r finished after %s", str(path), timer)
|
259
|
+
return True # pragma: no cover
|
264
260
|
|
265
261
|
|
266
262
|
##
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/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.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/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
|
{dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/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
|
{dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
File without changes
|
{dycw_utilities-0.153.5 → dycw_utilities-0.153.7}/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
|