aboutsummaryrefslogtreecommitdiffstats
path: root/build/plugins/pybuild.py
diff options
context:
space:
mode:
authorshadchin <shadchin@yandex-team.com>2024-03-04 21:16:16 +0300
committershadchin <shadchin@yandex-team.com>2024-03-04 21:43:39 +0300
commit74819c4157bd388a7d429c870ea4b343a282dafa (patch)
tree4bff355b03dfb24b14d33581357cc8e624d170fd /build/plugins/pybuild.py
parentf64c28a5443395e3a8f27e6f1b15a3507812d2de (diff)
downloadydb-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.py18
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'