Merge branch 'master' of github.com:akhileshdarjee/erpnext
diff --git a/setup/doctype/backup_manager/backup_dropbox.py b/setup/doctype/backup_manager/backup_dropbox.py
index 3b0857f..6cdae7a 100644
--- a/setup/doctype/backup_manager/backup_dropbox.py
+++ b/setup/doctype/backup_manager/backup_dropbox.py
@@ -1,6 +1,7 @@
import os
import webnotes
-from webnotes.utils import get_request_site_address
+from webnotes.utils import get_request_site_address, get_base_path
+from webnotes import _
@webnotes.whitelist()
def get_dropbox_authorize_url():
@@ -10,7 +11,7 @@
+ "?cmd=setup.doctype.backup_manager.backup_dropbox.dropbox_callback"
url = sess.build_authorize_url(request_token, return_address)
-
+
return {
"url": url,
"key": request_token.key,
@@ -19,43 +20,43 @@
@webnotes.whitelist(allow_guest=True)
def dropbox_callback(oauth_token=None, not_approved=False):
+ from dropbox import client
if not not_approved:
if webnotes.conn.get_value("Backup Manager", None, "dropbox_access_key")==oauth_token:
- webnotes.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_allowed", 1)
+ allowed = 1
message = "Dropbox access allowed."
sess = get_dropbox_session()
sess.set_request_token(webnotes.conn.get_value("Backup Manager", None, "dropbox_access_key"),
webnotes.conn.get_value("Backup Manager", None, "dropbox_access_secret"))
access_token = sess.obtain_access_token()
+ webnotes.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_key", access_token.key)
+ webnotes.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_secret", access_token.secret)
+ webnotes.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_allowed", allowed)
+ dropbox_client = client.DropboxClient(sess)
+ dropbox_client.file_create_folder("files")
- webnotes.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_key",
- access_token.key)
- webnotes.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_secret",
- access_token.secret)
-
else:
- webnotes.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_allowed", 0)
+ allowed = 0
message = "Illegal Access Token Please try again."
else:
- webnotes.conn.set_value("Backup Manager", "Backup Manager", "dropbox_access_allowed", 0)
+ allowed = 0
message = "Dropbox Access not approved."
-
+
webnotes.message_title = "Dropbox Approval"
webnotes.message = "<h3>%s</h3><p>Please close this window.</p>" % message
-
+
webnotes.conn.commit()
webnotes.response['type'] = 'page'
webnotes.response['page_name'] = 'message.html'
def backup_to_dropbox():
- from dropbox import client, session
+ from dropbox import client, session, rest
from conf import dropbox_access_key, dropbox_secret_key
from webnotes.utils.backups import new_backup
if not webnotes.conn:
webnotes.connect()
-
sess = session.DropboxSession(dropbox_access_key, dropbox_secret_key, "app_folder")
sess.set_token(webnotes.conn.get_value("Backup Manager", None, "dropbox_access_key"),
@@ -68,21 +69,19 @@
filename = backup.backup_path_db
upload_file_to_dropbox(filename, "database", dropbox_client)
- # upload files
- response = dropbox_client.metadata("files")
+ response = dropbox_client.metadata("/files")
-
- # add missing files
- for filename in os.listdir(os.path.join("public", "files")):
+ # upload files to files folder
+ filename = os.path.join(get_base_path(),"public", "files")
+ for filename in os.listdir(filename):
found = False
for file_metadata in response["contents"]:
if filename==os.path.basename(file_metadata["path"]):
- if os.stat(os.path.join("public", "files", filename)).st_size==file_metadata["bytes"]:
+ if os.stat(filename).st_size==file_metadata["bytes"]:
found=True
-
+
if not found:
- upload_file_to_dropbox(os.path.join("public", "files", filename), "files", dropbox_client)
-
+ upload_file_to_dropbox(os.path.join(get_base_path(),"public", "files", filename), "files", dropbox_client)
def get_dropbox_session():
from dropbox import session
@@ -91,21 +90,18 @@
except ImportError, e:
webnotes.msgprint(_("Please set Dropbox access keys in") + " conf.py",
raise_exception=True)
-
sess = session.DropboxSession(dropbox_access_key, dropbox_secret_key, "app_folder")
return sess
def upload_file_to_dropbox(filename, folder, dropbox_client):
- if __name__=="__main__":
- print "Uploading " + filename
size = os.stat(filename).st_size
f = open(filename,'r')
-
if size > 4194304:
uploader = dropbox_client.get_chunked_uploader(f, size)
while uploader.offset < size:
try:
uploader.upload_chunked()
+ finish(folder + '/' + os.path.basename(filename), overwrite='True')
except rest.ErrorResponse, e:
pass
else:
diff --git a/setup/doctype/backup_manager/backup_manager.js b/setup/doctype/backup_manager/backup_manager.js
index 154c72e..073e0a0 100644
--- a/setup/doctype/backup_manager/backup_manager.js
+++ b/setup/doctype/backup_manager/backup_manager.js
@@ -1,24 +1,66 @@
+cur_frm.cscript.refresh = function(doc) {
+ cur_frm.disable_save();
+}
+
+//dropbox
cur_frm.cscript.allow_dropbox_access = function(doc) {
- wn.call({
- method: "setup.doctype.backup_manager.backup_dropbox.get_dropbox_authorize_url",
- callback: function(r) {
- if(!r.exc) {
- cur_frm.set_value("dropbox_access_secret", r.message.secret);
- cur_frm.set_value("dropbox_access_key", r.message.key);
- cur_frm.save(null, function() {
- window.open(r.message.url);
- });
+ if (doc.send_notifications_to == '') {
+ msgprint("Please enter email address.")
+ }
+ else {
+ wn.call({
+ method: "setup.doctype.backup_manager.backup_dropbox.get_dropbox_authorize_url",
+ callback: function(r) {
+ if(!r.exc) {
+ cur_frm.set_value("dropbox_access_secret", r.message.secret);
+ cur_frm.set_value("dropbox_access_key", r.message.key);
+ cur_frm.save(null, function() {
+ window.open(r.message.url);
+ });
+ }
}
- }
- })
+ })
+ }
}
cur_frm.cscript.backup_right_now = function(doc) {
msgprint("Backing up and uploading. This may take a few minutes.")
wn.call({
- method: "setup.doctype.backup_manager.backup_manager.take_backups",
+ method: "setup.doctype.backup_manager.backup_manager.take_backups_dropbox",
callback: function(r) {
msgprint("Backups taken. Please check your email for the response.")
}
})
-}
\ No newline at end of file
+}
+//gdrive
+cur_frm.cscript.allow_gdrive_access = function(doc) {
+ if (doc.send_notifications_to == '') {
+ msgprint("Please enter email address.")
+ }
+ else {
+ wn.call({
+ method: "setup.doctype.backup_manager.backup_googledrive.get_gdrive_authorize_url",
+ callback: function(r) {
+ window.open(r.message.authorize_url);
+ }
+ })
+ }
+}
+
+cur_frm.cscript.validate_gdrive_code = function(doc) {
+ wn.call({
+ method: "setup.doctype.backup_manager.backup_manager.gdrive_callback",
+ args: {
+ verification_code: doc.verification_code
+ },
+ });
+}
+// cur_frm.cscript.backup_to_gdrive = function(doc) {
+// msgprint("Backing up and uploading. This may take a few minutes.")
+// wn.call({
+// method: "setup.doctype.backup_manager.backup_manager.take_backups_gdrive",
+// callback: function(r) {
+// msgprint("Backups taken. Please check your email for the response.")
+// }
+// })
+// }
\ No newline at end of file
diff --git a/setup/doctype/backup_manager/backup_manager.py b/setup/doctype/backup_manager/backup_manager.py
index 48d48e8..71d8ad7 100644
--- a/setup/doctype/backup_manager/backup_manager.py
+++ b/setup/doctype/backup_manager/backup_manager.py
@@ -3,6 +3,8 @@
from __future__ import unicode_literals
import webnotes
from webnotes import _
+from backup_dropbox import dropbox_callback, get_dropbox_session, get_dropbox_authorize_url
+from backup_googledrive import gdrive_callback, get_gdrive_flow, get_gdrive_authorize_url
class DocType:
def __init__(self, d, dl):
@@ -16,10 +18,11 @@
def take_backups_if(freq):
if webnotes.conn.get_value("Backup Manager", None, "upload_backups_to_dropbox")==freq:
- take_backups()
-
+ take_backups_dropbox()
+ take_backups_gdrive()
+#backup to dropbox
@webnotes.whitelist()
-def take_backups():
+def take_backups_dropbox():
try:
from setup.doctype.backup_manager.backup_dropbox import backup_to_dropbox
backup_to_dropbox()
@@ -27,6 +30,16 @@
except Exception, e:
send_email(False, "Dropbox", e)
+#backup to gdrive
+@webnotes.whitelist()
+def take_backups_gdrive():
+ try:
+ from setup.doctype.backup_manager.backup_googledrive import backup_to_gdrive
+ backup_to_gdrive()
+ send_email(True, "Google Drive")
+ except Exception, e:
+ send_email(False, "Google Drive", e)
+
def send_email(success, service_name, error_status=None):
if success:
subject = "Backup Upload Successful"
@@ -44,5 +57,5 @@
# email system managers
from webnotes.utils.email_lib import sendmail
- sendmail(webnotes.conn.get_value("Backup Manager", None, "send_notifications_to").split(","),
- subject=subject, msg=message)
+ sendmail(webnotes.conn.get_value("Backup Manager", None, "send_notifications_to").split(","),
+ subject=subject, msg=message)
\ No newline at end of file
diff --git a/setup/doctype/backup_manager/backup_manager.txt b/setup/doctype/backup_manager/backup_manager.txt
index a994e7d..bdb9c50 100644
--- a/setup/doctype/backup_manager/backup_manager.txt
+++ b/setup/doctype/backup_manager/backup_manager.txt
@@ -1,8 +1,8 @@
[
{
- "creation": "2013-03-05 16:35:50",
+ "creation": "2013-03-15 11:06:59",
"docstatus": 0,
- "modified": "2013-03-07 12:18:07",
+ "modified": "2013-03-15 16:10:05",
"modified_by": "Administrator",
"owner": "Administrator"
},
@@ -56,7 +56,9 @@
"doctype": "DocField",
"fieldname": "backup_right_now",
"fieldtype": "Button",
- "label": "Backup Right Now"
+ "hidden": 1,
+ "label": "Backup Right Now",
+ "read_only": 1
},
{
"description": "Note: Backups and files are not deleted from Dropbox, you will have to delete them manually.",
@@ -103,6 +105,70 @@
"label": "Allow Dropbox Access"
},
{
+ "description": "Note: Backups and files are not deleted from Google Drive, you will have to delete them manually.",
+ "doctype": "DocField",
+ "fieldname": "sync_with_gdrive",
+ "fieldtype": "Section Break",
+ "label": "Sync with Google Drive"
+ },
+ {
+ "doctype": "DocField",
+ "fieldname": "upload_backups_to_gdrive",
+ "fieldtype": "Select",
+ "label": "Upload Backups to Google Drive",
+ "options": "Never\nDaily\nWeekly"
+ },
+ {
+ "doctype": "DocField",
+ "fieldname": "allow_gdrive_access",
+ "fieldtype": "Button",
+ "label": "Allow Google Drive Access"
+ },
+ {
+ "doctype": "DocField",
+ "fieldname": "verification_code",
+ "fieldtype": "Data",
+ "label": "Enter Verification Code"
+ },
+ {
+ "doctype": "DocField",
+ "fieldname": "validate_gdrive",
+ "fieldtype": "Button",
+ "label": "Validate"
+ },
+ {
+ "doctype": "DocField",
+ "fieldname": "gdrive_access_allowed",
+ "fieldtype": "Check",
+ "hidden": 1,
+ "label": "Google Drive Access Allowed",
+ "read_only": 1
+ },
+ {
+ "doctype": "DocField",
+ "fieldname": "gdrive_credentials",
+ "fieldtype": "Text",
+ "hidden": 1,
+ "label": "Credentials",
+ "read_only": 1
+ },
+ {
+ "doctype": "DocField",
+ "fieldname": "database_folder_id",
+ "fieldtype": "Data",
+ "hidden": 1,
+ "label": "Database Folder ID",
+ "read_only": 1
+ },
+ {
+ "doctype": "DocField",
+ "fieldname": "files_folder_id",
+ "fieldtype": "Data",
+ "hidden": 1,
+ "label": "Files Folder ID",
+ "read_only": 1
+ },
+ {
"doctype": "DocPerm"
}
]
\ No newline at end of file