示例#1
0
    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