From 08647cc03298f2f7e8c44fe5877fd48b4c3d0e86 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 9 Apr 2014 19:18:39 +0530 Subject: [PATCH] #478 --- frappe/__init__.py | 2 +- frappe/model/document.py | 7 +++-- frappe/website/website_generator.py | 45 ++++++++++++++--------------- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index d1c31066a9..8f70e2d3eb 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -305,7 +305,7 @@ def reset_perms(doctype): def generate_hash(txt=None): """Generates random hash for session id""" import hashlib, time - return hashlib.sha224((txt or "") + str(time.time())).hexdigest() + return hashlib.sha224((txt or "") + repr(time.time())).hexdigest() def reset_metadata_version(): v = generate_hash() diff --git a/frappe/model/document.py b/frappe/model/document.py index c4450d8175..d070fa4899 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -275,7 +275,7 @@ class Document(BaseDocument): if not self.has_permission("submit"): raise frappe.PermissionError else: - raise frappe.DocstatusTransitionError + raise frappe.DocstatusTransitionError("Cannot change docstatus from 0 to 2") elif docstatus==1: if self.docstatus==1: @@ -288,7 +288,7 @@ class Document(BaseDocument): if not self.has_permission("cancel"): raise frappe.PermissionError else: - raise frappe.DocstatusTransitionError + raise frappe.DocstatusTransitionError("Cannot change docstatus from 1 to 0") elif docstatus==2: raise frappe.ValidationError @@ -351,6 +351,7 @@ class Document(BaseDocument): """run standard triggers, plus those in frappe""" if hasattr(self, method): fn = lambda self, *args, **kwargs: getattr(self, method)(*args, **kwargs) + fn.__name__ = method.encode("utf-8") return Document.hook(fn)(self, *args, **kwargs) def submit(self): @@ -412,7 +413,7 @@ class Document(BaseDocument): method = f.__name__ for handler in frappe.get_hooks("doc_event:" + self.doctype + ":" + method) \ + frappe.get_hooks("doc_event:*:" + method): - hooks.append(frappe.getattr(handler)) + hooks.append(frappe.get_attr(handler)) composed = compose(f, *hooks) return composed(self, method, *args, **kwargs) diff --git a/frappe/website/website_generator.py b/frappe/website/website_generator.py index b4da621ad1..fe1e4c7b44 100644 --- a/frappe/website/website_generator.py +++ b/frappe/website/website_generator.py @@ -10,9 +10,6 @@ from frappe.utils import now from frappe.website.doctype.website_route.website_route import add_to_sitemap, update_sitemap, remove_sitemap -def call_website_generator(doc, method, *args, **kwargs): - getattr(WebsiteGenerator(doc), method)(*args, **kwargs) - class WebsiteGenerator(DocListController): def autoname(self): self.name = self.get_page_name() @@ -26,7 +23,7 @@ class WebsiteGenerator(DocListController): self.set(self.website_template.page_name_field, page_name) else: frappe.db.set(self, self.website_template.page_name_field, page_name) - + return page_name def get_parent_website_route(self): @@ -34,51 +31,51 @@ class WebsiteGenerator(DocListController): def setup_generator(self): if not hasattr(self, "website_template"): - self.website_template = frappe.db.get_values("Website Template", + self.website_template = frappe.db.get_values("Website Template", {"ref_doctype": self.doctype}, "*")[0] def on_update(self): self.update_sitemap() if getattr(self, "save_versions", False): frappe.add_version(self) - + def after_rename(self, olddn, newdn, merge): frappe.db.sql("""update `tabWebsite Route` set docname=%s where ref_doctype=%s and docname=%s""", (newdn, self.doctype, olddn)) - + if merge: self.setup_generator() remove_sitemap(ref_doctype=self.doctype, docname=olddn) - + def on_trash(self): self.setup_generator() remove_sitemap(ref_doctype=self.doctype, docname=self.name) - + def update_sitemap(self): self.setup_generator() - + if self.website_template.condition_field and \ not self.get(self.website_template.condition_field): # condition field failed, remove and return! remove_sitemap(ref_doctype=self.doctype, docname=self.name) return - + self.add_or_update_sitemap() - + def add_or_update_sitemap(self): page_name = self.get_page_name() - + existing_site_map = frappe.db.get_value("Website Route", {"ref_doctype": self.doctype, "docname": self.name}) - + if self.modified: lastmod = frappe.utils.get_datetime(self.modified).strftime("%Y-%m-%d") else: lastmod = now() - + opts = frappe._dict({ "page_or_generator": "Generator", - "ref_doctype":self.doctype, + "ref_doctype":self.doctype, "idx": self.idx, "docname": self.name, "page_name": page_name, @@ -90,35 +87,35 @@ class WebsiteGenerator(DocListController): }) self.update_permissions(opts) - + if existing_site_map: idx = update_sitemap(existing_site_map, opts) else: idx = add_to_sitemap(opts) if idx!=None and self.idx != idx: - frappe.db.set(self, "idx", idx) - + frappe.db.set(self, "idx", idx) + def update_permissions(self, opts): if self.meta.get_field("public_read"): opts.public_read = self.public_read opts.public_write = self.public_write else: opts.public_read = 1 - + def get_page_name(self): page_name = self._get_page_name() if not page_name: page_name = self.set_page_name() - + return self._get_page_name() - + def _get_page_name(self): self.setup_generator() if self.meta.get_field(self.website_template.page_name_field): return self.get(self.website_template.page_name_field) else: return cleanup_page_name(self.get_page_title()) - + def get_page_title(self): - return self.title or (self.name.replace("-", " ").replace("_", " ").title()) + return self.get("title") or (self.name.replace("-", " ").replace("_", " ").title())