X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/5d1dcf0b143ba6409b66ca13ddf31143d6e00a59..8a078a30db08afb680c48ce94d6e576236febeed:/src/experiments/base.py diff --git a/src/experiments/base.py b/src/experiments/base.py new file mode 100644 index 000000000..3430df289 --- /dev/null +++ b/src/experiments/base.py @@ -0,0 +1,42 @@ +import hashlib +from django.conf import settings + + +class Experiment: + slug = None + name = 'experiment' + explicit = False + size = 0 + + def qualify(self, request): + return True + + def __init__(self, request): + self.value = self.get_value(request) + + def override(self, value): + self.value = value + + def get_value(self, request): + overrides = getattr(settings, 'EXPERIMENTS_OVERRIDES', {}) + slug = self.slug + if slug in overrides: + return overrides[slug] + + if self.qualify(request) is False: + return None + + cookie_value = request.COOKIES.get(f'EXPERIMENT_{slug}') + if cookie_value is not None: + if cookie_value == 'on': + return True + elif cookie_value == 'off': + return False + + number = int( + hashlib.md5( + (slug + request.META['REMOTE_ADDR']).encode('utf-8') + ).hexdigest(), + 16 + ) % 10e6 / 10e6 + return number < self.size