Simplify logic for generating package init files

This commit is contained in:
boukeversteegh 2020-06-09 21:10:30 +02:00
parent 3105e952ea
commit 8567892352

View File

@ -2,12 +2,14 @@
import itertools import itertools
import os.path import os.path
import pathlib
import re import re
import sys import sys
import textwrap import textwrap
from typing import List from typing import List
from betterproto.compile.importing import get_ref_type
import betterproto import betterproto
from betterproto.compile.importing import get_ref_type
from betterproto.compile.naming import ( from betterproto.compile.naming import (
pythonize_class_name, pythonize_class_name,
pythonize_field_name, pythonize_field_name,
@ -135,11 +137,7 @@ def generate_code(request, response):
): ):
continue continue
# if proto_file.package: output_file = str(pathlib.Path(*proto_file.package.split("."), "__init__.py"))
output_file = (
os.path.join(proto_file.package.replace(".", os.path.sep), "__init__")
+ ".py"
)
if output_file not in output_map: if output_file not in output_map:
output_map[output_file] = {"package": proto_file.package, "files": []} output_map[output_file] = {"package": proto_file.package, "files": []}
@ -359,24 +357,17 @@ def generate_code(request, response):
mode=black.FileMode(target_versions=set([black.TargetVersion.PY37])), mode=black.FileMode(target_versions=set([black.TargetVersion.PY37])),
) )
output_files = list(output_map.keys()) # Make each output directory a package with __init__ file
for output_file in output_files: output_paths = set(pathlib.Path(path) for path in output_map.keys())
path = os.path.dirname(output_file) output_dirs = [directory for path in output_paths for directory in path.parents]
init_files = set(d.joinpath("__init__.py") for d in output_dirs) - output_paths
for sub_path in path.split(os.path.sep): for init_file in init_files:
init_file = os.path.join(sub_path, "__init__.py")
if init_file in output_files:
continue
output_files.append(init_file)
init = response.file.add() init = response.file.add()
init.name = init_file init.name = str(init_file)
init.content = b""
filenames = sorted([f.name for f in response.file]) for filename in sorted(output_paths.union(init_files)):
for fname in filenames: print(f"Writing {filename}", file=sys.stderr)
print(f"Writing {repr(fname)}", file=sys.stderr)
def main(): def main():