From 3995fd8582e680272ad921839f769635084846b7 Mon Sep 17 00:00:00 2001 From: Prateeksha Singh Date: Mon, 15 Jan 2018 20:45:31 +0530 Subject: [PATCH 1/4] [fix] slideshow private images validation --- .../website/doctype/website_slideshow/website_slideshow.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frappe/website/doctype/website_slideshow/website_slideshow.py b/frappe/website/doctype/website_slideshow/website_slideshow.py index 467fd80e2e..a287ae2a20 100644 --- a/frappe/website/doctype/website_slideshow/website_slideshow.py +++ b/frappe/website/doctype/website_slideshow/website_slideshow.py @@ -21,9 +21,10 @@ class WebsiteSlideshow(Document): def validate_images(self): ''' atleast one image file should be public for slideshow ''' files = map(lambda row: row.image, self.slideshow_items) - result = frappe.get_all("File", filters={ "file_url":("in", files) }, fields="is_private") - if any([file.is_private for file in result]): - frappe.throw(_("All Images attached to Website Slideshow should be public")) + if files: + result = frappe.get_all("File", filters={ "file_url":("in", files) }, fields="is_private") + if any([file.is_private for file in result]): + frappe.throw(_("All Images attached to Website Slideshow should be public")) def get_slideshow(doc): if not doc.slideshow: From 42c6c3dd1b4fd04de8a89c90ceec3f88a889c302 Mon Sep 17 00:00:00 2001 From: Prateeksha Singh Date: Wed, 17 Jan 2018 18:11:36 +0530 Subject: [PATCH 2/4] [hotfix] stop notification check in setup --- frappe/public/js/frappe/desk.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index 343c39d5f4..999c970ebc 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -233,7 +233,7 @@ frappe.Application = Class.extend({ refresh_notifications: function() { var me = this; - if(frappe.session_alive) { + if(frappe.session_alive && frappe.boot && !frappe.boot.in_setup_wizard) { return frappe.call({ method: "frappe.desk.notifications.get_notifications", callback: function(r) { From aa7d93cfdbf78872085309cb1e07ee2b9b58f129 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Wed, 17 Jan 2018 18:45:37 +0530 Subject: [PATCH 3/4] Generic Append number in naming (#4845) * Generic append_number_if_name_exists * Add test --- frappe/model/naming.py | 22 +++++++++++++--------- frappe/tests/test_naming.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 frappe/tests/test_naming.py diff --git a/frappe/model/naming.py b/frappe/model/naming.py index 10cd6848ce..dc8fb74f19 100644 --- a/frappe/model/naming.py +++ b/frappe/model/naming.py @@ -197,22 +197,26 @@ def _set_amended_name(doc): doc.name = am_prefix + '-' + str(am_id) return doc.name -def append_number_if_name_exists(doctype, name, fieldname='name', separator='-'): - if frappe.db.exists(doctype, name): +def append_number_if_name_exists(doctype, value, fieldname='name', separator='-'): + exists = frappe.db.exists(doctype, + value if fieldname == 'name' else {fieldname: value}) + + if exists: # should be escaped 2 times since # python string will parse the first escape - escaped_name = re.escape(re.escape(name)) - last = frappe.db.sql("""select name from `tab{doctype}` - where {fieldname} regexp '^{name}{separator}[[:digit:]]+' + escaped_value = re.escape(re.escape(value)) + + last = frappe.db.sql("""select {fieldname} from `tab{doctype}` + where {fieldname} regexp '^{value}{separator}[[:digit:]]+' order by length({fieldname}) desc, {fieldname} desc limit 1""".format(doctype=doctype, - name=escaped_name, fieldname=fieldname, separator=separator)) + value=escaped_value, fieldname=fieldname, separator=separator)) if last: - count = str(cint(last[0][0].rsplit("-", 1)[1]) + 1) + count = str(cint(last[0][0].rsplit(separator, 1)[1]) + 1) else: count = "1" - name = "{0}{1}{2}".format(name, separator, count) + value = "{0}{1}{2}".format(value, separator, count) - return name + return value diff --git a/frappe/tests/test_naming.py b/frappe/tests/test_naming.py new file mode 100644 index 0000000000..1e00fd4be0 --- /dev/null +++ b/frappe/tests/test_naming.py @@ -0,0 +1,28 @@ +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# MIT License. See license.txt + +from __future__ import unicode_literals +import unittest +import frappe + +from frappe.model.naming import append_number_if_name_exists + +class TestNaming(unittest.TestCase): + def test_append_number_if_name_exists(self): + ''' + Append number to name based on existing values + if Bottle exists + Bottle -> Bottle-1 + if Bottle-1 exists + Bottle -> Bottle-2 + ''' + + note = frappe.new_doc('Note') + note.title = 'Test' + note.insert() + + title2 = append_number_if_name_exists('Note', 'Test') + self.assertEquals(title2, 'Test-1') + + title2 = append_number_if_name_exists('Note', 'Test', 'title', '_') + self.assertEquals(title2, 'Test_1') From 194cb45ecca606835924079c76e65985ab2e82f0 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 17 Jan 2018 19:18:52 +0600 Subject: [PATCH 4/4] bumped to version 10.0.11 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 6e397647dc..220199eb13 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template -__version__ = '10.0.10' +__version__ = '10.0.11' __title__ = "Frappe Framework" local = Local()