def process_request(self, request): #noinspection PyBroadException if not AB_TEST_ACTIVE: return None try: sessionTests = request.session.get(AB_TEST_SESSION_NAME, {}) if sessionTests is None: sessionTests = {} newSessionTests = {} requestTests = ABTestRequest() for activeTest in Test.objects.filter(active=True): if activeTest.pk in sessionTests and TestResult.objects.filter(pk=sessionTests[activeTest.pk]).exists(): activeTestResult = TestResult.objects.get(pk=sessionTests[activeTest.pk]) else: activeTestResult = TestResult.chooseExperiment(request, activeTest) newSessionTests[activeTest.pk] = activeTestResult.pk requestTests[activeTest] = activeTestResult request.session[AB_TEST_SESSION_NAME] = newSessionTests setattr(request, AB_TEST_REQUEST_NAME, requestTests) except Exception as ex: getLogger(AB_TEST_LOGGER_MIDDLEWARE).error("error processing request: %s", ex) if not AB_TEST_FAIL_SILENT_MIDDLEWARE: raise return None