dycw-utilities 0.166.34__tar.gz → 0.166.35__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.
Potentially problematic release.
This version of dycw-utilities might be problematic. Click here for more details.
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/PKG-INFO +1 -1
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/pyproject.toml +2 -2
- dycw_utilities-0.166.35/src/tests/test_jinja2.py +85 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/jinja2.py +36 -3
- dycw_utilities-0.166.34/src/tests/test_jinja2.py +0 -26
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/.gitignore +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/LICENSE +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/README.md +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_aeventkit.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pydantic_settings.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pydantic_settings_sops.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_testbook.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/aeventkit.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/click.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/git.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/http.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/json.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/math.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/os.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pydantic_settings.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pydantic_settings_sops.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/random.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/re.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/string.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/testbook.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/text.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/types.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/version.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/zoneinfo.py +0 -0
|
@@ -249,7 +249,7 @@ dependencies = [
|
|
|
249
249
|
name = "dycw-utilities"
|
|
250
250
|
readme = "README.md"
|
|
251
251
|
requires-python = ">= 3.12"
|
|
252
|
-
version = "0.166.
|
|
252
|
+
version = "0.166.35"
|
|
253
253
|
|
|
254
254
|
[project.entry-points.pytest11]
|
|
255
255
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
|
@@ -282,7 +282,7 @@ test = [
|
|
|
282
282
|
# bump-my-version
|
|
283
283
|
[tool.bumpversion]
|
|
284
284
|
allow_dirty = true
|
|
285
|
-
current_version = "0.166.
|
|
285
|
+
current_version = "0.166.35"
|
|
286
286
|
|
|
287
287
|
[[tool.bumpversion.files]]
|
|
288
288
|
filename = "src/utilities/__init__.py"
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from jinja2 import DictLoader
|
|
6
|
+
|
|
7
|
+
from utilities.jinja2 import EnhancedEnvironment, TemplateJob
|
|
8
|
+
from utilities.text import strip_and_dedent
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class TestEnhancedTemplate:
|
|
15
|
+
def test_main(self) -> None:
|
|
16
|
+
env = EnhancedEnvironment(
|
|
17
|
+
loader=DictLoader({
|
|
18
|
+
"test.j2": strip_and_dedent("""
|
|
19
|
+
text = '{{ text }}'
|
|
20
|
+
pascal = '{{ text | pascal }}'
|
|
21
|
+
snake = '{{ text | snake }}'
|
|
22
|
+
""")
|
|
23
|
+
})
|
|
24
|
+
)
|
|
25
|
+
result = env.get_template("test.j2").render(text="multi-word string")
|
|
26
|
+
expected = strip_and_dedent("""
|
|
27
|
+
text = 'multi-word string'
|
|
28
|
+
pascal = 'MultiWordString'
|
|
29
|
+
snake = 'multi_word_string'
|
|
30
|
+
""")
|
|
31
|
+
assert result == expected
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class TestTemplateJob:
|
|
35
|
+
def test_main(self, *, tmp_path: Path) -> None:
|
|
36
|
+
path_template = tmp_path.joinpath("template.j2")
|
|
37
|
+
_ = path_template.write_text(
|
|
38
|
+
strip_and_dedent("""
|
|
39
|
+
text = '{{ text }}'
|
|
40
|
+
""")
|
|
41
|
+
)
|
|
42
|
+
path_target = tmp_path.joinpath("target.txt")
|
|
43
|
+
job = TemplateJob(
|
|
44
|
+
template=path_template, kwargs={"text": "example text"}, target=path_target
|
|
45
|
+
)
|
|
46
|
+
expected = strip_and_dedent("""
|
|
47
|
+
text = 'example text'
|
|
48
|
+
""")
|
|
49
|
+
assert job.rendered == expected
|
|
50
|
+
assert not path_target.exists()
|
|
51
|
+
job.run()
|
|
52
|
+
assert path_target.exists()
|
|
53
|
+
assert path_target.read_text() == expected
|
|
54
|
+
|
|
55
|
+
def test_append(self, *, tmp_path: Path) -> None:
|
|
56
|
+
path_template = tmp_path.joinpath("template.j2")
|
|
57
|
+
_ = path_template.write_text(
|
|
58
|
+
strip_and_dedent(
|
|
59
|
+
"""
|
|
60
|
+
new = '{{ text }}'
|
|
61
|
+
""",
|
|
62
|
+
trailing=True,
|
|
63
|
+
)
|
|
64
|
+
)
|
|
65
|
+
path_target = tmp_path.joinpath("target.txt")
|
|
66
|
+
_ = path_target.write_text(
|
|
67
|
+
strip_and_dedent(
|
|
68
|
+
"""
|
|
69
|
+
old = 'old text'
|
|
70
|
+
""",
|
|
71
|
+
trailing=True,
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
job = TemplateJob(
|
|
75
|
+
template=path_template,
|
|
76
|
+
kwargs={"text": "new text"},
|
|
77
|
+
target=path_target,
|
|
78
|
+
mode="append",
|
|
79
|
+
)
|
|
80
|
+
job.run()
|
|
81
|
+
assert path_target.exists()
|
|
82
|
+
assert path_target.read_text() == strip_and_dedent("""
|
|
83
|
+
old = 'old text'
|
|
84
|
+
new = 'new text'
|
|
85
|
+
""")
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Literal, assert_never, override
|
|
4
5
|
|
|
5
|
-
from jinja2 import BaseLoader, BytecodeCache, Environment, Undefined
|
|
6
|
+
from jinja2 import BaseLoader, BytecodeCache, Environment, FileSystemLoader, Undefined
|
|
6
7
|
from jinja2.defaults import (
|
|
7
8
|
BLOCK_END_STRING,
|
|
8
9
|
BLOCK_START_STRING,
|
|
@@ -18,13 +19,17 @@ from jinja2.defaults import (
|
|
|
18
19
|
VARIABLE_START_STRING,
|
|
19
20
|
)
|
|
20
21
|
|
|
22
|
+
from utilities.atomicwrites import writer
|
|
21
23
|
from utilities.text import pascal_case, snake_case
|
|
22
24
|
|
|
23
25
|
if TYPE_CHECKING:
|
|
24
26
|
from collections.abc import Callable, Sequence
|
|
27
|
+
from pathlib import Path
|
|
25
28
|
|
|
26
29
|
from jinja2.ext import Extension
|
|
27
30
|
|
|
31
|
+
from utilities.types import StrMapping
|
|
32
|
+
|
|
28
33
|
|
|
29
34
|
class EnhancedEnvironment(Environment):
|
|
30
35
|
"""Environment with enhanced features."""
|
|
@@ -83,4 +88,32 @@ class EnhancedEnvironment(Environment):
|
|
|
83
88
|
self.filters["pascal"] = pascal_case
|
|
84
89
|
|
|
85
90
|
|
|
86
|
-
|
|
91
|
+
@dataclass(order=True, unsafe_hash=True, kw_only=True, slots=True)
|
|
92
|
+
class TemplateJob:
|
|
93
|
+
"""A template with an associated rendering job."""
|
|
94
|
+
|
|
95
|
+
template: Path
|
|
96
|
+
kwargs: StrMapping
|
|
97
|
+
target: Path
|
|
98
|
+
mode: Literal["write", "append"] = "write"
|
|
99
|
+
|
|
100
|
+
def run(self) -> None:
|
|
101
|
+
"""Run the job."""
|
|
102
|
+
match self.mode:
|
|
103
|
+
case "write":
|
|
104
|
+
with writer(self.target, overwrite=True) as temp:
|
|
105
|
+
_ = temp.write_text(self.rendered)
|
|
106
|
+
case "append":
|
|
107
|
+
with self.target.open(mode="a") as fh:
|
|
108
|
+
_ = fh.write(self.rendered)
|
|
109
|
+
case never:
|
|
110
|
+
assert_never(never)
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def rendered(self) -> str:
|
|
114
|
+
"""The template, rendered."""
|
|
115
|
+
env = EnhancedEnvironment(loader=FileSystemLoader(self.template.parent))
|
|
116
|
+
return env.get_template(self.template.name).render(self.kwargs)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
__all__ = ["EnhancedEnvironment", "TemplateJob"]
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from jinja2 import DictLoader
|
|
4
|
-
|
|
5
|
-
from utilities.jinja2 import EnhancedEnvironment
|
|
6
|
-
from utilities.text import strip_and_dedent
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class TestEnhancedTemplate:
|
|
10
|
-
def test_main(self) -> None:
|
|
11
|
-
env = EnhancedEnvironment(
|
|
12
|
-
loader=DictLoader({
|
|
13
|
-
"test.j2": strip_and_dedent("""
|
|
14
|
-
text = '{{ text }}'
|
|
15
|
-
pascal = '{{ text | pascal }}'
|
|
16
|
-
snake = '{{ text | snake }}'
|
|
17
|
-
""")
|
|
18
|
-
})
|
|
19
|
-
)
|
|
20
|
-
result = env.get_template("test.j2").render(text="multi-word string")
|
|
21
|
-
expected = strip_and_dedent("""
|
|
22
|
-
text = 'multi-word string'
|
|
23
|
-
pascal = 'MultiWordString'
|
|
24
|
-
snake = 'multi_word_string'
|
|
25
|
-
""")
|
|
26
|
-
assert result == expected
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_missing/__init__.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_missing/module.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_with/__init__.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_with/outer_1.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_with/outer_2.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_without/__init__.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/modules/package_without/module_1.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/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
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_pydantic_settings_sops.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
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/tests/test_typing_funcs/no_future.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/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
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pytest_plugins/__init__.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.34 → dycw_utilities-0.166.35}/src/utilities/pytest_plugins/pytest_randomly.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
|