Example #1
0
 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)
Example #2
0
 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)
Example #3
0
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)
Example #4
0
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)