From 04efaf65e31ec9155bf1124ef378deec6b6fd1d3 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 16:41:45 +0530 Subject: [PATCH 1/5] [fix] statics --- frappe/website/statics.py | 70 +++++++++++++++------------------------ 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/frappe/website/statics.py b/frappe/website/statics.py index e963c522f1..24b99e0868 100644 --- a/frappe/website/statics.py +++ b/frappe/website/statics.py @@ -2,13 +2,15 @@ # MIT License. See license.txt from __future__ import unicode_literals -import frappe, os, time, sys - -from frappe.utils import update_progress_bar +import frappe, os, time def sync_statics(rebuild=False): s = sync() s.verbose = True + frappe.db.sql("delete from `tabWeb Page` where ifnull(template_path, '')!=''") + # s.start(rebuild) + # frappe.db.commit() + while True: s.start(rebuild) frappe.db.commit() @@ -22,14 +24,10 @@ class sync(object): def start(self, rebuild=False): self.synced = [] self.synced_paths = [] - self.to_insert = [] - self.to_update = [] self.updated = 0 self.rebuild = rebuild for app in frappe.get_installed_apps(): self.sync_for_app(app) - - self.insert_and_update() self.cleanup() def sync_for_app(self, app): @@ -80,8 +78,9 @@ class sync(object): if fname in files: self.sync_file(fname, os.path.join(basepath, fname), i) break - elif page_name not in folders: - print page_name + " not found in " + basepath + else: + if page_name not in folders: + print page_name + " not found in " + basepath def sync_alphabetically(self, basepath, folders, files): files.sort() @@ -97,18 +96,23 @@ class sync(object): os.path.dirname(template_path) != self.statics_path: route = os.path.dirname(route) + parent_web_page = frappe.db.sql("""select name from `tabWeb Page` where + page_name=%s and ifnull(parent_website_route, '')=ifnull(%s, '')""", + (os.path.basename(os.path.dirname(route)), os.path.dirname(os.path.dirname(route)))) + + parent_web_page = parent_web_page and parent_web_page[0][0] or "" page_name = os.path.basename(route) - parent_web_page = os.path.basename(os.path.dirname(route)) + published = 1 idx = priority - if page_name in self.synced: + if (parent_web_page, page_name) in self.synced: return title = self.get_title(template_path) - if not frappe.db.get_value("Web Page", {"page_name":page_name}): + if not frappe.db.get_value("Web Page", {"template_path":template_path}): web_page = frappe.new_doc("Web Page") web_page.page_name = page_name web_page.parent_web_page = parent_web_page @@ -117,10 +121,11 @@ class sync(object): web_page.published = published web_page.idx = idx web_page.from_website_sync = True - self.to_insert.append(web_page) + web_page.insert() + if self.verbose: print "Inserted: " + web_page.name else: - web_page = frappe.get_doc("Web Page", {"page_name":page_name}) + web_page = frappe.get_doc("Web Page", {"template_path":template_path}) dirty = False for key in ("parent_web_page", "title", "template_path", "published", "idx"): if web_page.get(key) != locals().get(key): @@ -129,9 +134,10 @@ class sync(object): if dirty: web_page.from_website_sync = True - self.to_update.append(web_page) + web_page.save() + if self.verbose: print "Updated: " + web_page.name - self.synced.append(page_name) + self.synced.append((parent_web_page, page_name)) def get_title(self, fpath): title = os.path.basename(fpath).rsplit(".", 1)[0] @@ -151,37 +157,13 @@ class sync(object): return title - def insert_and_update(self): - if self.to_insert: - l = len(self.to_insert) - for i, page in enumerate(self.to_insert): - if self.verbose: - print "Inserting " + page.page_name - else: - update_progress_bar("Updating Static Pages", i, l) - - page.insert() - if not self.verbose: print "" - - if self.to_update: - for i, page in enumerate(self.to_update): - if not self.verbose: - print "Updating " + page.page_name - else: - sys.stdout.write("\rUpdating statics {0}/{1}".format(i+1, len(self.to_update))) - sys.stdout.flush() - - page.save() - if not self.verbose: print "" - def cleanup(self): if self.synced: # delete static web pages that are not in immediate list - frappe.delete_doc("Web Page", frappe.db.sql_list("""select name - from `tabWeb Page` - where ifnull(template_path,'')!='' - and name not in ({})""".format(', '.join(["%s"]*len(self.synced))), - tuple(self.synced)), force=1) + for static_page in frappe.db.sql("""select name, page_name, parent_web_page + from `tabWeb Page` where ifnull(template_path,'')!=''""", as_dict=1): + if (static_page.parent_web_page, static_page.page_name) not in self.synced: + frappe.delete_doc("Web Page", static_page.name, force=1) else: # delete all static web pages frappe.delete_doc("Web Page", frappe.db.sql_list("""select name From 646842c67ddc59f221c6ce9791f465d3e6528204 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 16:45:35 +0530 Subject: [PATCH 2/5] [fix] statics --- frappe/website/statics.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frappe/website/statics.py b/frappe/website/statics.py index 24b99e0868..8d8c9675d3 100644 --- a/frappe/website/statics.py +++ b/frappe/website/statics.py @@ -7,7 +7,6 @@ import frappe, os, time def sync_statics(rebuild=False): s = sync() s.verbose = True - frappe.db.sql("delete from `tabWeb Page` where ifnull(template_path, '')!=''") # s.start(rebuild) # frappe.db.commit() @@ -25,7 +24,9 @@ class sync(object): self.synced = [] self.synced_paths = [] self.updated = 0 - self.rebuild = rebuild + if rebuild: + frappe.db.sql("delete from `tabWeb Page` where ifnull(template_path, '')!=''") + for app in frappe.get_installed_apps(): self.sync_for_app(app) self.cleanup() From abb6efc3a0bef0f279e6e9ccdbdf2d23527d120d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 29 Sep 2014 16:49:33 +0530 Subject: [PATCH 3/5] [fix] statics --- frappe/cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/cli.py b/frappe/cli.py index b42e887a98..fb01d8888e 100755 --- a/frappe/cli.py +++ b/frappe/cli.py @@ -571,7 +571,7 @@ def build_website(verbose=False): from frappe.website import render, statics frappe.connect() render.clear_cache() - statics.sync(verbose=verbose).start() + statics.sync(verbose=verbose).start(True) frappe.db.commit() frappe.destroy() From f699c2d135584e6fa7ed2f69f978f04e2e4e76a4 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 7 Oct 2014 10:40:32 +0530 Subject: [PATCH 4/5] [fixes] minor: email_alert, listview, doctype validation --- frappe/core/doctype/doctype/doctype.py | 2 +- frappe/public/js/frappe/views/listview.js | 3 +++ frappe/utils/jinja.py | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index 9f2c0419a6..9d609e1ef7 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -243,7 +243,7 @@ def validate_fields(meta): if fold_exists: frappe.throw(_("There can be only one Fold in a form")) fold_exists = True - if i < len(fields)-1: + if i < len(fields)-2: nxt = fields[i+1] if nxt.fieldtype != "Section Break" \ or (nxt.fieldtype=="Section Break" and not nxt.label): diff --git a/frappe/public/js/frappe/views/listview.js b/frappe/public/js/frappe/views/listview.js index 7ad0387daa..e80ca5ab98 100644 --- a/frappe/public/js/frappe/views/listview.js +++ b/frappe/public/js/frappe/views/listview.js @@ -85,6 +85,9 @@ frappe.views.ListView = Class.extend({ // additional fields if(this.settings.add_fields) { $.each(this.settings.add_fields, function(i, d) { + if(d.indexOf("`tab")===-1) { + d = "`tab" + me.doctype + "`." + d; + } if(me.fields.indexOf(d)==-1) me.fields.push(d); }); diff --git a/frappe/utils/jinja.py b/frappe/utils/jinja.py index 6885da1733..85ab80b214 100644 --- a/frappe/utils/jinja.py +++ b/frappe/utils/jinja.py @@ -24,6 +24,7 @@ def get_template(path): return get_jenv().get_template(path) def render_template(template, context): + context.update(get_allowed_functions_for_jenv()) template = Template(template) return template.render(**context) From faa8361340dd944d7138d5be427cb5ee22728bfa Mon Sep 17 00:00:00 2001 From: pdvyas Date: Tue, 7 Oct 2014 17:34:45 +0600 Subject: [PATCH 5/5] bumped to version 4.4.4 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index 548e0f6d83..d39dca2ded 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1 +1 @@ -__version__ = "4.4.3" +__version__ = "4.4.4" diff --git a/frappe/hooks.py b/frappe/hooks.py index 03a51c7ae1..22f04765a4 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -3,7 +3,7 @@ app_title = "Frappe Framework" app_publisher = "Web Notes Technologies Pvt. Ltd." app_description = "Full Stack Web Application Framework in Python" app_icon = "assets/frappe/images/frappe.svg" -app_version = "4.4.3" +app_version = "4.4.4" app_color = "#3498db" app_email = "support@frappe.io" diff --git a/setup.py b/setup.py index c953d2ec21..45c2fd10b8 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages import os -version = "4.4.3" +version = "4.4.4" with open("requirements.txt", "r") as f: install_requires = f.readlines()