From c10db3efae9491aad51a1cc1199d8b662fd3cf96 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 1 Apr 2014 12:21:08 +0530 Subject: [PATCH] frappe/frappe#478 --- frappe/app.py | 2 +- frappe/boot.py | 5 +---- frappe/memc.py | 6 ++++-- frappe/model/base_document.py | 14 ++++++-------- frappe/model/meta.py | 3 ++- frappe/templates/pages/style_settings.py | 2 +- .../doctype/website_settings/website_settings.py | 2 +- frappe/website/sitemap.py | 4 ++-- 8 files changed, 18 insertions(+), 20 deletions(-) diff --git a/frappe/app.py b/frappe/app.py index c45d360134..5a0bf0b0d2 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -118,7 +118,7 @@ def serve(port=8000, profile=False, site=None, sites_path='.'): from werkzeug.serving import run_simple if profile: - application = ProfilerMiddleware(application) + application = ProfilerMiddleware(application, sort_by=('tottime', 'calls')) if not os.environ.get('NO_STATICS'): application = SharedDataMiddleware(application, { diff --git a/frappe/boot.py b/frappe/boot.py index c518b01a01..32e9cb2e07 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -20,11 +20,8 @@ def get_bootinfo(): # user get_user(bootinfo) - # control panel - cp = frappe.get_doc('Control Panel') - # system info - bootinfo['control_panel'] = frappe._dict(cp.as_dict()) + bootinfo['control_panel'] = frappe.get_doc('Control Panel') bootinfo['sysdefaults'] = frappe.defaults.get_defaults() bootinfo['server_date'] = frappe.utils.nowdate() bootinfo["send_print_in_body_and_attachment"] = frappe.db.get_value("Outgoing Email Settings", diff --git a/frappe/memc.py b/frappe/memc.py index 4c3f030049..360a468d54 100644 --- a/frappe/memc.py +++ b/frappe/memc.py @@ -15,11 +15,13 @@ class MClient(memcache.Client): def get_value(self, key, builder=None): val = frappe.local.cache.get(key) - if not val: + if val is None: val = self.get(self.n(key)) - if not val and builder: + if val is None and builder: val = builder() self.set_value(key, val) + else: + frappe.local.cache[key] = val return val def delete_value(self, keys): diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index 398f51f0ee..67cb7e7593 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -12,13 +12,11 @@ class BaseDocument(object): self.update(d) def __getattr__(self, key): - try: - return super(BaseDocument, self).__getattr__(key) - except AttributeError: - if not key.startswith("__") and key not in ("doctype", "_meta", "meta") and key in self.meta.get_valid_columns(): - return None - else: - raise + # this is called only when something is not found in dir or __dict__ + if not key.startswith("__") and key not in ("doctype", "_meta", "meta") and key in self.meta.get_valid_columns(): + return None + else: + raise AttributeError, key @property def meta(self): @@ -100,7 +98,7 @@ class BaseDocument(object): return value def get_valid_dict(self): - d = {} + d = frappe._dict() for fieldname in self.meta.get_valid_columns(): d[fieldname] = self.get(fieldname) return d diff --git a/frappe/model/meta.py b/frappe/model/meta.py index b8f016aba1..3b7b854c83 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -22,6 +22,7 @@ def get_meta(doctype, cached=True): class Meta(Document): _metaclass = True _fields = {} + default_fields = default_fields[1:] def __init__(self, doctype): super(Meta, self).__init__("DocType", doctype) @@ -62,7 +63,7 @@ class Meta(Document): if self.name in ("DocType", "DocField", "DocPerm"): self._valid_columns = frappe.db.get_table_columns(self.name) else: - self._valid_columns = default_fields[1:] + \ + self._valid_columns = self.default_fields + \ [df.fieldname for df in self.get("fields") if df.fieldtype in type_map] return self._valid_columns diff --git a/frappe/templates/pages/style_settings.py b/frappe/templates/pages/style_settings.py index 95a492e128..23f2fbbe20 100644 --- a/frappe/templates/pages/style_settings.py +++ b/frappe/templates/pages/style_settings.py @@ -12,7 +12,7 @@ def get_context(context): doc = frappe.get_doc("Style Settings", "Style Settings") prepare(doc) - return { "doc": doc.fields } + return { "doc": doc.as_dict() } def prepare(doc): from frappe.utils import cint, cstr diff --git a/frappe/website/doctype/website_settings/website_settings.py b/frappe/website/doctype/website_settings/website_settings.py index 25da010a0a..23a0556f65 100644 --- a/frappe/website/doctype/website_settings/website_settings.py +++ b/frappe/website/doctype/website_settings/website_settings.py @@ -84,7 +84,7 @@ def get_website_settings(): for k in ["banner_html", "brand_html", "copyright", "twitter_share_via", "favicon", "facebook_share", "google_plus_one", "twitter_share", "linked_in_share", "disable_signup"]: - if getattr(settings, k, None): + if hasattr(settings, k): context[k] = settings.get(k) if not context.get("favicon"): diff --git a/frappe/website/sitemap.py b/frappe/website/sitemap.py index 975b3389a1..d8bc775a2c 100644 --- a/frappe/website/sitemap.py +++ b/frappe/website/sitemap.py @@ -21,11 +21,11 @@ def get_sitemap_options(path): return frappe._dict(sitemap_options) def build_sitemap_options(path): - sitemap_options = frappe._dict(frappe.get_doc("Website Route", path).as_dict()) + sitemap_options = frappe.get_doc("Website Route", path).as_dict() home_page = get_home_page() sitemap_config = frappe.get_doc("Website Template", - sitemap_options.get("website_template")) + sitemap_options.get("website_template")).as_dict() # get sitemap config fields too for fieldname in ("base_template_path", "template_path", "controller",