diff options
author | shadchin <shadchin@yandex-team.com> | 2024-03-04 21:16:16 +0300 |
---|---|---|
committer | shadchin <shadchin@yandex-team.com> | 2024-03-04 21:43:39 +0300 |
commit | 74819c4157bd388a7d429c870ea4b343a282dafa (patch) | |
tree | 4bff355b03dfb24b14d33581357cc8e624d170fd /build/plugins/pybuild.py | |
parent | f64c28a5443395e3a8f27e6f1b15a3507812d2de (diff) | |
download | ydb-74819c4157bd388a7d429c870ea4b343a282dafa.tar.gz |
Extend support pyi files
Сейчас pyi файлы в макросе PY_SRCS используются исключительно в Arcadia плагине для продуктов JB, при сборке эти файлы просто игнорируются.
В этом PR добавил шаг, который будет содержимое этих файлов складывать в ресурсы, секция PY_SRCS удобна тем, что позволяет раскладывать pyi файлы с учетом TOP_LEVEL/NAMESPACE, а это необходимо для правильной работы mypy.
3924b0556bc99947e6893cd79e5ce62ec72a18a9
Diffstat (limited to 'build/plugins/pybuild.py')
-rw-r--r-- | build/plugins/pybuild.py | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/build/plugins/pybuild.py b/build/plugins/pybuild.py index 399dac5102..526f98b3cf 100644 --- a/build/plugins/pybuild.py +++ b/build/plugins/pybuild.py @@ -332,6 +332,7 @@ def onpy_srcs(unit, *args): swigs_cpp = [] swigs = swigs_cpp pys = [] + pyis = [] protos = [] evs = [] fbss = [] @@ -450,9 +451,8 @@ def onpy_srcs(unit, *args): evs.append(pathmod) elif path.endswith('.swg'): swigs.append(pathmod) - # Allow pyi files in PY_SRCS for autocomplete in IDE, but skip it during building elif path.endswith('.pyi'): - pass + pyis.append(pathmod) elif path.endswith('.fbs'): fbss.append(pathmod) else: @@ -629,6 +629,20 @@ def onpy_srcs(unit, *args): unit, 2, [path for path, mod in pys] + unit.get(['_PY_EXTRA_LINT_FILES_VALUE']).split() ) + if pyis: + pyis_seen = set() + pyis_dups = {m for _, m in pyis if (m in pyis_seen or pyis_seen.add(m))} + if pyis_dups: + pyis_dups = ', '.join(name for name in sorted(pyis_dups)) + ymake.report_configure_error('Duplicate(s) is found in the PY_SRCS macro: {}'.format(pyis_dups)) + + res = [] + for path, mod in pyis: + dest = 'py/' + mod.replace('.', '/') + '.pyi' + res += ['DEST', dest, path] + + unit.onresource_files(res) + use_vanilla_protoc = unit.get('USE_VANILLA_PROTOC') == 'yes' if use_vanilla_protoc: cpp_runtime_path = 'contrib/libs/protobuf_std' |