diff --git a/database_tools/models/database.py b/database_tools/models/database.py
index 7b63222..bb4243e 100644
--- a/database_tools/models/database.py
+++ b/database_tools/models/database.py
@@ -1,7 +1,6 @@
# -*- encoding: utf-8 -*-
import os
import shutil
-import base64
from datetime import datetime
from datetime import date
from openerp import fields, models, api, _, modules
@@ -70,6 +69,13 @@ def _get_preserve_rules(self):
default='daily',
required=True,
)
+ backup_format = fields.Selection([
+ ('zip', 'zip (With Filestore)'),
+ ('pg_dump', 'pg_dump (Without Filestore)')],
+ 'Backup Format',
+ default='pg_dump',
+ required=True,
+ )
backup_interval = fields.Integer(
string='Repeat Every',
default=1,
@@ -172,7 +178,12 @@ def cron_database_backup(self):
])
# make bakcup
- databases.database_backup('automatic')
+ # we make a loop to commit after each backup
+ for database in databases:
+ database.database_backup(
+ 'automatic',
+ backup_format=self.backup_format)
+ database._cr.commit()
# clean databases
databases = self.search([])
@@ -251,11 +262,11 @@ def database_backup_clean(self, bu_type=None):
def action_database_backup(self):
"""Action to be call from buttons"""
_logger.info('Action database backup called manually')
- res = self.database_backup('manual')
+ res = self.database_backup('manual', backup_format=self.backup_format)
return res
@api.multi
- def database_backup(self, bu_type):
+ def database_backup(self, bu_type, backup_format='zip'):
"""Returns a dictionary where:
* keys = database name
* value = dictionary with:
@@ -288,15 +299,20 @@ def database_backup(self, bu_type):
%s" % (database.backups_path, e)
_logger.warning(error)
else:
- backup_name = '%s_%s_%s.zip' % (
- database.name, bu_type, now.strftime('%Y%m%d_%H%M%S'))
+ backup_name = '%s_%s_%s.%s' % (
+ database.name,
+ bu_type,
+ now.strftime('%Y%m%d_%H%M%S'),
+ backup_format)
backup_path = os.path.join(
database.backups_path, backup_name)
backup = open(backup_path, 'wb')
# backup
try:
- backup.write(base64.b64decode(
- db_ws.exp_dump(database.name)))
+ db_ws.dump_db(
+ database.name,
+ backup,
+ backup_format=backup_format)
except:
error = 'Unable to dump Database.\
If you are working in an instance with\
@@ -345,7 +361,7 @@ def database_backup(self, bu_type):
try:
syncked_backup = os.path.join(
database.syncked_backup_path,
- self.name + '.zip')
+ self.name + '.%s' % backup_format)
shutil.copy2(backup_path, syncked_backup)
except Exception, e:
error = "Could not copy into syncked folder.\
diff --git a/database_tools/views/database_view.xml b/database_tools/views/database_view.xml
index 7065710..1857ca6 100644
--- a/database_tools/views/database_view.xml
+++ b/database_tools/views/database_view.xml
@@ -45,6 +45,7 @@
+