Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove click patch #3768

Merged
merged 3 commits into from
Jul 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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