dycw-utilities 0.113.5__tar.gz → 0.114.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.113.5 → dycw_utilities-0.114.0}/PKG-INFO +1 -1
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/pyproject.toml +2 -2
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_asyncio.py +51 -72
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/asyncio.py +24 -27
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/slack_sdk.py +1 -1
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/sqlalchemy.py +1 -1
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/.gitignore +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/LICENSE +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/README.md +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_async_service/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_async_service/__main__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_async_service/run.sh +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_queue_processor/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_queue_processor/__main__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_queue_processor/run.sh +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/click.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/git.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/http.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/math.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/os.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/period.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/random.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/re.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/text.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/types.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/version.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/utilities/zoneinfo.py +0 -0
@@ -92,7 +92,7 @@ dependencies = [
|
|
92
92
|
name = "dycw-utilities"
|
93
93
|
readme = "README.md"
|
94
94
|
requires-python = ">= 3.12"
|
95
|
-
version = "0.
|
95
|
+
version = "0.114.0"
|
96
96
|
|
97
97
|
[project.optional-dependencies]
|
98
98
|
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.114.0"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -3,7 +3,6 @@ from __future__ import annotations
|
|
3
3
|
from asyncio import (
|
4
4
|
CancelledError,
|
5
5
|
Event,
|
6
|
-
Lock,
|
7
6
|
PriorityQueue,
|
8
7
|
Queue,
|
9
8
|
TaskGroup,
|
@@ -22,7 +21,6 @@ from hypothesis.strategies import (
|
|
22
21
|
DataObject,
|
23
22
|
data,
|
24
23
|
integers,
|
25
|
-
just,
|
26
24
|
lists,
|
27
25
|
none,
|
28
26
|
permutations,
|
@@ -42,6 +40,8 @@ from utilities.asyncio import (
|
|
42
40
|
get_event,
|
43
41
|
get_items,
|
44
42
|
get_items_nowait,
|
43
|
+
put_items,
|
44
|
+
put_items_nowait,
|
45
45
|
sleep_dur,
|
46
46
|
stream_command,
|
47
47
|
timeout_dur,
|
@@ -335,75 +335,6 @@ class TestGetEvent:
|
|
335
335
|
assert get_event(event=lambda: event) is event
|
336
336
|
|
337
337
|
|
338
|
-
class TestGetItems:
|
339
|
-
@given(
|
340
|
-
xs=lists(integers(), min_size=1),
|
341
|
-
max_size=integers(1, 10) | none(),
|
342
|
-
lock=just(Lock()) | none(),
|
343
|
-
)
|
344
|
-
async def test_put_then_get(
|
345
|
-
self, *, xs: list[int], max_size: int | None, lock: Lock | None
|
346
|
-
) -> None:
|
347
|
-
queue: Queue[int] = Queue()
|
348
|
-
for x in xs:
|
349
|
-
await queue.put(x)
|
350
|
-
result = await get_items(queue, max_size=max_size, lock=lock)
|
351
|
-
if max_size is None:
|
352
|
-
assert result == xs
|
353
|
-
else:
|
354
|
-
assert result == xs[:max_size]
|
355
|
-
|
356
|
-
@given(
|
357
|
-
xs=lists(integers(), min_size=1),
|
358
|
-
max_size=integers(1, 10) | none(),
|
359
|
-
lock=just(Lock()) | none(),
|
360
|
-
)
|
361
|
-
async def test_get_then_put(
|
362
|
-
self, *, xs: list[int], max_size: int | None, lock: Lock | None
|
363
|
-
) -> None:
|
364
|
-
queue: Queue[int] = Queue()
|
365
|
-
|
366
|
-
async def put() -> None:
|
367
|
-
await sleep(0.01)
|
368
|
-
for x in xs:
|
369
|
-
await queue.put(x)
|
370
|
-
|
371
|
-
async with TaskGroup() as tg:
|
372
|
-
task = tg.create_task(get_items(queue, max_size=max_size, lock=lock))
|
373
|
-
_ = tg.create_task(put())
|
374
|
-
result = task.result()
|
375
|
-
if max_size is None:
|
376
|
-
assert result == xs
|
377
|
-
else:
|
378
|
-
assert result == xs[:max_size]
|
379
|
-
|
380
|
-
async def test_empty(self) -> None:
|
381
|
-
queue: Queue[int] = Queue()
|
382
|
-
with raises(TimeoutError): # noqa: PT012
|
383
|
-
async with timeout(0.01), TaskGroup() as tg:
|
384
|
-
_ = tg.create_task(get_items(queue))
|
385
|
-
_ = tg.create_task(sleep(0.02))
|
386
|
-
|
387
|
-
|
388
|
-
class TestGetItemsNoWait:
|
389
|
-
@given(
|
390
|
-
xs=lists(integers(), min_size=1),
|
391
|
-
max_size=integers(1, 10) | none(),
|
392
|
-
lock=just(Lock()) | none(),
|
393
|
-
)
|
394
|
-
async def test_main(
|
395
|
-
self, *, xs: list[int], max_size: int | None, lock: Lock | None
|
396
|
-
) -> None:
|
397
|
-
queue: Queue[int] = Queue()
|
398
|
-
for x in xs:
|
399
|
-
await queue.put(x)
|
400
|
-
result = await get_items_nowait(queue, max_size=max_size, lock=lock)
|
401
|
-
if max_size is None:
|
402
|
-
assert result == xs
|
403
|
-
else:
|
404
|
-
assert result == xs[:max_size]
|
405
|
-
|
406
|
-
|
407
338
|
class TestInfiniteLooper:
|
408
339
|
@given(n=integers(10, 11))
|
409
340
|
async def test_main(self, *, n: int) -> None:
|
@@ -487,6 +418,54 @@ class TestInfiniteLooper:
|
|
487
418
|
_ = await Example(sleep_core=0.1)()
|
488
419
|
|
489
420
|
|
421
|
+
class TestPutAndGetItems:
|
422
|
+
@given(xs=lists(integers(), min_size=1), max_size=integers(1, 10) | none())
|
423
|
+
async def test_put_then_get(self, *, xs: list[int], max_size: int | None) -> None:
|
424
|
+
queue: Queue[int] = Queue()
|
425
|
+
await put_items(xs, queue)
|
426
|
+
result = await get_items(queue, max_size=max_size)
|
427
|
+
if max_size is None:
|
428
|
+
assert result == xs
|
429
|
+
else:
|
430
|
+
assert result == xs[:max_size]
|
431
|
+
|
432
|
+
@given(xs=lists(integers(), min_size=1), max_size=integers(1, 10) | none())
|
433
|
+
async def test_get_then_put(self, *, xs: list[int], max_size: int | None) -> None:
|
434
|
+
queue: Queue[int] = Queue()
|
435
|
+
|
436
|
+
async def put() -> None:
|
437
|
+
await sleep(0.01)
|
438
|
+
await put_items(xs, queue)
|
439
|
+
|
440
|
+
async with TaskGroup() as tg:
|
441
|
+
task = tg.create_task(get_items(queue, max_size=max_size))
|
442
|
+
_ = tg.create_task(put())
|
443
|
+
result = task.result()
|
444
|
+
if max_size is None:
|
445
|
+
assert result == xs
|
446
|
+
else:
|
447
|
+
assert result == xs[:max_size]
|
448
|
+
|
449
|
+
async def test_empty(self) -> None:
|
450
|
+
queue: Queue[int] = Queue()
|
451
|
+
with raises(TimeoutError): # noqa: PT012
|
452
|
+
async with timeout(0.01), TaskGroup() as tg:
|
453
|
+
_ = tg.create_task(get_items(queue))
|
454
|
+
_ = tg.create_task(sleep(0.02))
|
455
|
+
|
456
|
+
|
457
|
+
class TestPutAndGetItemsNoWait:
|
458
|
+
@given(xs=lists(integers(), min_size=1), max_size=integers(1, 10) | none())
|
459
|
+
def test_main(self, *, xs: list[int], max_size: int | None) -> None:
|
460
|
+
queue: Queue[int] = Queue()
|
461
|
+
put_items_nowait(xs, queue)
|
462
|
+
result = get_items_nowait(queue, max_size=max_size)
|
463
|
+
if max_size is None:
|
464
|
+
assert result == xs
|
465
|
+
else:
|
466
|
+
assert result == xs[:max_size]
|
467
|
+
|
468
|
+
|
490
469
|
class TestQueueProcessor:
|
491
470
|
async def test_one_processor_slow_tasks(self) -> None:
|
492
471
|
@dataclass(kw_only=True)
|
@@ -610,7 +589,7 @@ class TestQueueProcessor:
|
|
610
589
|
|
611
590
|
@override
|
612
591
|
async def _process_item(self, _: int, /) -> None:
|
613
|
-
items =
|
592
|
+
items = self._get_items_nowait()
|
614
593
|
self.output.add(len(items))
|
615
594
|
|
616
595
|
processor = Example()
|
@@ -4,7 +4,6 @@ from abc import ABC, abstractmethod
|
|
4
4
|
from asyncio import (
|
5
5
|
CancelledError,
|
6
6
|
Event,
|
7
|
-
Lock,
|
8
7
|
PriorityQueue,
|
9
8
|
Queue,
|
10
9
|
QueueEmpty,
|
@@ -17,7 +16,7 @@ from asyncio import (
|
|
17
16
|
sleep,
|
18
17
|
timeout,
|
19
18
|
)
|
20
|
-
from collections.abc import Callable, Mapping
|
19
|
+
from collections.abc import Callable, Iterable, Mapping
|
21
20
|
from contextlib import (
|
22
21
|
AsyncExitStack,
|
23
22
|
_AsyncGeneratorContextManager,
|
@@ -240,7 +239,6 @@ class QueueProcessor(AsyncService, Generic[_T]):
|
|
240
239
|
sleep: Duration = MILLISECOND
|
241
240
|
_await_upon_aenter: bool = field(default=False, init=False, repr=False)
|
242
241
|
_queue: Queue[_T] = field(init=False, repr=False)
|
243
|
-
_lock: Lock = field(default_factory=Lock, init=False, repr=False)
|
244
242
|
|
245
243
|
def __post_init__(self) -> None:
|
246
244
|
self._queue = self.queue_type(
|
@@ -265,9 +263,9 @@ class QueueProcessor(AsyncService, Generic[_T]):
|
|
265
263
|
await self._run()
|
266
264
|
await sleep_dur(duration=self.sleep)
|
267
265
|
|
268
|
-
|
266
|
+
def _get_items_nowait(self, *, max_size: int | None = None) -> Sequence[_T]:
|
269
267
|
"""Get items from the queue; no waiting."""
|
270
|
-
return
|
268
|
+
return get_items_nowait(self._queue, max_size=max_size)
|
271
269
|
|
272
270
|
@abstractmethod
|
273
271
|
async def _process_item(self, item: _T, /) -> None:
|
@@ -282,7 +280,7 @@ class QueueProcessor(AsyncService, Generic[_T]):
|
|
282
280
|
async def _run(self) -> None:
|
283
281
|
"""Run the processer."""
|
284
282
|
try:
|
285
|
-
(item,) =
|
283
|
+
(item,) = self._get_items_nowait(max_size=1)
|
286
284
|
except ValueError:
|
287
285
|
raise QueueEmpty from None
|
288
286
|
try:
|
@@ -465,9 +463,7 @@ def get_event(
|
|
465
463
|
##
|
466
464
|
|
467
465
|
|
468
|
-
async def get_items(
|
469
|
-
queue: Queue[_T], /, *, max_size: int | None = None, lock: Lock | None = None
|
470
|
-
) -> list[_T]:
|
466
|
+
async def get_items(queue: Queue[_T], /, *, max_size: int | None = None) -> list[_T]:
|
471
467
|
"""Get items from a queue; if empty then wait."""
|
472
468
|
try:
|
473
469
|
items = [await queue.get()]
|
@@ -476,28 +472,12 @@ async def get_items(
|
|
476
472
|
return []
|
477
473
|
raise
|
478
474
|
max_size_use = None if max_size is None else (max_size - 1)
|
479
|
-
|
480
|
-
items.extend(await get_items_nowait(queue, max_size=max_size_use))
|
481
|
-
else:
|
482
|
-
async with lock:
|
483
|
-
items.extend(await get_items_nowait(queue, max_size=max_size_use))
|
475
|
+
items.extend(get_items_nowait(queue, max_size=max_size_use))
|
484
476
|
return items
|
485
477
|
|
486
478
|
|
487
|
-
|
488
|
-
queue: Queue[_T], /, *, max_size: int | None = None, lock: Lock | None = None
|
489
|
-
) -> list[_T]:
|
479
|
+
def get_items_nowait(queue: Queue[_T], /, *, max_size: int | None = None) -> list[_T]:
|
490
480
|
"""Get items from a queue; no waiting."""
|
491
|
-
if lock is None:
|
492
|
-
return _get_items_nowait_core(queue, max_size=max_size)
|
493
|
-
async with lock:
|
494
|
-
return _get_items_nowait_core(queue, max_size=max_size)
|
495
|
-
|
496
|
-
|
497
|
-
def _get_items_nowait_core(
|
498
|
-
queue: Queue[_T], /, *, max_size: int | None = None
|
499
|
-
) -> list[_T]:
|
500
|
-
"""Get all the items from a queue; no waiting."""
|
501
481
|
items: list[_T] = []
|
502
482
|
if max_size is None:
|
503
483
|
while True:
|
@@ -517,6 +497,21 @@ def _get_items_nowait_core(
|
|
517
497
|
##
|
518
498
|
|
519
499
|
|
500
|
+
async def put_items(items: Iterable[_T], queue: Queue[_T], /) -> None:
|
501
|
+
"""Put items into a queue; if full then wait."""
|
502
|
+
for item in items:
|
503
|
+
await queue.put(item)
|
504
|
+
|
505
|
+
|
506
|
+
def put_items_nowait(items: Iterable[_T], queue: Queue[_T], /) -> None:
|
507
|
+
"""Put items into a queue; no waiting."""
|
508
|
+
for item in items:
|
509
|
+
queue.put_nowait(item)
|
510
|
+
|
511
|
+
|
512
|
+
##
|
513
|
+
|
514
|
+
|
520
515
|
async def sleep_dur(*, duration: Duration | None = None) -> None:
|
521
516
|
"""Sleep which accepts durations."""
|
522
517
|
if duration is None:
|
@@ -602,6 +597,8 @@ __all__ = [
|
|
602
597
|
"get_event",
|
603
598
|
"get_items",
|
604
599
|
"get_items_nowait",
|
600
|
+
"put_items",
|
601
|
+
"put_items_nowait",
|
605
602
|
"sleep_dur",
|
606
603
|
"stream_command",
|
607
604
|
"timeout_dur",
|
@@ -78,7 +78,7 @@ class SlackHandler(Handler, QueueProcessor[str]):
|
|
78
78
|
@override
|
79
79
|
async def _process_item(self, item: str, /) -> None:
|
80
80
|
"""Process the first item."""
|
81
|
-
items = list(chain([item],
|
81
|
+
items = list(chain([item], self._get_items_nowait()))
|
82
82
|
text = "\n".join(items)
|
83
83
|
try:
|
84
84
|
async with timeout_dur(duration=self.timeout):
|
@@ -627,7 +627,7 @@ class Upserter(QueueProcessor[_InsertItem]):
|
|
627
627
|
@override
|
628
628
|
async def _process_item(self, item: _InsertItem, /) -> None:
|
629
629
|
"""Process the first item."""
|
630
|
-
items = list(chain([item],
|
630
|
+
items = list(chain([item], self._get_items_nowait()))
|
631
631
|
await self._pre_upsert(items)
|
632
632
|
await upsert_items(
|
633
633
|
self.engine,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_with/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/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.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_async_service/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_async_service/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_async_service/run.sh
RENAMED
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_queue_processor/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_queue_processor/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/scripts/test_queue_processor/run.sh
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
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/decorated_async.py
RENAMED
File without changes
|
{dycw_utilities-0.113.5 → dycw_utilities-0.114.0}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|