No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

defaults.py 3.3 KiB

hace 12 años
hace 12 años
hace 12 años
hace 12 años
hace 12 años
hace 12 años
hace 12 años
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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. return isinstance(d, list) and d[0] or d
  12. def get_user_default_as_list(key, user=None):
  13. d = get_defaults(user or webnotes.session.user).get(key, None)
  14. return isinstance(d, basestring) and [d] or d
  15. def get_defaults(user=None):
  16. userd = get_defaults_for(user or webnotes.session.user)
  17. globald = get_defaults_for()
  18. globald.update(userd)
  19. return globald
  20. def clear_user_default(key, user=None):
  21. clear_default(key, parent=user or webnotes.session.user)
  22. # Global
  23. def set_global_default(key, value):
  24. set_default(key, value, "Control Panel")
  25. def add_global_default(key, value):
  26. add_default(key, value, "Control Panel")
  27. def get_global_default(key):
  28. d = get_defaults().get(key, None)
  29. return isinstance(d, list) and d[0] or d
  30. # Common
  31. def set_default(key, value, parent):
  32. if webnotes.conn.sql("""select defkey from `tabDefaultValue` where
  33. defkey=%s and parent=%s """, (key, parent)):
  34. # update
  35. webnotes.conn.sql("""update `tabDefaultValue` set defvalue=%s
  36. where parent=%s and defkey=%s""", (value, parent, key))
  37. clear_cache(parent)
  38. else:
  39. add_default(key, value, parent)
  40. def add_default(key, value, parent):
  41. d = webnotes.doc({
  42. "doctype": "DefaultValue",
  43. "parent": parent,
  44. "parenttype": "Control Panel",
  45. "parentfield": "system_defaults",
  46. "defkey": key,
  47. "defvalue": value
  48. })
  49. d.insert()
  50. clear_cache(parent)
  51. def clear_default(key=None, value=None, parent=None, name=None):
  52. conditions = []
  53. values = []
  54. if key:
  55. conditions.append("defkey=%s")
  56. values.append(key)
  57. if value:
  58. conditions.append("defvalue=%s")
  59. values.append(value)
  60. if name:
  61. conditions.append("name=%s")
  62. values.append(name)
  63. if parent:
  64. conditions.append("parent=%s")
  65. values.append(parent)
  66. if not conditions:
  67. raise Exception, "[clear_default] No key specified."
  68. webnotes.conn.sql("""delete from tabDefaultValue where %s""" % " and ".join(conditions), values)
  69. clear_cache()
  70. def get_defaults_for(parent="Control Panel"):
  71. """get all defaults"""
  72. defaults = webnotes.cache().get_value("__defaults:" + parent)
  73. if not defaults:
  74. res = webnotes.conn.sql("""select defkey, defvalue from `tabDefaultValue`
  75. where parent = %s order by creation""", parent, as_dict=1)
  76. defaults = webnotes._dict({})
  77. for d in res:
  78. if d.defkey in defaults:
  79. # listify
  80. if isinstance(defaults[d.defkey], basestring) and defaults[d.defkey] != d.defvalue:
  81. defaults[d.defkey] = [defaults[d.defkey]]
  82. if d.defvalue not in defaults[d.defkey]:
  83. defaults[d.defkey].append(d.defvalue)
  84. else:
  85. defaults[d.defkey] = d.defvalue
  86. webnotes.cache().set_value("__defaults:" + parent, defaults)
  87. return defaults
  88. def clear_cache(parent=None):
  89. def all_profiles():
  90. return webnotes.conn.sql_list("select name from tabProfile") + ["Control Panel"]
  91. if parent=="Control Panel" or not parent:
  92. parent = all_profiles()
  93. elif isinstance(parent, basestring):
  94. parent = [parent]
  95. for p in parent:
  96. webnotes.cache().delete_value("__defaults:" + p)
  97. webnotes.clear_cache()