Remove click patch (#3768)

Apparently this was only needed on Python 3.6. We've now dropped support
for 3.6 and 3.7. It's also not needed on new enough click.
This commit is contained in:
Shantanu 2023-07-09 13:29:47 -07:00 committed by GitHub
parent 4130c65578
commit 114e8357e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 1 additions and 62 deletions

View File

@ -43,6 +43,7 @@
<!-- Changes to how Black is packaged, such as dependency requirements --> <!-- Changes to how Black is packaged, such as dependency requirements -->
- Upgrade mypyc from 0.991 to 1.3 (#3697) - Upgrade mypyc from 0.991 to 1.3 (#3697)
- Remove patching of Click that mitigated errors on Python 3.6 with `LANG=C` (#3768)
### Parser ### Parser

View File

@ -165,8 +165,6 @@ Utilities
.. autofunction:: black.linegen.normalize_invisible_parens .. autofunction:: black.linegen.normalize_invisible_parens
.. autofunction:: black.patch_click
.. autofunction:: black.nodes.preceding_leaf .. autofunction:: black.nodes.preceding_leaf
.. autofunction:: black.re_compile_maybe_verbose .. autofunction:: black.re_compile_maybe_verbose

View File

@ -1410,40 +1410,6 @@ def nullcontext() -> Iterator[None]:
yield yield
def patch_click() -> None:
"""Make Click not crash on Python 3.6 with LANG=C.
On certain misconfigured environments, Python 3 selects the ASCII encoding as the
default which restricts paths that it can access during the lifetime of the
application. Click refuses to work in this scenario by raising a RuntimeError.
In case of Black the likelihood that non-ASCII characters are going to be used in
file paths is minimal since it's Python source code. Moreover, this crash was
spurious on Python 3.7 thanks to PEP 538 and PEP 540.
"""
modules: List[Any] = []
try:
from click import core
except ImportError:
pass
else:
modules.append(core)
try:
# Removed in Click 8.1.0 and newer; we keep this around for users who have
# older versions installed.
from click import _unicodefun # type: ignore
except ImportError:
pass
else:
modules.append(_unicodefun)
for module in modules:
if hasattr(module, "_verify_python3_env"):
module._verify_python3_env = lambda: None
if hasattr(module, "_verify_python_env"):
module._verify_python_env = lambda: None
def patched_main() -> None: def patched_main() -> None:
# PyInstaller patches multiprocessing to need freeze_support() even in non-Windows # PyInstaller patches multiprocessing to need freeze_support() even in non-Windows
# environments so just assume we always need to call it if frozen. # environments so just assume we always need to call it if frozen.
@ -1452,7 +1418,6 @@ def patched_main() -> None:
freeze_support() freeze_support()
patch_click()
main() main()

View File

@ -225,7 +225,6 @@ def parse_python_variant_header(value: str) -> Tuple[bool, Set[black.TargetVersi
def patched_main() -> None: def patched_main() -> None:
maybe_install_uvloop() maybe_install_uvloop()
freeze_support() freeze_support()
black.patch_click()
main() main()

View File

@ -1455,30 +1455,6 @@ def test_assert_equivalent_different_asts(self) -> None:
with self.assertRaises(AssertionError): with self.assertRaises(AssertionError):
black.assert_equivalent("{}", "None") black.assert_equivalent("{}", "None")
def test_shhh_click(self) -> None:
try:
from click import _unicodefun # type: ignore
except ImportError:
self.skipTest("Incompatible Click version")
if not hasattr(_unicodefun, "_verify_python_env"):
self.skipTest("Incompatible Click version")
# First, let's see if Click is crashing with a preferred ASCII charset.
with patch("locale.getpreferredencoding") as gpe:
gpe.return_value = "ASCII"
with self.assertRaises(RuntimeError):
_unicodefun._verify_python_env()
# Now, let's silence Click...
black.patch_click()
# ...and confirm it's silent.
with patch("locale.getpreferredencoding") as gpe:
gpe.return_value = "ASCII"
try:
_unicodefun._verify_python_env()
except RuntimeError as re:
self.fail(f"`patch_click()` failed, exception still raised: {re}")
def test_root_logger_not_used_directly(self) -> None: def test_root_logger_not_used_directly(self) -> None:
def fail(*args: Any, **kwargs: Any) -> None: def fail(*args: Any, **kwargs: Any) -> None:
self.fail("Record created with root logger") self.fail("Record created with root logger")