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

Source Code for Module etl.connector.openobject_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 OpenERP server. 
 24   
 25   Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). 
 26   GNU General Public License. 
 27  """ 
 28  from etl.connector import connector 
 29   
30 -class openobject_connector(connector):
31 """ 32 This is an ETL connector that is used to provide connectivity with OpenERP server. 33 """
34 - def __init__(self, uri, db, login, passwd, obj='/xmlrpc/object', con_type='xmlrpc', name='openobject_connector'):
35 """ 36 Required Parameters 37 uri : URI path of OpenObject server with port. 38 db : OpenObject Database name. 39 login : User name to login into OpenObject Database. 40 passwd : Password of the user. 41 42 Extra Parameters 43 obj : Object name. 44 con_type : Type of connection to OpenObject. 45 """ 46 super(openobject_connector, self).__init__(name) 47 self._type = 'connector.openobject_connector' 48 self.db = db 49 self.user_login = login 50 self.obj = obj 51 self.passwd = passwd 52 self.con_type = con_type 53 self.uid = False 54 self.uri = uri
55
56 - def open(self):
57 """ 58 Opens a connection to OpenObject Database. 59 """ 60 import xmlrpclib 61 from etl import etl_socket 62 connector = False 63 super(openobject_connector, self).open() 64 if self.con_type == 'xmlrpc': 65 connector = xmlrpclib.ServerProxy(self.uri + self.obj) 66 elif self.con_type == 'socket': 67 connector = etl_socket.etl_socket() 68 self.obj = self.obj[1:] 69 else: 70 raise Exception('Not Supported') 71 self.uid = self.login(self.user_login, self.passwd) 72 return connector
73
74 - def __convert(self, result):
75 if type(result) == type(u''): 76 return result.encode('utf-8') 77 elif type(result) == type([]): 78 return map(self.__convert, result) 79 elif type(result) == type({}): 80 newres = {} 81 for i in result.keys(): 82 newres[i] = self.__convert(result[i]) 83 return newres 84 else: 85 return result
86
87 - def login(self, uid, passwd):
88 """ 89 For logging in to OpenObject Database. 90 """ 91 import xmlrpclib 92 from etl import etl_socket 93 if self.con_type == 'xmlrpc': 94 xg = xmlrpclib.ServerProxy(self.uri + '/xmlrpc/common') 95 return xg.login(self.db, uid,passwd) 96 elif self.con_type == 'socket': 97 xg = xmlrpclib.ServerProxy(self.uri + '/xmlrpc/common') 98 return xg.login(self.db, uid, passwd) 99 raise Exception('Not Implemented') 100 else: 101 raise Exception('Not Supported')
102
103 - def execute(self,connector, method, *args):
104 import xmlrpclib 105 from etl import etl_socket 106 super(openobject_connector, self).execute() 107 if not self.uid: 108 raise Exception('Not login') 109 if self.con_type == 'xmlrpc': 110 result = getattr(connector, method)(self.db, self.uid, self.passwd, *args) 111 return self.__convert(result) 112 elif self.con_type == 'socket': 113 connector.connect(self.uri) 114 connector.mysend((self.obj, method, self.db, self.uid, self.passwd) + args) 115 res = connector.myreceive() 116 connector.disconnect() 117 return res 118 else: 119 raise Exception('Not Supported')
120
121 - def close(self, connector):
122 """ 123 Closes the connection made to OpenObject Database. 124 """ 125 super(openobject_connector, self).close(connector) 126 return True#connector.close()
127
128 - def __copy__(self):
129 res = openobject_connector(self.uri, self.db, self.login, self.passwd, self.obj, self.con_type, self.name) 130 res.uid = self.uid 131 return res
132
133 -def test():
134 from etl_test import etl_test 135 import etl 136 openobject_partner=openobject_connector('http://localhost:8069', 'test', 'admin', 'admin',con_type='xmlrpc') 137 test = etl_test.etl_component_test(etl.component.input.openobject_in( 138 openobject_partner,'res.partner.address', 139 fields=['partner_id','title', 'name', 'street', 'street2' , 'phone' , 'city' , 'zip' ,'state_id' , 'country_id' , 'mobile', 'birthdate'], 140 )) 141 res=test.output() 142 print res
143 #TODO 144 145 146 if __name__ == '__main__': 147 test() 148