dycw-utilities 0.126.12__tar.gz → 0.127.1__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.126.12 → dycw_utilities-0.127.1}/PKG-INFO +1 -1
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/pyproject.toml +3 -2
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_asyncio.py +44 -27
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_sqlalchemy.py +1 -1
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/asyncio.py +4 -15
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/redis.py +1 -15
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/slack_sdk.py +1 -10
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/sqlalchemy.py +1 -10
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/.gitignore +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/LICENSE +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/README.md +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_asyncio_classes/loopers.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/click.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/git.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/http.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/math.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/os.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/period.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/random.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/re.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/string.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/text.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/types.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/version.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/utilities/zoneinfo.py +0 -0
@@ -94,7 +94,7 @@ dependencies = [
|
|
94
94
|
name = "dycw-utilities"
|
95
95
|
readme = "README.md"
|
96
96
|
requires-python = ">= 3.12"
|
97
|
-
version = "0.
|
97
|
+
version = "0.127.1"
|
98
98
|
|
99
99
|
[project.optional-dependencies]
|
100
100
|
test = [
|
@@ -334,7 +334,7 @@ zzz-test-zoneinfo = [
|
|
334
334
|
# bump-my-version
|
335
335
|
[tool.bumpversion]
|
336
336
|
allow_dirty = true
|
337
|
-
current_version = "0.
|
337
|
+
current_version = "0.127.1"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -375,6 +375,7 @@ data_file = ".coverage/data"
|
|
375
375
|
omit = ["src/utilities/streamlit.py"]
|
376
376
|
parallel = true
|
377
377
|
plugins = ["coverage_conditional_plugin"]
|
378
|
+
source = ["src/utilities"]
|
378
379
|
|
379
380
|
# hatch
|
380
381
|
[tool.hatch]
|
@@ -15,13 +15,12 @@ from hypothesis.strategies import (
|
|
15
15
|
booleans,
|
16
16
|
data,
|
17
17
|
integers,
|
18
|
-
just,
|
19
18
|
lists,
|
20
19
|
none,
|
21
20
|
permutations,
|
22
21
|
sampled_from,
|
23
22
|
)
|
24
|
-
from pytest import LogCaptureFixture, mark, param, raises
|
23
|
+
from pytest import LogCaptureFixture, approx, mark, param, raises
|
25
24
|
|
26
25
|
from tests.test_asyncio_classes.loopers import (
|
27
26
|
_REL,
|
@@ -42,7 +41,6 @@ from utilities.asyncio import (
|
|
42
41
|
InfiniteLooper,
|
43
42
|
InfiniteQueueLooper,
|
44
43
|
Looper,
|
45
|
-
LooperTimeoutError,
|
46
44
|
UniquePriorityQueue,
|
47
45
|
UniqueQueue,
|
48
46
|
_InfiniteLooperDefaultEventError,
|
@@ -72,6 +70,7 @@ from utilities.hypothesis import sentinels, text_ascii
|
|
72
70
|
from utilities.iterables import one, unique_everseen
|
73
71
|
from utilities.pytest import skipif_windows
|
74
72
|
from utilities.sentinel import Sentinel, sentinel
|
73
|
+
from utilities.text import unique_str
|
75
74
|
from utilities.timer import Timer
|
76
75
|
|
77
76
|
if TYPE_CHECKING:
|
@@ -199,7 +198,6 @@ class TestEnhancedTaskGroup:
|
|
199
198
|
assert looper.running
|
200
199
|
assert not looper.running
|
201
200
|
|
202
|
-
@mark.flaky
|
203
201
|
async def test_max_tasks_disabled(self) -> None:
|
204
202
|
with Timer() as timer:
|
205
203
|
async with EnhancedTaskGroup() as tg:
|
@@ -626,7 +624,7 @@ class TestInfiniteLooper:
|
|
626
624
|
):
|
627
625
|
raise _InfiniteLooperDefaultEventError(looper=looper)
|
628
626
|
|
629
|
-
@given(
|
627
|
+
@given(log=booleans())
|
630
628
|
@mark.parametrize(("sleep_restart", "desc"), sleep_restart_cases)
|
631
629
|
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
|
632
630
|
async def test_error_upon_initialize(
|
@@ -634,7 +632,7 @@ class TestInfiniteLooper:
|
|
634
632
|
*,
|
635
633
|
sleep_restart: DurationOrEveryDuration,
|
636
634
|
desc: str,
|
637
|
-
|
635
|
+
log: bool,
|
638
636
|
caplog: LogCaptureFixture,
|
639
637
|
) -> None:
|
640
638
|
class CustomError(Exception): ...
|
@@ -651,15 +649,19 @@ class TestInfiniteLooper:
|
|
651
649
|
|
652
650
|
async with (
|
653
651
|
timeout(1.0),
|
654
|
-
Example(
|
652
|
+
Example(
|
653
|
+
sleep_core=0.1,
|
654
|
+
sleep_restart=sleep_restart,
|
655
|
+
logger=unique_str() if log else None,
|
656
|
+
),
|
655
657
|
):
|
656
658
|
...
|
657
|
-
if
|
659
|
+
if log:
|
658
660
|
message = caplog.messages[0]
|
659
661
|
expected = f"'Example' encountered 'CustomError()' whilst initializing; sleeping {desc}..."
|
660
662
|
assert message == expected
|
661
663
|
|
662
|
-
@given(
|
664
|
+
@given(log=booleans())
|
663
665
|
@mark.parametrize(("sleep_restart", "desc"), sleep_restart_cases)
|
664
666
|
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
|
665
667
|
async def test_error_upon_core(
|
@@ -667,7 +669,7 @@ class TestInfiniteLooper:
|
|
667
669
|
*,
|
668
670
|
sleep_restart: DurationOrEveryDuration,
|
669
671
|
desc: str,
|
670
|
-
|
672
|
+
log: bool,
|
671
673
|
caplog: LogCaptureFixture,
|
672
674
|
) -> None:
|
673
675
|
class CustomError(Exception): ...
|
@@ -680,15 +682,19 @@ class TestInfiniteLooper:
|
|
680
682
|
|
681
683
|
async with (
|
682
684
|
timeout(1.0),
|
683
|
-
Example(
|
685
|
+
Example(
|
686
|
+
sleep_core=0.1,
|
687
|
+
sleep_restart=sleep_restart,
|
688
|
+
logger=unique_str() if log else None,
|
689
|
+
),
|
684
690
|
):
|
685
691
|
...
|
686
|
-
if
|
692
|
+
if log:
|
687
693
|
message = caplog.messages[0]
|
688
694
|
expected = f"'Example' encountered 'CustomError()'; sleeping {desc}..."
|
689
695
|
assert message == expected
|
690
696
|
|
691
|
-
@given(
|
697
|
+
@given(log=booleans())
|
692
698
|
@mark.parametrize(("sleep_restart", "desc"), sleep_restart_cases)
|
693
699
|
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
|
694
700
|
async def test_error_upon_teardown(
|
@@ -696,7 +702,7 @@ class TestInfiniteLooper:
|
|
696
702
|
*,
|
697
703
|
sleep_restart: DurationOrEveryDuration,
|
698
704
|
desc: str,
|
699
|
-
|
705
|
+
log: bool,
|
700
706
|
caplog: LogCaptureFixture,
|
701
707
|
) -> None:
|
702
708
|
class Custom1Error(Exception): ...
|
@@ -725,14 +731,18 @@ class TestInfiniteLooper:
|
|
725
731
|
|
726
732
|
async with (
|
727
733
|
timeout(1.0),
|
728
|
-
Example(
|
734
|
+
Example(
|
735
|
+
sleep_core=0.1,
|
736
|
+
sleep_restart=sleep_restart,
|
737
|
+
logger=unique_str() if log else None,
|
738
|
+
),
|
729
739
|
):
|
730
740
|
...
|
731
|
-
if
|
741
|
+
if log:
|
732
742
|
expected = f"'Example' encountered 'Custom2Error()' whilst tearing down; sleeping {desc}..."
|
733
743
|
assert expected in caplog.messages
|
734
744
|
|
735
|
-
@given(
|
745
|
+
@given(log=booleans())
|
736
746
|
@mark.parametrize(("sleep_restart", "desc"), sleep_restart_cases)
|
737
747
|
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
|
738
748
|
async def test_error_group_upon_others(
|
@@ -740,7 +750,7 @@ class TestInfiniteLooper:
|
|
740
750
|
*,
|
741
751
|
sleep_restart: DurationOrEveryDuration,
|
742
752
|
desc: str,
|
743
|
-
|
753
|
+
log: bool,
|
744
754
|
caplog: LogCaptureFixture,
|
745
755
|
) -> None:
|
746
756
|
class CustomError(Exception): ...
|
@@ -771,10 +781,14 @@ class TestInfiniteLooper:
|
|
771
781
|
|
772
782
|
async with (
|
773
783
|
timeout(1.0),
|
774
|
-
Example(
|
784
|
+
Example(
|
785
|
+
sleep_core=0.05,
|
786
|
+
sleep_restart=sleep_restart,
|
787
|
+
logger=unique_str() if log else None,
|
788
|
+
),
|
775
789
|
):
|
776
790
|
...
|
777
|
-
if
|
791
|
+
if log:
|
778
792
|
message = caplog.messages[0]
|
779
793
|
expected = f"""\
|
780
794
|
'Example' encountered 1 error(s):
|
@@ -868,11 +882,10 @@ class TestInfiniteQueueLooper:
|
|
868
882
|
await looper.run_until_empty(stop=True)
|
869
883
|
assert looper.empty()
|
870
884
|
|
871
|
-
@given(
|
872
|
-
@mark.flaky
|
885
|
+
@given(log=booleans())
|
873
886
|
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
|
874
887
|
async def test_error_process_items(
|
875
|
-
self, *,
|
888
|
+
self, *, log: bool, caplog: LogCaptureFixture
|
876
889
|
) -> None:
|
877
890
|
class CustomError(Exception): ...
|
878
891
|
|
@@ -884,9 +897,12 @@ class TestInfiniteQueueLooper:
|
|
884
897
|
async def _process_queue(self) -> None:
|
885
898
|
raise CustomError
|
886
899
|
|
887
|
-
async with
|
900
|
+
async with (
|
901
|
+
timeout(1.0),
|
902
|
+
Example(sleep_core=0.05, logger=unique_str() if log else None) as looper,
|
903
|
+
):
|
888
904
|
looper.put_left_nowait(1)
|
889
|
-
if
|
905
|
+
if log:
|
890
906
|
message = caplog.messages[0]
|
891
907
|
expected = "'Example' encountered 'CustomError()'; sleeping for 0:01:00..."
|
892
908
|
assert message == expected
|
@@ -1361,9 +1377,10 @@ class TestLooper:
|
|
1361
1377
|
|
1362
1378
|
async def test_timeout(self) -> None:
|
1363
1379
|
looper = CountingLooper(timeout=1.0)
|
1364
|
-
|
1365
|
-
with
|
1380
|
+
with Timer() as timer:
|
1381
|
+
async with looper:
|
1366
1382
|
await looper
|
1383
|
+
assert float(timer) == approx(1.0, rel=_REL)
|
1367
1384
|
self._assert_stats_full(looper, stops=1)
|
1368
1385
|
|
1369
1386
|
def test_with_auto_start(self) -> None:
|
@@ -170,7 +170,7 @@ class TestCheckEngine:
|
|
170
170
|
|
171
171
|
class TestColumnwiseMinMax:
|
172
172
|
@given(data=data(), values=sets(pairs(integers(0, 10) | none()), min_size=1))
|
173
|
-
@
|
173
|
+
@settings(max_examples=1, phases={Phase.generate})
|
174
174
|
async def test_main(
|
175
175
|
self, *, data: DataObject, values: set[tuple[int | None, int | None]]
|
176
176
|
) -> None:
|
@@ -663,15 +663,6 @@ class InfiniteQueueLooper(InfiniteLooper[THashable], Generic[THashable, _T]):
|
|
663
663
|
class LooperError(Exception): ...
|
664
664
|
|
665
665
|
|
666
|
-
@dataclass(kw_only=True, slots=True)
|
667
|
-
class LooperTimeoutError(LooperError):
|
668
|
-
duration: Duration | None = None
|
669
|
-
|
670
|
-
@override
|
671
|
-
def __str__(self) -> str:
|
672
|
-
return "Timeout" if self.duration is None else f"Timeout after {self.duration}"
|
673
|
-
|
674
|
-
|
675
666
|
@dataclass(kw_only=True, slots=True)
|
676
667
|
class _LooperNoTaskError(LooperError):
|
677
668
|
looper: Looper
|
@@ -691,7 +682,6 @@ class Looper(Generic[_T]):
|
|
691
682
|
empty_upon_exit: bool = field(default=False, repr=False)
|
692
683
|
logger: str | None = field(default=None, repr=False)
|
693
684
|
timeout: Duration | None = field(default=None, repr=False)
|
694
|
-
timeout_error: type[Exception] = field(default=LooperTimeoutError, repr=False)
|
695
685
|
# settings
|
696
686
|
_backoff: float = field(init=False, repr=False)
|
697
687
|
_debug: bool = field(default=False, repr=False)
|
@@ -757,7 +747,7 @@ class Looper(Generic[_T]):
|
|
757
747
|
_ = await self._stack.enter_async_context(looper)
|
758
748
|
if self.auto_start:
|
759
749
|
_ = self._debug and self._logger.debug("%s: auto-starting...", self)
|
760
|
-
with suppress(
|
750
|
+
with suppress(TimeoutError):
|
761
751
|
await self._task
|
762
752
|
case _ as never:
|
763
753
|
assert_never(never)
|
@@ -893,7 +883,6 @@ class Looper(Generic[_T]):
|
|
893
883
|
backoff: Duration | Sentinel = sentinel,
|
894
884
|
logger: str | None | Sentinel = sentinel,
|
895
885
|
timeout: Duration | None | Sentinel = sentinel,
|
896
|
-
timeout_error: type[Exception] | Sentinel = sentinel,
|
897
886
|
_debug: bool | Sentinel = sentinel,
|
898
887
|
**kwargs: Any,
|
899
888
|
) -> Self:
|
@@ -906,7 +895,6 @@ class Looper(Generic[_T]):
|
|
906
895
|
backoff=backoff,
|
907
896
|
logger=logger,
|
908
897
|
timeout=timeout,
|
909
|
-
timeout_error=timeout_error,
|
910
898
|
_debug=_debug,
|
911
899
|
**kwargs,
|
912
900
|
)
|
@@ -1029,7 +1017,7 @@ class Looper(Generic[_T]):
|
|
1029
1017
|
async def run_looper(self) -> None:
|
1030
1018
|
"""Run the looper."""
|
1031
1019
|
try:
|
1032
|
-
async with timeout_dur(duration=self.timeout
|
1020
|
+
async with timeout_dur(duration=self.timeout):
|
1033
1021
|
while True:
|
1034
1022
|
if self._is_stopped.is_set():
|
1035
1023
|
_ = self._debug and self._logger.debug("%s: stopped", self)
|
@@ -1068,6 +1056,8 @@ class Looper(Generic[_T]):
|
|
1068
1056
|
if error.args[0] == "generator didn't stop after athrow()":
|
1069
1057
|
return
|
1070
1058
|
raise
|
1059
|
+
except TimeoutError:
|
1060
|
+
pass
|
1071
1061
|
|
1072
1062
|
async def run_until_empty(self) -> None:
|
1073
1063
|
"""Run until the queue is empty."""
|
@@ -1430,7 +1420,6 @@ __all__ = [
|
|
1430
1420
|
"InfiniteQueueLooper",
|
1431
1421
|
"Looper",
|
1432
1422
|
"LooperError",
|
1433
|
-
"LooperTimeoutError",
|
1434
1423
|
"StreamCommandOutput",
|
1435
1424
|
"UniquePriorityQueue",
|
1436
1425
|
"UniqueQueue",
|
@@ -25,13 +25,7 @@ from typing import (
|
|
25
25
|
from redis.asyncio import Redis
|
26
26
|
from redis.typing import EncodableT
|
27
27
|
|
28
|
-
from utilities.asyncio import
|
29
|
-
EnhancedQueue,
|
30
|
-
InfiniteQueueLooper,
|
31
|
-
Looper,
|
32
|
-
LooperTimeoutError,
|
33
|
-
timeout_dur,
|
34
|
-
)
|
28
|
+
from utilities.asyncio import EnhancedQueue, InfiniteQueueLooper, Looper, timeout_dur
|
35
29
|
from utilities.contextlib import suppress_super_object_attribute_error
|
36
30
|
from utilities.datetime import (
|
37
31
|
MILLISECOND,
|
@@ -702,9 +696,6 @@ class PublishServiceMixin(Generic[_T]):
|
|
702
696
|
publish_service_empty_upon_exit: bool = field(default=False, repr=False)
|
703
697
|
publish_service_logger: str | None = field(default=None, repr=False)
|
704
698
|
publish_service_timeout: Duration | None = field(default=None, repr=False)
|
705
|
-
publish_service_timeout_error: type[Exception] = field(
|
706
|
-
default=LooperTimeoutError, repr=False
|
707
|
-
)
|
708
699
|
publish_service_debug: bool = field(default=False, repr=False)
|
709
700
|
_is_pending_restart: Event = field(default_factory=Event, init=False, repr=False)
|
710
701
|
# base - publish service
|
@@ -724,7 +715,6 @@ class PublishServiceMixin(Generic[_T]):
|
|
724
715
|
empty_upon_exit=self.publish_service_empty_upon_exit,
|
725
716
|
logger=self.publish_service_logger,
|
726
717
|
timeout=self.publish_service_timeout,
|
727
|
-
timeout_error=self.publish_service_timeout_error,
|
728
718
|
_debug=self.publish_service_debug,
|
729
719
|
# publish service
|
730
720
|
redis=self.publish_service_redis,
|
@@ -986,9 +976,6 @@ class SubscribeServiceMixin(Generic[_T]):
|
|
986
976
|
subscribe_service_empty_upon_exit: bool = field(default=False, repr=False)
|
987
977
|
subscribe_service_logger: str | None = field(default=None, repr=False)
|
988
978
|
subscribe_service_timeout: Duration | None = field(default=None, repr=False)
|
989
|
-
subscribe_service_timeout_error: type[Exception] = field(
|
990
|
-
default=LooperTimeoutError, repr=False
|
991
|
-
)
|
992
979
|
subscribe_service_debug: bool = field(default=False, repr=False)
|
993
980
|
# base - looper
|
994
981
|
subscribe_service_redis: Redis
|
@@ -1009,7 +996,6 @@ class SubscribeServiceMixin(Generic[_T]):
|
|
1009
996
|
empty_upon_exit=self.subscribe_service_empty_upon_exit,
|
1010
997
|
logger=self.subscribe_service_logger,
|
1011
998
|
timeout=self.subscribe_service_timeout,
|
1012
|
-
timeout_error=self.subscribe_service_timeout_error,
|
1013
999
|
_debug=self.subscribe_service_debug,
|
1014
1000
|
# subscribe service
|
1015
1001
|
redis=self.subscribe_service_redis,
|
@@ -7,12 +7,7 @@ from typing import TYPE_CHECKING, Any, Self, override
|
|
7
7
|
|
8
8
|
from slack_sdk.webhook.async_client import AsyncWebhookClient
|
9
9
|
|
10
|
-
from utilities.asyncio import
|
11
|
-
InfiniteQueueLooper,
|
12
|
-
Looper,
|
13
|
-
LooperTimeoutError,
|
14
|
-
timeout_dur,
|
15
|
-
)
|
10
|
+
from utilities.asyncio import InfiniteQueueLooper, Looper, timeout_dur
|
16
11
|
from utilities.datetime import MINUTE, SECOND, datetime_duration_to_float
|
17
12
|
from utilities.functools import cache
|
18
13
|
from utilities.math import safe_round
|
@@ -94,7 +89,6 @@ class SlackHandlerService(Handler, Looper[str]):
|
|
94
89
|
backoff: Duration = SECOND,
|
95
90
|
logger: str | None = None,
|
96
91
|
timeout: Duration | None = None,
|
97
|
-
timeout_error: type[Exception] = LooperTimeoutError,
|
98
92
|
_debug: bool = False,
|
99
93
|
level: int = NOTSET,
|
100
94
|
sender: Callable[[str, str], Coroutine1[None]] = _send_adapter,
|
@@ -108,7 +102,6 @@ class SlackHandlerService(Handler, Looper[str]):
|
|
108
102
|
backoff=backoff,
|
109
103
|
logger=logger,
|
110
104
|
timeout=timeout,
|
111
|
-
timeout_error=timeout_error,
|
112
105
|
_debug=_debug,
|
113
106
|
)
|
114
107
|
Looper.__post_init__(self)
|
@@ -144,7 +137,6 @@ class SlackHandlerService(Handler, Looper[str]):
|
|
144
137
|
backoff: Duration | Sentinel = sentinel,
|
145
138
|
logger: str | None | Sentinel = sentinel,
|
146
139
|
timeout: Duration | None | Sentinel = sentinel,
|
147
|
-
timeout_error: type[Exception] | Sentinel = sentinel,
|
148
140
|
_debug: bool | Sentinel = sentinel,
|
149
141
|
**kwargs: Any,
|
150
142
|
) -> Self:
|
@@ -157,7 +149,6 @@ class SlackHandlerService(Handler, Looper[str]):
|
|
157
149
|
backoff=backoff,
|
158
150
|
logger=logger,
|
159
151
|
timeout=timeout,
|
160
|
-
timeout_error=timeout_error,
|
161
152
|
_debug=_debug,
|
162
153
|
**kwargs,
|
163
154
|
)
|
@@ -57,12 +57,7 @@ from sqlalchemy.orm import (
|
|
57
57
|
from sqlalchemy.orm.exc import UnmappedClassError
|
58
58
|
from sqlalchemy.pool import NullPool, Pool
|
59
59
|
|
60
|
-
from utilities.asyncio import
|
61
|
-
InfiniteQueueLooper,
|
62
|
-
Looper,
|
63
|
-
LooperTimeoutError,
|
64
|
-
timeout_dur,
|
65
|
-
)
|
60
|
+
from utilities.asyncio import InfiniteQueueLooper, Looper, timeout_dur
|
66
61
|
from utilities.contextlib import suppress_super_object_attribute_error
|
67
62
|
from utilities.datetime import SECOND
|
68
63
|
from utilities.functions import (
|
@@ -707,9 +702,6 @@ class UpsertServiceMixin:
|
|
707
702
|
upsert_service_empty_upon_exit: bool = field(default=False, repr=False)
|
708
703
|
upsert_service_logger: str | None = field(default=None, repr=False)
|
709
704
|
upsert_service_timeout: Duration | None = field(default=None, repr=False)
|
710
|
-
upsert_service_timeout_error: type[Exception] = field(
|
711
|
-
default=LooperTimeoutError, repr=False
|
712
|
-
)
|
713
705
|
upsert_service_debug: bool = field(default=False, repr=False)
|
714
706
|
# base - upsert service
|
715
707
|
upsert_service_database: AsyncEngine
|
@@ -734,7 +726,6 @@ class UpsertServiceMixin:
|
|
734
726
|
empty_upon_exit=self.upsert_service_empty_upon_exit,
|
735
727
|
logger=self.upsert_service_logger,
|
736
728
|
timeout=self.upsert_service_timeout,
|
737
|
-
timeout_error=self.upsert_service_timeout_error,
|
738
729
|
_debug=self.upsert_service_debug,
|
739
730
|
# upsert service
|
740
731
|
engine=self.upsert_service_database,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_with/outer_1.py
RENAMED
File without changes
|
{dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/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.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/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
|
{dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_asyncio_classes/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.126.12 → dycw_utilities-0.127.1}/src/tests/test_asyncio_classes/loopers.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
|