Skip to content

Commit

Permalink
[REF] service.db.{dump_db,restore_db} + tests import style
Browse files Browse the repository at this point in the history
  • Loading branch information
katyukha committed Oct 1, 2015
1 parent 82476d8 commit c42c045
Show file tree
Hide file tree
Showing 15 changed files with 59 additions and 70 deletions.
4 changes: 2 additions & 2 deletions CHANGELOG.rst
@@ -1,8 +1,8 @@
dev:
- DB service little bit refactored.
added methods:
- dump_db: wrapper around ``db.dump`` server method. automaticaly performs base64 decoding
- restore_db: wrapper around ``db.restore`` server methods. automaticaly base64 encode file before sending
- dump_db: wrapper around ``db.dump`` server method.
- restore_db: wrapper around ``db.restore`` server methods.

0.6:
- *Backward incompatible*: Changed session file format.
Expand Down
2 changes: 1 addition & 1 deletion examples/Examples & HTML tests.ipynb
Expand Up @@ -1029,7 +1029,7 @@
"}\n",
"\n",
"# Display as table.\n",
"# Note that prefetch method is used to fetch some set of fields via one RPC call.\n",
"# Note that prefetch method is used to fetch some set of fields with less RPC call.\n",
"# on big datasets it may speed up performance signifiantly.\n",
"# Each RecordList instance have related cache, which reduce need of reading data on each field get.\n",
"so_list.prefetch('id', 'name', 'partner_id', 'partner_id.email', 'state')\n",
Expand Down
2 changes: 1 addition & 1 deletion openerp_proxy/core.py
Expand Up @@ -183,7 +183,7 @@ def user(self):
def server_version(self):
""" Server version
:rtype: str
(Already parsed with pkg_resources.parse_version)
"""
return self.services.db.server_version()

Expand Down
30 changes: 11 additions & 19 deletions openerp_proxy/service/db.py
@@ -1,9 +1,8 @@
import six
import time
import base64
from pkg_resources import parse_version

from openerp_proxy.service.service import ServiceBase
from ..service.service import ServiceBase

__all__ = ('DBService',)

Expand Down Expand Up @@ -85,45 +84,38 @@ def dump_db(self, password, db, **kwargs):
:param str password: super admin password
:param str|Client db: name of database or *Client* instance
with *client.dbname is not None* name secified
:param str fpath: path to file to save dbdump in (default: None)
:param str format: (only odoo 9.0) (default: zip)
:raise: `ValueError` (unsupported value of *db* argument)
:return: bytestring with laready base64 decoded data
:rtype: bytes
"""
fpath = kwargs.get('fpath', None)

# format argument available only for odoo version 9.0
if self.server_version() >= parse_version('9.0'):
args = [kwargs.get('format', 'zip')]
else:
args = []

dump_data = self.dump(password, to_dbname(db), *args)
dump_data = base64.b64decode(dump_data.encode())
if fpath:
with open(fpath, 'wb') as f:
f.write(dump_data)
dump_data = self.dump(password, to_dbname(db), *args).encode()

return dump_data

def restore_db(self, password, dbname, fpath, **kwargs):
def restore_db(self, password, dbname, data, **kwargs):
""" Restore database
:param str password: super admin password
:param str dbname: name of database
:param str fpath: path to file that contains dbdump
:param bytes data: restore data (base64 encoded string)
:param bool copy: (only odoo 8.0)if set to True, then new dbuid will be generated. (default: False)
:return: True
:rtype: bool
"""
with open(fpath, 'rb') as f:
if self.server_version() >= parse_version('8.0') and 'copy' in kwargs:
args = [kwargs['copy']]
else:
args = []
data = base64.b64encode(f.read()).decode()
return self.restore(password, dbname, data, *args)
assert isinstance(data, bytes), "data must be instance of bytes"
if self.server_version() >= parse_version('8.0') and 'copy' in kwargs:
args = [kwargs['copy']]
else:
args = []

return self.restore(password, dbname, data.decode(), *args)

def server_version(self):
""" Returns server version.
Expand Down
1 change: 1 addition & 0 deletions openerp_proxy/tests/__init__.py
Expand Up @@ -27,6 +27,7 @@ def setUp(self):
import openerp_proxy.ext.all

