Explorar el Código

more caching for frequent queries

version-14
Rushabh Mehta hace 11 años
padre
commit
f83404a6b5
Se han modificado 7 ficheros con 34 adiciones y 15 borrados
  1. +8
    -1
      frappe/__init__.py
  2. +7
    -5
      frappe/database.py
  3. +9
    -6
      frappe/defaults.py
  4. +2
    -0
      frappe/model/doctype.py
  5. +1
    -1
      frappe/permissions.py
  6. +2
    -0
      frappe/sessions.py
  7. +5
    -2
      frappe/utils/user.py

+ 8
- 1
frappe/__init__.py Ver fichero

@@ -284,7 +284,14 @@ def get_roles(username=None):
def has_permission(doctype, ptype="read", refdoc=None):
import frappe.permissions
return frappe.permissions.has_permission(doctype, ptype, refdoc)

def is_table(doctype):
tables = cache().get_value("is_table")
if tables==None:
tables = db.sql_list("select name from tabDocType where ifnull(istable,0)=1")
cache().set_value("is_table", tables)
return doctype in tables

def clear_perms(doctype):
db.sql("""delete from tabDocPerm where parent=%s""", doctype)



+ 7
- 5
frappe/database.py Ver fichero

@@ -19,6 +19,7 @@ class Database:
def __init__(self, host=None, user=None, password=None, ac_name=None, use_default = 0):
self.host = host or frappe.conf.db_host or 'localhost'
self.user = user or frappe.conf.db_name
self._conn = None
if ac_name:
self.user = self.get_db_login(ac_name) or frappe.conf.db_name
@@ -30,11 +31,7 @@ class Database:
self.auto_commit_on_many_writes = 0

self.password = password or frappe.conf.db_password
self.connect()
if self.user != 'root':
self.use(self.user)
def get_db_login(self, ac_name):
return ac_name

@@ -47,6 +44,8 @@ class Database:
use_unicode=True, charset='utf8')
self._conn.converter[246]=float
self._cursor = self._conn.cursor()
if self.user != 'root':
self.use(self.user)
frappe.local.rollback_observers = []
def use(self, db_name):
@@ -69,6 +68,9 @@ class Database:
* returns as a dictionary if as_dict = 1
* returns as a list of lists (with cleaned up dates) if as_list = 1
"""
if not self._conn:
self.connect()
# in transaction validations
self.check_transaction_status(query)


+ 9
- 6
frappe/defaults.py Ver fichero

@@ -32,11 +32,14 @@ def get_restrictions(user=None):
return build_restrictions(user)
def build_restrictions(user):
out = {}
for key, value in frappe.db.sql("""select defkey, defvalue
from tabDefaultValue where parent=%s and parenttype='Restriction'""", (user,)):
out.setdefault(key, [])
out[key].append(value)
out = frappe.cache().get_value("restrictions:" + user)
if out==None:
out = {}
for key, value in frappe.db.sql("""select defkey, defvalue
from tabDefaultValue where parent=%s and parenttype='Restriction'""", (user,)):
out.setdefault(key, [])
out[key].append(value)
frappe.cache().set_value("restrictions:" + user, out)
return out

def get_defaults(user=None):
@@ -131,7 +134,7 @@ def clear_default(key=None, value=None, parent=None, name=None, parenttype=None)
def get_defaults_for(parent="Control Panel"):
"""get all defaults"""
defaults = frappe.cache().get_value("__defaults:" + parent)
if not defaults:
if defaults==None:
res = frappe.db.sql("""select defkey, defvalue from `tabDefaultValue`
where parent = %s order by creation""", (parent,), as_dict=1)



+ 2
- 0
frappe/model/doctype.py Ver fichero

@@ -262,6 +262,8 @@ def clear_cache(doctype=None):
# clear all
for dt in frappe.db.sql("""select name from tabDocType"""):
clear_single(dt[0])
frappe.cache().delete_value("is_table")

def add_code(doctype, doclist):
import os


+ 1
- 1
frappe/permissions.py Ver fichero

@@ -16,7 +16,7 @@ def check_admin_or_system_manager():
def has_permission(doctype, ptype="read", refdoc=None, verbose=True):
"""check if user has permission"""
if frappe.db.get_value("DocType", doctype, "istable")==1:
if frappe.is_table(doctype):
return True
meta = frappe.get_doctype(doctype)


+ 2
- 0
frappe/sessions.py Ver fichero

@@ -33,6 +33,8 @@ def clear_cache(user=None):
if user:
cache.delete_value("bootinfo:" + user)
cache.delete_value("lang:" + user)
cache.delete_value("roles:" + user)
cache.delete_value("restrictions:" + user)
# clear notifications
if frappe.flags.in_install_app!="frappe":


+ 5
- 2
frappe/utils/user.py Ver fichero

@@ -223,8 +223,11 @@ def get_roles(username=None, with_standard=True):
if username=='Guest':
return ['Guest']
roles = [r[0] for r in frappe.db.sql("""select role from tabUserRole
where parent=%s and role!='All'""", (username,))] + ['All']
roles = frappe.cache().get_value("roles:" + username)
if not roles:
roles = [r[0] for r in frappe.db.sql("""select role from tabUserRole
where parent=%s and role!='All'""", (username,))] + ['All']
frappe.cache().set_value("roles:" + username, roles)
# filter standard if required
if not with_standard:


Cargando…
Cancelar
Guardar