2020import datetime
2121import itertools
2222import re
23- import threading
24- import uuid
2523from collections import abc
2624from collections .abc import Callable
2725from collections .abc import Collection
@@ -241,18 +239,13 @@ def process(self, element):
241239
242240class JsMapToFieldsDoFn (beam .DoFn ):
243241 def __init__ (self , fields , original_fields , input_schema ):
244- self .fields = fields
245- self .original_fields = original_fields
246- self .input_schema = input_schema
247242 self .ctx = None
248243 self .field_funcs = {}
249244 self .passthrough_fields = []
250245
251- def setup (self ):
252- self .ctx = MiniRacer ()
253246 script = []
254- for name , expr in self . fields .items ():
255- if isinstance (expr , str ) and expr in self . input_schema :
247+ for name , expr in fields .items ():
248+ if isinstance (expr , str ) and expr in input_schema :
256249 self .passthrough_fields .append ((name , expr ))
257250 continue
258251
@@ -261,9 +254,9 @@ def setup(self):
261254
262255 if 'expression' in expr :
263256 e = expr ['expression' ]
264- code = f"var func_{ name } = (__row__) => {{ " + " " .join ([
265- f"const { n } = __row__.{ n } ;" for n in self . original_fields if n in e
266- ]) + f" return ({ e } ); }}"
257+ code = f"var func_{ name } = (__row__) => {{ " + " " .join (
258+ [ f"const { n } = __row__.{ n } ;"
259+ for n in original_fields if n in e ]) + f" return ({ e } ); }}"
267260 script .append (code )
268261 self .field_funcs [name ] = f"func_{ name } "
269262 elif 'callable' in expr :
@@ -277,8 +270,12 @@ def setup(self):
277270 script .append (udf_code )
278271 self .field_funcs [name ] = func_name
279272
280- if script :
281- self .ctx .eval ("\n " .join (script ))
273+ self .script = "\n " .join (script ) if script else None
274+
275+ def setup (self ):
276+ self .ctx = MiniRacer ()
277+ if self .script :
278+ self .ctx .eval (self .script )
282279
283280 def process (self , element ):
284281 row_as_dict = py_value_to_js_dict (element )
@@ -308,7 +305,7 @@ def _get_javascript_udf_code(
308305
309306 if MiniRacer is None :
310307 raise ValueError (
311- "JavaScript mapping functions require the 'mini-racer' package to be installed."
308+ "JavaScript mapping functions require the 'py- mini-racer' package to be installed."
312309 )
313310
314311 udf_code = None
0 commit comments