self.test_db_service = os.environ.get('TEST_DB_SERVICE', False)
self.recreate_db = os.environ.get('RECREATE_DB', False)

if six.PY3:
def assertItemsEqual(self, *args, **kwargs):
Expand Down
2 changes: 2 additions & 0 deletions openerp_proxy/tests/ext/__init__.py
Expand Up @@ -3,6 +3,8 @@
#import os
#from openerp_proxy.tests.test_sugar import *
##from openerp_proxy.tests import BaseTestCase
#from .. import BaseTestCase
#from ... import Client


##@unittest.skipUnless(os.environ.get('TEST_WITH_EXTENSIONS', False), 'requires tests enabled')
Expand Down
10 changes: 5 additions & 5 deletions openerp_proxy/tests/ext/test_sugar.py
Expand Up @@ -6,11 +6,11 @@
except ImportError:
import mock

from openerp_proxy.tests import BaseTestCase
from openerp_proxy.core import Client
from openerp_proxy.orm.record import (Record,
RecordList)
from openerp_proxy.orm.object import Object
from .. import BaseTestCase
from ... import Client
from ...orm import (Record,
RecordList,
Object)


@unittest.skipUnless(os.environ.get('TEST_WITH_EXTENSIONS', False), 'requires extensions enabled')
Expand Down
8 changes: 4 additions & 4 deletions openerp_proxy/tests/ext/test_workflow.py
Expand Up @@ -6,10 +6,10 @@
except ImportError:
import mock

from openerp_proxy.tests import BaseTestCase
from openerp_proxy.core import Client
from openerp_proxy.orm.record import (Record,
RecordList)
from ...tests import BaseTestCase
from ... import Client
from ...orm import (Record,
RecordList)


@unittest.skipUnless(os.environ.get('TEST_WITH_EXTENSIONS', False), 'requires extensions enabled')
Expand Down
10 changes: 5 additions & 5 deletions openerp_proxy/tests/test_client.py
@@ -1,11 +1,11 @@
from pkg_resources import parse_version

from . import BaseTestCase
from openerp_proxy.core import Client
from openerp_proxy.orm.object import Object
from openerp_proxy.orm.record import Record
from openerp_proxy.service.service import ServiceManager
from openerp_proxy.plugin import Plugin
from ..core import Client
from ..orm.object import Object
from ..orm.record import Record
from ..service.service import ServiceManager
from ..plugin import Plugin


class Test_10_Client(BaseTestCase):
Expand Down
12 changes: 8 additions & 4 deletions openerp_proxy/tests/test_connection.py
@@ -1,7 +1,7 @@
from . import BaseTestCase
from openerp_proxy.core import Client
from openerp_proxy.exceptions import LoginException
from openerp_proxy.connection import get_connector_names
from ..core import Client
from ..exceptions import LoginException
from ..connection import get_connector_names


class Test_00_Connection(BaseTestCase):
Expand All @@ -27,7 +27,11 @@ def test_01_create_db(self):
client = self.client
if self.env.dbname in client.services.db.list_db():
self.assertIn(self.env.dbname, client.services.db)
return self.skipTest("Database already created")

if self.recreate_db:
client.services.db.drop_db(self.env.super_password, self.env.dbname)
else:
return self.skipTest("Database already created")

self.assertNotIn(self.env.dbname, client.services.db)

Expand Down
16 changes: 4 additions & 12 deletions openerp_proxy/tests/test_db.py
@@ -1,5 +1,5 @@
from . import BaseTestCase
from openerp_proxy.core import Client
from ..core import Client


