class VirtualModule::PythonSourceProvider
Constants
- EXT
Public Instance Methods
compile(vars=nil, type_info=nil, params=nil, script=nil, auto_binding=nil)
click to toggle source
# File lib/virtual_module.rb, line 323 def compile(vars=nil, type_info=nil, params=nil, script=nil, auto_binding=nil) @compiled_lib = (load_packages + @source).join("\n") if !vars.nil? && !type_info.nil? && !params.nil? && !script.nil? && !auto_binding.nil? preprocess = vars.map{|e| e.to_s + '=params[0]["'+e.to_s+'"]'} postprocess = auto_binding ? vars.map{|e| 'params[0]["'+e.to_s+'"]='+e.to_s } : [] @compiled_lib += <<EOS def vm_builtin_eval_func(params): #{(preprocess.join(";") + ";") if preprocess.count>0} #{script}; #{(postprocess.join(";") + ";") if postprocess.count>0} return (None,#{auto_binding ? "params[0]" : "-1" }); EOS end end
generate_message(input_queue_path, receiver, name, *args, **kwargs)
click to toggle source
# File lib/virtual_module.rb, line 337 def generate_message(input_queue_path, receiver, name, *args, **kwargs) script, params = ["", ""] if args.count + kwargs.count > 0 gen_driver = ->(arg, input_queue_path, i, type, param_name){ val = arg.class == Module ? ( (table_index = arg.___proxy_object_transmitter.get_index(@builder.object_id)).nil? ? "dill.loads(f.read())" : "object_lookup_table[#{table_index}]" ) : "msgpack.unpackb(f.read())" "f=open('#{input_queue_path}.#{i}.#{type}', 'r'); #{param_name}=#{val}; f.close();" } conv_kwargs = KwargsConverter.new("{}", ->(k){"kwargs['#{k}']"}, "**kwargs") script, params = prepare_params(input_queue_path, gen_driver, conv_kwargs, name, *args, **kwargs) end callee = "#{name}" if !receiver.nil? if receiver[0..5]=="\xC1VMOBJ" script += "receiver=object_lookup_table[#{receiver[6..-1]}];" else File.write("#{input_queue_path}_serialized", receiver) script += "f=open('#{input_queue_path}_serialized', 'r'); receiver=dill.load(f); f.close();" end if name==:[] callee = "receiver" else callee = "receiver.#{name}" end end script += "___result = #{callee}#{params};" end
lib_script(ipc=nil)
click to toggle source
# File lib/virtual_module.rb, line 314 def lib_script(ipc=nil) if ipc!=:rpc @compiled_lib else # :rpc mode is to be implemented @compiled_lib end end
load_packages()
click to toggle source
# File lib/virtual_module.rb, line 250 def load_packages @pkgs.map{|e| if e.class==Hash e.map{|k,v| "from #{k} import #{ v.class==Array ? v.join(",") : v}"} else "import #{e}" end }.flatten end
main_loop(input_queue_path, output_queue_path, lib_script=nil)
click to toggle source
# File lib/virtual_module.rb, line 276 def main_loop(input_queue_path, output_queue_path, lib_script=nil) <<EOS import sys sys.path.append('#{File.dirname(input_queue_path)}') from #{lib_script} import * import dill import msgpack object_lookup_table = {} while True : try: f = open('#{input_queue_path}', 'r') source = f.read() f.close() if source[0]=='\\n': f = open('#{output_queue_path}', 'w') f.write(dill.dumps(object_lookup_table[int(source[1:len(source)])])) f.close() else: exec(source) f = open('#{output_queue_path}', 'w') try: f.write(msgpack.packb(___result)) except: object_lookup_table[id(___result)] = ___result f.write('\\xc1VMOBJ'+str(id(___result))) f.close() except KeyboardInterrupt: print(object_lookup_table.keys()) exit(0); except Exception as e: f = open('#{output_queue_path}', 'w') f.write('\\xc1VMERR'+str(type(e))+','+str(e.message)) f.close() EOS end
to_a()
click to toggle source
# File lib/virtual_module.rb, line 260 def to_a :list end
to_s()
click to toggle source
# File lib/virtual_module.rb, line 264 def to_s :str end
vclass()
click to toggle source
# File lib/virtual_module.rb, line 268 def vclass :type end
vmethods()
click to toggle source
# File lib/virtual_module.rb, line 272 def vmethods :dir end