dycw-utilities 0.129.4__tar.gz → 0.129.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.129.4 → dycw_utilities-0.129.6}/PKG-INFO +1 -1
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/pyproject.toml +2 -2
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_logging.py +87 -100
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/__init__.py +1 -1
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/logging.py +19 -11
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/.gitignore +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/LICENSE +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/README.md +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/__init__.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/conftest.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/__init__.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_missing/__init__.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_missing/module.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_with/__init__.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_with/outer_1.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_with/outer_2.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_without/__init__.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_without/module_1.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_without/module_2.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/standalone.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/with_imports.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_altair.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_asyncio.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_asyncio_classes/__init__.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_asyncio_classes/loopers.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_asyncio_classes/redis.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_atomicwrites.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_atools.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_cachetools.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_click.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_concurrent.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_contextlib.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_contextvars.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_cryptography.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_cvxpy.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_dataclasses.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_datetime.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_enum.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_errors.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_eventkit.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_fastapi.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_fpdf2.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_functions.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_functools.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_getpass.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_hashlib.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_http.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_hypothesis.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_importlib.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_ipython.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_iterables.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_jupyter.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_libcst.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_lightweight_charts.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_loguru.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_luigi.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_math.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_memory_profiler.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_modules.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_more_itertools.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_numpy.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_operator.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_optuna.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_orjson.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_os.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_parse.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_pathlib.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_period.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_pickle.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_platform.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_polars.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_polars_ols.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_pottery.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_pqdm.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_psutil.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_pydantic.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_pyinstrument.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_pyrsistent.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_pytest.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_pytest_regressions.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_python_dotenv.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_random.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_re.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_redis.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_reprlib.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_scipy.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_sentinel.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_shelve.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_slack_sdk.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_socket.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_sqlalchemy.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_statsmodel.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_streamlit.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_string.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_sys.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_tempfile.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_tenacity.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_text.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_threading.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_timer.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/__init__.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/chain.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/decorated_async.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/decorated_sync.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/error_bind.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/many.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/one.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/recursive.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/task_group_one.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/task_group_two.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/two.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_traceback_funcs/untraced.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_types.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_typing.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_typing_funcs/__init__.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_typing_funcs/no_future.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_typing_funcs/with_future.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_tzdata.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_tzlocal.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_uuid.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_version.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_warnings.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_whenever.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_zipfile.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_zoneinfo.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/altair.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/asyncio.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/atomicwrites.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/atools.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/cachetools.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/click.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/concurrent.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/contextlib.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/contextvars.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/cryptography.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/cvxpy.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/dataclasses.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/datetime.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/enum.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/errors.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/eventkit.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/fastapi.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/fpdf2.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/functions.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/functools.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/getpass.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/hashlib.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/http.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/hypothesis.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/importlib.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/ipython.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/iterables.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/jupyter.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/libcst.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/lightweight_charts.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/loguru.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/luigi.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/math.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/memory_profiler.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/modules.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/more_itertools.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/numpy.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/operator.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/optuna.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/orjson.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/os.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/parse.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/pathlib.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/period.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/pickle.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/platform.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/polars.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/polars_ols.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/pottery.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/pqdm.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/psutil.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/py.typed +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/pydantic.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/pyinstrument.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/pyrsistent.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/pytest.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/pytest_regressions.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/python_dotenv.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/random.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/re.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/redis.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/reprlib.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/scipy.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/sentinel.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/shelve.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/slack_sdk.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/socket.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/sqlalchemy.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/sqlalchemy_polars.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/statsmodels.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/streamlit.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/string.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/sys.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/tempfile.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/tenacity.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/text.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/threading.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/timer.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/traceback.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/types.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/typing.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/tzdata.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/tzlocal.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/uuid.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/version.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/warnings.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/whenever.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/zipfile.py +0 -0
- {dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/utilities/zoneinfo.py +0 -0
@@ -94,7 +94,7 @@ dependencies = [
|
|
94
94
|
name = "dycw-utilities"
|
95
95
|
readme = "README.md"
|
96
96
|
requires-python = ">= 3.12"
|
97
|
-
version = "0.129.
|
97
|
+
version = "0.129.6"
|
98
98
|
|
99
99
|
[project.optional-dependencies]
|
100
100
|
test = [
|
@@ -334,7 +334,7 @@ zzz-test-zoneinfo = [
|
|
334
334
|
# bump-my-version
|
335
335
|
[tool.bumpversion]
|
336
336
|
allow_dirty = true
|
337
|
-
current_version = "0.129.
|
337
|
+
current_version = "0.129.6"
|
338
338
|
|
339
339
|
[[tool.bumpversion.files]]
|
340
340
|
filename = "src/utilities/__init__.py"
|
@@ -42,6 +42,7 @@ from utilities.logging import (
|
|
42
42
|
temp_logger,
|
43
43
|
)
|
44
44
|
from utilities.pytest import skipif_windows
|
45
|
+
from utilities.text import unique_str
|
45
46
|
from utilities.types import LogLevel
|
46
47
|
from utilities.typing import get_args
|
47
48
|
|
@@ -53,9 +54,9 @@ if TYPE_CHECKING:
|
|
53
54
|
|
54
55
|
|
55
56
|
class TestAddFilters:
|
56
|
-
@given(
|
57
|
-
def test_main(self, *,
|
58
|
-
logger = getLogger(
|
57
|
+
@given(expected=booleans())
|
58
|
+
def test_main(self, *, expected: bool) -> None:
|
59
|
+
logger = getLogger(unique_str())
|
59
60
|
logger.addHandler(handler := StreamHandler(buffer := StringIO()))
|
60
61
|
add_filters(handler, lambda _: expected)
|
61
62
|
assert len(handler.filters) == 1
|
@@ -71,10 +72,13 @@ class TestAddFilters:
|
|
71
72
|
|
72
73
|
|
73
74
|
class TestBasicConfig:
|
74
|
-
|
75
|
-
|
76
|
-
logger =
|
77
|
-
logger
|
75
|
+
@mark.parametrize("log", [param(True), param(False)])
|
76
|
+
def test_main(self, *, caplog: LogCaptureFixture, log: bool) -> None:
|
77
|
+
logger = unique_str() if log else None
|
78
|
+
basic_config(logger=logger)
|
79
|
+
logger_use = getLogger()
|
80
|
+
logger_use.warning("message")
|
81
|
+
assert "message" in caplog.messages
|
78
82
|
|
79
83
|
|
80
84
|
class TestComputeRolloverActions:
|
@@ -191,16 +195,9 @@ class TestComputeRolloverActions:
|
|
191
195
|
|
192
196
|
|
193
197
|
class TestFilterForKey:
|
194
|
-
@given(
|
195
|
-
|
196
|
-
|
197
|
-
value=booleans() | none(),
|
198
|
-
default=booleans(),
|
199
|
-
)
|
200
|
-
def test_main(
|
201
|
-
self, *, root: Path, key: str, value: bool | None, default: bool
|
202
|
-
) -> None:
|
203
|
-
logger = getLogger(str(root))
|
198
|
+
@given(key=text_ascii(), value=booleans() | none(), default=booleans())
|
199
|
+
def test_main(self, *, key: str, value: bool | None, default: bool) -> None:
|
200
|
+
logger = getLogger(unique_str())
|
204
201
|
logger.addHandler(handler := StreamHandler(buffer := StringIO()))
|
205
202
|
with assume_does_not_raise(FilterForKeyError):
|
206
203
|
filter_ = filter_for_key(key, default=default)
|
@@ -230,15 +227,16 @@ class TestGetDefaultLoggingPath:
|
|
230
227
|
|
231
228
|
|
232
229
|
class TestGetLogger:
|
233
|
-
def test_logger(self
|
234
|
-
logger = getLogger(
|
230
|
+
def test_logger(self) -> None:
|
231
|
+
logger = getLogger(unique_str())
|
235
232
|
result = get_logger(logger=logger)
|
236
233
|
assert result is logger
|
237
234
|
|
238
|
-
def test_str(self
|
239
|
-
|
240
|
-
|
241
|
-
assert
|
235
|
+
def test_str(self) -> None:
|
236
|
+
name = unique_str()
|
237
|
+
logger = getLogger(name)
|
238
|
+
assert isinstance(logger, Logger)
|
239
|
+
assert logger.name == name
|
242
240
|
|
243
241
|
def test_none(self) -> None:
|
244
242
|
result = get_logger()
|
@@ -382,7 +380,7 @@ class TestSetupLogging:
|
|
382
380
|
def test_decorated(
|
383
381
|
self, *, tmp_path: Path, traceback_func_one: Pattern[str]
|
384
382
|
) -> None:
|
385
|
-
name =
|
383
|
+
name = unique_str()
|
386
384
|
setup_logging(logger=name, files_dir=tmp_path)
|
387
385
|
logger = getLogger(name)
|
388
386
|
assert len(logger.handlers) == 7
|
@@ -397,7 +395,7 @@ class TestSetupLogging:
|
|
397
395
|
def test_undecorated(
|
398
396
|
self, *, tmp_path: Path, traceback_func_untraced: Pattern[str]
|
399
397
|
) -> None:
|
400
|
-
name =
|
398
|
+
name = unique_str()
|
401
399
|
setup_logging(logger=name, files_dir=tmp_path)
|
402
400
|
logger = getLogger(name)
|
403
401
|
assert len(logger.handlers) == 7
|
@@ -412,7 +410,7 @@ class TestSetupLogging:
|
|
412
410
|
def test_regular_percent_formatting(
|
413
411
|
self, *, tmp_path: Path, caplog: LogCaptureFixture
|
414
412
|
) -> None:
|
415
|
-
name =
|
413
|
+
name = unique_str()
|
416
414
|
setup_logging(logger=name, files_dir=tmp_path)
|
417
415
|
logger = getLogger(name)
|
418
416
|
logger.info("int: %d, float: %.2f", 1, 12.3456)
|
@@ -423,14 +421,14 @@ class TestSetupLogging:
|
|
423
421
|
|
424
422
|
@skipif_windows
|
425
423
|
def test_no_console(self, *, tmp_path: Path) -> None:
|
426
|
-
name =
|
424
|
+
name = unique_str()
|
427
425
|
setup_logging(logger=name, console_level=None, files_dir=tmp_path)
|
428
426
|
logger = getLogger(name)
|
429
427
|
assert len(logger.handlers) == 5
|
430
428
|
|
431
429
|
@skipif_windows
|
432
430
|
def test_zoned_datetime(self, *, tmp_path: Path, caplog: LogCaptureFixture) -> None:
|
433
|
-
name =
|
431
|
+
name = unique_str()
|
434
432
|
setup_logging(logger=name, files_dir=tmp_path)
|
435
433
|
logger = getLogger(name)
|
436
434
|
logger.info("")
|
@@ -441,7 +439,7 @@ class TestSetupLogging:
|
|
441
439
|
|
442
440
|
@skipif_windows
|
443
441
|
def test_extra(self, *, tmp_path: Path) -> None:
|
444
|
-
name =
|
442
|
+
name = unique_str()
|
445
443
|
|
446
444
|
def extra(logger: LoggerOrName | None, /) -> None:
|
447
445
|
get_logger(logger=logger).addHandler(
|
@@ -478,7 +476,7 @@ class TestSetupLogging:
|
|
478
476
|
class TestSizeAndTimeRotatingFileHandler:
|
479
477
|
@skipif_windows
|
480
478
|
def test_handlers(self, *, tmp_path: Path) -> None:
|
481
|
-
logger = getLogger(
|
479
|
+
logger = getLogger(unique_str())
|
482
480
|
filename = tmp_path.joinpath("log")
|
483
481
|
logger.addHandler(SizeAndTimeRotatingFileHandler(filename=filename))
|
484
482
|
logger.warning("message")
|
@@ -488,77 +486,66 @@ class TestSizeAndTimeRotatingFileHandler:
|
|
488
486
|
|
489
487
|
@skipif_windows
|
490
488
|
def test_size(self, *, tmp_path: Path) -> None:
|
491
|
-
logger = getLogger(
|
489
|
+
logger = getLogger(unique_str())
|
492
490
|
logger.addHandler(
|
493
491
|
SizeAndTimeRotatingFileHandler(
|
494
492
|
filename=tmp_path.joinpath("log.txt"), maxBytes=100, backupCount=3
|
495
493
|
)
|
496
494
|
)
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
files = list(tmp_path.iterdir())
|
501
|
-
assert len(files) == 1
|
502
|
-
assert any(p for p in files if search(r"^log\.txt$", p.name))
|
503
|
-
|
504
|
-
logger.warning(10 * "message 3")
|
505
|
-
files = list(tmp_path.iterdir())
|
506
|
-
assert len(files) == 2
|
507
|
-
assert any(p for p in files if search(r"^log\.txt$", p.name))
|
508
|
-
assert any(p for p in files if search(r"^log\.1__[\dT]+\.txt$", p.name))
|
509
|
-
|
510
|
-
for i in range(4, 6):
|
511
|
-
logger.warning("message %d", i)
|
512
|
-
files = list(tmp_path.iterdir())
|
513
|
-
assert len(files) == 3
|
514
|
-
assert any(p for p in files if search(r"^log\.txt$", p.name))
|
515
|
-
assert any(
|
516
|
-
p for p in files if search(r"^log\.1__[\dT]+__[\dT]+\.txt$", p.name)
|
517
|
-
)
|
518
|
-
assert any(p for p in files if search(r"^log\.2__[\dT]+\.txt$", p.name))
|
519
|
-
|
520
|
-
logger.warning(10 * "message 6")
|
521
|
-
files = list(tmp_path.iterdir())
|
522
|
-
assert len(files) == 4
|
523
|
-
assert any(p for p in files if search(r"^log\.txt$", p.name))
|
524
|
-
assert any(p for p in files if search(r"^log\.1__[\dT]+__[\dT]+\.txt$", p.name))
|
525
|
-
assert any(p for p in files if search(r"^log\.2__[\dT]+__[\dT]+\.txt$", p.name))
|
526
|
-
assert any(p for p in files if search(r"^log\.3__[\dT]+\.txt$", p.name))
|
527
|
-
|
528
|
-
for _ in range(2):
|
529
|
-
for i in range(7, 9):
|
530
|
-
logger.warning("message %d", i)
|
495
|
+
for cycle in range(1, 10):
|
496
|
+
for i in range(1, 4):
|
497
|
+
logger.warning("%s message %d", 100 * "long" if i % 3 == 0 else "", i)
|
531
498
|
files = list(tmp_path.iterdir())
|
532
|
-
assert len(files) == 4
|
499
|
+
assert len(files) == min(cycle, 4)
|
533
500
|
assert any(p for p in files if search(r"^log\.txt$", p.name))
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
501
|
+
if cycle == 2:
|
502
|
+
assert any(
|
503
|
+
p for p in files if search(r"^log\.1__[\dT]+\.txt$", p.name)
|
504
|
+
)
|
505
|
+
elif cycle == 3:
|
506
|
+
assert any(
|
507
|
+
p
|
508
|
+
for p in files
|
509
|
+
if search(r"^log\.1__[\dT]+__[\dT]+\.txt$", p.name)
|
510
|
+
)
|
511
|
+
assert any(
|
512
|
+
p for p in files if search(r"^log\.2__[\dT]+\.txt$", p.name)
|
513
|
+
)
|
514
|
+
elif cycle == 4:
|
515
|
+
assert any(
|
516
|
+
p
|
517
|
+
for p in files
|
518
|
+
if search(r"^log\.1__[\dT]+__[\dT]+\.txt$", p.name)
|
519
|
+
)
|
520
|
+
assert any(
|
521
|
+
p
|
522
|
+
for p in files
|
523
|
+
if search(r"^log\.2__[\dT]+__[\dT]+\.txt$", p.name)
|
524
|
+
)
|
525
|
+
assert any(
|
526
|
+
p for p in files if search(r"^log\.3__[\dT]+\.txt$", p.name)
|
527
|
+
)
|
528
|
+
elif cycle >= 5:
|
529
|
+
assert any(
|
530
|
+
p
|
531
|
+
for p in files
|
532
|
+
if search(r"^log\.1__[\dT]+__[\dT]+\.txt$", p.name)
|
533
|
+
)
|
534
|
+
assert any(
|
535
|
+
p
|
536
|
+
for p in files
|
537
|
+
if search(r"^log\.2__[\dT]+__[\dT]+\.txt$", p.name)
|
538
|
+
)
|
539
|
+
assert any(
|
540
|
+
p
|
541
|
+
for p in files
|
542
|
+
if search(r"^log\.3__[\dT]+__[\dT]+\.txt$", p.name)
|
543
|
+
)
|
557
544
|
|
558
545
|
@mark.flaky
|
559
546
|
@skipif_windows
|
560
547
|
def test_time(self, *, tmp_path: Path) -> None:
|
561
|
-
logger = getLogger(
|
548
|
+
logger = getLogger(unique_str())
|
562
549
|
logger.addHandler(
|
563
550
|
SizeAndTimeRotatingFileHandler(
|
564
551
|
filename=tmp_path.joinpath("log.txt"),
|
@@ -631,7 +618,7 @@ class TestSizeAndTimeRotatingFileHandler:
|
|
631
618
|
def test_should_rollover_file_not_found(
|
632
619
|
self, *, tmp_path: Path, caplog: LogCaptureFixture
|
633
620
|
) -> None:
|
634
|
-
logger = getLogger(
|
621
|
+
logger = getLogger(unique_str())
|
635
622
|
path = tmp_path.joinpath("log")
|
636
623
|
logger.addHandler(
|
637
624
|
handler := SizeAndTimeRotatingFileHandler(filename=path, maxBytes=1)
|
@@ -645,7 +632,7 @@ class TestSizeAndTimeRotatingFileHandler:
|
|
645
632
|
class TestStandaloneFileHandler:
|
646
633
|
@skipif_windows
|
647
634
|
def test_main(self, *, tmp_path: Path) -> None:
|
648
|
-
logger = getLogger(
|
635
|
+
logger = getLogger(unique_str())
|
649
636
|
logger.addHandler(StandaloneFileHandler(level=DEBUG, path=tmp_path))
|
650
637
|
assert len(list(tmp_path.iterdir())) == 0
|
651
638
|
logger.warning("message")
|
@@ -657,8 +644,8 @@ class TestStandaloneFileHandler:
|
|
657
644
|
|
658
645
|
|
659
646
|
class TestTempHandler:
|
660
|
-
def test_main(self
|
661
|
-
logger = getLogger(
|
647
|
+
def test_main(self) -> None:
|
648
|
+
logger = getLogger(unique_str())
|
662
649
|
logger.addHandler(h1 := StreamHandler())
|
663
650
|
logger.addHandler(h2 := StreamHandler())
|
664
651
|
assert len(logger.handlers) == 2
|
@@ -671,22 +658,22 @@ class TestTempHandler:
|
|
671
658
|
|
672
659
|
|
673
660
|
class TestTempLogger:
|
674
|
-
def test_disabled(self
|
675
|
-
logger = getLogger(
|
661
|
+
def test_disabled(self) -> None:
|
662
|
+
logger = getLogger(unique_str())
|
676
663
|
assert not logger.disabled
|
677
664
|
with temp_logger(logger, disabled=True):
|
678
665
|
assert logger.disabled
|
679
666
|
assert not logger.disabled
|
680
667
|
|
681
|
-
def test_level(self
|
682
|
-
logger = getLogger(
|
668
|
+
def test_level(self) -> None:
|
669
|
+
logger = getLogger(unique_str())
|
683
670
|
assert logger.level == NOTSET
|
684
671
|
with temp_logger(logger, level="DEBUG"):
|
685
672
|
assert logger.level == DEBUG
|
686
673
|
assert logger.level == NOTSET
|
687
674
|
|
688
|
-
def test_propagate(self
|
689
|
-
logger = getLogger(
|
675
|
+
def test_propagate(self) -> None:
|
676
|
+
logger = getLogger(unique_str())
|
690
677
|
assert logger.propagate
|
691
678
|
with temp_logger(logger, propagate=False):
|
692
679
|
assert not logger.propagate
|
@@ -160,13 +160,11 @@ class SizeAndTimeRotatingFileHandler(BaseRotatingHandler):
|
|
160
160
|
def _should_rollover(self, record: LogRecord, /) -> bool:
|
161
161
|
if self._max_bytes is not None: # skipif-ci-and-windows
|
162
162
|
try:
|
163
|
-
|
163
|
+
size = self._filename.stat().st_size
|
164
164
|
except FileNotFoundError:
|
165
165
|
pass
|
166
166
|
else:
|
167
|
-
|
168
|
-
new = current + delta
|
169
|
-
if new >= self._max_bytes:
|
167
|
+
if size >= self._max_bytes:
|
170
168
|
return True
|
171
169
|
return bool(self._time_handler.shouldRollover(record)) # skipif-ci-and-windows
|
172
170
|
|
@@ -417,16 +415,26 @@ def add_filters(handler: Handler, /, *filters: _FilterType) -> None:
|
|
417
415
|
|
418
416
|
def basic_config(
|
419
417
|
*,
|
420
|
-
|
418
|
+
logger: LoggerOrName | None = None,
|
419
|
+
format_: str = "{asctime} | {name} | {levelname:8} | {message}",
|
421
420
|
level: LogLevel = "INFO",
|
422
421
|
) -> None:
|
423
422
|
"""Do the basic config."""
|
424
|
-
|
425
|
-
|
426
|
-
datefmt=
|
427
|
-
|
428
|
-
|
429
|
-
|
423
|
+
datefmt = maybe_sub_pct_y("%Y-%m-%d %H:%M:%S")
|
424
|
+
if logger is None:
|
425
|
+
basicConfig(format=format_, datefmt=datefmt, style="{", level=level)
|
426
|
+
else:
|
427
|
+
logger_use = get_logger(logger=logger)
|
428
|
+
logger_use.setLevel(level)
|
429
|
+
logger_use.addHandler(handler := StreamHandler())
|
430
|
+
handler.setLevel(level)
|
431
|
+
try:
|
432
|
+
from coloredlogs import ColoredFormatter
|
433
|
+
except ModuleNotFoundError: # pragma: no cover
|
434
|
+
formatter = Formatter(fmt=format_, datefmt=datefmt, style="{")
|
435
|
+
else:
|
436
|
+
formatter = ColoredFormatter(fmt=format_, datefmt=datefmt, style="{")
|
437
|
+
handler.setFormatter(formatter)
|
430
438
|
|
431
439
|
|
432
440
|
##
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_missing/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_missing/module.py
RENAMED
File without changes
|
{dycw_utilities-0.129.4 → dycw_utilities-0.129.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.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_without/__init__.py
RENAMED
File without changes
|
{dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/modules/package_without/module_1.py
RENAMED
File without changes
|
{dycw_utilities-0.129.4 → dycw_utilities-0.129.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
|
{dycw_utilities-0.129.4 → dycw_utilities-0.129.6}/src/tests/test_asyncio_classes/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|