from twisted.internet import utils
import gzip
from StringIO import StringIO
def dump( dbname, user=None, pswd=None ):
args = []
if user: args.append( '-u'+user )
if pswd: args.append( '-p'+pswd )
args.append( dbname )
dfr = utils.getProcessOutput( 'mysqldump', args )
return dfr
def gzipsave( s, name ):
gzf = gzip.GzipFile( name, 'wb' )
gzf.write( s )
gzf.close()
return gzf
def gzipstring( s ):
fd = StringIO()
gzf = gzip.GzipFile( None, 'wb', 9, fd )
gzf.write( s )
gzf.close()
gzs = fd.getvalue()
fd.close()
return gzs
def backup( fname, dbname, user=None, pswd=None ):
dfr = dump( dbname, user, pswd )
if fname: dfr.addCallback( gzipsave, fname )
else: dfr.addCallback( gzipstring )
return dfr
def db_backup( dbp, fname=None ):
dfr = dump( dbp.connkw['db'], dbp.connkw['user'], dbp.connkw['passwd'] )
if fname: dfr.addCallback( gzipsave, fname )
else: dfr.addCallback( gzipstring )
return dfr