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

Class NodeDriver

python/scripts/run_emscripten_tests.py:138–198  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected