Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

defaults.py 4.6 KiB

12 anos atrás
12 anos atrás
12 anos atrás
12 anos atrás
12 anos atrás
12 anos atrás
12 anos atrás
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import webnotes
  5. common_keys = ["Control Panel", "__global"]
  6. def set_user_default(key, value, user=None, parenttype=None):
  7. set_default(key, value, user or webnotes.session.user, parenttype)
  8. def add_user_default(key, value, user=None, parenttype=None):
  9. add_default(key, value, user or webnotes.session.user, parenttype)
  10. def get_user_default(key, user=None):
  11. d = get_defaults(user or webnotes.session.user).get(key, None)
  12. return isinstance(d, list) and d[0] or d
  13. def get_user_default_as_list(key, user=None):
  14. d = get_defaults(user or webnotes.session.user).get(key, None)
  15. return (not isinstance(d, list)) and [d] or d
  16. def get_restrictions(user=None):
  17. if not user:
  18. user = webnotes.session.user
  19. if user == webnotes.session.user:
  20. if webnotes.local.restrictions is None:
  21. webnotes.local.restrictions = build_restrictions(user)
  22. return webnotes.local.restrictions
  23. else:
  24. return build_restrictions(user)
  25. def build_restrictions(user):
  26. out = {}
  27. for key, value in webnotes.conn.sql("""select defkey, defvalue
  28. from tabDefaultValue where parent=%s and parenttype='Restriction'""", (user,)):
  29. out.setdefault(key, [])
  30. out[key].append(value)
  31. return out
  32. def get_defaults(user=None):
  33. if not user:
  34. user = webnotes.session.user if webnotes.session else "Guest"
  35. userd = get_defaults_for(user)
  36. userd.update({"user": user, "owner": user})
  37. globald = get_defaults_for()
  38. globald.update(userd)
  39. return globald
  40. def clear_user_default(key, user=None):
  41. clear_default(key, parent=user or webnotes.session.user)
  42. # Global
  43. def set_global_default(key, value):
  44. set_default(key, value, "Control Panel")
  45. def add_global_default(key, value):
  46. add_default(key, value, "Control Panel")
  47. def get_global_default(key):
  48. d = get_defaults().get(key, None)
  49. return isinstance(d, list) and d[0] or d
  50. # Common
  51. def set_default(key, value, parent, parenttype="Control Panel"):
  52. if webnotes.conn.sql("""select defkey from `tabDefaultValue` where
  53. defkey=%s and parent=%s """, (key, parent)):
  54. # update
  55. webnotes.conn.sql("""update `tabDefaultValue` set defvalue=%s, parenttype=%s
  56. where parent=%s and defkey=%s""", (value, parenttype, parent, key))
  57. _clear_cache(parent)
  58. else:
  59. add_default(key, value, parent)
  60. def add_default(key, value, parent, parenttype=None):
  61. d = webnotes.doc({
  62. "doctype": "DefaultValue",
  63. "parent": parent,
  64. "parenttype": parenttype or "Control Panel",
  65. "parentfield": "system_defaults",
  66. "defkey": key,
  67. "defvalue": value
  68. })
  69. d.insert()
  70. if parenttype=="Restriction":
  71. webnotes.local.restrictions = None
  72. _clear_cache(parent)
  73. def clear_default(key=None, value=None, parent=None, name=None, parenttype=None):
  74. conditions = []
  75. values = []
  76. if key:
  77. conditions.append("defkey=%s")
  78. values.append(key)
  79. if value:
  80. conditions.append("defvalue=%s")
  81. values.append(value)
  82. if name:
  83. conditions.append("name=%s")
  84. values.append(name)
  85. if parent:
  86. conditions.append("parent=%s")
  87. clear_cache(parent)
  88. values.append(parent)
  89. else:
  90. clear_cache("Control Panel")
  91. clear_cache("__global")
  92. if parenttype:
  93. conditions.append("parenttype=%s")
  94. values.append(parenttype)
  95. if parenttype=="Restriction":
  96. webnotes.local.restrictions = None
  97. if not conditions:
  98. raise Exception, "[clear_default] No key specified."
  99. webnotes.conn.sql("""delete from tabDefaultValue where %s""" % " and ".join(conditions), values)
  100. _clear_cache(parent)
  101. def get_defaults_for(parent="Control Panel"):
  102. """get all defaults"""
  103. defaults = webnotes.cache().get_value("__defaults:" + parent)
  104. if not defaults:
  105. res = webnotes.conn.sql("""select defkey, defvalue from `tabDefaultValue`
  106. where parent = %s order by creation""", (parent,), as_dict=1)
  107. defaults = webnotes._dict({})
  108. for d in res:
  109. if d.defkey in defaults:
  110. # listify
  111. if not isinstance(defaults[d.defkey], list) and defaults[d.defkey] != d.defvalue:
  112. defaults[d.defkey] = [defaults[d.defkey]]
  113. if d.defvalue not in defaults[d.defkey]:
  114. defaults[d.defkey].append(d.defvalue)
  115. elif d.defvalue is not None:
  116. defaults[d.defkey] = d.defvalue
  117. webnotes.cache().set_value("__defaults:" + parent, defaults)
  118. return defaults
  119. def _clear_cache(parent):
  120. if parent in common_keys:
  121. webnotes.clear_cache()
  122. else:
  123. webnotes.clear_cache(user=webnotes.session.user)
  124. def clear_cache(user=None):
  125. to_clear = []
  126. if user:
  127. to_clear = [user]
  128. elif webnotes.flags.in_install_app!="webnotes":
  129. to_clear = webnotes.conn.sql_list("select name from tabProfile")
  130. for p in to_clear + common_keys:
  131. webnotes.cache().delete_value("__defaults:" + p)