dycw-utilities 0.150.12__tar.gz → 0.150.14__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.12 → dycw_utilities-0.150.14}/PKG-INFO +1 -1
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/pyproject.toml +2 -2
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_sqlalchemy.py +9 -2
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/sqlalchemy.py +33 -13
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/.gitignore +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/LICENSE +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/README.md +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_dnspython.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_yield_access/__init__.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_yield_access/script.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_yield_access/script.sh +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/click.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/dnspython.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/http.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/json.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/math.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/os.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/period.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/random.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/re.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/string.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/text.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/types.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/version.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/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.150.
|
235
|
+
version = "0.150.14"
|
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.150.
|
268
|
+
current_version = "0.150.14"
|
269
269
|
|
270
270
|
[[tool.bumpversion.files]]
|
271
271
|
filename = "src/utilities/__init__.py"
|
@@ -67,6 +67,7 @@ from utilities.sqlalchemy import (
|
|
67
67
|
_SelectedOrAll,
|
68
68
|
_tuple_to_mapping,
|
69
69
|
check_connect,
|
70
|
+
check_connect_async,
|
70
71
|
check_engine,
|
71
72
|
columnwise_max,
|
72
73
|
columnwise_min,
|
@@ -93,7 +94,7 @@ from utilities.sqlalchemy import (
|
|
93
94
|
)
|
94
95
|
from utilities.text import strip_and_dedent
|
95
96
|
from utilities.typing import get_args, get_literal_elements
|
96
|
-
from utilities.whenever import format_compact, get_now, to_local_plain
|
97
|
+
from utilities.whenever import MILLISECOND, format_compact, get_now, to_local_plain
|
97
98
|
|
98
99
|
if TYPE_CHECKING:
|
99
100
|
from collections.abc import Callable, Iterator
|
@@ -137,9 +138,15 @@ def _upsert_lists(
|
|
137
138
|
|
138
139
|
|
139
140
|
class TestCheckConnect:
|
140
|
-
def
|
141
|
+
def test_sync(self, *, test_engine: Engine) -> None:
|
141
142
|
assert check_connect(test_engine)
|
142
143
|
|
144
|
+
async def test_async(self, *, test_async_engine: AsyncEngine) -> None:
|
145
|
+
assert await check_connect_async(test_async_engine)
|
146
|
+
|
147
|
+
async def test_async_timeout(self, *, test_async_engine: AsyncEngine) -> None:
|
148
|
+
assert not await check_connect_async(test_async_engine, timeout=MILLISECOND)
|
149
|
+
|
143
150
|
|
144
151
|
class TestCheckEngine:
|
145
152
|
async def test_main(self, *, test_async_engine: AsyncEngine) -> None:
|
@@ -97,12 +97,17 @@ from utilities.iterables import (
|
|
97
97
|
)
|
98
98
|
from utilities.reprlib import get_repr
|
99
99
|
from utilities.text import secret_str, snake_case
|
100
|
-
from utilities.types import
|
100
|
+
from utilities.types import (
|
101
|
+
Delta,
|
102
|
+
MaybeIterable,
|
103
|
+
MaybeType,
|
104
|
+
StrMapping,
|
105
|
+
TupleOrStrMapping,
|
106
|
+
)
|
101
107
|
|
102
108
|
if TYPE_CHECKING:
|
103
109
|
from enum import Enum, StrEnum
|
104
110
|
|
105
|
-
from whenever import TimeDelta
|
106
111
|
|
107
112
|
type EngineOrConnectionOrAsync = Engine | Connection | AsyncEngine | AsyncConnection
|
108
113
|
type Dialect = Literal["mssql", "mysql", "oracle", "postgresql", "sqlite"]
|
@@ -115,15 +120,29 @@ CHUNK_SIZE_FRAC = 0.8
|
|
115
120
|
##
|
116
121
|
|
117
122
|
|
123
|
+
_SELECT = text("SELECT 1")
|
124
|
+
|
125
|
+
|
118
126
|
def check_connect(engine: Engine, /) -> bool:
|
119
127
|
"""Check if an engine can connect."""
|
120
128
|
try:
|
121
129
|
with engine.connect() as conn:
|
122
|
-
return bool(conn.execute(
|
130
|
+
return bool(conn.execute(_SELECT).scalar_one())
|
123
131
|
except (OperationalError, ProgrammingError):
|
124
132
|
return False
|
125
133
|
|
126
134
|
|
135
|
+
async def check_connect_async(
|
136
|
+
engine: AsyncEngine, /, *, timeout: Delta | None = None
|
137
|
+
) -> bool:
|
138
|
+
"""Check if an engine can connect."""
|
139
|
+
try:
|
140
|
+
async with timeout_td(timeout), engine.connect() as conn:
|
141
|
+
return bool((await conn.execute(_SELECT)).scalar_one())
|
142
|
+
except (OperationalError, ProgrammingError, TimeoutError):
|
143
|
+
return False
|
144
|
+
|
145
|
+
|
127
146
|
##
|
128
147
|
|
129
148
|
|
@@ -131,7 +150,7 @@ async def check_engine(
|
|
131
150
|
engine: AsyncEngine,
|
132
151
|
/,
|
133
152
|
*,
|
134
|
-
timeout:
|
153
|
+
timeout: Delta | None = None,
|
135
154
|
error: type[Exception] = TimeoutError,
|
136
155
|
num_tables: int | tuple[int, float] | None = None,
|
137
156
|
) -> None:
|
@@ -304,7 +323,7 @@ async def ensure_tables_created(
|
|
304
323
|
engine: AsyncEngine,
|
305
324
|
/,
|
306
325
|
*tables_or_orms: TableOrORMInstOrClass,
|
307
|
-
timeout:
|
326
|
+
timeout: Delta | None = None,
|
308
327
|
error: type[Exception] = TimeoutError,
|
309
328
|
) -> None:
|
310
329
|
"""Ensure a table/set of tables is/are created."""
|
@@ -333,7 +352,7 @@ async def ensure_tables_created(
|
|
333
352
|
async def ensure_tables_dropped(
|
334
353
|
engine: AsyncEngine,
|
335
354
|
*tables_or_orms: TableOrORMInstOrClass,
|
336
|
-
timeout:
|
355
|
+
timeout: Delta | None = None,
|
337
356
|
error: type[Exception] = TimeoutError,
|
338
357
|
) -> None:
|
339
358
|
"""Ensure a table/set of tables is/are dropped."""
|
@@ -563,9 +582,9 @@ async def insert_items(
|
|
563
582
|
snake: bool = False,
|
564
583
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
565
584
|
assume_tables_exist: bool = False,
|
566
|
-
timeout_create:
|
585
|
+
timeout_create: Delta | None = None,
|
567
586
|
error_create: type[Exception] = TimeoutError,
|
568
|
-
timeout_insert:
|
587
|
+
timeout_insert: Delta | None = None,
|
569
588
|
error_insert: type[Exception] = TimeoutError,
|
570
589
|
) -> None:
|
571
590
|
"""Insert a set of items into a database.
|
@@ -664,9 +683,9 @@ async def migrate_data(
|
|
664
683
|
table_or_orm_to: TableOrORMInstOrClass | None = None,
|
665
684
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
666
685
|
assume_tables_exist: bool = False,
|
667
|
-
timeout_create:
|
686
|
+
timeout_create: Delta | None = None,
|
668
687
|
error_create: type[Exception] = TimeoutError,
|
669
|
-
timeout_insert:
|
688
|
+
timeout_insert: Delta | None = None,
|
670
689
|
error_insert: type[Exception] = TimeoutError,
|
671
690
|
) -> None:
|
672
691
|
"""Migrate the contents of a table from one database to another."""
|
@@ -800,9 +819,9 @@ async def upsert_items(
|
|
800
819
|
selected_or_all: _SelectedOrAll = "selected",
|
801
820
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
802
821
|
assume_tables_exist: bool = False,
|
803
|
-
timeout_create:
|
822
|
+
timeout_create: Delta | None = None,
|
804
823
|
error_create: type[Exception] = TimeoutError,
|
805
|
-
timeout_insert:
|
824
|
+
timeout_insert: Delta | None = None,
|
806
825
|
error_insert: type[Exception] = TimeoutError,
|
807
826
|
) -> None:
|
808
827
|
"""Upsert a set of items into a database.
|
@@ -922,7 +941,7 @@ async def yield_connection(
|
|
922
941
|
engine: AsyncEngine,
|
923
942
|
/,
|
924
943
|
*,
|
925
|
-
timeout:
|
944
|
+
timeout: Delta | None = None,
|
926
945
|
error: MaybeType[BaseException] = TimeoutError,
|
927
946
|
) -> AsyncIterator[AsyncConnection]:
|
928
947
|
"""Yield an async connection."""
|
@@ -1260,6 +1279,7 @@ __all__ = [
|
|
1260
1279
|
"TablenameMixin",
|
1261
1280
|
"UpsertItemsError",
|
1262
1281
|
"check_connect",
|
1282
|
+
"check_connect_async",
|
1263
1283
|
"check_engine",
|
1264
1284
|
"columnwise_max",
|
1265
1285
|
"columnwise_min",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_with/outer_2.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/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
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/tests/test_typing_funcs/no_future.py
RENAMED
File without changes
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/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.12 → dycw_utilities-0.150.14}/src/utilities/pytest_plugins/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.150.12 → dycw_utilities-0.150.14}/src/utilities/pytest_plugins/pytest_randomly.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
|