seitime-frappe/frappe/model/utils/list_settings.py
2016-06-01 06:41:34 +05:30

39 lines
No EOL
1.3 KiB
Python

import frappe, json
def get_list_settings(doctype, for_update=False):
list_settings = frappe.cache().hget('_list_settings',
'{0}::{1}'.format(doctype, frappe.session.user))
if list_settings is None:
list_settings = frappe.db.sql('''select data from __ListSettings
where user=%s and doctype=%s''', (frappe.session.user, doctype))
list_settings = list_settings and list_settings[0][0] or '{}'
if not for_update:
update_list_settings(doctype, list_settings, True)
return list_settings
def update_list_settings(doctype, list_settings, for_update=False):
'''update list settings in cache'''
if for_update:
current = json.loads(list_settings)
else:
current = json.loads(get_list_settings(doctype, for_update = True))
if isinstance(current, basestring):
# corrupt due to old code, remove this in a future release
current = {}
current.update(list_settings)
frappe.cache().hset('_list_settings', '{0}::{1}'.format(doctype, frappe.session.user),
json.dumps(current))
def sync_list_settings():
'''Sync from cache to database (called asynchronously via the browser)'''
for key, data in frappe.cache().hgetall('_list_settings').iteritems():
doctype, user = key.split('::')
frappe.db.sql('''insert into __ListSettings (user, doctype, data) values (%s, %s, %s)
on duplicate key update data=%s''', (user, doctype, data, data))