utils.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import logging
  2. from contextlib import contextmanager
  3. from django.contrib.auth.models import Permission, User
  4. def post_data(data):
  5. """
  6. Take a dictionary of test data (suitable for comparison to an instance) and return a dict suitable for POSTing.
  7. """
  8. ret = {}
  9. for key, value in data.items():
  10. if value is None:
  11. ret[key] = ''
  12. elif type(value) in (list, tuple):
  13. ret[key] = value
  14. else:
  15. ret[key] = str(value)
  16. return ret
  17. def create_test_user(username='testuser', permissions=list()):
  18. """
  19. Create a User with the given permissions.
  20. """
  21. user = User.objects.create_user(username=username)
  22. for perm_name in permissions:
  23. app, codename = perm_name.split('.')
  24. perm = Permission.objects.get(content_type__app_label=app, codename=codename)
  25. user.user_permissions.add(perm)
  26. return user
  27. def choices_to_dict(choices_list):
  28. """
  29. Convert a list of field choices to a dictionary suitable for direct comparison with a ChoiceSet. For example:
  30. [
  31. {
  32. "value": "choice-1",
  33. "label": "First Choice"
  34. },
  35. {
  36. "value": "choice-2",
  37. "label": "Second Choice"
  38. }
  39. ]
  40. Becomes:
  41. {
  42. "choice-1": "First Choice",
  43. "choice-2": "Second Choice
  44. }
  45. """
  46. return {
  47. choice['value']: choice['label'] for choice in choices_list
  48. }
  49. @contextmanager
  50. def disable_warnings(logger_name):
  51. """
  52. Temporarily suppress expected warning messages to keep the test output clean.
  53. """
  54. logger = logging.getLogger(logger_name)
  55. current_level = logger.level
  56. logger.setLevel(logging.ERROR)
  57. yield
  58. logger.setLevel(current_level)