dycw-utilities 0.162.5__tar.gz → 0.162.6__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.162.5 → dycw_utilities-0.162.6}/PKG-INFO +1 -1
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/pyproject.toml +2 -2
- dycw_utilities-0.162.6/src/tests/test_testbook.py +38 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_text.py +120 -110
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/testbook.py +11 -7
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/text.py +33 -18
- dycw_utilities-0.162.5/src/tests/test_testbook.py +0 -22
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/.gitignore +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/LICENSE +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/README.md +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_aeventkit.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_gzip.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_inflect.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_json.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_logging.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_objects/__init__.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_objects/objects.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_postgres.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_pytest_randomly.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_statsmodels.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_typed_settings.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/aeventkit.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/click.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/gzip.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/http.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/inflect.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/json.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/logging.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/math.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/os.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/postgres.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/pytest_plugins/__init__.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/random.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/re.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/string.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/typed_settings.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/types.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/version.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/utilities/zoneinfo.py +0 -0
@@ -230,7 +230,7 @@ dependencies = [
|
|
230
230
|
name = "dycw-utilities"
|
231
231
|
readme = "README.md"
|
232
232
|
requires-python = ">= 3.12"
|
233
|
-
version = "0.162.
|
233
|
+
version = "0.162.6"
|
234
234
|
|
235
235
|
[project.entry-points.pytest11]
|
236
236
|
pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
|
@@ -263,7 +263,7 @@ test = [
|
|
263
263
|
# bump-my-version
|
264
264
|
[tool.bumpversion]
|
265
265
|
allow_dirty = true
|
266
|
-
current_version = "0.162.
|
266
|
+
current_version = "0.162.6"
|
267
267
|
|
268
268
|
[[tool.bumpversion.files]]
|
269
269
|
filename = "src/utilities/__init__.py"
|
@@ -0,0 +1,38 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from json import dumps
|
4
|
+
from re import search
|
5
|
+
from typing import TYPE_CHECKING, ClassVar
|
6
|
+
|
7
|
+
from pytest import mark, param
|
8
|
+
|
9
|
+
from utilities.functions import get_class_name
|
10
|
+
from utilities.testbook import build_notebook_tester
|
11
|
+
from utilities.whenever import HOUR
|
12
|
+
|
13
|
+
if TYPE_CHECKING:
|
14
|
+
from pathlib import Path
|
15
|
+
|
16
|
+
from utilities.types import Delta
|
17
|
+
|
18
|
+
|
19
|
+
class TestBuildNotebookTester:
|
20
|
+
text: ClassVar[str] = dumps({"cells": []})
|
21
|
+
|
22
|
+
def test_main(self, *, tmp_path: Path) -> None:
|
23
|
+
mapping = {
|
24
|
+
"notebook": "test_notebook",
|
25
|
+
"notebook_with_underscores": "test_notebook_with_underscores",
|
26
|
+
"notebook-with-dashes": "test_notebook_with_dashes",
|
27
|
+
}
|
28
|
+
for stem in mapping:
|
29
|
+
_ = tmp_path.joinpath(f"{stem}.ipynb").write_text(self.text)
|
30
|
+
tester = build_notebook_tester(tmp_path)
|
31
|
+
assert search(r"^TestTestMain\d+$", get_class_name(tester))
|
32
|
+
for name in mapping.values():
|
33
|
+
assert hasattr(tester, name)
|
34
|
+
|
35
|
+
@mark.parametrize("throttle", [param(HOUR), param(None)])
|
36
|
+
def test_throttle(self, *, tmp_path: Path, throttle: Delta | None) -> None:
|
37
|
+
_ = tmp_path.joinpath("notebook.ipynb").write_text(self.text)
|
38
|
+
_ = build_notebook_tester(tmp_path, throttle=throttle)
|
@@ -30,6 +30,7 @@ from utilities.text import (
|
|
30
30
|
join_strs,
|
31
31
|
parse_bool,
|
32
32
|
parse_none,
|
33
|
+
pascal_case,
|
33
34
|
repr_encode,
|
34
35
|
secret_str,
|
35
36
|
snake_case,
|
@@ -43,8 +44,6 @@ from utilities.text import (
|
|
43
44
|
)
|
44
45
|
|
45
46
|
if TYPE_CHECKING:
|
46
|
-
from collections.abc import Sequence
|
47
|
-
|
48
47
|
from utilities.sentinel import Sentinel
|
49
48
|
|
50
49
|
|
@@ -68,20 +67,21 @@ class TestParseBool:
|
|
68
67
|
result = parse_bool(text)
|
69
68
|
assert result is value
|
70
69
|
|
71
|
-
@
|
72
|
-
text
|
73
|
-
|
74
|
-
"
|
75
|
-
"
|
76
|
-
"
|
77
|
-
"
|
78
|
-
"
|
79
|
-
"
|
80
|
-
"
|
81
|
-
"
|
82
|
-
"
|
83
|
-
"
|
84
|
-
|
70
|
+
@mark.parametrize(
|
71
|
+
"text",
|
72
|
+
[
|
73
|
+
param("00"),
|
74
|
+
param("11"),
|
75
|
+
param("ffalsee"),
|
76
|
+
param("invalid"),
|
77
|
+
param("nn"),
|
78
|
+
param("nnoo"),
|
79
|
+
param("oofff"),
|
80
|
+
param("oonn"),
|
81
|
+
param("ttruee"),
|
82
|
+
param("yy"),
|
83
|
+
param("yyess"),
|
84
|
+
],
|
85
85
|
)
|
86
86
|
def test_error(self, *, text: str) -> None:
|
87
87
|
with raises(ParseBoolError, match="Unable to parse boolean value; got '.*'"):
|
@@ -96,7 +96,7 @@ class TestParseNone:
|
|
96
96
|
result = parse_none(text_use)
|
97
97
|
assert result is None
|
98
98
|
|
99
|
-
@
|
99
|
+
@mark.parametrize("text", [param("invalid"), param("nnonee")])
|
100
100
|
def test_error(self, *, text: str) -> None:
|
101
101
|
with raises(ParseNoneError, match="Unable to parse null value; got '.*'"):
|
102
102
|
_ = parse_none(text)
|
@@ -110,6 +110,62 @@ class TestReprEncode:
|
|
110
110
|
assert result == expected
|
111
111
|
|
112
112
|
|
113
|
+
class TestPascalAndSnakeCase:
|
114
|
+
@mark.parametrize(
|
115
|
+
("text", "exp_pascal", "exp_snake"),
|
116
|
+
[
|
117
|
+
param("API", "API", "api"),
|
118
|
+
param("APIResponse", "APIResponse", "api_response"),
|
119
|
+
param(
|
120
|
+
"ApplicationController",
|
121
|
+
"ApplicationController",
|
122
|
+
"application_controller",
|
123
|
+
),
|
124
|
+
param("Area51Controller", "Area51Controller", "area51_controller"),
|
125
|
+
param("FreeBSD", "FreeBSD", "free_bsd"),
|
126
|
+
param("HTML", "HTML", "html"),
|
127
|
+
param("HTMLTidy", "HTMLTidy", "html_tidy"),
|
128
|
+
param("HTMLTidyGenerator", "HTMLTidyGenerator", "html_tidy_generator"),
|
129
|
+
param("HTMLVersion", "HTMLVersion", "html_version"),
|
130
|
+
param("NoHTML", "NoHTML", "no_html"),
|
131
|
+
param("One Two", "OneTwo", "one_two"),
|
132
|
+
param("One Two", "OneTwo", "one_two"),
|
133
|
+
param("One Two", "OneTwo", "one_two"),
|
134
|
+
param("OneTwo", "OneTwo", "one_two"),
|
135
|
+
param("One_Two", "OneTwo", "one_two"),
|
136
|
+
param("One__Two", "OneTwo", "one_two"),
|
137
|
+
param("One___Two", "OneTwo", "one_two"),
|
138
|
+
param("Product", "Product", "product"),
|
139
|
+
param("SpecialGuest", "SpecialGuest", "special_guest"),
|
140
|
+
param("Text", "Text", "text"),
|
141
|
+
param("Text123", "Text123", "text123"),
|
142
|
+
param("Text123Text456", "Text123Text456", "text123_text456"),
|
143
|
+
param("_APIResponse_", "APIResponse", "_api_response_"),
|
144
|
+
param("_API_", "API", "_api_"),
|
145
|
+
param("__APIResponse__", "APIResponse", "_api_response_"),
|
146
|
+
param("__API__", "API", "_api_"),
|
147
|
+
param("__impliedVolatility_", "ImpliedVolatility", "_implied_volatility_"),
|
148
|
+
param("_itemID", "ItemID", "_item_id"),
|
149
|
+
param("_lastPrice__", "LastPrice", "_last_price_"),
|
150
|
+
param("_symbol", "Symbol", "_symbol"),
|
151
|
+
param("aB", "AB", "a_b"),
|
152
|
+
param("changePct", "ChangePct", "change_pct"),
|
153
|
+
param("changePct_", "ChangePct", "change_pct_"),
|
154
|
+
param("impliedVolatility", "ImpliedVolatility", "implied_volatility"),
|
155
|
+
param("lastPrice", "LastPrice", "last_price"),
|
156
|
+
param("memMB", "MemMB", "mem_mb"),
|
157
|
+
param("sizeX", "SizeX", "size_x"),
|
158
|
+
param("symbol", "Symbol", "symbol"),
|
159
|
+
param("testNTest", "TestNTest", "test_n_test"),
|
160
|
+
param("text", "Text", "text"),
|
161
|
+
param("text123", "Text123", "text123"),
|
162
|
+
],
|
163
|
+
)
|
164
|
+
def test_main(self, *, text: str, exp_pascal: str, exp_snake: str) -> None:
|
165
|
+
assert pascal_case(text) == exp_pascal
|
166
|
+
assert snake_case(text) == exp_snake
|
167
|
+
|
168
|
+
|
113
169
|
class TestSecretStr:
|
114
170
|
def test_main(self) -> None:
|
115
171
|
s = secret_str("text")
|
@@ -124,74 +180,26 @@ class TestSecretStr:
|
|
124
180
|
assert str(s.str) == "text"
|
125
181
|
|
126
182
|
|
127
|
-
class TestSnakeCase:
|
128
|
-
@given(
|
129
|
-
case=sampled_from([
|
130
|
-
("API", "api"),
|
131
|
-
("APIResponse", "api_response"),
|
132
|
-
("ApplicationController", "application_controller"),
|
133
|
-
("Area51Controller", "area51_controller"),
|
134
|
-
("FreeBSD", "free_bsd"),
|
135
|
-
("HTML", "html"),
|
136
|
-
("HTMLTidy", "html_tidy"),
|
137
|
-
("HTMLTidyGenerator", "html_tidy_generator"),
|
138
|
-
("HTMLVersion", "html_version"),
|
139
|
-
("NoHTML", "no_html"),
|
140
|
-
("One Two", "one_two"),
|
141
|
-
("One Two", "one_two"),
|
142
|
-
("One Two", "one_two"),
|
143
|
-
("OneTwo", "one_two"),
|
144
|
-
("One_Two", "one_two"),
|
145
|
-
("One__Two", "one_two"),
|
146
|
-
("One___Two", "one_two"),
|
147
|
-
("Product", "product"),
|
148
|
-
("SpecialGuest", "special_guest"),
|
149
|
-
("Text", "text"),
|
150
|
-
("Text123", "text123"),
|
151
|
-
("_APIResponse_", "_api_response_"),
|
152
|
-
("_API_", "_api_"),
|
153
|
-
("__APIResponse__", "_api_response_"),
|
154
|
-
("__API__", "_api_"),
|
155
|
-
("__impliedVolatility_", "_implied_volatility_"),
|
156
|
-
("_itemID", "_item_id"),
|
157
|
-
("_lastPrice__", "_last_price_"),
|
158
|
-
("_symbol", "_symbol"),
|
159
|
-
("aB", "a_b"),
|
160
|
-
("changePct", "change_pct"),
|
161
|
-
("changePct_", "change_pct_"),
|
162
|
-
("impliedVolatility", "implied_volatility"),
|
163
|
-
("lastPrice", "last_price"),
|
164
|
-
("memMB", "mem_mb"),
|
165
|
-
("sizeX", "size_x"),
|
166
|
-
("symbol", "symbol"),
|
167
|
-
("testNTest", "test_n_test"),
|
168
|
-
("text", "text"),
|
169
|
-
("text123", "text123"),
|
170
|
-
])
|
171
|
-
)
|
172
|
-
def test_main(self, *, case: tuple[str, str]) -> None:
|
173
|
-
text, expected = case
|
174
|
-
result = snake_case(text)
|
175
|
-
assert result == expected
|
176
|
-
|
177
|
-
|
178
183
|
class TestSplitKeyValuePairs:
|
179
|
-
@
|
180
|
-
|
181
|
-
|
182
|
-
("
|
183
|
-
("a=1
|
184
|
-
("a=1,b=22
|
185
|
-
("=1", [("", "1")]),
|
186
|
-
("
|
187
|
-
("a=
|
188
|
-
("a=1,
|
189
|
-
("a=1,b
|
190
|
-
(
|
191
|
-
|
184
|
+
@mark.parametrize(
|
185
|
+
("text", "expected"),
|
186
|
+
[
|
187
|
+
param("", []),
|
188
|
+
param("a=1", [("a", "1")]),
|
189
|
+
param("a=1,b=22", [("a", "1"), ("b", "22")]),
|
190
|
+
param("a=1,b=22,c=333", [("a", "1"), ("b", "22"), ("c", "333")]),
|
191
|
+
param("=1", [("", "1")]),
|
192
|
+
param("a=", [("a", "")]),
|
193
|
+
param("a=1,=22,c=333", [("a", "1"), ("", "22"), ("c", "333")]),
|
194
|
+
param("a=1,b=,c=333", [("a", "1"), ("b", ""), ("c", "333")]),
|
195
|
+
param(
|
196
|
+
"a=1,b=(22,22,22),c=333",
|
197
|
+
[("a", "1"), ("b", "(22,22,22)"), ("c", "333")],
|
198
|
+
),
|
199
|
+
param("a=1,b=(c=22),c=333", [("a", "1"), ("b", "(c=22)"), ("c", "333")]),
|
200
|
+
],
|
192
201
|
)
|
193
|
-
def test_main(self, *,
|
194
|
-
text, expected = case
|
202
|
+
def test_main(self, *, text: str, expected: str) -> None:
|
195
203
|
result = split_key_value_pairs(text)
|
196
204
|
assert result == expected
|
197
205
|
|
@@ -223,22 +231,24 @@ class TestSplitKeyValuePairs:
|
|
223
231
|
|
224
232
|
|
225
233
|
class TestSplitAndJoinStr:
|
226
|
-
@given(
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
(
|
231
|
-
("
|
232
|
-
("
|
233
|
-
("
|
234
|
-
("1
|
235
|
-
("1,22
|
236
|
-
("1
|
237
|
-
("1
|
238
|
-
|
234
|
+
@given(data=data())
|
235
|
+
@mark.parametrize(
|
236
|
+
("text", "n", "expected"),
|
237
|
+
[
|
238
|
+
param("", 0, []),
|
239
|
+
param(r"\,", 1, [""]),
|
240
|
+
param(",", 2, ["", ""]),
|
241
|
+
param(",,", 3, ["", "", ""]),
|
242
|
+
param("1", 1, ["1"]),
|
243
|
+
param("1,22", 2, ["1", "22"]),
|
244
|
+
param("1,22,333", 3, ["1", "22", "333"]),
|
245
|
+
param("1,,333", 3, ["1", "", "333"]),
|
246
|
+
param("1,(22,22,22),333", 5, ["1", "(22", "22", "22)", "333"]),
|
247
|
+
],
|
239
248
|
)
|
240
|
-
def test_main(
|
241
|
-
text, n, expected
|
249
|
+
def test_main(
|
250
|
+
self, *, data: DataObject, text: str, n: int, expected: list[str]
|
251
|
+
) -> None:
|
242
252
|
n_use = data.draw(just(n) | none())
|
243
253
|
result = split_str(text, n=n_use)
|
244
254
|
if n_use is None:
|
@@ -247,21 +257,21 @@ class TestSplitAndJoinStr:
|
|
247
257
|
assert result == tuple(expected)
|
248
258
|
assert join_strs(result) == text
|
249
259
|
|
250
|
-
@given(
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
("1
|
255
|
-
("1,22
|
256
|
-
("1,
|
257
|
-
("1,(22
|
258
|
-
("1,(22,22
|
259
|
-
|
260
|
+
@given(data=data())
|
261
|
+
@mark.parametrize(
|
262
|
+
("text", "n", "expected"),
|
263
|
+
[
|
264
|
+
param("1", 1, ["1"]),
|
265
|
+
param("1,22", 2, ["1", "22"]),
|
266
|
+
param("1,22,333", 3, ["1", "22", "333"]),
|
267
|
+
param("1,(22),333", 3, ["1", "(22)", "333"]),
|
268
|
+
param("1,(22,22),333", 3, ["1", "(22,22)", "333"]),
|
269
|
+
param("1,(22,22,22),333", 3, ["1", "(22,22,22)", "333"]),
|
270
|
+
],
|
260
271
|
)
|
261
272
|
def test_brackets(
|
262
|
-
self, *, data: DataObject,
|
273
|
+
self, *, data: DataObject, text: str, n: int, expected: list[str]
|
263
274
|
) -> None:
|
264
|
-
text, n, expected = case
|
265
275
|
n_use = data.draw(just(n) | none())
|
266
276
|
result = split_str(text, brackets=[("(", ")")], n=n_use)
|
267
277
|
if n_use is None:
|
@@ -6,6 +6,7 @@ from typing import TYPE_CHECKING, Any
|
|
6
6
|
from testbook import testbook
|
7
7
|
|
8
8
|
from utilities.pytest import throttle
|
9
|
+
from utilities.text import pascal_case
|
9
10
|
|
10
11
|
if TYPE_CHECKING:
|
11
12
|
from collections.abc import Callable
|
@@ -15,16 +16,19 @@ if TYPE_CHECKING:
|
|
15
16
|
|
16
17
|
def build_notebook_tester(
|
17
18
|
path: PathLike, /, *, throttle: Delta | None = None, on_try: bool = False
|
18
|
-
) ->
|
19
|
-
"""Build the notebook
|
20
|
-
|
19
|
+
) -> type[Any]:
|
20
|
+
"""Build the notebook tester class."""
|
21
|
+
path = Path(path)
|
22
|
+
name = f"Test{pascal_case(path.stem)}"
|
21
23
|
notebooks = [
|
22
24
|
path_i
|
23
|
-
for path_i in
|
25
|
+
for path_i in path.rglob("**/*.ipynb")
|
24
26
|
if all(p != ".ipynb_checkpoints" for p in path_i.parts)
|
25
27
|
]
|
26
28
|
namespace = {
|
27
|
-
f"test_{p.stem}": _build_test_method(
|
29
|
+
f"test_{p.stem.replace('-', '_')}": _build_test_method(
|
30
|
+
p, delta=throttle, on_try=on_try
|
31
|
+
)
|
28
32
|
for p in notebooks
|
29
33
|
}
|
30
34
|
return type(name, (), namespace)
|
@@ -33,14 +37,14 @@ def build_notebook_tester(
|
|
33
37
|
def _build_test_method(
|
34
38
|
path: Path, /, *, delta: Delta | None = None, on_try: bool = False
|
35
39
|
) -> Callable[..., Any]:
|
40
|
+
@testbook(path, execute=True)
|
36
41
|
def method(self: Any, tb: Any) -> None:
|
37
42
|
_ = (self, tb) # pragma: no cover
|
38
43
|
|
39
44
|
if delta is not None:
|
40
45
|
method = throttle(delta=delta, on_try=on_try)(method)
|
41
46
|
|
42
|
-
|
43
|
-
return tbook(method)
|
47
|
+
return method
|
44
48
|
|
45
49
|
|
46
50
|
__all__ = ["build_notebook_tester"]
|
@@ -6,7 +6,7 @@ from collections.abc import Callable
|
|
6
6
|
from dataclasses import dataclass
|
7
7
|
from itertools import chain
|
8
8
|
from os import getpid
|
9
|
-
from re import IGNORECASE,
|
9
|
+
from re import IGNORECASE, VERBOSE, escape, search
|
10
10
|
from textwrap import dedent
|
11
11
|
from threading import get_ident
|
12
12
|
from time import time_ns
|
@@ -77,6 +77,21 @@ class ParseNoneError(Exception):
|
|
77
77
|
##
|
78
78
|
|
79
79
|
|
80
|
+
def pascal_case(text: str, /) -> str:
|
81
|
+
"""Convert text to pascal case."""
|
82
|
+
parts = _SPLIT_TEXT.findall(text)
|
83
|
+
parts = [p for p in parts if len(p) >= 1]
|
84
|
+
parts = list(map(_pascal_case_one, parts))
|
85
|
+
return "".join(parts)
|
86
|
+
|
87
|
+
|
88
|
+
def _pascal_case_one(text: str, /) -> str:
|
89
|
+
return text if text.isupper() else text.title()
|
90
|
+
|
91
|
+
|
92
|
+
##
|
93
|
+
|
94
|
+
|
80
95
|
def repr_encode(obj: Any, /) -> bytes:
|
81
96
|
"""Return the representation of the object encoded as bytes."""
|
82
97
|
return repr(obj).encode()
|
@@ -85,25 +100,24 @@ def repr_encode(obj: Any, /) -> bytes:
|
|
85
100
|
##
|
86
101
|
|
87
102
|
|
88
|
-
_ACRONYM_PATTERN = re.compile(r"([A-Z\d]+)(?=[A-Z\d]|$)")
|
89
|
-
_SPACES_PATTERN = re.compile(r"\s+")
|
90
|
-
_SPLIT_PATTERN = re.compile(r"([\-_]*[A-Z][^A-Z]*[\-_]*)")
|
91
|
-
|
92
|
-
|
93
103
|
def snake_case(text: str, /) -> str:
|
94
104
|
"""Convert text into snake case."""
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
105
|
+
leading = bool(search(r"^_", text))
|
106
|
+
trailing = bool(search(r"_$", text))
|
107
|
+
parts = _SPLIT_TEXT.findall(text)
|
108
|
+
parts = (p for p in parts if len(p) >= 1)
|
109
|
+
parts = chain([""] if leading else [], parts, [""] if trailing else [])
|
110
|
+
return "_".join(parts).lower()
|
111
|
+
|
112
|
+
|
113
|
+
_SPLIT_TEXT = re.compile(
|
114
|
+
r"""
|
115
|
+
[A-Z]+(?=[A-Z][a-z0-9]) | # all caps followed by Upper+lower or digit (API in APIResponse2)
|
116
|
+
[A-Z]?[a-z]+[0-9]* | # normal words with optional trailing digits (Text123)
|
117
|
+
[A-Z]+[0-9]* | # consecutive caps with optional trailing digits (ID2)
|
118
|
+
""",
|
119
|
+
flags=VERBOSE,
|
120
|
+
)
|
107
121
|
|
108
122
|
##
|
109
123
|
|
@@ -503,6 +517,7 @@ __all__ = [
|
|
503
517
|
"join_strs",
|
504
518
|
"parse_bool",
|
505
519
|
"parse_none",
|
520
|
+
"pascal_case",
|
506
521
|
"repr_encode",
|
507
522
|
"secret_str",
|
508
523
|
"snake_case",
|
@@ -1,22 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
from json import dumps
|
4
|
-
from typing import TYPE_CHECKING
|
5
|
-
|
6
|
-
from pytest import mark, param
|
7
|
-
|
8
|
-
from utilities.testbook import build_notebook_tester
|
9
|
-
from utilities.whenever import HOUR
|
10
|
-
|
11
|
-
if TYPE_CHECKING:
|
12
|
-
from pathlib import Path
|
13
|
-
|
14
|
-
from utilities.types import Delta
|
15
|
-
|
16
|
-
|
17
|
-
class TestBuildNotebookTester:
|
18
|
-
@mark.parametrize("throttle", [param(HOUR), param(None)])
|
19
|
-
def test_main(self, *, tmp_path: Path, throttle: Delta | None) -> None:
|
20
|
-
data = {"cells": []}
|
21
|
-
_ = tmp_path.joinpath("notebook.ipynb").write_text(dumps(data))
|
22
|
-
_ = build_notebook_tester(tmp_path, throttle=throttle)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/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.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.162.5 → dycw_utilities-0.162.6}/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
|