def __init__(self, host='localhost', port=8070): self.host = host self.port = port self.credentials = Credentials() self.oe_conn = OEConnection(self.host, self.port, self.credentials) self.context = Context(self.oe_conn)
class OEClient(object): def __init__(self, host='localhost', port=8070): self.host = host self.port = port self.credentials = Credentials() self.oe_conn = OEConnection(self.host, self.port, self.credentials) self.context = Context(self.oe_conn) def execute(self, command): self.oe_conn.send(command) return self.oe_conn.receive() def get_object_reference(self, database, module, name): server_version = self.oe_conn.server_version() data_obj = self.create_proxy(database, 'ir.model.data', context=False) if server_version[0] == '5': model_id = data_obj._get_id(module, name) data = data_obj.read(model_id, ['model', 'res_id']) return data['model'], int(data['res_id']) else: return data_obj.get_object_reference(module, name) def create_db(self, dbname, dbpass, adminpass, demo=False, lang='fr_FR', overwrite=False): dbs = self.execute(('db', 'list')) if dbname in dbs: if not overwrite: raise DBExistError self.execute(('db', 'drop', dbpass, dbname)) db_id = self.execute( ('db', 'create', dbpass, dbname, demo, lang, adminpass)) db_created = False while not db_created: db_created, user = self.execute( ('db', 'get_progress', adminpass, db_id)) time.sleep(0.5) self.login(dbname, 'admin', adminpass) user_obj = self.create_proxy(dbname, 'res.users') actwiz_obj = self.create_proxy(dbname, 'ir.actions.wizard') admin = user_obj.read(1) wiz_id = admin['menu_id'][0] wiz_name = actwiz_obj.read(wiz_id)['wiz_name'] return self.create_wizard(dbname, wiz_name) def create_proxy(self, db, object, context=True): context = context and self.context or None return ProxyObj(object, db, self.credentials[db], context, self.oe_conn) def create_browse(self, db, object): BrowseFactory._client = self return BrowseFactory.get(db, object) def create_wizard(self, db, wizard_name): return WizardProxy(wizard_name, db, self.credentials[db], self.oe_conn, self) def create_view(self, db, view_id): """This method creates a View object. view_id is an ID defined in an xml file""" if not isinstance(view_id, basestring): raise TypeError module, view_name = view_id.split('.') (model, data_id) = self.get_object_reference(db, module, view_name) assert model == 'ir.ui.view' view_proxy = self.create_proxy(db, 'ir.ui.view') view_info = view_proxy.read(data_id) server_version = self.oe_conn.server_version() if server_version[0] == '5': view_info = view_info[0] return ViewFactory.get(self, db, view_info['model'], data_id) def login(self, db=None, user=None, password=None): """ Login phase, if no db, user, password, use environnement variable :param db: name of the database :param user: name of the user to identify :param password: user's password :return: user ID """ if db is None: db = os.environ.get('OERP_DATABASE', 'demo') user = user or os.environ.get('OERP_USERNAME', 'admin') password = password or os.environ.get('OERP_PASSWORD', 'admin') self.credentials[db]['login'] = user self.credentials[db]['password'] = password if 'uid' in self.credentials[db]: del self.credentials[db]['uid'] uid = self.execute(('common', 'login', db, user, password)) if uid: self.credentials[db]['uid'] = uid self.context.reload(db, uid, password) return bool(uid)
class OEClient(object): def __init__(self, host='localhost', port=8070): self.host = host self.port = port self.credentials = Credentials() self.oe_conn = OEConnection(self.host, self.port, self.credentials) self.context = Context(self.oe_conn) def execute(self, command): self.oe_conn.send(command) return self.oe_conn.receive() def get_object_reference(self, database, module, name): server_version = self.oe_conn.server_version() data_obj = self.create_proxy(database, 'ir.model.data', context=False) if server_version[0] == '5': model_id = data_obj._get_id(module, name) data = data_obj.read(model_id, ['model', 'res_id']) return data['model'], int(data['res_id']) else: return data_obj.get_object_reference(module, name) def create_db(self, dbname, dbpass, adminpass, demo=False, lang='fr_FR', overwrite=False): dbs = self.execute(('db', 'list')) if dbname in dbs: if not overwrite: raise DBExistError self.execute(('db', 'drop', dbpass, dbname)) db_id = self.execute(('db', 'create', dbpass, dbname, demo, lang, adminpass)) db_created = False while not db_created: db_created, user = self.execute(('db', 'get_progress', adminpass, db_id)) time.sleep(0.5) self.login(dbname, 'admin', adminpass) user_obj = self.create_proxy(dbname, 'res.users') actwiz_obj = self.create_proxy(dbname, 'ir.actions.wizard') admin = user_obj.read(1) wiz_id = admin['menu_id'][0] wiz_name = actwiz_obj.read(wiz_id)['wiz_name'] return self.create_wizard(dbname, wiz_name) def create_proxy(self, db, object, context=True): context = context and self.context or None return ProxyObj(object, db, self.credentials[db], context, self.oe_conn) def create_browse(self, db, object): BrowseFactory._client = self return BrowseFactory.get(db, object) def create_wizard(self, db, wizard_name): return WizardProxy(wizard_name, db, self.credentials[db], self.oe_conn, self) def create_view(self, db, view_id): """This method creates a View object. view_id is an ID defined in an xml file""" if not isinstance(view_id, basestring): raise TypeError module, view_name = view_id.split('.') (model, data_id) = self.get_object_reference(db, module, view_name) assert model == 'ir.ui.view' view_proxy = self.create_proxy(db, 'ir.ui.view') view_info = view_proxy.read(data_id) server_version = self.oe_conn.server_version() if server_version[0] == '5': view_info = view_info[0] return ViewFactory.get(self, db, view_info['model'], data_id) def login(self, db=None, user=None, password=None): """ Login phase, if no db, user, password, use environnement variable :param db: name of the database :param user: name of the user to identify :param password: user's password :return: user ID """ if db is None: db = os.environ.get('OERP_DATABASE', 'demo') user = user or os.environ.get('OERP_USERNAME', 'admin') password = password or os.environ.get('OERP_PASSWORD', 'admin') self.credentials[db]['login'] = user self.credentials[db]['password'] = password if 'uid' in self.credentials[db]: del self.credentials[db]['uid'] uid = self.execute(('common', 'login', db, user, password)) if uid: self.credentials[db]['uid'] = uid self.context.reload(db, uid, password) return bool(uid)