import datetime from django.contrib.auth.models import User from djangotools.common.types import parse_date from djangotools.models import UserPreferenceManager from baby.app.context.base import UserPrefences from baby.app.models.regle import Regle def get_user(user=None, pref_class=UserPrefences): if user is None: try: user = User.objects.create_user("user") except User.DoesNotExist: user = User.objects.get(username="user") if isinstance(pref_class, UserPreferenceManager): user.pref = pref_class if callable(pref_class): user.pref = pref_class(user) else: user.pref = UserPreferenceManagerMocker(user, pref_class) return user def create_regles(lengthes, delta=0, today=None, user=None, pref_class=UserPrefences): user = get_user(user, pref_class=pref_class) if isinstance(today, str): today = parse_date(today) curr = today or datetime.date.today() if isinstance(delta, int): curr = curr - datetime.timedelta(days=delta) elif isinstance(delta, datetime.timedelta): curr = curr - delta else: raise Exception() Regle.objects.create(user, curr) for duration in reversed(lengthes): curr -= datetime.timedelta(days=duration) Regle.objects.create(user, curr) return user class UserPreferenceManagerMocker(UserPreferenceManager): def __init__(self, user, data, profile="default"): super().__init__(user, profile) self.data = data def get(self, key, default=None): return self.data.get(key, default) def prefs(data, classe=UserPrefences): class Classe(classe): def __init__(self, user, profile="default", data=data): super().__init__(user, profile) self.data = data def get(self, key, default=None): return self.data.get(key, default) return Classe class Request: def __init__(self, method, user, get=None, post=None, body=None, headers=None, pref_class=UserPrefences): self.method = method self.GET = get or {} self.POST = post or {} self.body = body self.headers = headers if headers is not None else {} self.user = get_user(user, pref_class) def test(self, Context, **kwargs): ctx = Context() return ctx.get_context(self, **kwargs)