Package etl :: Package connector :: Module xmlrpc_connector'
[hide private]
[frames] | no frames]

Source Code for Module etl.connector.xmlrpc_connector'

  1  # -*- encoding: utf-8 -*- 
  2  ############################################################################## 
  3  # 
  4  #    ETL system- Extract Transfer Load system 
  5  #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved 
  6  #    $Id$ 
  7  # 
  8  #    This program is free software: you can redistribute it and/or modify 
  9  #    it under the terms of the GNU General Public License as published by 
 10  #    the Free Software Foundation, either version 3 of the License, or 
 11  #    (at your option) any later version. 
 12  # 
 13  #    This program is distributed in the hope that it will be useful, 
 14  #    but WITHOUT ANY WARRANTY; without even the implied warranty of 
 15  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 16  #    GNU General Public License for more details. 
 17  # 
 18  #    You should have received a copy of the GNU General Public License 
 19  #    along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 20  # 
 21  ############################################################################## 
 22  """ 
 23   To provide connectivity with XMLRPC Server. 
 24   
 25   Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). 
 26   GNU General Public License. 
 27  """ 
 28  import threading 
 29  import xmlrpclib 
 30   
 31  from etl.connector import connector 
 32  from SimpleXMLRPCServer import SimpleXMLRPCServer 
 33  from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler 
 34   
35 -class xmlrpc_server_thread(threading.Thread):
36 _register_functions = [] 37
38 - def register_functions(self, funs):
39 if not self._register_functions: 40 self._register_functions = [] 41 if isinstance(funs,list): 42 self._register_functions += funs 43 else: 44 self._register_functions.append(funs)
45
46 - def get_register_functions(self):
47 return self._register_functions
48
49 - def run(self):
50 server = SimpleXMLRPCServer((self.host, self.port)) 51 server.register_introspection_functions() 52 for fun in self.get_register_functions(): 53 server.register_function(self.import_data) 54 #To do create instance of method 55 #server.register_function(fun) 56 server.serve_forever() 57 return server
58
59 - def import_data(self, datas):
60 if self.transformer: 61 row = self.transformer.transform(datas) 62 for d in datas: 63 yield d, 'main'
64
65 -class xmlrpc_connector(connector):
66 """ 67 This is an ETL connector that provides connectivity with xmlrpc server. 68 """ 69
70 - def __init__(self, host, port, name='xmlrpc_connector'):
71 """ 72 Initializes the parameters required to connect to xmlrpc server. 73 """ 74 super(xmlrpc_connector, self).__init__(name) 75 self._type = 'connector.xmlrpc_connector' 76 self.host = host 77 self.port = port
78 79
80 - def start(self,funs):
81 xml_server = xmlrpc_server_thread() 82 xml_server.host = self.host 83 xml_server.port = self.port 84 xml_server.register_functions(funs) 85 server = xml_server.start()
86
87 - def connect(self):
88 server = xmlrpclib.ServerProxy('http://' + self.host + ':' + str(self.port)) 89 return server
90
91 - def __copy__(self):
92 """ 93 Overrides copy method. 94 """ 95 res = xmlrpc_connector(self.host, self.port) 96 return res
97
98 -def test():
99 """ 100 Test function. 101 """ 102 #TODO 103 from etl_test import etl_test 104 import etl 105 xmlrpc_conn=xmlrpc_connector('localhost',8050) 106 conn = xmlrpc_conn.start('import_data') 107 test = etl_test.etl_component_test(etl.component.input.xmlrpc_in( etl.component.input.xmlrpc_in(xmlrpc_conn))) 108 res=test.output() 109 print res
110 111 if __name__ == '__main__': 112 test() 113