aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/udfs/common/python/main_py3/main.pyx
diff options
context:
space:
mode:
authornik-bes <nik-bes@yandex-team.com>2025-05-19 07:20:13 +0300
committernik-bes <nik-bes@yandex-team.com>2025-05-19 07:36:02 +0300
commit317b7368e24941ff76499f500579fd9b10f6656e (patch)
treeabbcbaea595e7d2e9f23cf59a408b3082fe4340d /yql/essentials/udfs/common/python/main_py3/main.pyx
parent6b666a52d40308ab9b3532cd8d3008b9f37cfffb (diff)
downloadydb-317b7368e24941ff76499f500579fd9b10f6656e.tar.gz
Update Cython to 3.0.10.
commit_hash:b43c96b868cd36d636192fd2c6024d9f0d2fb6f8
Diffstat (limited to 'yql/essentials/udfs/common/python/main_py3/main.pyx')
-rw-r--r--yql/essentials/udfs/common/python/main_py3/main.pyx50
1 files changed, 50 insertions, 0 deletions
diff --git a/yql/essentials/udfs/common/python/main_py3/main.pyx b/yql/essentials/udfs/common/python/main_py3/main.pyx
new file mode 100644
index 00000000000..6f4ca943584
--- /dev/null
+++ b/yql/essentials/udfs/common/python/main_py3/main.pyx
@@ -0,0 +1,50 @@
+import os
+import runpy
+import importlib
+
+import __res
+
+
+cdef env_entry_point = 'Y_PYTHON_ENTRY_POINT'
+
+
+cdef extern from 'main.h':
+ pass
+
+
+def find_pymain():
+ py_main = __res.find('PY_MAIN')
+
+ if isinstance(py_main, bytes):
+ py_main = py_main.decode('utf8')
+
+ if isinstance(py_main, unicode):
+ return py_main
+
+ return None
+
+
+def run_main():
+ entry_point = os.environ.pop(env_entry_point, None)
+
+ if entry_point is None:
+ entry_point = find_pymain()
+
+ if entry_point is None:
+ raise RuntimeError('No entry point found')
+
+ module_name, colon, func_name = entry_point.partition(':')
+
+ if not colon:
+ runpy._run_module_as_main(module_name, alter_argv=False)
+ return
+
+ if not module_name:
+ module_name = 'library.python.runtime_py3.entry_points'
+
+ module = importlib.import_module(module_name)
+ func = getattr(module, func_name)
+ func()
+
+
+run_main()