dycw-utilities 0.116.4__tar.gz → 0.116.5__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.116.4 → dycw_utilities-0.116.5}/PKG-INFO +2 -2
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/pyproject.toml +4 -4
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_redis.py +36 -7
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/redis.py +40 -28
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/.gitignore +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/LICENSE +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/README.md +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_async_service/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_async_service/__main__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_async_service/run.sh +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_queue_processor/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_queue_processor/__main__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_queue_processor/run.sh +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/click.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/git.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/http.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/math.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/os.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/period.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/random.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/re.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/text.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/types.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/version.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dycw-utilities
|
3
|
-
Version: 0.116.
|
3
|
+
Version: 0.116.5
|
4
4
|
Author-email: Derek Wan <d.wan@icloud.com>
|
5
5
|
License-File: LICENSE
|
6
6
|
Requires-Python: >=3.12
|
@@ -43,7 +43,7 @@ Requires-Dist: whenever<0.8,>=0.7.3; extra == 'zzz-test-click'
|
|
43
43
|
Provides-Extra: zzz-test-contextlib
|
44
44
|
Provides-Extra: zzz-test-contextvars
|
45
45
|
Provides-Extra: zzz-test-cryptography
|
46
|
-
Requires-Dist: cryptography<
|
46
|
+
Requires-Dist: cryptography<46.0,>=45.0.2; extra == 'zzz-test-cryptography'
|
47
47
|
Provides-Extra: zzz-test-cvxpy
|
48
48
|
Requires-Dist: cvxpy<1.7,>=1.6.5; extra == 'zzz-test-cvxpy'
|
49
49
|
Provides-Extra: zzz-test-dataclasses
|
@@ -19,7 +19,7 @@ dev = [
|
|
19
19
|
"click >= 8.2.0, < 8.3",
|
20
20
|
"coloredlogs >= 15.0.1, < 15.1",
|
21
21
|
"concurrent-log-handler >= 0.9.26, < 0.10",
|
22
|
-
"cryptography >=
|
22
|
+
"cryptography >= 45.0.2, < 46.0",
|
23
23
|
"cvxpy >= 1.6.5, < 1.7",
|
24
24
|
"eventkit >= 1.0.3, < 1.1",
|
25
25
|
"fastapi >= 0.115.11, < 0.116",
|
@@ -92,7 +92,7 @@ dependencies = [
|
|
92
92
|
name = "dycw-utilities"
|
93
93
|
readme = "README.md"
|
94
94
|
requires-python = ">= 3.12"
|
95
|
-
version = "0.116.
|
95
|
+
version = "0.116.5"
|
96
96
|
|
97
97
|
[project.optional-dependencies]
|
98
98
|
test = [
|
@@ -133,7 +133,7 @@ zzz-test-click = [
|
|
133
133
|
]
|
134
134
|
zzz-test-contextlib = []
|
135
135
|
zzz-test-contextvars = []
|
136
|
-
zzz-test-cryptography = ["cryptography >=
|
136
|
+
zzz-test-cryptography = ["cryptography >= 45.0.2, < 46.0"]
|
137
137
|
zzz-test-cvxpy = ["cvxpy >= 1.6.5, < 1.7"]
|
138
138
|
zzz-test-dataclasses = [
|
139
139
|
"orjson >= 3.10.15, < 3.11",
|
@@ -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.116.
|
337
|
+
current_version = "0.116.5"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -45,13 +45,14 @@ if TYPE_CHECKING:
|
|
45
45
|
from collections.abc import Mapping
|
46
46
|
|
47
47
|
from pytest import CaptureFixture
|
48
|
+
from redis.asyncio.client import PubSub
|
48
49
|
|
49
50
|
|
50
51
|
class TestPublishAndSubscribe:
|
51
52
|
@given(
|
52
53
|
data=data(),
|
53
54
|
channel=text_ascii(min_size=1).map(
|
54
|
-
lambda c: f"{get_class_name(TestPublishAndSubscribe)}
|
55
|
+
lambda c: f"{get_class_name(TestPublishAndSubscribe)}_all_objects_with_serialize_{c}"
|
55
56
|
),
|
56
57
|
obj=make_objects(),
|
57
58
|
)
|
@@ -87,7 +88,7 @@ class TestPublishAndSubscribe:
|
|
87
88
|
@given(
|
88
89
|
data=data(),
|
89
90
|
channel=text_ascii(min_size=1).map(
|
90
|
-
lambda c: f"{get_class_name(TestPublishAndSubscribe)}
|
91
|
+
lambda c: f"{get_class_name(TestPublishAndSubscribe)}_text_without_serialize_{c}"
|
91
92
|
),
|
92
93
|
text=text_ascii(min_size=1),
|
93
94
|
)
|
@@ -282,7 +283,7 @@ class TestPublisherIQL:
|
|
282
283
|
class TestSubscribeMessages:
|
283
284
|
@given(
|
284
285
|
channel=text_ascii(min_size=1).map(
|
285
|
-
lambda c: f"{get_class_name(TestSubscribeMessages)}
|
286
|
+
lambda c: f"{get_class_name(TestSubscribeMessages)}_redis_{c}"
|
286
287
|
),
|
287
288
|
message=text_ascii(min_size=1),
|
288
289
|
)
|
@@ -292,18 +293,46 @@ class TestSubscribeMessages:
|
|
292
293
|
suppress_health_check={HealthCheck.function_scoped_fixture},
|
293
294
|
)
|
294
295
|
@SKIPIF_CI_AND_NOT_LINUX
|
295
|
-
async def
|
296
|
+
async def test_redis(
|
296
297
|
self, *, capsys: CaptureFixture, channel: str, message: str
|
297
298
|
) -> None:
|
298
|
-
|
299
|
+
redis = Redis()
|
300
|
+
await self._run_test(redis, redis, capsys, channel, message)
|
299
301
|
|
302
|
+
@given(
|
303
|
+
channel=text_ascii(min_size=1).map(
|
304
|
+
lambda c: f"{get_class_name(TestSubscribeMessages)}_pubsub_{c}"
|
305
|
+
),
|
306
|
+
message=text_ascii(min_size=1),
|
307
|
+
)
|
308
|
+
@settings(
|
309
|
+
max_examples=1,
|
310
|
+
phases={Phase.generate},
|
311
|
+
suppress_health_check={HealthCheck.function_scoped_fixture},
|
312
|
+
)
|
313
|
+
@SKIPIF_CI_AND_NOT_LINUX
|
314
|
+
async def test_pubsub(
|
315
|
+
self, *, capsys: CaptureFixture, channel: str, message: str
|
316
|
+
) -> None:
|
317
|
+
redis = Redis()
|
318
|
+
await self._run_test(redis, redis.pubsub(), capsys, channel, message)
|
319
|
+
|
320
|
+
async def _run_test(
|
321
|
+
self,
|
322
|
+
redis: Redis,
|
323
|
+
redis_or_pubsub: Redis | PubSub,
|
324
|
+
capsys: CaptureFixture,
|
325
|
+
channel: str,
|
326
|
+
message: str,
|
327
|
+
/,
|
328
|
+
) -> None:
|
300
329
|
async def listener() -> None:
|
301
|
-
async for msg in subscribe_messages(
|
330
|
+
async for msg in subscribe_messages(redis_or_pubsub, channel):
|
302
331
|
print(msg) # noqa: T201
|
303
332
|
|
304
333
|
task = get_running_loop().create_task(listener())
|
305
334
|
await sleep(0.05)
|
306
|
-
_ = await
|
335
|
+
_ = await redis.publish(channel, message)
|
307
336
|
await sleep(0.05)
|
308
337
|
try:
|
309
338
|
out = capsys.readouterr().out
|
@@ -19,6 +19,7 @@ from typing import (
|
|
19
19
|
from uuid import UUID, uuid4
|
20
20
|
|
21
21
|
from redis.asyncio import Redis
|
22
|
+
from redis.asyncio.client import PubSub
|
22
23
|
from redis.typing import EncodableT
|
23
24
|
|
24
25
|
from utilities.asyncio import InfiniteQueueLooper, QueueProcessor, timeout_dur
|
@@ -46,7 +47,6 @@ if TYPE_CHECKING:
|
|
46
47
|
)
|
47
48
|
|
48
49
|
from redis.asyncio import ConnectionPool
|
49
|
-
from redis.asyncio.client import PubSub
|
50
50
|
from redis.typing import ResponseT
|
51
51
|
|
52
52
|
from utilities.iterables import MaybeIterable
|
@@ -649,7 +649,7 @@ _SUBSCRIBE_SLEEP: Duration = MILLISECOND
|
|
649
649
|
|
650
650
|
@overload
|
651
651
|
def subscribe(
|
652
|
-
|
652
|
+
redis_or_pubsub: Redis | PubSub,
|
653
653
|
channels: MaybeIterable[str],
|
654
654
|
/,
|
655
655
|
*,
|
@@ -659,7 +659,7 @@ def subscribe(
|
|
659
659
|
) -> AsyncIterator[_T]: ...
|
660
660
|
@overload
|
661
661
|
def subscribe(
|
662
|
-
|
662
|
+
redis_or_pubsub: Redis | PubSub,
|
663
663
|
channels: MaybeIterable[str],
|
664
664
|
/,
|
665
665
|
*,
|
@@ -668,7 +668,7 @@ def subscribe(
|
|
668
668
|
sleep: Duration = _SUBSCRIBE_SLEEP,
|
669
669
|
) -> AsyncIterator[bytes]: ...
|
670
670
|
async def subscribe( # pyright: ignore[reportInconsistentOverload]
|
671
|
-
|
671
|
+
redis_or_pubsub: Redis | PubSub,
|
672
672
|
channels: MaybeIterable[str],
|
673
673
|
/,
|
674
674
|
*,
|
@@ -679,7 +679,7 @@ async def subscribe( # pyright: ignore[reportInconsistentOverload]
|
|
679
679
|
"""Subscribe to the data of a given channel(s)."""
|
680
680
|
channels = list(always_iterable(channels)) # skipif-ci-and-not-linux
|
681
681
|
messages = subscribe_messages( # skipif-ci-and-not-linux
|
682
|
-
|
682
|
+
redis_or_pubsub, channels, timeout=timeout, sleep=sleep
|
683
683
|
)
|
684
684
|
if deserializer is None: # skipif-ci-and-not-linux
|
685
685
|
async for message in messages:
|
@@ -690,7 +690,7 @@ async def subscribe( # pyright: ignore[reportInconsistentOverload]
|
|
690
690
|
|
691
691
|
|
692
692
|
async def subscribe_messages(
|
693
|
-
|
693
|
+
redis_or_pubsub: Redis | PubSub,
|
694
694
|
channels: MaybeIterable[str],
|
695
695
|
/,
|
696
696
|
*,
|
@@ -698,28 +698,40 @@ async def subscribe_messages(
|
|
698
698
|
sleep: Duration = _SUBSCRIBE_SLEEP,
|
699
699
|
) -> AsyncIterator[_RedisMessageSubscribe]:
|
700
700
|
"""Subscribe to the messages of a given channel(s)."""
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
701
|
+
match redis_or_pubsub: # skipif-ci-and-not-linux
|
702
|
+
case Redis() as redis:
|
703
|
+
async for msg in subscribe_messages(
|
704
|
+
redis.pubsub(), channels, timeout=timeout, sleep=sleep
|
705
|
+
):
|
706
|
+
yield msg
|
707
|
+
case PubSub() as pubsub:
|
708
|
+
channels = list(always_iterable(channels))
|
709
|
+
for channel in channels:
|
710
|
+
await pubsub.subscribe(channel)
|
711
|
+
channels_bytes = [c.encode() for c in channels]
|
712
|
+
timeout_use = (
|
713
|
+
None if timeout is None else datetime_duration_to_float(timeout)
|
714
|
+
)
|
715
|
+
sleep_use = datetime_duration_to_float(sleep)
|
716
|
+
while True:
|
717
|
+
message = cast(
|
718
|
+
"_RedisMessageSubscribe | _RedisMessageUnsubscribe | None",
|
719
|
+
await pubsub.get_message(timeout=timeout_use),
|
720
|
+
)
|
721
|
+
if (
|
722
|
+
(message is not None)
|
723
|
+
and (
|
724
|
+
message["type"]
|
725
|
+
in {"subscribe", "psubscribe", "message", "pmessage"}
|
726
|
+
)
|
727
|
+
and (message["channel"] in channels_bytes)
|
728
|
+
and isinstance(message["data"], bytes)
|
729
|
+
):
|
730
|
+
yield cast("_RedisMessageSubscribe", message)
|
731
|
+
else:
|
732
|
+
await asyncio.sleep(sleep_use)
|
733
|
+
case _ as never:
|
734
|
+
assert_never(never)
|
723
735
|
|
724
736
|
|
725
737
|
class _RedisMessageSubscribe(TypedDict):
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/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.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/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.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_async_service/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_async_service/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_async_service/run.sh
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_queue_processor/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/scripts/test_queue_processor/__main__.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/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
|
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/decorated_async.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.116.4 → dycw_utilities-0.116.5}/src/tests/test_typing_funcs/with_future.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|