Browse Source

YT-21446: Support py udfs generator is os ydb
ab1a950f25a9a5f4a9ca38655f443ff23cece827

mpereskokova 10 months ago
parent
commit
80512ac938
2 changed files with 25 additions and 10 deletions
  1. 19 6
      build/plugins/yql_python_udf.py
  2. 6 4
      build/scripts/gen_yql_python_udf.py

+ 19 - 6
build/plugins/yql_python_udf.py

@@ -1,4 +1,5 @@
 from _common import sort_by_keywords
 from _common import sort_by_keywords
+import ymake
 
 
 
 
 def get_or_default(kv, name, default):
 def get_or_default(kv, name, default):
@@ -17,9 +18,19 @@ def onregister_yql_python_udf(unit, *args):
     use_arcadia_python = unit.get('USE_ARCADIA_PYTHON') == 'yes'
     use_arcadia_python = unit.get('USE_ARCADIA_PYTHON') == 'yes'
     py3 = unit.get('PYTHON3') == 'yes'
     py3 = unit.get('PYTHON3') == 'yes'
 
 
+    if unit.get('OPENSOURCE'):
+        if add_libra_modules:
+            ymake.report_configure_error('Libra modules are not supported in opensource python UDFs')
+            add_libra_modules = False
+
+    yql_base_dir = unit.get('YQL_BASE_DIR')
+    yql_python_dir = unit.get('YQL_PYTHON_DIR')
+    if not yql_python_dir:
+        yql_python_dir = '/'.join([yql_base_dir, 'udfs/common/python'])
+
     unit.onyql_abi_version(['2', '27', '0'])
     unit.onyql_abi_version(['2', '27', '0'])
-    unit.onpeerdir(['yql/udfs/common/python/python_udf'])
-    unit.onpeerdir(['contrib/ydb/library/yql/public/udf'])
+    unit.onpeerdir(['/'.join([yql_python_dir, '/python_udf'])])
+    unit.onpeerdir(['/'.join([yql_base_dir, '/public/udf'])])
 
 
     if add_libra_modules:
     if add_libra_modules:
         unit.onpeerdir(['quality/user_sessions/libra_arc/noyql'])
         unit.onpeerdir(['quality/user_sessions/libra_arc/noyql'])
@@ -28,16 +39,16 @@ def onregister_yql_python_udf(unit, *args):
     if use_arcadia_python:
     if use_arcadia_python:
         flavor = 'Arcadia'
         flavor = 'Arcadia'
         unit.onpeerdir(
         unit.onpeerdir(
-            ['library/python/runtime', 'yql/udfs/common/python/main']
+            ['library/python/runtime', '/'.join([yql_python_dir, '/main'])]
             if not py3
             if not py3
-            else ['library/python/runtime_py3', 'yql/udfs/common/python/main_py3']
+            else ['library/python/runtime_py3', '/'.join([yql_python_dir, '/main_py3'])]
         )
         )
     else:
     else:
         flavor = 'System'
         flavor = 'System'
 
 
     output_includes = [
     output_includes = [
-        'yql/udfs/common/python/python_udf/python_udf.h',
-        'contrib/ydb/library/yql/public/udf/udf_registrator.h',
+        '/'.join([yql_python_dir, '/python_udf/python_udf.h']),
+        '/'.join([yql_base_dir, '/public/udf/udf_registrator.h']),
     ]
     ]
     if add_libra_modules:
     if add_libra_modules:
         output_includes.append('yql/udfs/quality/libra/module/module.h')
         output_includes.append('yql/udfs/quality/libra/module/module.h')
@@ -52,6 +63,8 @@ def onregister_yql_python_udf(unit, *args):
             resource_name,
             resource_name,
             path,
             path,
             libra_flag,
             libra_flag,
+            yql_base_dir,
+            yql_python_dir,
             'OUT',
             'OUT',
             path,
             path,
             'OUTPUT_INCLUDES',
             'OUTPUT_INCLUDES',

+ 6 - 4
build/scripts/gen_yql_python_udf.py

@@ -1,9 +1,9 @@
 import sys
 import sys
 
 
 TEMPLATE = """
 TEMPLATE = """
-#include <yql/udfs/common/python/python_udf/python_udf.h>
+#include <@YQL_PYTHON_DIR@/python_udf/python_udf.h>
 
 
-#include <contrib/ydb/library/yql/public/udf/udf_registrator.h>
+#include <@YQL_BASE_DIR@/public/udf/udf_registrator.h>
 
 
 #if @WITH_LIBRA@
 #if @WITH_LIBRA@
 #include <yql/udfs/quality/libra/module/module.h>
 #include <yql/udfs/quality/libra/module/module.h>
@@ -37,8 +37,8 @@ extern "C" UDF_API void SetBackTraceCallback(TBackTraceCallback callback) {
 
 
 
 
 def main():
 def main():
-    assert len(sys.argv) == 6
-    flavor, module_name, package_name, path, libra_flag = sys.argv[1:]
+    assert len(sys.argv) == 8
+    flavor, module_name, package_name, path, libra_flag, yql_base_dir, yql_python_dir = sys.argv[1:]
     with open(path, 'w') as f:
     with open(path, 'w') as f:
         f.write(
         f.write(
             TEMPLATE.strip()
             TEMPLATE.strip()
@@ -46,6 +46,8 @@ def main():
             .replace('@PACKAGE_NAME@', package_name)
             .replace('@PACKAGE_NAME@', package_name)
             .replace('@FLAVOR@', flavor)
             .replace('@FLAVOR@', flavor)
             .replace('@WITH_LIBRA@', libra_flag)
             .replace('@WITH_LIBRA@', libra_flag)
+            .replace('@YQL_BASE_DIR@', yql_base_dir)
+            .replace('@YQL_PYTHON_DIR@', yql_python_dir)
         )
         )
         f.write('\n')
         f.write('\n')