diff --git a/examples/build_file_generation/__init__.py b/examples/build_file_generation/__init__.py index 851fefb528..6dfd77cf05 100644 --- a/examples/build_file_generation/__init__.py +++ b/examples/build_file_generation/__init__.py @@ -1,5 +1,6 @@ import requests + def main(url): r = requests.get(url) print(r.text) diff --git a/examples/build_file_generation/__main__.py b/examples/build_file_generation/__main__.py index 8b6189cbbc..106c8365eb 100644 --- a/examples/build_file_generation/__main__.py +++ b/examples/build_file_generation/__main__.py @@ -1,5 +1,4 @@ from __init__ import main - if __name__ == "__main__": main("https://example.com") diff --git a/examples/pip_install/main.py b/examples/pip_install/main.py index 4440cdeb2e..b65ad0e5ea 100644 --- a/examples/pip_install/main.py +++ b/examples/pip_install/main.py @@ -1,5 +1,6 @@ import boto3 + def the_dir(): return dir(boto3) diff --git a/examples/pip_install/pip_install_test.py b/examples/pip_install/pip_install_test.py index eb4d7d8e95..6092768da6 100644 --- a/examples/pip_install/pip_install_test.py +++ b/examples/pip_install/pip_install_test.py @@ -52,7 +52,7 @@ def test_dist_info(self): env.split(" "), [ "external/pip/pypi__boto3/site-packages/boto3-1.14.51.dist-info/DESCRIPTION.rst", - 'external/pip/pypi__boto3/site-packages/boto3-1.14.51.dist-info/INSTALLER', + "external/pip/pypi__boto3/site-packages/boto3-1.14.51.dist-info/INSTALLER", "external/pip/pypi__boto3/site-packages/boto3-1.14.51.dist-info/METADATA", "external/pip/pypi__boto3/site-packages/boto3-1.14.51.dist-info/RECORD", "external/pip/pypi__boto3/site-packages/boto3-1.14.51.dist-info/WHEEL", diff --git a/examples/pip_parse/pip_parse_test.py b/examples/pip_parse/pip_parse_test.py index 030e38c077..c623a47567 100644 --- a/examples/pip_parse/pip_parse_test.py +++ b/examples/pip_parse/pip_parse_test.py @@ -49,7 +49,7 @@ def test_dist_info(self): self.assertListEqual( env.split(" "), [ - 'external/pypi_requests/site-packages/requests-2.25.1.dist-info/INSTALLER', + "external/pypi_requests/site-packages/requests-2.25.1.dist-info/INSTALLER", "external/pypi_requests/site-packages/requests-2.25.1.dist-info/LICENSE", "external/pypi_requests/site-packages/requests-2.25.1.dist-info/METADATA", "external/pypi_requests/site-packages/requests-2.25.1.dist-info/RECORD", diff --git a/examples/pip_repository_annotations/pip_repository_annotations_test.py b/examples/pip_repository_annotations/pip_repository_annotations_test.py index 468788f50b..e78880ae72 100644 --- a/examples/pip_repository_annotations/pip_repository_annotations_test.py +++ b/examples/pip_repository_annotations/pip_repository_annotations_test.py @@ -68,11 +68,9 @@ def test_data_exclude_glob(self): current_wheel_version = "0.37.1" r = runfiles.Create() - dist_info_dir = ( - "pip_repository_annotations_example/external/{}/site-packages/wheel-{}.dist-info".format( - self.wheel_pkg_dir(), - current_wheel_version, - ) + dist_info_dir = "pip_repository_annotations_example/external/{}/site-packages/wheel-{}.dist-info".format( + self.wheel_pkg_dir(), + current_wheel_version, ) # Note: `METADATA` is important as it's consumed by https://docs.python.org/3/library/importlib.metadata.html diff --git a/gazelle/modules_mapping/generator.py b/gazelle/modules_mapping/generator.py index 8523542aa2..ec3133af0e 100644 --- a/gazelle/modules_mapping/generator.py +++ b/gazelle/modules_mapping/generator.py @@ -68,10 +68,7 @@ def is_metadata(path): # Ref: https://peps.python.org/pep-0427/#what-s-the-deal-with-purelib-vs-platlib def data_has_purelib_or_platlib(path): maybe_lib = path.split("/")[1].lower() - return is_metadata(path) and ( - maybe_lib == "purelib" or maybe_lib == "platlib" - ) - + return is_metadata(path) and (maybe_lib == "purelib" or maybe_lib == "platlib") def module_for_path(path, whl, mapping): @@ -95,7 +92,7 @@ def module_for_path(path, whl, mapping): if ext == ".so": # Also remove extra metadata that is embeded as part of # the file name as an extra extension. - ext = ''.join(pathlib.Path(root).suffixes) + ext = "".join(pathlib.Path(root).suffixes) module = root[: -len(ext)].replace("/", ".") mapping[module] = wheel_name diff --git a/gazelle/parse.py b/gazelle/parse.py index 6b07c0e8f5..b892229386 100644 --- a/gazelle/parse.py +++ b/gazelle/parse.py @@ -21,7 +21,7 @@ def parse_import_statements(content, filepath): "name": subnode.name, "lineno": node.lineno, "filepath": filepath, - "from": "" + "from": "", } modules.append(module) elif isinstance(node, ast.ImportFrom) and node.level == 0: @@ -30,7 +30,7 @@ def parse_import_statements(content, filepath): "name": f"{node.module}.{subnode.name}", "lineno": node.lineno, "filepath": filepath, - "from": node.module + "from": node.module, } modules.append(module) return modules @@ -52,8 +52,9 @@ def parse(repo_root, rel_package_path, filename): content = file.read() # From simple benchmarks, 2 workers gave the best performance here. with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor: - modules_future = executor.submit(parse_import_statements, content, - rel_filepath) + modules_future = executor.submit( + parse_import_statements, content, rel_filepath + ) comments_future = executor.submit(parse_comments, content) modules = modules_future.result() comments = comments_future.result() @@ -73,12 +74,11 @@ def main(stdin, stdout): filenames = parse_request["filenames"] outputs = list() if len(filenames) == 1: - outputs.append(parse(repo_root, rel_package_path, - filenames[0])) + outputs.append(parse(repo_root, rel_package_path, filenames[0])) else: futures = [ - executor.submit(parse, repo_root, rel_package_path, - filename) for filename in filenames + executor.submit(parse, repo_root, rel_package_path, filename) + for filename in filenames if filename != "" ] for future in concurrent.futures.as_completed(futures): diff --git a/gazelle/testdata/with_third_party_requirements_from_imports/__main__.py b/gazelle/testdata/with_third_party_requirements_from_imports/__main__.py index 8733018885..9f529cb0df 100644 --- a/gazelle/testdata/with_third_party_requirements_from_imports/__main__.py +++ b/gazelle/testdata/with_third_party_requirements_from_imports/__main__.py @@ -1,6 +1,5 @@ -from google.cloud import aiplatform - from bar import main +from google.cloud import aiplatform if __name__ == "__main__": print(aiplatform) diff --git a/gazelle/testdata/with_third_party_requirements_from_imports/bar.py b/gazelle/testdata/with_third_party_requirements_from_imports/bar.py index 7875c1630b..99a4b1ce95 100644 --- a/gazelle/testdata/with_third_party_requirements_from_imports/bar.py +++ b/gazelle/testdata/with_third_party_requirements_from_imports/bar.py @@ -1,5 +1,6 @@ from google.cloud import aiplatform, storage + def main(): a = dir(aiplatform) b = dir(storage) diff --git a/python/pip_install/extract_wheels/bazel.py b/python/pip_install/extract_wheels/bazel.py index d7aa706433..013e4a23e1 100644 --- a/python/pip_install/extract_wheels/bazel.py +++ b/python/pip_install/extract_wheels/bazel.py @@ -6,11 +6,7 @@ from pathlib import Path from typing import Dict, Iterable, List, Optional, Set -from python.pip_install.extract_wheels import ( - annotation, - namespace_pkgs, - wheel, -) +from python.pip_install.extract_wheels import annotation, namespace_pkgs, wheel WHEEL_FILE_LABEL = "whl" PY_LIBRARY_LABEL = "pkg" diff --git a/python/pip_install/extract_wheels/extract_single_wheel.py b/python/pip_install/extract_wheels/extract_single_wheel.py index c69fbd5958..27f29ac838 100644 --- a/python/pip_install/extract_wheels/extract_single_wheel.py +++ b/python/pip_install/extract_wheels/extract_single_wheel.py @@ -6,9 +6,11 @@ import sys from tempfile import NamedTemporaryFile -from python.pip_install.extract_wheels.extract_wheels import configure_reproducible_wheels from python.pip_install.extract_wheels import arguments, bazel, requirements from python.pip_install.extract_wheels.annotation import annotation_from_str_path +from python.pip_install.extract_wheels.extract_wheels import ( + configure_reproducible_wheels, +) def main() -> None: diff --git a/python/pip_install/extract_wheels/parse_requirements_to_bzl.py b/python/pip_install/extract_wheels/parse_requirements_to_bzl.py index e2efa5ae1c..5762cf542c 100644 --- a/python/pip_install/extract_wheels/parse_requirements_to_bzl.py +++ b/python/pip_install/extract_wheels/parse_requirements_to_bzl.py @@ -40,25 +40,25 @@ def parse_install_requirements( if ( # PEP-440 direct references are considered pinned # See: https://peps.python.org/pep-0440/#direct-references and https://peps.python.org/pep-0508/ - not install_req.link and - not install_req.is_pinned + not install_req.link + and not install_req.is_pinned ): unpinned_reqs.append(str(install_req)) - install_req_and_lines.append( - (install_req, line) - ) + install_req_and_lines.append((install_req, line)) else: extra_pip_args.extend(shlex.split(line)) if len(unpinned_reqs) > 0: unpinned_reqs_str = "\n".join(unpinned_reqs) - raise RuntimeError(f"""\ + raise RuntimeError( + f"""\ The `requirements_lock` file must be fully pinned. See `compile_pip_requirements`. Alternatively, use `pip-tools` or a similar mechanism to produce a pinned lockfile. The following requirements were not pinned: -{unpinned_reqs_str}""") +{unpinned_reqs_str}""" + ) return install_req_and_lines @@ -259,14 +259,19 @@ def main(output: TextIO) -> None: } ) - output.write(textwrap.dedent( - """\ + output.write( + textwrap.dedent( + """\ \"\"\"Starlark representation of locked requirements. @generated by rules_python pip_parse repository rule from {} \"\"\" - """.format(args.requirements_lock_label))) + """.format( + args.requirements_lock_label + ) + ) + ) output.write( generate_parsed_requirements_contents( requirements_lock=args.requirements_lock, diff --git a/python/pip_install/extract_wheels/wheel.py b/python/pip_install/extract_wheels/wheel.py index 3f101005d0..024d6e5fa2 100644 --- a/python/pip_install/extract_wheels/wheel.py +++ b/python/pip_install/extract_wheels/wheel.py @@ -20,7 +20,7 @@ def path(self) -> str: @property def name(self) -> str: # TODO Also available as installer.sources.WheelSource.distribution - name = str(self.metadata['Name']) + name = str(self.metadata["Name"]) return canonicalize_name(name) @property @@ -59,7 +59,7 @@ def entry_points(self) -> Dict[str, Tuple[str, str]]: def dependencies(self, extras_requested: Optional[Set[str]] = None) -> Set[str]: dependency_set = set() - for wheel_req in self.metadata.get_all('Requires-Dist', []): + for wheel_req in self.metadata.get_all("Requires-Dist", []): req = pkg_resources.Requirement(wheel_req) # type: ignore if req.marker is None or any( diff --git a/python/pip_install/pip_compile.py b/python/pip_install/pip_compile.py index aeb36de049..09b3c9b035 100644 --- a/python/pip_install/pip_compile.py +++ b/python/pip_install/pip_compile.py @@ -43,7 +43,11 @@ def _select_golden_requirements_file( parts = requirements_in.split(os.path.sep, 2) if parts[0] == "external": requirements_in = parts[2] - requirements_txt = requirements_txt if "BUILD_WORKSPACE_DIRECTORY" in os.environ else os.path.join("..", "..", requirements_txt) + requirements_txt = ( + requirements_txt + if "BUILD_WORKSPACE_DIRECTORY" in os.environ + else os.path.join("..", "..", requirements_txt) + ) os.chdir(os.path.join(parts[0], parts[1])) update_target_label = sys.argv.pop(1) @@ -79,7 +83,9 @@ def _select_golden_requirements_file( # # Changing to the WORKSPACE root avoids 'file not found' errors when the `.update` target is run # from different directories within the WORKSPACE. - requirements_txt = os.path.join(os.environ["BUILD_WORKSPACE_DIRECTORY"], requirements_txt) + requirements_txt = os.path.join( + os.environ["BUILD_WORKSPACE_DIRECTORY"], requirements_txt + ) else: err_msg = ( "Expected to find BUILD_WORKSPACE_DIRECTORY (running under `bazel run`) or " diff --git a/tools/wheelmaker.py b/tools/wheelmaker.py index 0bd585f3bb..b5ad346d70 100644 --- a/tools/wheelmaker.py +++ b/tools/wheelmaker.py @@ -146,7 +146,7 @@ def arcname_from(name): size = 0 with open(real_filename, "rb") as f: while True: - block = f.read(2 ** 20) + block = f.read(2**20) if not block: break hash.update(block)