# odoorpc.db

Provide the `DB` class to manage the server databases.

class `odoorpc.db.``DB`(odoo)

  The DB class represents the database management service. It provides functionalities such as list, create, drop, dump and restore databases.

  Note

  This service have to be used through the `odoorpc.ODOO.db` property.

      >>> import odoorpc
      >>> odoo = odoorpc.ODOO('localhost')    # doctest: +SKIP
      >>> odoo.db
      <odoorpc.db.DB object at 0x...>

  `change_password`(password, new_password)

    Change the administrator password by new_password.

        >>> odoo.db.change_password('super_admin_passwd', 'new_admin_passwd') # doctest: +SKIP

    The super administrator password is required to perform this method.

    Python 2:

    Raise: | `odoorpc.error.RPCError` (access denied)
    Raise: | urllib2.URLError (connection error)

    Python 3:

    Raise: | `odoorpc.error.RPCError` (access denied)
    Raise: | urllib.error.URLError (connection error)

  `create`(password, db, demo=False, lang='en_US', admin_password='admin')

    Request the server to create a new database named db which will have admin_password as administrator password and localized with the lang parameter. You have to set the flag demo to True in order to insert demonstration data.

        >>> odoo.db.create('super_admin_passwd', 'prod', False, 'fr_FR', 'my_admin_passwd') # doctest: +SKIP

    If you get a timeout error, increase this one before performing the request:

        >>> timeout_backup = odoo.config['timeout']
        >>> odoo.config['timeout'] = 600    # Timeout set to 10 minutes
        >>> odoo.db.create('super_admin_passwd', 'prod', False, 'fr_FR', 'my_admin_passwd') # doctest: +SKIP
        >>> odoo.config['timeout'] = timeout_backup

    The super administrator password is required to perform this method.

    Python 2:

    Raise: | `odoorpc.error.RPCError` (access denied)
    Raise: | urllib2.URLError (connection error)

    Python 3:

    Raise: | `odoorpc.error.RPCError` (access denied)
    Raise: | urllib.error.URLError (connection error)

  `drop`(password, db)

    Drop the db database. Returns True if the database was removed, False otherwise (database did not exist):

        >>> odoo.db.drop('super_admin_passwd', 'test') # doctest: +SKIP
        True

    The super administrator password is required to perform this method.

    Python 2:

    Returns: | True or False
    Raise: | `odoorpc.error.RPCError` (access denied)
    Raise: | urllib2.URLError (connection error)

    Python 3:

    Returns: | True or False
    Raise: | `odoorpc.error.RPCError` (access denied)
    Raise: | urllib.error.URLError (connection error)

  `dump`(password, db, format_='zip')

    Backup the db database. Returns the dump as a binary ZIP file containing the SQL dump file alongside the filestore directory (if any).

        >>> dump = odoo.db.dump('super_admin_passwd', 'prod') # doctest: +SKIP

    If you get a timeout error, increase this one before performing the request:

        >>> timeout_backup = odoo.config['timeout']
        >>> odoo.config['timeout'] = 600    # Timeout set to 10 minutes
        >>> dump = odoo.db.dump('super_admin_passwd', 'prod')   # doctest: +SKIP
        >>> odoo.config['timeout'] = timeout_backup

    Write it on the file system:

        >>> with open('dump.zip', 'wb') as dump_zip:
        ...     dump_zip.write(dump.read())
        ...

    You can manipulate the file with the zipfile module for instance:

        >>> import zipfile
        >>> zipfile.ZipFile('dump.zip').namelist()
        ['dump.sql',
        'filestore/ef/ef2c882a36dbe90fc1e7e28d816ad1ac1464cfbb',
        'filestore/dc/dcf00aacce882bbfd117c0277e514f829b4c5bf0',
         ...]

    The super administrator password is required to perform this method.

    Python 2:

    Returns: | io.BytesIO
    Raise: | `odoorpc.error.RPCError` (access denied / wrong database)
    Raise: | urllib2.URLError (connection error)

    Python 3:

    Returns: | io.BytesIO
    Raise: | `odoorpc.error.RPCError` (access denied / wrong database)
    Raise: | urllib.error.URLError (connection error)

  `duplicate`(password, db, new_db)

    Duplicate db’ as `new_db.

        >>> odoo.db.duplicate('super_admin_passwd', 'prod', 'test') # doctest: +SKIP

    The super administrator password is required to perform this method.

    Python 2:

    Raise: | `odoorpc.error.RPCError` (access denied / wrong database)
    Raise: | urllib2.URLError (connection error)

    Python 3:

    Raise: | `odoorpc.error.RPCError` (access denied / wrong database)
    Raise: | urllib.error.URLError (connection error)

  `list`()

    Return the list of the databases:

        >>> odoo.db.list() # doctest: +SKIP
        ['prod', 'test']

    Python 2:

    Returns: | list of database names
    Raise: | urllib2.URLError (connection error)

    Python 3:

    Returns: | list of database names
    Raise: | urllib.error.URLError (connection error)

  `restore`(password, db, dump, copy=False)

    Restore the dump database into the new db database. The dump file object can be obtained with the `dump` method. If copy is set to True, the restored database will have a new UUID.

        >>> odoo.db.restore('super_admin_passwd', 'test', dump_file) # doctest: +SKIP

    If you get a timeout error, increase this one before performing the request:

        >>> timeout_backup = odoo.config['timeout']
        >>> odoo.config['timeout'] = 7200   # Timeout set to 2 hours
        >>> odoo.db.restore('super_admin_passwd', 'test', dump_file) # doctest: +SKIP
        >>> odoo.config['timeout'] = timeout_backup

    The super administrator password is required to perform this method.

    Python 2:

    Raise: | `odoorpc.error.RPCError` (access denied / database already exists)
    Raise: | `odoorpc.error.InternalError` (dump file closed)
    Raise: | urllib2.URLError (connection error)

    Python 3:

    Raise: | `odoorpc.error.RPCError` (access denied / database already exists)
    Raise: | `odoorpc.error.InternalError` (dump file closed)
    Raise: | urllib.error.URLError (connection error)