dycw-utilities 0.149.11__tar.gz → 0.150.0__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.149.11 → dycw_utilities-0.150.0}/PKG-INFO +1 -1
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/pyproject.toml +3 -3
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/conftest.py +67 -17
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_sqlalchemy.py +150 -101
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_sqlalchemy_polars.py +45 -38
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/sqlalchemy.py +81 -8
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/.gitignore +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/LICENSE +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/README.md +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_dnspython.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_yield_access/__init__.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_yield_access/script.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_yield_access/script.sh +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/click.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/dnspython.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/http.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/json.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/math.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/os.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/period.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/random.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/re.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/string.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/text.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/types.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/version.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.149.11 → dycw_utilities-0.150.0}/src/utilities/zoneinfo.py +0 -0
@@ -83,7 +83,7 @@ scipy = ["scipy >= 1.16.0, < 1.17"]
|
|
83
83
|
sklearn = ["scikit-learn >= 1.7.0, < 1.8"]
|
84
84
|
slack-sdk = ["slack-sdk >= 3.36.0, < 3.37"]
|
85
85
|
slack-sdk-test = ["aiohttp"]
|
86
|
-
sqlalchemy = ["sqlalchemy >= 2.0.41, < 2.1"]
|
86
|
+
sqlalchemy = ["sqlalchemy >= 2.0.41, < 2.1", "psycopg"]
|
87
87
|
sqlalchemy-polars = ["sqlalchemy", "polars"]
|
88
88
|
sqlalchemy-polars-test = ["aiosqlite", "asyncpg", "greenlet"]
|
89
89
|
sqlalchemy-test = ["aiosqlite", "asyncpg", "greenlet"]
|
@@ -103,7 +103,7 @@ dependencies = [
|
|
103
103
|
name = "dycw-utilities"
|
104
104
|
readme = "README.md"
|
105
105
|
requires-python = ">= 3.12"
|
106
|
-
version = "0.
|
106
|
+
version = "0.150.0"
|
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.
|
139
|
+
current_version = "0.150.0"
|
140
140
|
|
141
141
|
[[tool.bumpversion.files]]
|
142
142
|
filename = "src/utilities/__init__.py"
|
@@ -1,10 +1,9 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from asyncio import sleep
|
4
3
|
from contextlib import AbstractContextManager, suppress
|
5
4
|
from logging import LogRecord, setLogRecordFactory
|
6
5
|
from os import environ
|
7
|
-
from typing import TYPE_CHECKING
|
6
|
+
from typing import TYPE_CHECKING
|
8
7
|
|
9
8
|
from hypothesis import HealthCheck
|
10
9
|
from pytest import fixture, mark, param, skip
|
@@ -22,6 +21,8 @@ if TYPE_CHECKING:
|
|
22
21
|
|
23
22
|
from _pytest.fixtures import SubRequest
|
24
23
|
from redis.asyncio import Redis
|
24
|
+
from sqlalchemy import Engine, TextClause
|
25
|
+
from sqlalchemy.ext.asyncio import AsyncEngine
|
25
26
|
|
26
27
|
|
27
28
|
FLAKY = mark.flaky(reruns=5, reruns_delay=1)
|
@@ -81,31 +82,68 @@ async def test_redis() -> AsyncIterator[Redis]:
|
|
81
82
|
|
82
83
|
|
83
84
|
@fixture(params=[param("sqlite"), param("postgresql", marks=SKIPIF_CI)])
|
84
|
-
|
85
|
-
from sqlalchemy import
|
85
|
+
def test_engine(*, request: SubRequest, tmp_path: Path) -> Engine:
|
86
|
+
from sqlalchemy.exc import OperationalError
|
86
87
|
|
87
|
-
from utilities.sqlalchemy import
|
88
|
+
from utilities.sqlalchemy import create_engine
|
88
89
|
|
89
90
|
dialect = request.param
|
90
91
|
match dialect:
|
91
92
|
case "sqlite":
|
92
93
|
db_path = tmp_path / "db.sqlite"
|
93
|
-
return
|
94
|
+
return create_engine("sqlite", database=str(db_path))
|
94
95
|
case "postgresql":
|
95
|
-
engine =
|
96
|
-
"postgresql+
|
96
|
+
engine = create_engine(
|
97
|
+
"postgresql+psycopg", host="localhost", port=5432, database="testing"
|
97
98
|
)
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
99
|
+
try:
|
100
|
+
with engine.begin() as conn:
|
101
|
+
tables: Sequence[str] = (
|
102
|
+
conn.execute(_select_tables()).scalars().all()
|
103
|
+
)
|
104
|
+
except OperationalError:
|
105
|
+
...
|
106
|
+
else:
|
107
|
+
for table in filter(_is_to_drop, tables):
|
108
|
+
with engine.begin() as conn, suppress(Exception):
|
109
|
+
_ = conn.execute(_drop_table(table))
|
110
|
+
return engine
|
111
|
+
case _:
|
112
|
+
msg = f"Unsupported dialect: {dialect}"
|
113
|
+
raise NotImplementedError(msg)
|
114
|
+
|
115
|
+
|
116
|
+
@fixture(params=[param("sqlite"), param("postgresql", marks=SKIPIF_CI)])
|
117
|
+
async def test_async_engine(*, request: SubRequest, tmp_path: Path) -> AsyncEngine:
|
118
|
+
from utilities.sqlalchemy import create_engine
|
119
|
+
|
120
|
+
dialect = request.param
|
121
|
+
match dialect:
|
122
|
+
case "sqlite":
|
123
|
+
db_path = tmp_path / "db.sqlite"
|
124
|
+
return create_engine("sqlite+aiosqlite", database=str(db_path), async_=True)
|
125
|
+
case "postgresql":
|
126
|
+
from asyncpg.exceptions import InvalidCatalogNameError
|
127
|
+
|
128
|
+
engine = create_engine(
|
129
|
+
"postgresql+asyncpg",
|
130
|
+
host="localhost",
|
131
|
+
port=5432,
|
132
|
+
database="testing",
|
133
|
+
async_=True,
|
134
|
+
)
|
135
|
+
try:
|
136
|
+
async with engine.begin() as conn:
|
137
|
+
tables: Sequence[str] = (
|
138
|
+
(await conn.execute(_select_tables())).scalars().all()
|
139
|
+
)
|
140
|
+
except InvalidCatalogNameError:
|
141
|
+
...
|
142
|
+
else:
|
143
|
+
for table in filter(_is_to_drop, tables):
|
103
144
|
async with engine.begin() as conn:
|
104
145
|
with suppress(Exception):
|
105
|
-
_ = await conn.execute(
|
106
|
-
text(f'DROP TABLE IF EXISTS "{table}" CASCADE')
|
107
|
-
)
|
108
|
-
await sleep(0.01)
|
146
|
+
_ = await conn.execute(_drop_table(table))
|
109
147
|
return engine
|
110
148
|
case _:
|
111
149
|
msg = f"Unsupported dialect: {dialect}"
|
@@ -122,3 +160,15 @@ def _is_to_drop(table: str, /) -> bool:
|
|
122
160
|
)
|
123
161
|
now = get_now()
|
124
162
|
return (now - datetime) >= MINUTE
|
163
|
+
|
164
|
+
|
165
|
+
def _select_tables() -> TextClause:
|
166
|
+
from sqlalchemy import text
|
167
|
+
|
168
|
+
return text("SELECT tablename FROM pg_tables")
|
169
|
+
|
170
|
+
|
171
|
+
def _drop_table(table: str, /) -> TextClause:
|
172
|
+
from sqlalchemy import text
|
173
|
+
|
174
|
+
return text(f'DROP TABLE IF EXISTS "{table}" CASCADE')
|