util.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import datetime
  2. from django.contrib.auth.models import User
  3. from djangotools.common.types import parse_date
  4. from djangotools.models import UserPreferenceManager
  5. from baby.app.context.base import UserPrefences
  6. from baby.app.models.regle import Regle
  7. def get_user(user=None, pref_class=UserPrefences):
  8. if user is None:
  9. try:
  10. user = User.objects.create_user("user")
  11. except User.DoesNotExist:
  12. user = User.objects.get(username="user")
  13. if isinstance(pref_class, UserPreferenceManager):
  14. user.pref = pref_class
  15. if callable(pref_class):
  16. user.pref = pref_class(user)
  17. else:
  18. user.pref = UserPreferenceManagerMocker(user, pref_class)
  19. return user
  20. def create_regles(lengthes, delta=0, today=None, user=None, pref_class=UserPrefences):
  21. user = get_user(user, pref_class=pref_class)
  22. if isinstance(today, str):
  23. today = parse_date(today)
  24. curr = today or datetime.date.today()
  25. if isinstance(delta, int):
  26. curr = curr - datetime.timedelta(days=delta)
  27. elif isinstance(delta, datetime.timedelta):
  28. curr = curr - delta
  29. else:
  30. raise Exception()
  31. Regle.objects.create(user, curr)
  32. for duration in reversed(lengthes):
  33. curr -= datetime.timedelta(days=duration)
  34. Regle.objects.create(user, curr)
  35. return user
  36. class UserPreferenceManagerMocker(UserPreferenceManager):
  37. def __init__(self, user, data, profile="default"):
  38. super().__init__(user, profile)
  39. self.data = data
  40. def get(self, key, default=None):
  41. return self.data.get(key, default)
  42. def prefs(data, classe=UserPrefences):
  43. class Classe(classe):
  44. def __init__(self, user, profile="default", data=data):
  45. super().__init__(user, profile)
  46. self.data = data
  47. def get(self, key, default=None):
  48. return self.data.get(key, default)
  49. return Classe
  50. class Request:
  51. def __init__(self, method, user, get=None, post=None, body=None, headers=None, pref_class=UserPrefences):
  52. self.method = method
  53. self.GET = get or {}
  54. self.POST = post or {}
  55. self.body = body
  56. self.headers = headers if headers is not None else {}
  57. self.user = get_user(user, pref_class)
  58. def test(self, Context, **kwargs):
  59. ctx = Context()
  60. return ctx.get_context(self, **kwargs)