testutils.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. # pylint: disable=protected-access
  2. from copy import deepcopy
  3. from hashlib import md5
  4. from misago.core import threadstore
  5. from .forms import get_permissions_forms
  6. def fake_post_data(target, data_dict):
  7. """
  8. In order for form to don't fail submission, all permission fields need
  9. to receive values. This function populates data dict with default values
  10. for permissions, making form validation pass
  11. """
  12. for form in get_permissions_forms(target):
  13. for field in form:
  14. if field.value() is True:
  15. data_dict[field.html_name] = 1
  16. elif field.value() is False:
  17. data_dict[field.html_name] = 0
  18. else:
  19. data_dict[field.html_name] = field.value()
  20. return data_dict
  21. def override_acl(user, new_acl):
  22. """overrides user permissions with specified ones"""
  23. final_cache = deepcopy(user.acl)
  24. final_cache.update(new_acl)
  25. if user.is_authenticated:
  26. user._acl_cache = final_cache
  27. user.acl_key = md5(str(user.pk).encode()).hexdigest()[:8]
  28. user.save(update_fields=['acl_key'])
  29. threadstore.set('acl_%s' % user.acl_key, final_cache)
  30. else:
  31. threadstore.set('acl_%s' % user.acl_key, final_cache)