Merge branch 'master' of github.com:akhileshdarjee/erpnext

This commit is contained in:
Rushabh Mehta 2013-03-18 11:26:09 +05:30
commit f64407d363
3 changed files with 136 additions and 3 deletions

View File

@ -97,7 +97,6 @@ class DocType(SellingController):
return webnotes.conn.get_value('Sales Email Settings',None,'email_id')
def on_trash(self):
webnotes.conn.sql("""delete from tabCommunication where lead=%s""",
self.doc.name)
webnotes.conn.sql("""update tabCommunication set lead=null where lead=%s""", self.doc.name)
webnotes.conn.sql("""update `tabSupport Ticket` set lead='' where lead=%s""",
self.doc.name)

View File

@ -0,0 +1,134 @@
import httplib2
import sys
import os
import mimetypes
import webnotes
import oauth2client.client
from webnotes.utils import get_request_site_address, get_base_path
from webnotes import _, msgprint
from apiclient.discovery import build
from apiclient.http import MediaFileUpload
@webnotes.whitelist()
def get_gdrive_authorize_url():
from conf import client_id, client_secret, oauth_scope, redirect_url
flow = get_gdrive_flow()
authorize_url = flow.step1_get_authorize_url()
return_address = get_request_site_address(True) \
+ "?cmd=setup.doctype.backup_manager.backup_googledrive.gdrive_callback"
return {
"authorize_url": authorize_url,
}
@webnotes.whitelist(allow_guest=True)
def gdrive_callback(verification_code = None):
flow = get_gdrive_flow()
if verification_code:
credentials = flow.step2_exchange(verification_code)
allowed = 1
http = httplib2.Http()
http = credentials.authorize(http)
final_credentials = credentials.to_json()
drive_service = build('drive', 'v2', http=http)
erpnext_folder_id = create_erpnext_folder(drive_service)
database_folder_id = create_folder('database', drive_service, erpnext_folder_id)
files_folder_id = create_folder('files', drive_service, erpnext_folder_id)
webnotes.msgprint(_("Google Drive Access Approved."))
webnotes.conn.set_value("Backup Manager", "Backup Manager", "gdrive_access_allowed", allowed)
webnotes.conn.set_value("Backup Manager", "Backup Manager", "database_folder_id", database_folder_id)
webnotes.conn.set_value("Backup Manager", "Backup Manager", "files_folder_id", files_folder_id)
webnotes.conn.set_value("Backup Manager", "Backup Manager", "gdrive_credentials", final_credentials)
@webnotes.whitelist()
def upload_files(name, mimetype, service, folder_id):
if not webnotes.conn:
webnotes.connect()
file_name = os.path.basename(name)
media_body = MediaFileUpload(name, mimetype=mimetype, resumable=True)
body = {
'title': file_name,
'description': 'Backup File',
'mimetype': mimetype,
'parents': [{
'kind': 'drive#filelink',
'id': folder_id
}]
}
request = service.files().insert(body=body, media_body=media_body)
response = None
while response is None:
status, response = request.next_chunk()
def backup_to_gdrive():
from webnotes.utils.backups import new_backup
found_database = False
found_files = False
if not webnotes.conn:
webnotes.connect()
flow = get_gdrive_flow()
credentials_json = webnotes.conn.get_value("Backup Manager", None, "gdrive_credentials")
credentials = oauth2client.client.Credentials.new_from_json(credentials_json)
http = httplib2.Http()
http = credentials.authorize(http)
drive_service = build('drive', 'v2', http=http)
# upload database
backup = new_backup()
filename = os.path.basename(backup.backup_path_db)
# upload files to database folder
upload_files(filename, 'application/x-gzip', drive_service, webnotes.conn.get_value("Backup Manager", None, "database_folder_id"))
# upload files to files folder
path = os.path.join(get_base_path(),"public", "files")
for files in os.listdir(path):
filename = path + "/" + files
ext = filename.split('.')[-1]
size = os.path.getsize(filename)
if ext == 'gz' or ext == 'gzip':
mimetype = 'application/x-gzip'
else:
mimetype = mimetypes.types_map["." + ext]
#Compare Local File with Server File
param = {}
children = drive_service.children().list(folderId=webnotes.conn.get_value("Backup Manager", None, "files_folder_id"), **param).execute()
for child in children.get('items', []):
file = drive_service.files().get(fileId=child['id']).execute()
if files == file['title'] and size == int(file['fileSize']):
found_files = True
break
if not found_files:
upload_files(filename, mimetype, drive_service, webnotes.conn.get_value("Backup Manager", None, "files_folder_id"))
def get_gdrive_flow():
from oauth2client.client import OAuth2WebServerFlow
try:
from conf import client_id, client_secret, oauth_scope, redirect_url
except ImportError, e:
webnotes.msgprint(_("Please set Google Drive access keys in") + " conf.py",
raise_exception=True)
flow = OAuth2WebServerFlow(client_id, client_secret, oauth_scope, redirect_url)
return flow
def create_erpnext_folder(service):
if not webnotes.conn:
webnotes.connect()
erpnext = {
'title': 'erpnext',
'mimeType': 'application/vnd.google-apps.folder'
}
erpnext = service.files().insert(body=erpnext).execute()
return erpnext['id']
def create_folder(name, service, folder_id):
database = {
'title': name,
'mimeType': 'application/vnd.google-apps.folder',
'parents': [{
'kind': 'drive#fileLink',
'id': folder_id
}]
}
database = service.files().insert(body=database).execute()
return database['id']
if __name__=="__main__":
backup_to_gdrive()

View File

@ -2,7 +2,7 @@
{
"creation": "2013-03-15 11:06:59",
"docstatus": 0,
"modified": "2013-03-15 16:10:05",
"modified": "2013-03-15 17:27:33",
"modified_by": "Administrator",
"owner": "Administrator"
},