Okay thanks that is much neater.
Peter

On Monday, 29 October 2012 11:47:57 UTC, Niphlod wrote:
>
> ps: don't use os.getcwd() + '/applications/' + request.application . Use 
> request.folder.
>
> On Monday, October 29, 2012 12:08:27 PM UTC+1, peter wrote:
>>
>> I thought I would share some routines I find useful for backing up sqlite 
>> to dropbox I believe safely.
>>
>> The nice thing about backing up to dropbox, is that the backup ends up on 
>> your local machine and so can be backed up more safely from there.
>>
>> First execute 'setup_dropbox'. This should only need to be done once per 
>> application.
>> Then run copy_to_backup
>> and finally backup_to_dropbox
>>
>>
>> This copies storage.sqlite in what I believe is a safe way, it is easy to 
>> get a corrupted fileif you do not do it right like below. The file is 
>> copied to a backup directory
>>
>> def copy_database():
>>     import os, sqlite3, shutil, time
>>     
>> source=os.getcwd()+'/applications/'+request.application+'/databases/storage.sqlite'
>>     target_dir=os.getcwd()+'/applications/'+request.application+'/backup'
>>     db = sqlite3.connect (source)
>>     backupfile = os.path.join (target_dir, os.path.basename(source) + 
>> time.strftime(".%Y%m%d-%H%M") )
>>     cur = db.cursor ()
>>     cur.execute ('begin immediate')
>>     shutil.copyfile (source, backupfile)
>>     db.rollback()
>>     return dict()
>>
>>
>> This routines zips files except any ending in '.sqlite', and copies them 
>> to the target directory
>> def do_zip_except_sqlite(target_dir, file_name):
>>     import os, zipfile
>>     zip = zipfile.ZipFile(file_name, 'w', zipfile.ZIP_DEFLATED)
>>     rootlen = len(target_dir) + 1
>>     print rootlen
>>     for base, dirs, files in os.walk(target_dir):
>>         print dir
>>         for file in files:
>>             if file.find('.sqlite',len(file)-7) ==-1:
>>                 fn = os.path.join(base, file)
>>                 zip.write(fn, fn[rootlen:])
>>     zip.close()
>>     return dict()
>>
>> This uses both routines to copy the database files to the backup 
>> directory. It time stamps their names.
>> def copy_to_backup():
>>     import os, time
>>     base='applications/'+request.application
>>     backupfile = os.path.join (base, 'backup/databases.zip' + 
>> time.strftime(".%Y%m%d-%H%M") )
>>     do_zip_except_sqlite(os.path.join(base,'databases'),backupfile)
>>     copy_database()
>>     return dict()
>>
>> This copies files from backup folder to dropbox..
>>
>> It assumes the dropbox access token has been written to the file
>>
>> applications/my_app/dropbox_token.txt
>>
>> Writing it to this file means that permission only has to be given once 
>> per application. This seems appropriate for backing up.
>>
>> def backup_to_dropbox():
>>     import os, zipfile
>>     from gluon import current
>>     from dropbox import client, rest, session
>>     token=current.session.token
>>     
>>     
>>     # Get your app key and secret from the Dropbox developer website
>>     APP_KEY = 'put_your_key_here'
>>     APP_SECRET = 'put_your_secret_here'
>>     
>>     ACCESS_TYPE = 'app_folder'
>>     token_file = 'applications/'+request.application+'/dropbox_token.txt'
>>     token_file = open(token_file)
>>     token_key,token_secret = token_file.read().split('|')
>>     token_file.close()
>>     
>>     sess = session.DropboxSession(APP_KEY,APP_SECRET, ACCESS_TYPE )
>>     sess.set_token(token_key,token_secret)
>>     client = client.DropboxClient(sess)
>>     
>>     target_dir = 'applications/'+request.application+'/backup'
>>     rootlen = len(target_dir) + 1
>>     for base, dirs, files in os.walk(target_dir):
>>         for file in files:
>>             f = open(target_dir+'/'+file)
>>             client.put_file('f1/'+file,f)
>>             f.close()
>>             
>>     return dict()
>>
>>
>> To setup dropbox you need two routines. One to do the initial setting up, 
>> and one to 'redirect' to after the permission has been granted.
>>
>> def setup_dropbox():
>>     from gluon import current
>>     # Include the Dropbox SDK libraries
>>     from dropbox import client, rest, session
>>     # Get your app key and secret from the Dropbox developer website
>>     APP_KEY = 'put_your_key_here'
>>     APP_SECRET ='put_your_secret_here'
>>     
>>     ACCESS_TYPE = 'app_folder'
>>     
>>     sess = session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE)
>>     
>>     request_token = sess.obtain_request_token()
>>       
>>     url = sess.build_authorize_url(request_token, 
>> URL('finish_setup_dropbox', scheme=True, host=True))
>>     current.session.token=(request_token.key,request_token.secret)
>>     TOKENS = 'applications/'+request.application+'/dropbox_tokenr.txt'
>>     token_file = open(TOKENS,'w')
>>     token_file.write("%s|%s" % (request_token.key,request_token.secret) )
>>     token_file.close()
>>     redirect(url)
>>     return
>>
>>
>> This routine catches the redirection after the permission has been given
>> def finish_setup_dropbox():
>>     from dropbox import client, rest, session
>>     APP_KEY = 'put_your_key_here'
>>     APP_SECRET = 'put_your_secret_here'
>>     
>>     ACCESS_TYPE = 'app_folder'
>>     sess = session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE)
>>     request_token = sess.obtain_request_token()
>>     
>>     TOKENS = 'applications/'+request.application+'/dropbox_tokenr.txt'
>>     token_file = open(TOKENS)
>>     request_token.key,request_token.secret = token_file.read().split('|')
>>     token_file.close()
>>     access_token = sess.obtain_access_token(request_token)
>>     TOKENS = 'applications/'+request.application+'/dropbox_token.txt'
>>     token_file = open(TOKENS,'w')
>>     token_file.write("%s|%s" % (access_token.key,access_token.secret) )
>>     token_file.close()
>>     client = client.DropboxClient(sess)
>> #    print "linked account:", client.account_info()
>>    return
>>
>>
>>

-- 



Reply via email to