# session_cache.py # clear cache # ================================================== def clear(): clear_cache() import webnotes webnotes.response['message'] = "Cache Cleared" def clear_cache(user=''): import webnotes try: if user: webnotes.conn.sql("delete from __SessionCache where user=%s", user) else: webnotes.conn.sql("delete from __SessionCache") except Exception, e: if e.args[0]==1146: make_cache_table() else: raise e # load cache # ================================================== def get(): import webnotes import webnotes.defs # get country country = webnotes.session['data'].get('ipinfo', {}).get('countryName', 'Unknown Country') # run patches try: import webnotes.modules.patch webnotes.modules.patch.run() except ImportError, e: pass # no patches - do nothing # check if cache exists if not getattr(webnotes.defs,'auto_cache_clear',None): cache = load(country) if cache: return cache # if not create it sd = build() dump(sd, country) # update profile from cache webnotes.session['data']['profile'] = sd['profile'] return sd # load cache # ================================================== def load(country): import webnotes try: sd = webnotes.conn.sql("select cache from __SessionCache where user='%s' %s" % (webnotes.session['user'], (country and (" and country='%s'" % country) or ''))) if sd: return eval(sd[0][0]) else: return None except Exception, e: if e.args[0]==1146: make_cache_table() else: raise e # make the cache table # ================================================== def make_cache_table(): import webnotes webnotes.conn.commit() webnotes.conn.sql("create table `__SessionCache` (user VARCHAR(120), country VARCHAR(120), cache LONGTEXT)") webnotes.conn.begin() # dump session to cache # ================================================== def dump(sd, country): import webnotes import webnotes.model.utils if sd.get('docs'): sd['docs'] = webnotes.model.utils.compress(sd['docs']) # delete earlier (?) webnotes.conn.sql("delete from __SessionCache where user=%s and country=%s", (webnotes.session['user'], country)) # make new webnotes.conn.sql("insert into `__SessionCache` (user, country, cache) VALUES (%s, %s, %s)", (webnotes.session['user'], country, str(sd))) # ================================================== def get_letter_heads(): import webnotes try: lh = {} ret = webnotes.conn.sql("select name, content from `tabLetter Head` where ifnull(disabled,0)=0") for r in ret: lh[r[0]] = r[1] return lh except Exception, e: if e.args[0]==1146: return {} else: raise Exception, e # ================================================== # load startup.js and startup.css from the modules/startup folder def load_startup(cp): from webnotes.modules import ModuleFile try: from webnotes.defs import modules_path except ImportError: return import os cp.startup_code = ModuleFile(os.path.join(modules_path, 'startup', 'startup.js')).load_content() cp.startup_css = ModuleFile(os.path.join(modules_path, 'startup', 'startup.css')).load_content() # build it # ================================================== def build(): sd = {} import webnotes import webnotes.model import webnotes.model.doc import webnotes.model.doctype import webnotes.widgets.page import webnotes.widgets.menus import webnotes.profile import webnotes.defs sql = webnotes.conn.sql webnotes.conn.begin() sd['profile'] = webnotes.user.load_profile() doclist = [] doclist += webnotes.model.doc.get('Control Panel') cp = doclist[0] load_startup(cp) doclist += webnotes.model.doctype.get('Event') doclist += webnotes.model.doctype.get('Search Criteria') home_page = webnotes.user.get_home_page() if home_page: doclist += webnotes.widgets.page.get(home_page) sd['account_name'] = cp.account_id or '' sd['sysdefaults'] = webnotes.utils.get_defaults() sd['n_online'] = int(sql("SELECT COUNT(DISTINCT user) FROM tabSessions")[0][0] or 0) sd['docs'] = doclist sd['letter_heads'] = get_letter_heads() sd['home_page'] = home_page or '' sd['start_items'] = webnotes.widgets.menus.get_menu_items() if webnotes.session['data'].get('ipinfo'): sd['ipinfo'] = webnotes.session['data']['ipinfo'] webnotes.session['data']['profile'] = sd['profile'] sd['dt_labels'] = webnotes.model.get_dt_labels() webnotes.conn.commit() return sd