25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

107 lines
3.0 KiB

  1. from __future__ import unicode_literals
  2. import webnotes
  3. import memc
  4. # User
  5. def set_user_default(key, value, user=None):
  6. set_default(key, value, user or webnotes.session.user)
  7. def add_user_default(key, value, user=None):
  8. add_default(key, value, user or webnotes.session.user)
  9. def get_user_default(key, user=None):
  10. d = get_defaults(user or webnotes.session.user).get(key, None)
  11. if d is None:
  12. d = get_global_default(key)
  13. return isinstance(d, list) and d[0] or d
  14. def get_user_defaults(key, user=None):
  15. d = get_defaults(user or webnotes.session.user).get(key, None)
  16. if d is None:
  17. d = get_global_defaults(key)
  18. return isinstance(d, basestring) and [d] or d
  19. def get_all_user_defaults(user=None):
  20. userd = get_defaults(user or webnotes.session.user)
  21. globald = get_defaults()
  22. globald.update(userd)
  23. return globald
  24. def clear_user_default(key, user=None):
  25. clear_default(key, user or webnotes.session.user)
  26. # Global
  27. def set_global_default(key, value):
  28. set_default(key, value, "Control Panel")
  29. def add_global_default(key, value):
  30. add_default(key, value, "Control Panel")
  31. def get_global_default(key):
  32. d = get_defaults().get(key, None)
  33. return isinstance(d, list) and d[0] or d
  34. def get_global_defaults(key):
  35. d = get_defaults().get(key, None)
  36. return isinstance(d, basestring) and [d] or d
  37. # Common
  38. def set_default(key, value, parent):
  39. if webnotes.conn.sql("""select defkey from `tabDefaultValue` where
  40. defkey=%s and parent=%s """, (key, parent)):
  41. # update
  42. webnotes.conn.sql("""update `tabDefaultValue` set defvalue=%s
  43. where parent=%s and defkey=%s""", (value, parent, key))
  44. clear_cache(parent)
  45. else:
  46. add_default(key, value, parent)
  47. def add_default(key, value, parent):
  48. d = webnotes.doc({
  49. "doctype": "DefaultValue",
  50. "parent": parent,
  51. "parenttype": "Control Panel",
  52. "parentfield": "system_defaults",
  53. "defkey": key,
  54. "defvalue": value
  55. })
  56. d.insert()
  57. clear_cache(parent)
  58. def clear_default(key, parent="Control Panel"):
  59. webnotes.conn.sql("""delete from tabDefaultValue where defkey=%s and parent=%s""", (key, parent))
  60. clear_cache(parent)
  61. def get_defaults(parent="Control Panel"):
  62. """get all defaults"""
  63. defaults = webnotes.cache().get_value("__defaults:" + parent)
  64. if not defaults:
  65. if parent=="Control Panel":
  66. res = webnotes.conn.sql("""select defkey, defvalue from `tabDefaultValue`
  67. where parent = %s order by creation""", parent, as_dict=1)
  68. else:
  69. roles = webnotes.get_roles()
  70. res = webnotes.conn.sql("""select defkey, defvalue from `tabDefaultValue`
  71. where parent in ('%s') order by creation""" % ("', '".join(roles)), as_dict=1)
  72. defaults = webnotes._dict({})
  73. for d in res:
  74. if d.defkey in defaults:
  75. # listify
  76. if isinstance(defaults[d.defkey], basestring):
  77. defaults[d.defkey] = [defaults[d.defkey]]
  78. defaults[d.defkey].append(d.defvalue)
  79. else:
  80. defaults[d.defkey] = d.defvalue
  81. webnotes.cache().set_value("__defaults:" + parent, defaults)
  82. return defaults
  83. def clear_cache(parent):
  84. webnotes.cache().delete_value("__defaults:" + parent)
  85. webnotes.clear_cache()