import os
Expand All @@ -16,33 +16,25 @@ def setUp(self):
self.client = Client(self.env.host, protocol=self.env.protocol, port=self.env.port)

def test_00_dump_drop_restore(self):
fpath = 'tmp-db-dump.backup'

# create database if it was not created yet
if self.env.dbname not in self.client.services.db.list_db():
self.client.services.db.create_db(self.env.super_password, self.env.dbname, demo=True, admin_password=self.env.password)

# dump db
dump_data = self.client.services.db.dump_db(self.env.super_password, self.env.dbname, fpath=fpath)
self.assertTrue(os.path.exists(fpath))

# test that rturned data and data written to file are the same
with open(fpath, 'rb') as f:
self.assertEqual(f.read(), dump_data)
dump_data = self.client.services.db.dump_db(self.env.super_password, self.env.dbname)
self.assertIsInstance(dump_data, bytes)

# drop it
self.client.services.db.drop_db(self.env.super_password, self.env.dbname)
self.assertNotIn(self.env.dbname, self.client.services.db)

# and try to restore it
#time.sleep(1)
self.client.services.db.restore_db(self.env.super_password, self.env.dbname, fpath)
self.client.services.db.restore_db(self.env.super_password, self.env.dbname, dump_data)
self.assertIn(self.env.dbname, self.client.services.db)

# check if objects were restored
time.sleep(2)
cl = self.client.login(self.env.dbname, self.env.user, self.env.password)
self.assertIsNotNone(cl.uid)
self.assertIsNotNone(cl.user)

os.unlink(fpath)
14 changes: 7 additions & 7 deletions openerp_proxy/tests/test_orm.py
@@ -1,11 +1,11 @@
from . import BaseTestCase
from openerp_proxy.core import Client
from openerp_proxy.orm.record import (Record,
RecordList,
get_record_list)
from openerp_proxy.orm.cache import (empty_cache,
ObjectCache)
from openerp_proxy.exceptions import ConnectorError
from ..core import Client
from ..orm.record import (Record,
RecordList,
get_record_list)
from ..orm.cache import (empty_cache,
ObjectCache)
from ..exceptions import ConnectorError

try:
import unittest.mock as mock
Expand Down
9 changes: 2 additions & 7 deletions openerp_proxy/tests/test_plugins.py
@@ -1,8 +1,6 @@
from . import BaseTestCase
from openerp_proxy.core import Client
from openerp_proxy.orm.record import Record
from openerp_proxy.orm.record import RecordList
from openerp_proxy.exceptions import ConnectorError
from .. import Client
from ..orm import Record

import unittest

Expand All @@ -11,9 +9,6 @@
except ImportError:
import mock

import numbers
import collections


class Test_25_Plugin_ModuleUtils(BaseTestCase):

Expand Down
4 changes: 2 additions & 2 deletions openerp_proxy/tests/test_session.py
@@ -1,6 +1,6 @@
from . import BaseTestCase
from openerp_proxy.core import Client
from openerp_proxy.session import Session
from .. import (Client,
Session)

try:
import unittest.mock as mock
Expand Down
5 changes: 4 additions & 1 deletion run_tests.bash
Expand Up @@ -15,7 +15,7 @@ SCRIPTPATH=`dirname "$SCRIPT"` # directory that contains this script
usage="
Usage:
run_tests.bash [--py-version v1] [--py-version v2] [--with-extensions] [--with-db] [--test-module <module>]
run_tests.bash [--py-version v1] [--py-version v2] [--with-extensions] [--with-db] [--recreate-db] [--test-module <module>]
"

Expand All @@ -39,6 +39,9 @@ do
--with-db)
export TEST_DB_SERVICE=1;
;;
--recreate-db)
export RECREATE_DB=1;
;;
--test-module)
TEST_MODULE="$2";
shift;
Expand Down

0 comments on commit c42c045

Please sign in to comment.