MCPcopy Create free account
hub / github.com/apache/arrow / NodeDriver

Class NodeDriver

python/scripts/run_emscripten_tests.py:136–196  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

134
135
136class NodeDriver:
137 import subprocess
138
139 def __init__(self, hostname, port):
140 self.process = subprocess.Popen(
141 [shutil.which("script"), "-c", shutil.which("node")],
142 stdin=subprocess.PIPE,
143 shell=False,
144 bufsize=0,
145 )
146 print(self.process)
147 time.sleep(0.1) # wait for node to start
148 self.hostname = hostname
149 self.port = port
150 self.last_ret_code = None
151
152 def load_pyodide(self, dist_dir):
153 self.execute_js(
154 f"""
155 const {{ loadPyodide }} = require('{dist_dir}/pyodide.js');
156 let pyodide = await loadPyodide();
157 """
158 )
159
160 def clear_logs(self):
161 pass # we don't handle logs for node
162
163 def write_stdin(self, buffer):
164 # because we use unbuffered IO for
165 # stdout, stdin.write is also unbuffered
166 # so might under-run on writes
167 while len(buffer) > 0 and self.process.poll() is None:
168 written = self.process.stdin.write(buffer)
169 if written == len(buffer):
170 break
171 elif written == 0:
172 # full buffer - wait
173 time.sleep(0.01)
174 else:
175 buffer = buffer[written:]
176
177 def execute_js(self, code, wait_for_terminate=True):
178 self.write_stdin((code + "\n").encode("utf-8"))
179
180 def load_arrow(self):
181 self.execute_js(f"await pyodide.loadPackage('{PYARROW_WHEEL_PATH}');")
182
183 def execute_python(self, code, wait_for_terminate=True):
184 js_code = f"""
185 python = `{code}`;
186 await pyodide.loadPackagesFromImports(python);
187 python_output = await pyodide.runPythonAsync(python);
188 """
189 self.last_ret_code = self.execute_js(js_code, wait_for_terminate)
190 return self.last_ret_code
191
192 def wait_for_done(self):
193 # in node we just let it run above

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected