utils.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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=None):
  18. """
  19. Create a User with the given permissions.
  20. """
  21. user = User.objects.create_user(username=username)
  22. if permissions is None:
  23. permissions = ()
  24. for perm_name in permissions:
  25. app, codename = perm_name.split('.')
  26. perm = Permission.objects.get(content_type__app_label=app, codename=codename)
  27. user.user_permissions.add(perm)
  28. return user
  29. def choices_to_dict(choices_list):
  30. """
  31. Convert a list of field choices to a dictionary suitable for direct comparison with a ChoiceSet. For example:
  32. [
  33. {
  34. "value": "choice-1",
  35. "label": "First Choice"
  36. },
  37. {
  38. "value": "choice-2",
  39. "label": "Second Choice"
  40. }
  41. ]
  42. Becomes:
  43. {
  44. "choice-1": "First Choice",
  45. "choice-2": "Second Choice
  46. }
  47. """
  48. return {
  49. choice['value']: choice['label'] for choice in choices_list
  50. }
  51. @contextmanager
  52. def disable_warnings(logger_name):
  53. """
  54. Temporarily suppress expected warning messages to keep the test output clean.
  55. """
  56. logger = logging.getLogger(logger_name)
  57. current_level = logger.level
  58. logger.setLevel(logging.ERROR)
  59. yield
  60. logger.setLevel(current_level)