summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog21
-rw-r--r--__pkginfo__.py2
-rw-r--r--adbh.py73
-rw-r--r--debian/changelog6
-rw-r--r--decorators.py2
-rw-r--r--deprecation.py4
6 files changed, 72 insertions, 36 deletions
diff --git a/ChangeLog b/ChangeLog
index 34f3f58..975947b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,18 +1,37 @@
ChangeLog for logilab.common
============================
- --
+2010-02-26 -- 0.48.1
+ * adbh: added dbport optional argument to [backup|restore]_commands
+
+ * db: fix date processing for SQLServer 2005
+
+ * testlib: improve XML assertion by using ElementTree parser and a new 'context' lines argument
+
+
+
+2010-02-17 -- 0.48.0
+ * date: fixed mx date time compat for date_range (#20651)
+
+ * testlib: generative test should not be interrupted by self.skip() (#20648)
+
+
+
+2010-02-10 -- 0.47.0
* adbh: changed backup / restore api (BREAKS COMPAT):
- backup_command is now backup_commands (eg return a list of commands)
- each command returned in backup_commands/restore_commands may now
be list that may be used as argument to subprocess.call, or a string
which will the requires a subshell
- new sql_rename_col method
+
* deprecation: deprecated now takes an optional 'stacklevel' argument, default to 2
+
* date: some functions to ease python's datetime module usage have been backported
from cubicweb
+
2009-12-23 -- 0.46.0
* db / adbh: added SQL Server support using Pyodbc
diff --git a/__pkginfo__.py b/__pkginfo__.py
index bebbf58..c5ba9d2 100644
--- a/__pkginfo__.py
+++ b/__pkginfo__.py
@@ -8,7 +8,7 @@ __docformat__ = "restructuredtext en"
distname = 'logilab-common'
modname = 'common'
-numversion = (0, 48, 0)
+numversion = (0, 48, 1)
version = '.'.join([str(num) for num in numversion])
copyright = '2000-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.'
license = 'GPL'
diff --git a/adbh.py b/adbh.py
index d6cce13..a5c6e03 100644
--- a/adbh.py
+++ b/adbh.py
@@ -168,7 +168,7 @@ class _GenericAdvFuncHelper:
raise NotImplementedError('not supported by this DBMS')
def backup_commands(self, dbname, dbhost, dbuser, backupfile,
- keepownership=True):
+ keepownership=True, dbport=None):
"""return a list of commands to backup the given database.
Each command may be given as a list or as a string. In the latter case,
@@ -178,7 +178,8 @@ class _GenericAdvFuncHelper:
raise NotImplementedError('not supported by this DBMS')
def restore_commands(self, dbname, dbhost, dbuser, backupfile,
- encoding='utf-8', keepownership=True, drop=True):
+ encoding='utf-8', keepownership=True, drop=True,
+ dbport=None):
"""return a list of commands to restore a backup of the given database
@@ -309,11 +310,13 @@ INSERT INTO %s VALUES (0);''' % (seq_name, seq_name)
-def pgdbcmd(cmd, dbhost, dbuser, *args):
+def pgdbcmd(cmd, dbhost, dbport, dbuser, *args):
cmd = [cmd]
cmd += args
if dbhost:
cmd.append('--host=%s' % dbhost)
+ if dbport:
+ cmd.append('--port=%s' % dbport)
if dbuser:
cmd.append('--username=%s' % dbuser)
return cmd
@@ -331,12 +334,8 @@ class _PGAdvFuncHelper(_GenericAdvFuncHelper):
return 'template1'
def backup_commands(self, dbname, dbhost, dbuser, backupfile,
- keepownership=True):
- cmd = ['pg_dump', '-Fc']
- if dbhost:
- cmd.append('--host=%s' % dbhost)
- if dbuser:
- cmd.append('--username=%s' % dbuser)
+ keepownership=True, dbport=None):
+ cmd = pgdbcmd('pg_dump', dbhost, dbport, dbuser, '-Fc')
if not keepownership:
cmd.append('--no-owner')
cmd.append('--file')
@@ -345,16 +344,17 @@ class _PGAdvFuncHelper(_GenericAdvFuncHelper):
return [cmd]
def restore_commands(self, dbname, dbhost, dbuser, backupfile,
- encoding='utf-8', keepownership=True, drop=True):
+ encoding='utf-8', keepownership=True, drop=True,
+ dbport=None):
cmds = []
if drop:
- cmd = pgdbcmd('dropdb', dbhost, dbuser)
+ cmd = pgdbcmd('dropdb', dbhost, dbport, dbuser)
cmd.append(dbname)
cmds.append(cmd)
- cmd = pgdbcmd('createdb', dbhost, dbuser, '-T', 'template0', '-E', encoding)
+ cmd = pgdbcmd('createdb', dbhost, dbport, dbuser, '-T', 'template0', '-E', encoding)
cmd.append(dbname)
cmds.append(cmd)
- cmd = pgdbcmd('pg_restore', dbhost, dbuser, '-Fc')
+ cmd = pgdbcmd('pg_restore', dbhost, dbport, dbuser, '-Fc')
cmd.append('--dbname')
cmd.append(dbname)
if not keepownership:
@@ -441,11 +441,12 @@ class _SqliteAdvFuncHelper(_GenericAdvFuncHelper):
alter_column_support = False
def backup_commands(self, dbname, dbhost, dbuser, backupfile,
- keepownership=True):
+ keepownership=True, dbport=None):
return [['gzip', dbname], ['mv', dbname + '.gz', backupfile]]
def restore_commands(self, dbname, dbhost, dbuser, backupfile,
- encoding='utf-8', keepownership=True, drop=True):
+ encoding='utf-8', keepownership=True, drop=True,
+ dbport=None):
gunziped, ext = os.pathsplitext(backupfile)
assert ext.lower() in ('.gz', '.z') # else gunzip will fail anyway
return [['gunzip', backupfile], ['mv', gunziped, dbname]]
@@ -475,6 +476,17 @@ class _SqliteAdvFuncHelper(_GenericAdvFuncHelper):
return [r[0] for r in cursor.fetchall()]
+def mycmd(cmd, dbhost, dbport, dbuser):
+ cmd = [cmd]
+ # XXX compress
+ if dbhost is not None:
+ cmd += ('-h', dbhost)
+ if dbport is not None:
+ cmd += ('-P', str(dbport))
+ cmd += ('-u', dbuser)
+ return cmd
+
+
class _MyAdvFuncHelper(_GenericAdvFuncHelper):
"""MySQL helper, taking advantage of postgres SEQUENCE support
"""
@@ -497,28 +509,24 @@ class _MyAdvFuncHelper(_GenericAdvFuncHelper):
return ''
def backup_commands(self, dbname, dbhost, dbuser, backupfile,
- keepownership=True):
- cmd = ['mysqldump']
- # XXX compress
- if dbhost is not None:
- cmd += ('-h', dbhost)
- cmd += ('-u', dbuser, '-p', '-r', backupfile, dbname)
+ keepownership=True, dbport=None):
+ cmd = mycmd('mysqldump', dbhost, dbport, dbuser)
+ cmd += ('-p', '-r', backupfile, dbname)
return [cmd]
def restore_commands(self, dbname, dbhost, dbuser, backupfile,
- encoding='utf-8', keepownership=True, drop=True):
+ encoding='utf-8', keepownership=True, drop=True,
+ dbport=None):
cmds = []
- host_option = ''
- if dbhost is not None:
- host_option = '-h %s' % dbhost
+ mysqlcmd = ' '.join(mycmd('mysql', dbhost, dbport, dbuser))
if drop:
- cmd = 'echo "DROP DATABASE %s;" | mysql %s -u %s -p' % (
- dbname, host_option, dbuser)
+ cmd = 'echo "DROP DATABASE %s;" | %s -p' % (
+ dbname, mysqlcmd)
cmds.append(cmd)
- cmd = 'echo "%s;" | mysql %s -u %s -p' % (
- self.sql_create_database(dbname, encoding), host_option, dbuser)
+ cmd = 'echo "%s;" | %s -p' % (
+ self.sql_create_database(dbname, encoding), mysqlcmd)
cmds.append(cmd)
- cmd = 'mysql %s -u %s -p %s < %s' % (host_option, dbuser, dbname, backupfile)
+ cmd = '%s -p %s < %s' % (mysqlcmd, dbname, backupfile)
cmds.append(cmd)
return cmds
@@ -621,13 +629,14 @@ class _SqlServer2005FuncHelper(_GenericAdvFuncHelper):
return StringIO.StringIO(value)
def backup_commands(self, dbname, dbhost, dbuser, backupfile,
- keepownership=True):
+ keepownership=True, dbport=None):
return [[sys.executable, os.path.normpath(__file__),
"_SqlServer2005FuncHelper._do_backup", dbhost, dbname, backupfile]
]
def restore_commands(self, dbname, dbhost, dbuser, backupfile,
- encoding='utf-8', keepownership=True, drop=True):
+ encoding='utf-8', keepownership=True, drop=True,
+ dbport=None):
return [[sys.executable, os.path.normpath(__file__),
"_SqlServer2005FuncHelper._do_restore", dbhost, dbname, backupfile],
]
diff --git a/debian/changelog b/debian/changelog
index 668f0e4..4965465 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+logilab-common (0.48.1-1) unstable; urgency=low
+
+ * new upstream release
+
+ -- Sylvain Thénault <sylvain.thenault@logilab.fr> Fri, 26 Feb 2010 07:12:06 +0100
+
logilab-common (0.48.0-1) unstable; urgency=low
* new upstream release
diff --git a/decorators.py b/decorators.py
index f5278cc..b656be6 100644
--- a/decorators.py
+++ b/decorators.py
@@ -1,6 +1,6 @@
"""A few useful function/method decorators.
-:copyright: 2006-2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+:copyright: 2006-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
:license: General Public License version 2 - http://www.gnu.org/licenses
"""
diff --git a/deprecation.py b/deprecation.py
index d6cd86c..587a651 100644
--- a/deprecation.py
+++ b/deprecation.py
@@ -1,6 +1,6 @@
"""Deprecation utilities.
-:copyright: 2006-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+:copyright: 2006-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
:license: General Public License version 2 - http://www.gnu.org/licenses
"""
@@ -69,6 +69,8 @@ def deprecated(reason=None, stacklevel=2):
def wrapped(*args, **kwargs):
warn(message, DeprecationWarning, stacklevel=stacklevel)
return func(*args, **kwargs)
+ wrapped.__name__ = func.__name__
+ wrapped.__doc__ = func.__doc__
return wrapped
return deprecated_decorator