diff --git a/README.md b/README.md index 2ab4d73..b725438 100644 --- a/README.md +++ b/README.md @@ -321,6 +321,8 @@ See also git tags: https://github.com/jedie/manageprojects/tags [comment]: <> (✂✂✂ auto generated history start ✂✂✂) +* [**dev**](https://github.com/jedie/manageprojects/compare/v0.15.4...main) + * 2023-12-01 - Use: cli_base.cli_tools.test_utils.logs.AssertLogs * [v0.15.4](https://github.com/jedie/manageprojects/compare/v0.15.3...v0.15.4) * 2023-11-27 - Use "flake8-bugbear", too. * [v0.15.3](https://github.com/jedie/manageprojects/compare/v0.15.2...v0.15.3) @@ -328,6 +330,9 @@ See also git tags: https://github.com/jedie/manageprojects/tags * 2023-11-07 - Update requirements * [v0.15.2](https://github.com/jedie/manageprojects/compare/v0.15.1...v0.15.2) * 2023-11-01 - Update requirements + +
Expand older history entries ... + * [v0.15.1](https://github.com/jedie/manageprojects/compare/v0.15.0...v0.15.1) * 2023-10-08 - Update text matrix with Python v3.12 * 2023-10-08 - fix github CI @@ -335,9 +340,6 @@ See also git tags: https://github.com/jedie/manageprojects/tags * 2023-10-08 - Autogenerate history via https://github.com/jedie/cli-base-utilities * 2023-09-24 - apply migrations * 2023-09-24 - Update requirements - -
Expand older history entries ... - * [v0.15.0](https://github.com/jedie/manageprojects/compare/v0.14.1...v0.15.0) * 2023-08-17 - Deprecate Git * 2023-08-17 - Deprecate print_version() (moved to cli_base) diff --git a/manageprojects/test_utils/logs.py b/manageprojects/test_utils/logs.py index 7b69c72..96f614c 100644 --- a/manageprojects/test_utils/logs.py +++ b/manageprojects/test_utils/logs.py @@ -1,42 +1,17 @@ -import logging -from pathlib import Path -from unittest import TestCase +import warnings +from cli_base.cli_tools.test_utils.logs import AssertLogs as OriginalAssertLogs -class AssertLogs: + +class AssertLogs(OriginalAssertLogs): """ Capture and assert log output from different loggers. """ - def __init__( - self, - test_case: TestCase, - loggers: tuple[str, ...] = ('manageprojects', 'cookiecutter'), - level=logging.DEBUG, - ): - assertLogs = test_case.assertLogs - - self.logs = [] - for logger in loggers: - self.logs.append(assertLogs(logger, level=level)) - - self.context_managers = None - - def __enter__(self): - self.context_managers = [log.__enter__() for log in self.logs] - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - for log in self.logs: - log.__exit__(exc_type, exc_val, exc_tb) - - def assert_in(self, *test_parts): - outputs = [] - for cm in self.context_managers: - outputs.extend(cm.output) - - output = '\n'.join(outputs) - for part in test_parts: - if isinstance(part, Path): - part = str(part) - assert part in output, f'Log part {part!r} not found in:\n{output}' + def __init__(self, *args, **kwargs): + warnings.warn( + 'Migrate to: cli_base.cli_tools.test_utils.logs.AssertLogs !', + DeprecationWarning, + stacklevel=2, + ) + super().__init__(*args, **kwargs) diff --git a/manageprojects/tests/test_cookiecutter_api.py b/manageprojects/tests/test_cookiecutter_api.py index 977dd1b..8e6eda5 100644 --- a/manageprojects/tests/test_cookiecutter_api.py +++ b/manageprojects/tests/test_cookiecutter_api.py @@ -2,9 +2,9 @@ from pathlib import Path from bx_py_utils.path import assert_is_dir +from cli_base.cli_tools.test_utils.logs import AssertLogs from manageprojects.cookiecutter_api import get_repo_path -from manageprojects.test_utils.logs import AssertLogs from manageprojects.tests.base import BaseTestCase diff --git a/manageprojects/tests/test_cookiecutter_templates.py b/manageprojects/tests/test_cookiecutter_templates.py index 4102851..3e4f71b 100644 --- a/manageprojects/tests/test_cookiecutter_templates.py +++ b/manageprojects/tests/test_cookiecutter_templates.py @@ -6,12 +6,12 @@ from bx_py_utils.path import assert_is_dir, assert_is_file from bx_py_utils.test_utils.datetime import parse_dt from cli_base.cli_tools.test_utils.git_utils import init_git +from cli_base.cli_tools.test_utils.logs import AssertLogs from manageprojects.cli.cli_app import clone_project from manageprojects.cookiecutter_templates import start_managed_project, update_managed_project from manageprojects.data_classes import CookiecutterResult, GenerateTemplatePatchResult, ManageProjectsMeta from manageprojects.test_utils.click_cli_utils import invoke_click -from manageprojects.test_utils.logs import AssertLogs from manageprojects.tests.base import BaseTestCase from manageprojects.utilities.pyproject_toml import PyProjectToml from manageprojects.utilities.temp_path import TemporaryDirectory diff --git a/manageprojects/tests/test_format_file.py b/manageprojects/tests/test_format_file.py index 06fa31e..2e482ea 100644 --- a/manageprojects/tests/test_format_file.py +++ b/manageprojects/tests/test_format_file.py @@ -2,6 +2,7 @@ from pathlib import Path from unittest import TestCase +from cli_base.cli_tools.test_utils.logs import AssertLogs from packaging.version import Version from manageprojects.constants import PY_BIN_PATH @@ -15,7 +16,6 @@ get_git_info, get_pyproject_info, ) -from manageprojects.test_utils.logs import AssertLogs from manageprojects.test_utils.subprocess import SimpleRunReturnCallback, SubprocessCallMock from manageprojects.tests.base import GIT_BIN_PARENT, PROJECT_PATH from manageprojects.utilities.temp_path import TemporaryDirectory diff --git a/manageprojects/tests/test_overwrite.py b/manageprojects/tests/test_overwrite.py index e6df775..6f29fd2 100644 --- a/manageprojects/tests/test_overwrite.py +++ b/manageprojects/tests/test_overwrite.py @@ -5,10 +5,10 @@ from bx_py_utils.path import assert_is_file from bx_py_utils.test_utils.redirect import RedirectOut from cli_base.cli_tools.test_utils.git_utils import init_git +from cli_base.cli_tools.test_utils.logs import AssertLogs from manageprojects.cookiecutter_templates import update_managed_project from manageprojects.data_classes import ManageProjectsMeta, OverwriteResult -from manageprojects.test_utils.logs import AssertLogs from manageprojects.tests.base import BaseTestCase from manageprojects.utilities.pyproject_toml import PyProjectToml from manageprojects.utilities.temp_path import TemporaryDirectory diff --git a/manageprojects/tests/test_patching.py b/manageprojects/tests/test_patching.py index b8d6d48..ef82014 100644 --- a/manageprojects/tests/test_patching.py +++ b/manageprojects/tests/test_patching.py @@ -5,10 +5,10 @@ from bx_py_utils.path import assert_is_dir from bx_py_utils.test_utils.snapshot import assert_text_snapshot from cli_base.cli_tools.test_utils.git_utils import init_git +from cli_base.cli_tools.test_utils.logs import AssertLogs from manageprojects.data_classes import GenerateTemplatePatchResult from manageprojects.patching import generate_template_patch, make_git_diff -from manageprojects.test_utils.logs import AssertLogs from manageprojects.tests.base import BaseTestCase from manageprojects.utilities.temp_path import TemporaryDirectory diff --git a/manageprojects/tests/test_utilities_publish.py b/manageprojects/tests/test_utilities_publish.py index bd39c87..44575ea 100644 --- a/manageprojects/tests/test_utilities_publish.py +++ b/manageprojects/tests/test_utilities_publish.py @@ -6,11 +6,11 @@ from cli_base.cli_tools import subprocess_utils from cli_base.cli_tools.test_utils.git_utils import init_git +from cli_base.cli_tools.test_utils.logs import AssertLogs from packaging.version import Version import manageprojects from manageprojects.cli.dev import PACKAGE_ROOT -from manageprojects.test_utils.logs import AssertLogs from manageprojects.test_utils.subprocess import FakeStdout, SubprocessCallMock from manageprojects.tests.base import GIT_BIN_PARENT from manageprojects.utilities.publish import ( diff --git a/manageprojects/tests/test_utilities_pyproject_toml.py b/manageprojects/tests/test_utilities_pyproject_toml.py index d1f4e43..358f21d 100644 --- a/manageprojects/tests/test_utilities_pyproject_toml.py +++ b/manageprojects/tests/test_utilities_pyproject_toml.py @@ -3,10 +3,10 @@ from bx_py_utils.path import assert_is_file from bx_py_utils.test_utils.datetime import parse_dt +from cli_base.cli_tools.test_utils.logs import AssertLogs import manageprojects from manageprojects.data_classes import ManageProjectsMeta -from manageprojects.test_utils.logs import AssertLogs from manageprojects.tests.base import BaseTestCase from manageprojects.utilities.pyproject_toml import PyProjectToml, find_pyproject_toml from manageprojects.utilities.temp_path import TemporaryDirectory diff --git a/pyproject.toml b/pyproject.toml index 28c0750..e53f76a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ dependencies = [ "codespell", # https://github.com/codespell-project/codespell "mypy", # https://github.com/python/mypy - "cli-base-utilities", # https://github.com/jedie/cli-base-utilities + "cli-base-utilities>=0.5.0", # https://github.com/jedie/cli-base-utilities "click", # https://github.com/pallets/click/ "rich-click", # https://github.com/ewels/rich-click "rich", # https://github.com/Textualize/rich diff --git a/requirements.dev.txt b/requirements.dev.txt index df8ef14..81710e2 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -52,9 +52,9 @@ build==1.0.3 \ --hash=sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b \ --hash=sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f # via pip-tools -bx-py-utils==88 \ - --hash=sha256:32fbc7e9ff3dfb0a817c80fb1d165ec559643dab59c0be549e646acbf8223b75 \ - --hash=sha256:3a6f4eeef6abcac834b2c1ea4c5211130fd930a064aa0baabddd7c2bd00e38ac +bx-py-utils==89 \ + --hash=sha256:179649df6b2541d241e23e2cf1ac314586717d8e60f57326fe5c9f110f3d602e \ + --hash=sha256:68215036c448fd04baf989cd51a9523a9edb8239a7520c9177fb874d64914878 # via cli-base-utilities cachetools==5.3.2 \ --hash=sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2 \ @@ -216,9 +216,9 @@ charset-normalizer==3.3.2 \ --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 # via requests -cli-base-utilities==0.4.4 \ - --hash=sha256:110bef895fb7dfc29662f463ccedc4c985a880afbde2e6dea387d0d2f96f4985 \ - --hash=sha256:72d4248776519a21c3448d6e348511ce6fe8c3742c154e158473236c8278fb1c +cli-base-utilities==0.5.0 \ + --hash=sha256:366caa000bb0908914bc09e7b9cc2b6921bcf51e0aa2a91ae36cd5e092d774d8 \ + --hash=sha256:67eec2c61b00ed9f376ca364e6ef85d65db6c0908cf530d7015483ef2902f27e # via manageprojects (pyproject.toml) click==8.1.7 \ --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ @@ -297,30 +297,30 @@ coverage==7.3.2 \ --hash=sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a \ --hash=sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4 # via manageprojects (pyproject.toml) -cryptography==41.0.5 \ - --hash=sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf \ - --hash=sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84 \ - --hash=sha256:227ec057cd32a41c6651701abc0328135e472ed450f47c2766f23267b792a88e \ - --hash=sha256:22892cc830d8b2c89ea60148227631bb96a7da0c1b722f2aac8824b1b7c0b6b8 \ - --hash=sha256:392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7 \ - --hash=sha256:3be3ca726e1572517d2bef99a818378bbcf7d7799d5372a46c79c29eb8d166c1 \ - --hash=sha256:573eb7128cbca75f9157dcde974781209463ce56b5804983e11a1c462f0f4e88 \ - --hash=sha256:580afc7b7216deeb87a098ef0674d6ee34ab55993140838b14c9b83312b37b86 \ - --hash=sha256:5a70187954ba7292c7876734183e810b728b4f3965fbe571421cb2434d279179 \ - --hash=sha256:73801ac9736741f220e20435f84ecec75ed70eda90f781a148f1bad546963d81 \ - --hash=sha256:7d208c21e47940369accfc9e85f0de7693d9a5d843c2509b3846b2db170dfd20 \ - --hash=sha256:8254962e6ba1f4d2090c44daf50a547cd5f0bf446dc658a8e5f8156cae0d8548 \ - --hash=sha256:88417bff20162f635f24f849ab182b092697922088b477a7abd6664ddd82291d \ - --hash=sha256:a48e74dad1fb349f3dc1d449ed88e0017d792997a7ad2ec9587ed17405667e6d \ - --hash=sha256:b948e09fe5fb18517d99994184854ebd50b57248736fd4c720ad540560174ec5 \ - --hash=sha256:c707f7afd813478e2019ae32a7c49cd932dd60ab2d2a93e796f68236b7e1fbf1 \ - --hash=sha256:d38e6031e113b7421db1de0c1b1f7739564a88f1684c6b89234fbf6c11b75147 \ - --hash=sha256:d3977f0e276f6f5bf245c403156673db103283266601405376f075c849a0b936 \ - --hash=sha256:da6a0ff8f1016ccc7477e6339e1d50ce5f59b88905585f77193ebd5068f1e797 \ - --hash=sha256:e270c04f4d9b5671ebcc792b3ba5d4488bf7c42c3c241a3748e2599776f29696 \ - --hash=sha256:e886098619d3815e0ad5790c973afeee2c0e6e04b4da90b88e6bd06e2a0b1b72 \ - --hash=sha256:ec3b055ff8f1dce8e6ef28f626e0972981475173d7973d63f271b29c8a2897da \ - --hash=sha256:fba1e91467c65fe64a82c689dc6cf58151158993b13eb7a7f3f4b7f395636723 +cryptography==41.0.7 \ + --hash=sha256:079b85658ea2f59c4f43b70f8119a52414cdb7be34da5d019a77bf96d473b960 \ + --hash=sha256:09616eeaef406f99046553b8a40fbf8b1e70795a91885ba4c96a70793de5504a \ + --hash=sha256:13f93ce9bea8016c253b34afc6bd6a75993e5c40672ed5405a9c832f0d4a00bc \ + --hash=sha256:37a138589b12069efb424220bf78eac59ca68b95696fc622b6ccc1c0a197204a \ + --hash=sha256:3c78451b78313fa81607fa1b3f1ae0a5ddd8014c38a02d9db0616133987b9cdf \ + --hash=sha256:43f2552a2378b44869fe8827aa19e69512e3245a219104438692385b0ee119d1 \ + --hash=sha256:48a0476626da912a44cc078f9893f292f0b3e4c739caf289268168d8f4702a39 \ + --hash=sha256:49f0805fc0b2ac8d4882dd52f4a3b935b210935d500b6b805f321addc8177406 \ + --hash=sha256:5429ec739a29df2e29e15d082f1d9ad683701f0ec7709ca479b3ff2708dae65a \ + --hash=sha256:5a1b41bc97f1ad230a41657d9155113c7521953869ae57ac39ac7f1bb471469a \ + --hash=sha256:68a2dec79deebc5d26d617bfdf6e8aab065a4f34934b22d3b5010df3ba36612c \ + --hash=sha256:7a698cb1dac82c35fcf8fe3417a3aaba97de16a01ac914b89a0889d364d2f6be \ + --hash=sha256:841df4caa01008bad253bce2a6f7b47f86dc9f08df4b433c404def869f590a15 \ + --hash=sha256:90452ba79b8788fa380dfb587cca692976ef4e757b194b093d845e8d99f612f2 \ + --hash=sha256:928258ba5d6f8ae644e764d0f996d61a8777559f72dfeb2eea7e2fe0ad6e782d \ + --hash=sha256:af03b32695b24d85a75d40e1ba39ffe7db7ffcb099fe507b39fd41a565f1b157 \ + --hash=sha256:b640981bf64a3e978a56167594a0e97db71c89a479da8e175d8bb5be5178c003 \ + --hash=sha256:c5ca78485a255e03c32b513f8c2bc39fedb7f5c5f8535545bdc223a03b24f248 \ + --hash=sha256:c7f3201ec47d5207841402594f1d7950879ef890c0c495052fa62f58283fde1a \ + --hash=sha256:d5ec85080cce7b0513cfd233914eb8b7bbd0633f1d1703aa28d1dd5a72f678ec \ + --hash=sha256:d6c391c021ab1f7a82da5d8d0b3cee2f4b2c455ec86c8aebbc84837a631ff309 \ + --hash=sha256:e3114da6d7f95d2dee7d3f4eec16dacff819740bbab931aff8648cb13c5ff5e7 \ + --hash=sha256:f983596065a18a2183e7f79ab3fd4c475205b839e02cbc0efbbf9666c4b3083d # via secretstorage darker[color,flynt,isort]==1.7.2 \ --hash=sha256:ec5b7c382d9537611c164f3ecca2e1b8a7923bc5a02bf22f6e7f6c8bcbdf593a \ @@ -354,9 +354,9 @@ flake8==6.1.0 \ # via # flake8-bugbear # manageprojects (pyproject.toml) -flake8-bugbear==23.11.26 \ - --hash=sha256:55d00c8a3c48c995c1f0ec0df54f8c9cf530c06035ce53975a03517d2e7f53e5 \ - --hash=sha256:8e36119071bab626b6dab834fadd6d03c06090e9b189e67b4905821df8212fee +flake8-bugbear==23.11.28 \ + --hash=sha256:0ba6c44eaa0e4782da94c5c2607159a0e73569369246cd179cc143a0e16b78ba \ + --hash=sha256:8d0f351d954fd860851710cd8b5b28742b2339c0e58848b103418dd9cddb9aa4 # via manageprojects (pyproject.toml) flynt==0.77 \ --hash=sha256:2863ac8ec19d6ec8d29e760546e6ced644baf6dff3c7cdc77e03abbd29b80f14 \ @@ -366,9 +366,9 @@ idna==3.6 \ --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f # via requests -importlib-metadata==6.8.0 \ - --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ - --hash=sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 +importlib-metadata==6.9.0 \ + --hash=sha256:1c8dc6839ddc9771412596926f24cb5a553bbd40624ee2c7e55e531542bed3b8 \ + --hash=sha256:e8acb523c335a91822674e149b46c0399ec4d328c4d1f6e49c273da5ff0201b9 # via # keyring # twine @@ -781,9 +781,9 @@ tomlkit==0.12.3 \ # via # cli-base-utilities # manageprojects (pyproject.toml) -tox==4.11.3 \ - --hash=sha256:5039f68276461fae6a9452a3b2c7295798f00a0e92edcd9a3b78ba1a73577951 \ - --hash=sha256:599af5e5bb0cad0148ac1558a0b66f8fff219ef88363483b8d92a81e4246f28f +tox==4.11.4 \ + --hash=sha256:2adb83d68f27116812b69aa36676a8d6a52249cb0d173649de0e7d0c2e3e7229 \ + --hash=sha256:73a7240778fabf305aeb05ab8ea26e575e042ab5a18d71d0ed13e343a51d6ce1 # via manageprojects (pyproject.toml) twine==4.0.2 \ --hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \ @@ -805,9 +805,9 @@ urllib3==2.1.0 \ # via # requests # twine -virtualenv==20.24.7 \ - --hash=sha256:69050ffb42419c91f6c1284a7b24e0475d793447e35929b488bf6a0aade39353 \ - --hash=sha256:a18b3fd0314ca59a2e9f4b556819ed07183b3e9a3702ecfe213f593d44f7b3fd +virtualenv==20.25.0 \ + --hash=sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3 \ + --hash=sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b # via tox wheel==0.42.0 \ --hash=sha256:177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d \ diff --git a/requirements.txt b/requirements.txt index 3b1711a..03abd08 100644 --- a/requirements.txt +++ b/requirements.txt @@ -48,9 +48,9 @@ black==23.11.0 \ --hash=sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911 \ --hash=sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142 # via darker -bx-py-utils==88 \ - --hash=sha256:32fbc7e9ff3dfb0a817c80fb1d165ec559643dab59c0be549e646acbf8223b75 \ - --hash=sha256:3a6f4eeef6abcac834b2c1ea4c5211130fd930a064aa0baabddd7c2bd00e38ac +bx-py-utils==89 \ + --hash=sha256:179649df6b2541d241e23e2cf1ac314586717d8e60f57326fe5c9f110f3d602e \ + --hash=sha256:68215036c448fd04baf989cd51a9523a9edb8239a7520c9177fb874d64914878 # via cli-base-utilities certifi==2023.11.17 \ --hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \ @@ -152,9 +152,9 @@ charset-normalizer==3.3.2 \ --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 # via requests -cli-base-utilities==0.4.4 \ - --hash=sha256:110bef895fb7dfc29662f463ccedc4c985a880afbde2e6dea387d0d2f96f4985 \ - --hash=sha256:72d4248776519a21c3448d6e348511ce6fe8c3742c154e158473236c8278fb1c +cli-base-utilities==0.5.0 \ + --hash=sha256:366caa000bb0908914bc09e7b9cc2b6921bcf51e0aa2a91ae36cd5e092d774d8 \ + --hash=sha256:67eec2c61b00ed9f376ca364e6ef85d65db6c0908cf530d7015483ef2902f27e # via manageprojects (pyproject.toml) click==8.1.7 \ --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ @@ -187,9 +187,9 @@ flake8==6.1.0 \ # via # flake8-bugbear # manageprojects (pyproject.toml) -flake8-bugbear==23.11.26 \ - --hash=sha256:55d00c8a3c48c995c1f0ec0df54f8c9cf530c06035ce53975a03517d2e7f53e5 \ - --hash=sha256:8e36119071bab626b6dab834fadd6d03c06090e9b189e67b4905821df8212fee +flake8-bugbear==23.11.28 \ + --hash=sha256:0ba6c44eaa0e4782da94c5c2607159a0e73569369246cd179cc143a0e16b78ba \ + --hash=sha256:8d0f351d954fd860851710cd8b5b28742b2339c0e58848b103418dd9cddb9aa4 # via manageprojects (pyproject.toml) flynt==0.77 \ --hash=sha256:2863ac8ec19d6ec8d29e760546e6ced644baf6dff3c7cdc77e03abbd29b80f14 \