dycw-utilities 0.166.33__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.33 → dycw_utilities-0.166.35}/PKG-INFO +1 -2
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/pyproject.toml +3 -4
- dycw_utilities-0.166.35/src/tests/test_jinja2.py +85 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/jinja2.py +36 -3
- dycw_utilities-0.166.33/src/tests/test_jinja2.py +0 -26
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/.gitignore +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/LICENSE +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/README.md +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_aeventkit.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_git.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_pydantic_settings.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_pydantic_settings_sops.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_testbook.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/aeventkit.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/click.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/git.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/http.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/json.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/math.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/os.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pydantic_settings.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pydantic_settings_sops.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/random.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/re.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/string.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/testbook.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/text.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/types.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/version.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/utilities/zoneinfo.py +0 -0
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dycw-utilities
|
|
3
|
-
Version: 0.166.
|
|
3
|
+
Version: 0.166.35
|
|
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: atomicwrites<1.5,>=1.4.1
|
|
8
|
-
Requires-Dist: jinja2>=3.1.6
|
|
9
8
|
Requires-Dist: typing-extensions<4.16,>=4.15.0
|
|
10
9
|
Requires-Dist: tzlocal<5.4,>=5.3.1
|
|
11
10
|
Requires-Dist: whenever<0.9,>=0.8.8
|
|
@@ -147,7 +147,7 @@ pqdm = [
|
|
|
147
147
|
"pqdm >=0.2.0, <0.3",
|
|
148
148
|
]
|
|
149
149
|
psutil = [
|
|
150
|
-
"psutil >=7.
|
|
150
|
+
"psutil >=7.1.0, <7.2",
|
|
151
151
|
]
|
|
152
152
|
pydantic-settings = [
|
|
153
153
|
"pydantic-settings",
|
|
@@ -242,7 +242,6 @@ whenever-test = [
|
|
|
242
242
|
authors = [{name = "Derek Wan", email = "d.wan@icloud.com"}]
|
|
243
243
|
dependencies = [
|
|
244
244
|
"atomicwrites >=1.4.1, <1.5",
|
|
245
|
-
"jinja2 >=3.1.6",
|
|
246
245
|
"typing-extensions >=4.15.0, <4.16",
|
|
247
246
|
"tzlocal >=5.3.1, <5.4",
|
|
248
247
|
"whenever >=0.8.8, <0.9",
|
|
@@ -250,7 +249,7 @@ dependencies = [
|
|
|
250
249
|
name = "dycw-utilities"
|
|
251
250
|
readme = "README.md"
|
|
252
251
|
requires-python = ">= 3.12"
|
|
253
|
-
version = "0.166.
|
|
252
|
+
version = "0.166.35"
|
|
254
253
|
|
|
255
254
|
[project.entry-points.pytest11]
|
|
256
255
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
|
@@ -283,7 +282,7 @@ test = [
|
|
|
283
282
|
# bump-my-version
|
|
284
283
|
[tool.bumpversion]
|
|
285
284
|
allow_dirty = true
|
|
286
|
-
current_version = "0.166.
|
|
285
|
+
current_version = "0.166.35"
|
|
287
286
|
|
|
288
287
|
[[tool.bumpversion.files]]
|
|
289
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.33 → dycw_utilities-0.166.35}/src/tests/modules/package_missing/__init__.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_missing/module.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_with/__init__.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_with/outer_1.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.33 → 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.33 → dycw_utilities-0.166.35}/src/tests/modules/package_without/__init__.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.33 → dycw_utilities-0.166.35}/src/tests/modules/package_without/module_1.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.33 → 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.33 → 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.33 → dycw_utilities-0.166.35}/src/tests/test_typing_funcs/no_future.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.33 → 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.33 → dycw_utilities-0.166.35}/src/utilities/pytest_plugins/__init__.py
RENAMED
|
File without changes
|
{dycw_utilities-0.166.33 → 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
|