diff options
-rw-r--r-- | ChangeLog | 21 | ||||
-rw-r--r-- | __pkginfo__.py | 2 | ||||
-rw-r--r-- | adbh.py | 73 | ||||
-rw-r--r-- | debian/changelog | 6 | ||||
-rw-r--r-- | decorators.py | 2 | ||||
-rw-r--r-- | deprecation.py | 4 |
6 files changed, 72 insertions, 36 deletions
@@ -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' @@ -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 |