dycw-utilities 0.150.0__tar.gz → 0.150.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.150.0 → dycw_utilities-0.150.2}/PKG-INFO +1 -1
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/pyproject.toml +2 -2
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_postgres.py +23 -13
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/postgres.py +38 -8
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/sqlalchemy.py +7 -2
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/.gitignore +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/LICENSE +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/README.md +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_dnspython.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_yield_access/__init__.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_yield_access/script.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_yield_access/script.sh +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/click.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/dnspython.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/http.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/json.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/math.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/os.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/period.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/random.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/re.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/string.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/text.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/types.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/version.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/zoneinfo.py +0 -0
@@ -103,7 +103,7 @@ dependencies = [
|
|
103
103
|
name = "dycw-utilities"
|
104
104
|
readme = "README.md"
|
105
105
|
requires-python = ">= 3.12"
|
106
|
-
version = "0.150.
|
106
|
+
version = "0.150.2"
|
107
107
|
|
108
108
|
[project.entry-points.pytest11]
|
109
109
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -136,7 +136,7 @@ test = [
|
|
136
136
|
# bump-my-version
|
137
137
|
[tool.bumpversion]
|
138
138
|
allow_dirty = true
|
139
|
-
current_version = "0.150.
|
139
|
+
current_version = "0.150.2"
|
140
140
|
|
141
141
|
[[tool.bumpversion.files]]
|
142
142
|
filename = "src/utilities/__init__.py"
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
from typing import TYPE_CHECKING
|
4
4
|
|
5
|
-
from hypothesis import given
|
5
|
+
from hypothesis import assume, given
|
6
6
|
from hypothesis.strategies import DrawFn, booleans, composite, lists, none, sampled_from
|
7
7
|
from pytest import raises
|
8
8
|
from sqlalchemy import URL, Column, Integer, MetaData, Table
|
@@ -17,6 +17,8 @@ from utilities.postgres import (
|
|
17
17
|
_ExtractURLPortError,
|
18
18
|
_path_pg_dump,
|
19
19
|
_PGDumpFormat,
|
20
|
+
_resolve_data_only_and_clean,
|
21
|
+
_ResolveDataOnlyAndCleanError,
|
20
22
|
pg_dump,
|
21
23
|
restore,
|
22
24
|
)
|
@@ -63,14 +65,13 @@ class TestPGDump:
|
|
63
65
|
path=temp_paths(),
|
64
66
|
format_=sampled_from(get_literal_elements(_PGDumpFormat)),
|
65
67
|
jobs=integers(min_value=0) | none(),
|
66
|
-
data_only=booleans(),
|
67
|
-
clean=booleans(),
|
68
68
|
schema=lists(text_ascii(min_size=1)) | none(),
|
69
69
|
schema_exc=lists(text_ascii(min_size=1)) | none(),
|
70
70
|
table=tables() | none(),
|
71
71
|
table_exc=tables() | none(),
|
72
72
|
inserts=booleans(),
|
73
73
|
on_conflict_do_nothing=booleans(),
|
74
|
+
role=text_ascii(min_size=1) | none(),
|
74
75
|
docker=text_ascii(min_size=1) | none(),
|
75
76
|
)
|
76
77
|
def test_build(
|
@@ -80,14 +81,13 @@ class TestPGDump:
|
|
80
81
|
path: Path,
|
81
82
|
format_: _PGDumpFormat,
|
82
83
|
jobs: int | None,
|
83
|
-
data_only: bool,
|
84
|
-
clean: bool,
|
85
84
|
schema: list[str] | None,
|
86
85
|
schema_exc: list[str] | None,
|
87
86
|
table: list[Table | str] | None,
|
88
87
|
table_exc: list[Table | str] | None,
|
89
88
|
inserts: bool,
|
90
89
|
on_conflict_do_nothing: bool,
|
90
|
+
role: str | None,
|
91
91
|
docker: str | None,
|
92
92
|
) -> None:
|
93
93
|
_ = _build_pg_dump(
|
@@ -95,14 +95,13 @@ class TestPGDump:
|
|
95
95
|
path,
|
96
96
|
format_=format_,
|
97
97
|
jobs=jobs,
|
98
|
-
data_only=data_only,
|
99
|
-
clean=clean,
|
100
98
|
schema=schema,
|
101
99
|
schema_exc=schema_exc,
|
102
100
|
table=table,
|
103
101
|
table_exc=table_exc,
|
104
102
|
inserts=inserts,
|
105
103
|
on_conflict_do_nothing=on_conflict_do_nothing,
|
104
|
+
role=role,
|
106
105
|
docker=docker,
|
107
106
|
)
|
108
107
|
|
@@ -112,6 +111,20 @@ class TestPGDump:
|
|
112
111
|
assert path.suffix in [".sql", ".pgdump", "", ".tar"]
|
113
112
|
|
114
113
|
|
114
|
+
class TestResolveDataOnlyAndClean:
|
115
|
+
@given(data_only=booleans(), clean=booleans())
|
116
|
+
def test_main(self, *, data_only: bool, clean: bool) -> None:
|
117
|
+
_ = assume(not (data_only and clean))
|
118
|
+
_ = _resolve_data_only_and_clean(data_only=data_only, clean=clean)
|
119
|
+
|
120
|
+
def test_erorr(self) -> None:
|
121
|
+
with raises(
|
122
|
+
_ResolveDataOnlyAndCleanError,
|
123
|
+
match="Cannot use '--data-only' and '--clean' together",
|
124
|
+
):
|
125
|
+
_ = _resolve_data_only_and_clean(data_only=True, clean=True)
|
126
|
+
|
127
|
+
|
115
128
|
class TestRestore:
|
116
129
|
@given(url=urls(), path=temp_paths(), logger=text_ascii(min_size=1) | none())
|
117
130
|
async def test_main(self, *, url: URL, path: Path, logger: str | None) -> None:
|
@@ -122,12 +135,11 @@ class TestRestore:
|
|
122
135
|
path=temp_paths(),
|
123
136
|
psql=booleans(),
|
124
137
|
database=text_ascii(min_size=1) | none(),
|
125
|
-
data_only=booleans(),
|
126
|
-
clean=booleans(),
|
127
138
|
jobs=integers(min_value=0) | none(),
|
128
139
|
schema=lists(text_ascii(min_size=1)) | none(),
|
129
140
|
schema_exc=lists(text_ascii(min_size=1)) | none(),
|
130
141
|
table=tables() | none(),
|
142
|
+
role=text_ascii(min_size=1) | none(),
|
131
143
|
docker=text_ascii(min_size=1) | none(),
|
132
144
|
)
|
133
145
|
def test_build(
|
@@ -137,12 +149,11 @@ class TestRestore:
|
|
137
149
|
path: Path,
|
138
150
|
psql: bool,
|
139
151
|
database: str | None,
|
140
|
-
data_only: bool,
|
141
|
-
clean: bool,
|
142
152
|
jobs: int | None,
|
143
153
|
schema: list[str] | None,
|
144
154
|
schema_exc: list[str] | None,
|
145
155
|
table: list[Table | str] | None,
|
156
|
+
role: str | None,
|
146
157
|
docker: str | None,
|
147
158
|
) -> None:
|
148
159
|
_ = _build_pg_restore_or_psql(
|
@@ -150,12 +161,11 @@ class TestRestore:
|
|
150
161
|
path,
|
151
162
|
psql=psql,
|
152
163
|
database=database,
|
153
|
-
data_only=data_only,
|
154
|
-
clean=clean,
|
155
164
|
jobs=jobs,
|
156
165
|
schema=schema,
|
157
166
|
schema_exc=schema_exc,
|
158
167
|
table=table,
|
168
|
+
role=role,
|
159
169
|
docker=docker,
|
160
170
|
)
|
161
171
|
|
@@ -42,6 +42,7 @@ async def pg_dump(
|
|
42
42
|
table_exc: MaybeSequence[TableOrORMInstOrClass | str] | None = None,
|
43
43
|
inserts: bool = False,
|
44
44
|
on_conflict_do_nothing: bool = False,
|
45
|
+
role: str | None = None,
|
45
46
|
docker: str | None = None,
|
46
47
|
dry_run: bool = False,
|
47
48
|
logger: LoggerOrName | None = None,
|
@@ -62,6 +63,7 @@ async def pg_dump(
|
|
62
63
|
table_exc=table_exc,
|
63
64
|
inserts=inserts,
|
64
65
|
on_conflict_do_nothing=on_conflict_do_nothing,
|
66
|
+
role=role,
|
65
67
|
docker=docker,
|
66
68
|
)
|
67
69
|
if dry_run:
|
@@ -110,6 +112,7 @@ def _build_pg_dump(
|
|
110
112
|
table_exc: MaybeSequence[TableOrORMInstOrClass | str] | None = None,
|
111
113
|
inserts: bool = False,
|
112
114
|
on_conflict_do_nothing: bool = False,
|
115
|
+
role: str | None = None,
|
113
116
|
docker: str | None = None,
|
114
117
|
) -> str:
|
115
118
|
database, host, port = _extract_url(url)
|
@@ -122,6 +125,7 @@ def _build_pg_dump(
|
|
122
125
|
f"--format={format_}",
|
123
126
|
"--verbose",
|
124
127
|
# output options
|
128
|
+
*_resolve_data_only_and_clean(data_only=data_only, clean=clean),
|
125
129
|
"--large-objects",
|
126
130
|
"--create",
|
127
131
|
"--no-owner",
|
@@ -133,10 +137,6 @@ def _build_pg_dump(
|
|
133
137
|
]
|
134
138
|
if (format_ == "directory") and (jobs is not None):
|
135
139
|
parts.append(f"--jobs={jobs}")
|
136
|
-
if data_only:
|
137
|
-
parts.append("--data-only")
|
138
|
-
if clean:
|
139
|
-
parts.extend(["--clean", "--if-exists"])
|
140
140
|
if schema is not None:
|
141
141
|
parts.extend([f"--schema={s}" for s in always_iterable(schema)])
|
142
142
|
if schema_exc is not None:
|
@@ -153,6 +153,8 @@ def _build_pg_dump(
|
|
153
153
|
parts.append("--on-conflict-do-nothing")
|
154
154
|
if url.username is not None:
|
155
155
|
parts.append(f"--username={url.username}")
|
156
|
+
if role is not None:
|
157
|
+
parts.append(f"--role={role}")
|
156
158
|
if docker is not None:
|
157
159
|
parts = _wrap_docker(parts, docker)
|
158
160
|
return " ".join(parts)
|
@@ -192,6 +194,7 @@ async def restore(
|
|
192
194
|
schema: MaybeListStr | None = None,
|
193
195
|
schema_exc: MaybeListStr | None = None,
|
194
196
|
table: MaybeSequence[TableOrORMInstOrClass | str] | None = None,
|
197
|
+
role: str | None = None,
|
195
198
|
docker: str | None = None,
|
196
199
|
dry_run: bool = False,
|
197
200
|
logger: LoggerOrName | None = None,
|
@@ -208,6 +211,7 @@ async def restore(
|
|
208
211
|
schema=schema,
|
209
212
|
schema_exc=schema_exc,
|
210
213
|
table=table,
|
214
|
+
role=role,
|
211
215
|
docker=docker,
|
212
216
|
)
|
213
217
|
if dry_run:
|
@@ -255,6 +259,7 @@ def _build_pg_restore_or_psql(
|
|
255
259
|
schema: MaybeListStr | None = None,
|
256
260
|
schema_exc: MaybeListStr | None = None,
|
257
261
|
table: MaybeSequence[TableOrORMInstOrClass | str] | None = None,
|
262
|
+
role: str | None = None,
|
258
263
|
docker: str | None = None,
|
259
264
|
) -> str:
|
260
265
|
path = Path(path)
|
@@ -270,6 +275,7 @@ def _build_pg_restore_or_psql(
|
|
270
275
|
schemas=schema,
|
271
276
|
schemas_exc=schema_exc,
|
272
277
|
tables=table,
|
278
|
+
role=role,
|
273
279
|
docker=docker,
|
274
280
|
)
|
275
281
|
|
@@ -286,6 +292,7 @@ def _build_pg_restore(
|
|
286
292
|
schemas: MaybeListStr | None = None,
|
287
293
|
schemas_exc: MaybeListStr | None = None,
|
288
294
|
tables: MaybeSequence[TableOrORMInstOrClass | str] | None = None,
|
295
|
+
role: str | None = None,
|
289
296
|
docker: str | None = None,
|
290
297
|
) -> str:
|
291
298
|
"""Run `pg_restore`."""
|
@@ -297,6 +304,8 @@ def _build_pg_restore(
|
|
297
304
|
f"--dbname={database_use}",
|
298
305
|
"--verbose",
|
299
306
|
# restore options
|
307
|
+
*_resolve_data_only_and_clean(data_only=data_only, clean=clean),
|
308
|
+
"--create",
|
300
309
|
"--exit-on-error",
|
301
310
|
"--no-owner",
|
302
311
|
"--no-privileges",
|
@@ -305,10 +314,6 @@ def _build_pg_restore(
|
|
305
314
|
f"--port={port}",
|
306
315
|
"--no-password",
|
307
316
|
]
|
308
|
-
if data_only:
|
309
|
-
parts.append("--data-only")
|
310
|
-
if clean:
|
311
|
-
parts.extend(["--clean", "--if-exists"])
|
312
317
|
if jobs is not None:
|
313
318
|
parts.append(f"--jobs={jobs}")
|
314
319
|
if schemas is not None:
|
@@ -319,6 +324,8 @@ def _build_pg_restore(
|
|
319
324
|
parts.extend([f"--table={_get_table_name(t)}" for t in always_iterable(tables)])
|
320
325
|
if url.username is not None:
|
321
326
|
parts.append(f"--username={url.username}")
|
327
|
+
if role is not None:
|
328
|
+
parts.append(f"--role={role}")
|
322
329
|
if docker is not None:
|
323
330
|
parts = _wrap_docker(parts, docker)
|
324
331
|
parts.append(str(path))
|
@@ -402,6 +409,29 @@ def _get_table_name(obj: TableOrORMInstOrClass | str, /) -> str:
|
|
402
409
|
assert_never(never)
|
403
410
|
|
404
411
|
|
412
|
+
def _resolve_data_only_and_clean(
|
413
|
+
*, data_only: bool = False, clean: bool = False
|
414
|
+
) -> list[str]:
|
415
|
+
match data_only, clean:
|
416
|
+
case False, False:
|
417
|
+
return []
|
418
|
+
case True, False:
|
419
|
+
return ["--data-only"]
|
420
|
+
case False, True:
|
421
|
+
return ["--clean", "--if-exists"]
|
422
|
+
case True, True:
|
423
|
+
raise _ResolveDataOnlyAndCleanError
|
424
|
+
case _ as never:
|
425
|
+
assert_never(never)
|
426
|
+
|
427
|
+
|
428
|
+
@dataclass(kw_only=True, slots=True)
|
429
|
+
class _ResolveDataOnlyAndCleanError(Exception):
|
430
|
+
@override
|
431
|
+
def __str__(self) -> str:
|
432
|
+
return "Cannot use '--data-only' and '--clean' together"
|
433
|
+
|
434
|
+
|
405
435
|
def _wrap_docker(parts: list[str], container: str, /) -> list[str]:
|
406
436
|
return ["docker", "exec", "-it", container, *parts]
|
407
437
|
|
@@ -57,7 +57,12 @@ from sqlalchemy.dialects.postgresql.psycopg import PGDialect_psycopg
|
|
57
57
|
from sqlalchemy.dialects.sqlite import Insert as sqlite_Insert
|
58
58
|
from sqlalchemy.dialects.sqlite import dialect as sqlite_dialect
|
59
59
|
from sqlalchemy.dialects.sqlite import insert as sqlite_insert
|
60
|
-
from sqlalchemy.exc import
|
60
|
+
from sqlalchemy.exc import (
|
61
|
+
ArgumentError,
|
62
|
+
DatabaseError,
|
63
|
+
OperationalError,
|
64
|
+
ProgrammingError,
|
65
|
+
)
|
61
66
|
from sqlalchemy.ext.asyncio import AsyncConnection, AsyncEngine
|
62
67
|
from sqlalchemy.orm import (
|
63
68
|
DeclarativeBase,
|
@@ -115,7 +120,7 @@ def check_connect(engine: Engine, /) -> bool:
|
|
115
120
|
try:
|
116
121
|
with engine.connect() as conn:
|
117
122
|
return bool(conn.execute(text("SELECT 1")).scalar_one())
|
118
|
-
except OperationalError:
|
123
|
+
except (OperationalError, ProgrammingError):
|
119
124
|
return False
|
120
125
|
|
121
126
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.150.0 → dycw_utilities-0.150.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.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.150.0 → dycw_utilities-0.150.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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
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.150.0 → dycw_utilities-0.150.2}/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
|
File without changes
|
File without changes
|
{dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/src/utilities/pytest_plugins/pytest_randomly.py
RENAMED
File without changes
|
{dycw_utilities-0.150.0 → dycw_utilities-0.150.2}/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
|