Skip to content

Commit

Permalink
Remove click patch (#3768)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
hauntsaninja authored Jul 9, 2023
1 parent 4130c65 commit 114e835
Show file tree
Hide file tree
Showing 5 changed files with 1 addition and 62 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
<!-- Changes to how Black is packaged, such as dependency requirements -->

- 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

Expand Down
2 changes: 0 additions & 2 deletions docs/contributing/reference/reference_functions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,6 @@ Utilities

.. autofunction:: black.linegen.normalize_invisible_parens

.. autofunction:: black.patch_click

.. autofunction:: black.nodes.preceding_leaf

.. autofunction:: black.re_compile_maybe_verbose
Expand Down
35 changes: 0 additions & 35 deletions src/black/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1410,40 +1410,6 @@ def nullcontext() -> Iterator[None]:
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:
# PyInstaller patches multiprocessing to need freeze_support() even in non-Windows
# environments so just assume we always need to call it if frozen.
Expand All @@ -1452,7 +1418,6 @@ def patched_main() -> None:

freeze_support()

patch_click()
main()


Expand Down
1 change: 0 additions & 1 deletion src/blackd/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,6 @@ def parse_python_variant_header(value: str) -> Tuple[bool, Set[black.TargetVersi
def patched_main() -> None:
maybe_install_uvloop()
freeze_support()
black.patch_click()
main()


Expand Down
24 changes: 0 additions & 24 deletions tests/test_black.py
Original file line number Diff line number Diff line change
Expand Up @@ -1455,30 +1455,6 @@ def test_assert_equivalent_different_asts(self) -> None:
with self.assertRaises(AssertionError):
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 fail(*args: Any, **kwargs: Any) -> None:
self.fail("Record created with root logger")
Expand Down

0 comments on commit 114e835

Please sign in to comment.