Browse Source

[Minor] Allow user to set limit for downloadable backups for the site (#2059)

* [Minor] Allow user to set limit for downloadable backups for the site

* [Fix] Updated path for daily_long and weekly_long dropbox backup hooks

* [Fix] Updated system_settings.json
version-14
Shreyas Patil 8 years ago
committed by Rushabh Mehta
parent
commit
12422e75b0
5 changed files with 725 additions and 608 deletions
  1. +680
    -602
      frappe/core/doctype/system_settings/system_settings.json
  2. +4
    -0
      frappe/desk/page/backups/backups.js
  3. +34
    -1
      frappe/desk/page/backups/backups.py
  4. +2
    -1
      frappe/desk/page/setup_wizard/setup_wizard.py
  5. +5
    -4
      frappe/hooks.py

+ 680
- 602
frappe/core/doctype/system_settings/system_settings.json
File diff suppressed because it is too large
View File


+ 4
- 0
frappe/desk/page/backups/backups.js View File

@@ -5,6 +5,10 @@ frappe.pages['backups'].on_page_load = function(wrapper) {
single_column: true
});

page.add_inner_button(__("Set Number of Backups"), function() {
frappe.set_route('Form', 'System Settings');
});

frappe.breadcrumbs.add("Setup");

$(frappe.render_template("backups")).appendTo(page.body.addClass("no-border"));


+ 34
- 1
frappe/desk/page/backups/backups.py View File

@@ -1,5 +1,6 @@
import os
from frappe.utils import get_site_path
import frappe
from frappe.utils import get_site_path, cint
from frappe.utils.data import convert_utc_to_user_timezone
import datetime

@@ -17,9 +18,41 @@ def get_context(context):

path = get_site_path('private', 'backups')
files = [x for x in os.listdir(path) if os.path.isfile(os.path.join(path, x))]
backup_limit = get_scheduled_backup_limit()

if len(files) > backup_limit:
cleanup_old_backups(path, files, backup_limit)

files = [('/backups/' + _file,
get_time(os.path.join(path, _file)),
get_size(os.path.join(path, _file))) for _file in files]
files.sort(key=lambda x: x[1], reverse=True)

return {"files": files}

def get_scheduled_backup_limit():
backup_limit = frappe.db.get_singles_value('System Settings', 'backup_limit')
return cint(backup_limit)

def cleanup_old_backups(site_path, files, limit):
backup_paths = []
for f in files:
_path = os.path.abspath(os.path.join(site_path, f))
backup_paths.append(_path)

backup_paths = sorted(backup_paths, key=os.path.getctime)
files_to_delete = len(backup_paths) - limit

for idx in range(0, files_to_delete):
f = os.path.basename(backup_paths[idx])
files.remove(f)

os.remove(backup_paths[idx])

def delete_downloadable_backups():
path = get_site_path('private', 'backups')
files = [x for x in os.listdir(path) if os.path.isfile(os.path.join(path, x))]
backup_limit = get_scheduled_backup_limit()

if len(files) > backup_limit:
cleanup_old_backups(path, files, backup_limit)

+ 2
- 1
frappe/desk/page/setup_wizard/setup_wizard.py View File

@@ -72,6 +72,7 @@ def update_system_settings(args):
'date_format': frappe.db.get_value("Country", args.get("country"), "date_format"),
'number_format': number_format,
'enable_scheduler': 1 if not frappe.flags.in_test else 0,
'backup_limit': 3 # Default for downloadable backups
})
system_settings.save()

@@ -235,4 +236,4 @@ def email_setup_wizard_exception(traceback, args):
delayed=False)

def get_language_code(lang):
return frappe.db.get_value('Language', {'language_name':lang})
return frappe.db.get_value('Language', {'language_name':lang})

+ 5
- 4
frappe/hooks.py View File

@@ -143,13 +143,14 @@ scheduler_events = {
"frappe.utils.scheduler.disable_scheduler_on_expiry",
"frappe.utils.scheduler.restrict_scheduler_events_if_dormant",
"frappe.limits.update_space_usage",
"frappe.email.doctype.auto_email_report.auto_email_report.send_daily"
"frappe.email.doctype.auto_email_report.auto_email_report.send_daily",
"frappe.desk.page.backups.backups.delete_downloadable_backups"
],
"daily_long": [
"frappe.integrations.doctype.dropbox_backup.dropbox_backup.take_backups_daily"
"frappe.integrations.dropbox_integration.take_backups_daily"
],
"weekly_long": [
"frappe.integrations.doctype.dropbox_backup.dropbox_backup.take_backups_weekly"
"frappe.integrations.dropbox_integration.take_backups_weekly"
],
"monthly": [
"frappe.email.doctype.auto_email_report.auto_email_report.send_monthly"
@@ -187,4 +188,4 @@ setup_wizard_exception = "frappe.desk.page.setup_wizard.setup_wizard.email_setup
before_write_file = "frappe.limits.validate_space_limit"


integration_services = ["PayPal", "Razorpay", "Dropbox Integration", "LDAP Auth"]
integration_services = ["PayPal", "Razorpay", "Dropbox Integration", "LDAP Auth"]

Loading…
Cancel
Save