dycw-utilities 0.133.1__tar.gz → 0.133.3__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.133.1 → dycw_utilities-0.133.3}/PKG-INFO +1 -1
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/pyproject.toml +2 -2
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_arq.py +24 -13
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_sqlalchemy.py +3 -3
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/arq.py +66 -4
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/sqlalchemy.py +5 -3
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/sqlalchemy_polars.py +1 -1
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/.gitignore +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/LICENSE +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/README.md +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_aiolimiter.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_asyncio_classes/loopers.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/aiolimiter.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/click.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/git.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/http.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/math.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/os.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/period.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/random.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/re.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/string.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/text.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/types.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/version.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/utilities/zoneinfo.py +0 -0
@@ -104,7 +104,7 @@ dependencies = [
|
|
104
104
|
name = "dycw-utilities"
|
105
105
|
readme = "README.md"
|
106
106
|
requires-python = ">= 3.12"
|
107
|
-
version = "0.133.
|
107
|
+
version = "0.133.3"
|
108
108
|
|
109
109
|
[project.optional-dependencies]
|
110
110
|
logging = [
|
@@ -130,7 +130,7 @@ test = [
|
|
130
130
|
# bump-my-version
|
131
131
|
[tool.bumpversion]
|
132
132
|
allow_dirty = true
|
133
|
-
current_version = "0.133.
|
133
|
+
current_version = "0.133.3"
|
134
134
|
|
135
135
|
[[tool.bumpversion.files]]
|
136
136
|
filename = "src/utilities/__init__.py"
|
@@ -3,45 +3,56 @@ from __future__ import annotations
|
|
3
3
|
from asyncio import sleep
|
4
4
|
from typing import TYPE_CHECKING, Any, cast
|
5
5
|
|
6
|
+
from arq.connections import ArqRedis
|
6
7
|
from hypothesis import given
|
7
8
|
from hypothesis.strategies import integers
|
8
9
|
|
9
|
-
from
|
10
|
+
from tests.conftest import SKIPIF_CI_AND_NOT_LINUX
|
11
|
+
from utilities.arq import Worker, cron_raw, job_enqueuer
|
10
12
|
from utilities.iterables import one
|
11
13
|
|
12
14
|
if TYPE_CHECKING:
|
13
15
|
from collections.abc import Sequence
|
14
16
|
|
15
|
-
from arq.cron import CronJob
|
16
17
|
from arq.typing import WorkerCoroutine
|
17
18
|
|
18
19
|
from utilities.types import CallableCoroutine1
|
19
20
|
|
20
21
|
|
21
|
-
class
|
22
|
+
class TestCronRaw:
|
22
23
|
@given(x=integers(), y=integers())
|
23
24
|
async def test_main(self, *, x: int, y: int) -> None:
|
24
25
|
async def func(x: int, y: int, /) -> int:
|
25
26
|
await sleep(0.01)
|
26
27
|
return x + y
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
func_use = cast("WorkerCoroutine", one(Example.functions))
|
32
|
-
result = await func_use({}, x, y)
|
29
|
+
job = cron_raw(func, args=(x, y))
|
30
|
+
result = await job.coroutine({})
|
33
31
|
assert result == (x + y)
|
34
32
|
|
33
|
+
|
34
|
+
class TestJobEnqueuer:
|
35
|
+
@given(x=integers(), y=integers())
|
36
|
+
@SKIPIF_CI_AND_NOT_LINUX
|
37
|
+
async def test_main(self, *, x: int, y: int) -> None:
|
38
|
+
async def func(x: int, y: int, /) -> int:
|
39
|
+
await sleep(0.01)
|
40
|
+
return x + y
|
41
|
+
|
42
|
+
redis = ArqRedis(db=15)
|
43
|
+
_ = await job_enqueuer.settings(queue_name="test")(redis, func, x, y)
|
44
|
+
|
45
|
+
|
46
|
+
class TestWorker:
|
35
47
|
@given(x=integers(), y=integers())
|
36
|
-
async def
|
48
|
+
async def test_main(self, *, x: int, y: int) -> None:
|
37
49
|
async def func(x: int, y: int, /) -> int:
|
38
50
|
await sleep(0.01)
|
39
51
|
return x + y
|
40
52
|
|
41
53
|
class Example(Worker):
|
42
|
-
|
54
|
+
functions_raw: Sequence[CallableCoroutine1[Any]] = [func]
|
43
55
|
|
44
|
-
|
45
|
-
|
46
|
-
result = await cron_job.coroutine({})
|
56
|
+
func_use = cast("WorkerCoroutine", one(Example.functions))
|
57
|
+
result = await func_use({}, x, y)
|
47
58
|
assert result == (x + y)
|
@@ -274,17 +274,17 @@ class TestEnsureTablesDropped:
|
|
274
274
|
|
275
275
|
|
276
276
|
class TestGetChunkSize:
|
277
|
-
@given(chunk_size_frac=floats(0.0, 1.0), scaling=
|
277
|
+
@given(chunk_size_frac=floats(0.0, 1.0), scaling=integers(0, 10))
|
278
278
|
@settings(
|
279
279
|
max_examples=1,
|
280
280
|
phases={Phase.generate},
|
281
281
|
suppress_health_check={HealthCheck.function_scoped_fixture},
|
282
282
|
)
|
283
283
|
async def test_main(
|
284
|
-
self, *, chunk_size_frac: float, scaling:
|
284
|
+
self, *, chunk_size_frac: float, scaling: int, test_engine: AsyncEngine
|
285
285
|
) -> None:
|
286
286
|
result = get_chunk_size(
|
287
|
-
test_engine, chunk_size_frac=chunk_size_frac,
|
287
|
+
test_engine, chunk_size_frac=chunk_size_frac, max_length=scaling
|
288
288
|
)
|
289
289
|
assert result >= 1
|
290
290
|
|
@@ -3,18 +3,21 @@ from __future__ import annotations
|
|
3
3
|
from dataclasses import dataclass
|
4
4
|
from functools import wraps
|
5
5
|
from itertools import chain
|
6
|
-
from typing import TYPE_CHECKING, Any, ParamSpec, TypeVar, cast, override
|
6
|
+
from typing import TYPE_CHECKING, Any, ParamSpec, Self, TypeVar, cast, override
|
7
7
|
|
8
8
|
from arq.constants import default_queue_name, expires_extra_ms
|
9
9
|
from arq.cron import cron
|
10
10
|
|
11
|
+
from utilities.dataclasses import replace_non_sentinel
|
12
|
+
from utilities.sentinel import Sentinel, sentinel
|
13
|
+
|
11
14
|
if TYPE_CHECKING:
|
12
15
|
from collections.abc import Callable, Iterable, Sequence
|
13
|
-
from datetime import timezone
|
16
|
+
from datetime import datetime, timedelta, timezone
|
14
17
|
|
15
18
|
from arq.connections import ArqRedis, RedisSettings
|
16
19
|
from arq.cron import CronJob
|
17
|
-
from arq.jobs import Deserializer, Serializer
|
20
|
+
from arq.jobs import Deserializer, Job, Serializer
|
18
21
|
from arq.typing import (
|
19
22
|
OptionType,
|
20
23
|
SecondsTimedelta,
|
@@ -26,6 +29,7 @@ if TYPE_CHECKING:
|
|
26
29
|
|
27
30
|
from utilities.types import CallableCoroutine1, Coroutine1, StrMapping
|
28
31
|
|
32
|
+
|
29
33
|
_P = ParamSpec("_P")
|
30
34
|
_T = TypeVar("_T")
|
31
35
|
|
@@ -95,6 +99,64 @@ def _lift_cron(
|
|
95
99
|
##
|
96
100
|
|
97
101
|
|
102
|
+
@dataclass(kw_only=True, slots=True)
|
103
|
+
class _JobEnqueuer:
|
104
|
+
"""Enqueuer of jobs."""
|
105
|
+
|
106
|
+
job_id: str | None = None
|
107
|
+
queue_name: str | None = None
|
108
|
+
defer_until: datetime | None = None
|
109
|
+
defer_by: int | float | timedelta | None = None
|
110
|
+
expires: int | float | timedelta | None = None
|
111
|
+
job_try: int | None = None
|
112
|
+
|
113
|
+
async def __call__(
|
114
|
+
self,
|
115
|
+
redis: ArqRedis,
|
116
|
+
function: Callable[_P, Coroutine1[_T]],
|
117
|
+
*args: _P.args,
|
118
|
+
**kwargs: _P.kwargs,
|
119
|
+
) -> Job | None:
|
120
|
+
return await redis.enqueue_job( # skipif-ci-and-not-linux
|
121
|
+
function.__name__,
|
122
|
+
*args,
|
123
|
+
_job_id=self.job_id,
|
124
|
+
_queue_name=self.queue_name,
|
125
|
+
_defer_until=self.defer_until,
|
126
|
+
_defer_by=self.defer_by,
|
127
|
+
_expires=self.expires,
|
128
|
+
_job_try=self.job_try,
|
129
|
+
**kwargs,
|
130
|
+
)
|
131
|
+
|
132
|
+
def settings(
|
133
|
+
self,
|
134
|
+
*,
|
135
|
+
job_id: str | None | Sentinel = sentinel,
|
136
|
+
queue_name: str | None | Sentinel = sentinel,
|
137
|
+
defer_until: datetime | None | Sentinel = sentinel,
|
138
|
+
defer_by: float | timedelta | None | Sentinel = sentinel,
|
139
|
+
expires: float | timedelta | None | Sentinel = sentinel,
|
140
|
+
job_try: int | None | Sentinel = sentinel,
|
141
|
+
) -> Self:
|
142
|
+
"""Replace elements of the enqueuer."""
|
143
|
+
return replace_non_sentinel( # skipif-ci-and-not-linux
|
144
|
+
self,
|
145
|
+
job_id=job_id,
|
146
|
+
queue_name=queue_name,
|
147
|
+
defer_until=defer_until,
|
148
|
+
defer_by=defer_by,
|
149
|
+
expires=expires,
|
150
|
+
job_try=job_try,
|
151
|
+
)
|
152
|
+
|
153
|
+
|
154
|
+
job_enqueuer = _JobEnqueuer()
|
155
|
+
|
156
|
+
|
157
|
+
##
|
158
|
+
|
159
|
+
|
98
160
|
class _WorkerMeta(type):
|
99
161
|
@override
|
100
162
|
def __new__(
|
@@ -158,4 +220,4 @@ class Worker(metaclass=_WorkerMeta):
|
|
158
220
|
log_results: bool = True
|
159
221
|
|
160
222
|
|
161
|
-
__all__ = ["Worker", "cron"]
|
223
|
+
__all__ = ["Worker", "cron", "job_enqueuer"]
|
@@ -298,11 +298,13 @@ def get_chunk_size(
|
|
298
298
|
/,
|
299
299
|
*,
|
300
300
|
chunk_size_frac: float = CHUNK_SIZE_FRAC,
|
301
|
-
|
301
|
+
max_length: int = 1,
|
302
302
|
) -> int:
|
303
303
|
"""Get the maximum chunk size for an engine."""
|
304
304
|
max_params = _get_dialect_max_params(engine_or_conn)
|
305
|
-
|
305
|
+
scaling = max(max_length, 1)
|
306
|
+
size = floor(chunk_size_frac * max_params / scaling)
|
307
|
+
return max(size, 1)
|
306
308
|
|
307
309
|
|
308
310
|
##
|
@@ -1098,7 +1100,7 @@ def _prepare_insert_or_upsert_items(
|
|
1098
1100
|
}
|
1099
1101
|
max_length = max(lengths, default=1)
|
1100
1102
|
chunk_size = get_chunk_size(
|
1101
|
-
engine, chunk_size_frac=chunk_size_frac,
|
1103
|
+
engine, chunk_size_frac=chunk_size_frac, max_length=max_length
|
1102
1104
|
)
|
1103
1105
|
|
1104
1106
|
def yield_pairs() -> Iterator[tuple[Insert, None]]:
|
@@ -433,7 +433,7 @@ def _select_to_dataframe_yield_selects_with_in_clauses(
|
|
433
433
|
in_col, in_values = in_clauses
|
434
434
|
if in_clauses_chunk_size is None:
|
435
435
|
chunk_size = get_chunk_size(
|
436
|
-
engine, chunk_size_frac=chunk_size_frac,
|
436
|
+
engine, chunk_size_frac=chunk_size_frac, max_length=max_length
|
437
437
|
)
|
438
438
|
else:
|
439
439
|
chunk_size = in_clauses_chunk_size
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/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.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/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
|
{dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/src/tests/test_asyncio_classes/__init__.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
|
{dycw_utilities-0.133.1 → dycw_utilities-0.133.3}/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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|