dycw-utilities 0.119.0__tar.gz → 0.120.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.119.0 → dycw_utilities-0.120.0}/PKG-INFO +3 -3
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/pyproject.toml +5 -5
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_redis.py +10 -10
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_slack_sdk.py +5 -5
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_sqlalchemy.py +7 -7
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/redis.py +6 -6
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/slack_sdk.py +2 -2
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/sqlalchemy.py +6 -6
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/.gitignore +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/LICENSE +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/README.md +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_astor.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_rich.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/astor.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/click.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/git.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/http.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/math.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/os.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/period.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/random.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/re.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/rich.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/text.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/types.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/version.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/utilities/zoneinfo.py +0 -0
@@ -1,12 +1,12 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dycw-utilities
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.120.0
|
4
4
|
Author-email: Derek Wan <d.wan@icloud.com>
|
5
5
|
License-File: LICENSE
|
6
6
|
Requires-Python: >=3.12
|
7
7
|
Requires-Dist: typing-extensions<4.14,>=4.13.1
|
8
8
|
Provides-Extra: test
|
9
|
-
Requires-Dist: hypothesis<6.132,>=6.131.
|
9
|
+
Requires-Dist: hypothesis<6.132,>=6.131.20; extra == 'test'
|
10
10
|
Requires-Dist: pytest-asyncio<0.27,>=0.26.0; extra == 'test'
|
11
11
|
Requires-Dist: pytest-cov<6.2,>=6.1.1; extra == 'test'
|
12
12
|
Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
|
@@ -80,7 +80,7 @@ Provides-Extra: zzz-test-hypothesis
|
|
80
80
|
Requires-Dist: aiosqlite<0.22,>=0.21.0; extra == 'zzz-test-hypothesis'
|
81
81
|
Requires-Dist: asyncpg<0.31,>=0.30.0; extra == 'zzz-test-hypothesis'
|
82
82
|
Requires-Dist: greenlet<3.3,>=3.2.0; extra == 'zzz-test-hypothesis'
|
83
|
-
Requires-Dist: hypothesis<6.132,>=6.131.
|
83
|
+
Requires-Dist: hypothesis<6.132,>=6.131.20; extra == 'zzz-test-hypothesis'
|
84
84
|
Requires-Dist: luigi<3.7,>=3.6.0; extra == 'zzz-test-hypothesis'
|
85
85
|
Requires-Dist: numpy<2.3,>=2.2.6; extra == 'zzz-test-hypothesis'
|
86
86
|
Requires-Dist: pathvalidate<3.3,>=3.2.3; extra == 'zzz-test-hypothesis'
|
@@ -26,7 +26,7 @@ dev = [
|
|
26
26
|
"fpdf2 >= 2.8.3, < 2.9",
|
27
27
|
"greenlet >= 3.2.0, < 3.3", # for sqlalchemy async
|
28
28
|
"httpx >= 0.28.1, < 0.29", # for fastapi
|
29
|
-
"hypothesis >= 6.131.
|
29
|
+
"hypothesis >= 6.131.20, < 6.132",
|
30
30
|
"img2pdf >= 0.6.0, < 0.7",
|
31
31
|
"lightweight-charts >= 2.1, < 2.2",
|
32
32
|
"loguru >= 0.7.3, < 0.8",
|
@@ -92,11 +92,11 @@ dependencies = [
|
|
92
92
|
name = "dycw-utilities"
|
93
93
|
readme = "README.md"
|
94
94
|
requires-python = ">= 3.12"
|
95
|
-
version = "0.
|
95
|
+
version = "0.120.0"
|
96
96
|
|
97
97
|
[project.optional-dependencies]
|
98
98
|
test = [
|
99
|
-
"hypothesis >= 6.131.
|
99
|
+
"hypothesis >= 6.131.20, < 6.132",
|
100
100
|
"pytest >= 8.3.5, < 8.4",
|
101
101
|
"pytest-asyncio >= 0.26.0, < 0.27",
|
102
102
|
"pytest-cov >= 6.1.1, < 6.2",
|
@@ -174,7 +174,7 @@ zzz-test-hypothesis = [
|
|
174
174
|
"aiosqlite >= 0.21.0, < 0.22",
|
175
175
|
"asyncpg >= 0.30.0, < 0.31", # for sqlalchemy async
|
176
176
|
"greenlet >= 3.2.0, < 3.3", # for sqlalchemy async
|
177
|
-
"hypothesis >= 6.131.
|
177
|
+
"hypothesis >= 6.131.20, < 6.132",
|
178
178
|
"luigi >= 3.6.0, < 3.7",
|
179
179
|
"numpy >= 2.2.6, < 2.3",
|
180
180
|
"pathvalidate >= 3.2.3, < 3.3",
|
@@ -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.120.0"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -29,8 +29,8 @@ from utilities.hypothesis import (
|
|
29
29
|
)
|
30
30
|
from utilities.orjson import deserialize, serialize
|
31
31
|
from utilities.redis import (
|
32
|
-
|
33
|
-
|
32
|
+
Publisher,
|
33
|
+
PublisherError,
|
34
34
|
publish,
|
35
35
|
redis_hash_map_key,
|
36
36
|
redis_key,
|
@@ -118,11 +118,11 @@ class TestPublishAndSubscribe:
|
|
118
118
|
_ = task.cancel()
|
119
119
|
|
120
120
|
|
121
|
-
class
|
121
|
+
class TestPublisher:
|
122
122
|
@given(
|
123
123
|
data=data(),
|
124
124
|
channel=text_ascii(min_size=1).map(
|
125
|
-
lambda c: f"{get_class_name(
|
125
|
+
lambda c: f"{get_class_name(TestPublisher)}_main_{c}"
|
126
126
|
),
|
127
127
|
obj=make_objects(),
|
128
128
|
)
|
@@ -143,7 +143,7 @@ class TestPublisherIQL:
|
|
143
143
|
):
|
144
144
|
_ = buffer.write(str(obj_i))
|
145
145
|
|
146
|
-
publisher =
|
146
|
+
publisher = Publisher(
|
147
147
|
redis=test.redis, serializer=serialize, sleep_core=0.1
|
148
148
|
)
|
149
149
|
|
@@ -162,7 +162,7 @@ class TestPublisherIQL:
|
|
162
162
|
@given(
|
163
163
|
data=data(),
|
164
164
|
channel=text_ascii(min_size=1).map(
|
165
|
-
lambda c: f"{get_class_name(
|
165
|
+
lambda c: f"{get_class_name(TestPublisher)}_text_without_serialize_{c}"
|
166
166
|
),
|
167
167
|
text=text_ascii(min_size=1),
|
168
168
|
)
|
@@ -182,7 +182,7 @@ class TestPublisherIQL:
|
|
182
182
|
async for bytes_i in subscribe(test.redis.pubsub(), channel):
|
183
183
|
_ = buffer.write(bytes_i)
|
184
184
|
|
185
|
-
publisher =
|
185
|
+
publisher = Publisher(redis=test.redis, sleep_core=0.1)
|
186
186
|
|
187
187
|
async def sleep_then_put() -> None:
|
188
188
|
await sleep_dur(duration=0.1)
|
@@ -200,9 +200,9 @@ class TestPublisherIQL:
|
|
200
200
|
@SKIPIF_CI_AND_NOT_LINUX
|
201
201
|
async def test_error(self, *, data: DataObject) -> None:
|
202
202
|
async with yield_test_redis(data) as test:
|
203
|
-
publisher =
|
204
|
-
with raises(
|
205
|
-
raise
|
203
|
+
publisher = Publisher(redis=test.redis)
|
204
|
+
with raises(PublisherError, match="Error running 'Publisher'"):
|
205
|
+
raise PublisherError(publisher=publisher)
|
206
206
|
|
207
207
|
|
208
208
|
class TestSubscribeMessages:
|
@@ -12,7 +12,7 @@ from utilities.asyncio import EnhancedTaskGroup, sleep_dur
|
|
12
12
|
from utilities.datetime import MINUTE
|
13
13
|
from utilities.os import get_env_var
|
14
14
|
from utilities.pytest import throttle
|
15
|
-
from utilities.slack_sdk import
|
15
|
+
from utilities.slack_sdk import SlackHandler, _get_client, send_to_slack
|
16
16
|
|
17
17
|
if TYPE_CHECKING:
|
18
18
|
from collections.abc import Sequence
|
@@ -39,7 +39,7 @@ class TestSendToSlack:
|
|
39
39
|
)
|
40
40
|
|
41
41
|
|
42
|
-
class
|
42
|
+
class TestSlackHandler:
|
43
43
|
async def test_main(self, *, tmp_path: Path) -> None:
|
44
44
|
messages: Sequence[str] = []
|
45
45
|
|
@@ -49,7 +49,7 @@ class TestSlackHandlerIQL:
|
|
49
49
|
|
50
50
|
logger = getLogger(str(tmp_path))
|
51
51
|
logger.addHandler(
|
52
|
-
handler :=
|
52
|
+
handler := SlackHandler("url", sleep_core=0.05, sender=sender)
|
53
53
|
)
|
54
54
|
|
55
55
|
async def sleep_then_log() -> None:
|
@@ -68,13 +68,13 @@ class TestSlackHandlerIQL:
|
|
68
68
|
async def test_real(self, *, tmp_path: Path) -> None:
|
69
69
|
url = get_env_var("SLACK")
|
70
70
|
logger = getLogger(str(tmp_path))
|
71
|
-
logger.addHandler(handler :=
|
71
|
+
logger.addHandler(handler := SlackHandler(url, sleep_core=0.05))
|
72
72
|
|
73
73
|
async def sleep_then_log() -> None:
|
74
74
|
await sleep_dur(duration=0.05)
|
75
75
|
for i in range(10):
|
76
76
|
logger.warning(
|
77
|
-
"message %d from %s", i,
|
77
|
+
"message %d from %s", i, TestSlackHandler.test_real.__qualname__
|
78
78
|
)
|
79
79
|
|
80
80
|
with raises(ExceptionGroup): # noqa: PT012
|
@@ -43,8 +43,8 @@ from utilities.sqlalchemy import (
|
|
43
43
|
InsertItemsError,
|
44
44
|
TablenameMixin,
|
45
45
|
TableOrORMInstOrClass,
|
46
|
-
|
47
|
-
|
46
|
+
Upserter,
|
47
|
+
UpserterError,
|
48
48
|
UpsertItemsError,
|
49
49
|
_get_dialect,
|
50
50
|
_get_dialect_max_params,
|
@@ -1150,7 +1150,7 @@ class TestTupleToMapping:
|
|
1150
1150
|
assert result == expected
|
1151
1151
|
|
1152
1152
|
|
1153
|
-
class
|
1153
|
+
class TestUpserter:
|
1154
1154
|
@given(
|
1155
1155
|
data=data(),
|
1156
1156
|
name=_table_names(),
|
@@ -1168,7 +1168,7 @@ class TestUpserterIQL:
|
|
1168
1168
|
Column("value", Boolean, nullable=True),
|
1169
1169
|
)
|
1170
1170
|
engine = await sqlalchemy_engines(data, table)
|
1171
|
-
upserter =
|
1171
|
+
upserter = Upserter(engine=engine, sleep_core=0.1)
|
1172
1172
|
pairs = [(id_, init) for id_, init, _ in triples]
|
1173
1173
|
|
1174
1174
|
async def sleep_then_put() -> None:
|
@@ -1187,9 +1187,9 @@ class TestUpserterIQL:
|
|
1187
1187
|
@given(data=data())
|
1188
1188
|
async def test_error(self, *, data: DataObject) -> None:
|
1189
1189
|
engine = await sqlalchemy_engines(data)
|
1190
|
-
upserter =
|
1191
|
-
with raises(
|
1192
|
-
raise
|
1190
|
+
upserter = Upserter(engine=engine)
|
1191
|
+
with raises(UpserterError, match="Error running 'Upserter'"):
|
1192
|
+
raise UpserterError(upserter=upserter)
|
1193
1193
|
|
1194
1194
|
|
1195
1195
|
class TestUpsertItems:
|
@@ -589,7 +589,7 @@ async def publish(
|
|
589
589
|
|
590
590
|
|
591
591
|
@dataclass(kw_only=True)
|
592
|
-
class
|
592
|
+
class Publisher(InfiniteQueueLooper[None, tuple[str, EncodableT]]):
|
593
593
|
"""Publish a set of messages to Redis."""
|
594
594
|
|
595
595
|
redis: Redis
|
@@ -612,12 +612,12 @@ class PublisherIQL(InfiniteQueueLooper[None, tuple[str, EncodableT]]):
|
|
612
612
|
def _yield_events_and_exceptions(
|
613
613
|
self,
|
614
614
|
) -> Iterator[tuple[None, MaybeType[BaseException]]]:
|
615
|
-
yield (None,
|
615
|
+
yield (None, PublisherError) # skipif-ci-and-not-linux
|
616
616
|
|
617
617
|
|
618
618
|
@dataclass(kw_only=True)
|
619
|
-
class
|
620
|
-
publisher:
|
619
|
+
class PublisherError(Exception):
|
620
|
+
publisher: Publisher
|
621
621
|
|
622
622
|
@override
|
623
623
|
def __str__(self) -> str:
|
@@ -812,8 +812,8 @@ _ = _TestRedis
|
|
812
812
|
|
813
813
|
|
814
814
|
__all__ = [
|
815
|
-
"
|
816
|
-
"
|
815
|
+
"Publisher",
|
816
|
+
"PublisherError",
|
817
817
|
"RedisHashMapKey",
|
818
818
|
"RedisKey",
|
819
819
|
"publish",
|
@@ -35,7 +35,7 @@ async def _send_adapter(url: str, text: str, /) -> None:
|
|
35
35
|
|
36
36
|
|
37
37
|
@dataclass(init=False, unsafe_hash=True)
|
38
|
-
class
|
38
|
+
class SlackHandler(Handler, InfiniteQueueLooper[None, str]):
|
39
39
|
"""Handler for sending messages to Slack."""
|
40
40
|
|
41
41
|
@override
|
@@ -110,4 +110,4 @@ def _get_client(url: str, /, *, timeout: Duration = _TIMEOUT) -> AsyncWebhookCli
|
|
110
110
|
return AsyncWebhookClient(url, timeout=timeout_use)
|
111
111
|
|
112
112
|
|
113
|
-
__all__ = ["SendToSlackError", "
|
113
|
+
__all__ = ["SendToSlackError", "SlackHandler", "send_to_slack"]
|
@@ -609,7 +609,7 @@ class TablenameMixin:
|
|
609
609
|
|
610
610
|
|
611
611
|
@dataclass(kw_only=True)
|
612
|
-
class
|
612
|
+
class Upserter(InfiniteQueueLooper[None, _InsertItem]):
|
613
613
|
"""Upsert a set of items to a database."""
|
614
614
|
|
615
615
|
engine: AsyncEngine
|
@@ -641,12 +641,12 @@ class UpserterIQL(InfiniteQueueLooper[None, _InsertItem]):
|
|
641
641
|
def _yield_events_and_exceptions(
|
642
642
|
self,
|
643
643
|
) -> Iterator[tuple[None, MaybeType[BaseException]]]:
|
644
|
-
yield (None,
|
644
|
+
yield (None, UpserterError)
|
645
645
|
|
646
646
|
|
647
647
|
@dataclass(kw_only=True)
|
648
|
-
class
|
649
|
-
upserter:
|
648
|
+
class UpserterError(Exception):
|
649
|
+
upserter: Upserter
|
650
650
|
|
651
651
|
@override
|
652
652
|
def __str__(self) -> str:
|
@@ -1108,8 +1108,8 @@ __all__ = [
|
|
1108
1108
|
"InsertItemsError",
|
1109
1109
|
"TablenameMixin",
|
1110
1110
|
"UpsertItemsError",
|
1111
|
-
"
|
1112
|
-
"
|
1111
|
+
"Upserter",
|
1112
|
+
"UpserterError",
|
1113
1113
|
"check_engine",
|
1114
1114
|
"columnwise_max",
|
1115
1115
|
"columnwise_min",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.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.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
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.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/__init__.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/decorated_async.py
RENAMED
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/decorated_sync.py
RENAMED
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/error_bind.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/recursive.py
RENAMED
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/task_group_one.py
RENAMED
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/task_group_two.py
RENAMED
File without changes
|
File without changes
|
{dycw_utilities-0.119.0 → dycw_utilities-0.120.0}/src/tests/test_traceback_funcs/untraced.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|