Simplify logic for generating package init files
This commit is contained in:
parent
3105e952ea
commit
8567892352
@ -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():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user