コード例 #1
0
ファイル: views.py プロジェクト: jeanqasaur/jeeves
    def real_view_fn(request):
        try:
            profile = UserProfile.objects.get(username=request.user.username)

            ans = view_fn(request, profile, *args, **kwargs)
            template_name = ans[0]
            context_dict = ans[1]

            if template_name == "redirect":
                path = context_dict
                return HttpResponseRedirect(JeevesLib.concretize(profile, path))

            concretizeState = JeevesLib.jeevesState.policyenv.getNewSolverState(profile)
            def concretize(val):
                return concretizeState.concretizeExp(val, JeevesLib.jeevesState.pathenv.getEnv())
            add_to_context(context_dict, request, template_name, profile, concretize)

            return render_to_response(template_name, RequestContext(request, context_dict))

        except Exception:
            import traceback
            traceback.print_exc()
            raise
        finally:
            # Clear concretization cache.
            JeevesLib.clear_cache()
コード例 #2
0
ファイル: views.py プロジェクト: zhaojq-github/jeeves
    def real_view_fn(request):
        try:
            profile = UserProfile.objects.get(username=request.user.username)

            ans = view_fn(request, profile, *args, **kwargs)
            template_name = ans[0]
            context_dict = ans[1]

            if template_name == "redirect":
                path = context_dict
                return HttpResponseRedirect(JeevesLib.concretize(
                    profile, path))

            concretizeState = JeevesLib.jeevesState.policyenv.getNewSolverState(
                profile)

            def concretize(val):
                return concretizeState.concretizeExp(
                    val, JeevesLib.jeevesState.pathenv.getEnv())

            add_to_context(context_dict, request, template_name, profile,
                           concretize)

            return render_to_response(template_name,
                                      RequestContext(request, context_dict))

        except Exception:
            import traceback
            traceback.print_exc()
            raise
        finally:
            # Clear concretization cache.
            JeevesLib.clear_cache()
コード例 #3
0
ファイル: testCaching.py プロジェクト: jeanqasaur/jeeves
    def test_scope(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda ctxt : ctxt)

        y = 5

        def awesome_function():
            y = 7
            if x:
                return 30
            y = 19
            return 17

        z = awesome_function()

        self.assertEqual(JeevesLib.concretize(True, y), 5)
        self.assertEqual(JeevesLib.concretize(False, y), 5)
        self.assertEqual(JeevesLib.concretize(True, z), 30)
        self.assertEqual(JeevesLib.concretize(False, z), 17)
        self.assertEqual(JeevesLib.concretize(True, y), 5)
        self.assertEqual(JeevesLib.concretize(False, y), 5)
        self.assertEqual(JeevesLib.concretize(True, z), 30)
        self.assertEqual(JeevesLib.concretize(False, z), 17)
コード例 #4
0
    def test_scope(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda ctxt: ctxt)

        y = 5

        def awesome_function():
            y = 7
            if x:
                return 30
            y = 19
            return 17

        z = awesome_function()

        self.assertEqual(JeevesLib.concretize(True, y), 5)
        self.assertEqual(JeevesLib.concretize(False, y), 5)
        self.assertEqual(JeevesLib.concretize(True, z), 30)
        self.assertEqual(JeevesLib.concretize(False, z), 17)
        self.assertEqual(JeevesLib.concretize(True, y), 5)
        self.assertEqual(JeevesLib.concretize(False, y), 5)
        self.assertEqual(JeevesLib.concretize(True, z), 30)
        self.assertEqual(JeevesLib.concretize(False, z), 17)
コード例 #5
0
    def test_restrict_all_restrictive(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda _: False)
        self.assertFalse(JeevesLib.concretize(None, x))
        self.assertFalse(JeevesLib.concretize(None, x))
コード例 #6
0
ファイル: testCaching.py プロジェクト: jeanqasaur/jeeves
    def test_restrict_all_restrictive(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda _: False)
        self.assertFalse(JeevesLib.concretize(None, x))
        self.assertFalse(JeevesLib.concretize(None, x))
コード例 #7
0
    def test_restrict_all_permissive(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda _: True)
        self.assertTrue(JeevesLib.concretize(None, x))

        # Now we test the cache.
        self.assertTrue(JeevesLib.concretize(None, x))
        self.assertEqual(len(JeevesLib.get_cache()), 1)
コード例 #8
0
ファイル: testCaching.py プロジェクト: jeanqasaur/jeeves
    def test_restrict_all_permissive(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda _: True)
        self.assertTrue(JeevesLib.concretize(None, x))

        # Now we test the cache.
        self.assertTrue(JeevesLib.concretize(None, x))
        self.assertEqual(len(JeevesLib.get_cache()), 1)
コード例 #9
0
ファイル: testCaching.py プロジェクト: jeanqasaur/jeeves
    def test_restrict_with_context(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda y: y == 2)

        self.assertTrue(JeevesLib.concretize(2, x))
        self.assertTrue(JeevesLib.concretize(2, x))

        self.assertFalse(JeevesLib.concretize(3, x))
        self.assertFalse(JeevesLib.concretize(3, x))
コード例 #10
0
    def test_restrict_with_context(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda y: y == 2)

        self.assertTrue(JeevesLib.concretize(2, x))
        self.assertTrue(JeevesLib.concretize(2, x))

        self.assertFalse(JeevesLib.concretize(3, x))
        self.assertFalse(JeevesLib.concretize(3, x))
コード例 #11
0
ファイル: testCaching.py プロジェクト: jeanqasaur/jeeves
    def test_restrict_with_sensitive_value(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda y: y == 2)
        value = JeevesLib.mkSensitive(x, 42, 41)

        self.assertEquals(JeevesLib.concretize(2, value), 42)
        self.assertEquals(JeevesLib.concretize(2, value), 42)

        self.assertEquals(JeevesLib.concretize(1, value), 41)
        self.assertEquals(JeevesLib.concretize(1, value), 41)

        self.assertEquals(len(JeevesLib.get_cache()), 2)
コード例 #12
0
    def test_restrict_with_sensitive_value(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda y: y == 2)
        value = JeevesLib.mkSensitive(x, 42, 41)

        self.assertEquals(JeevesLib.concretize(2, value), 42)
        self.assertEquals(JeevesLib.concretize(2, value), 42)

        self.assertEquals(JeevesLib.concretize(1, value), 41)
        self.assertEquals(JeevesLib.concretize(1, value), 41)

        self.assertEquals(len(JeevesLib.get_cache()), 2)
コード例 #13
0
    def test_jmap_for(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda ctxt: ctxt)

        l = JeevesLib.mkSensitive(x, [0, 1, 2], [3, 4, 5, 6])
        m = 0
        for t in l:
            m = m + t * t

        self.assertEqual(JeevesLib.concretize(True, m), 5)
        self.assertEqual(JeevesLib.concretize(False, m), 86)
        self.assertEqual(JeevesLib.concretize(True, m), 5)
        self.assertEqual(JeevesLib.concretize(False, m), 86)
コード例 #14
0
ファイル: testCaching.py プロジェクト: jeanqasaur/jeeves
    def test_jmap_for(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda ctxt : ctxt)

        l = JeevesLib.mkSensitive(x, [0,1,2], [3,4,5,6])
        m = 0
        for t in l:
            m = m + t*t

        self.assertEqual(JeevesLib.concretize(True, m), 5)
        self.assertEqual(JeevesLib.concretize(False, m), 86)
        self.assertEqual(JeevesLib.concretize(True, m), 5)
        self.assertEqual(JeevesLib.concretize(False, m), 86)
コード例 #15
0
    def test_restrict_under_conditional(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')

        value = JeevesLib.mkSensitive(x, 42, 0)
        if value == 42:
            JeevesLib.restrict(x, lambda ctxt: ctxt == 1)
        self.assertEquals(JeevesLib.concretize(0, value), 0)
        self.assertEquals(JeevesLib.concretize(0, value), 0)
        self.assertEquals(JeevesLib.concretize(1, value), 42)
        self.assertEquals(JeevesLib.concretize(1, value), 42)

        y = JeevesLib.mkLabel('y')

        value = JeevesLib.mkSensitive(y, 43, 0)
        if value == 42:
            JeevesLib.restrict(y, lambda ctxt: ctxt == 1)
        self.assertEquals(JeevesLib.concretize(0, value), 43)
        self.assertEquals(JeevesLib.concretize(0, value), 43)
        self.assertEquals(JeevesLib.concretize(1, value), 43)
        self.assertEquals(JeevesLib.concretize(1, value), 43)
コード例 #16
0
ファイル: testCaching.py プロジェクト: jeanqasaur/jeeves
    def test_restrict_under_conditional(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')

        value = JeevesLib.mkSensitive(x, 42, 0)
        if value == 42:
            JeevesLib.restrict(x, lambda ctxt : ctxt == 1)
        self.assertEquals(JeevesLib.concretize(0, value), 0)
        self.assertEquals(JeevesLib.concretize(0, value), 0)
        self.assertEquals(JeevesLib.concretize(1, value), 42)
        self.assertEquals(JeevesLib.concretize(1, value), 42)

        y = JeevesLib.mkLabel('y')

        value = JeevesLib.mkSensitive(y, 43, 0)
        if value == 42:
            JeevesLib.restrict(y, lambda ctxt : ctxt == 1)
        self.assertEquals(JeevesLib.concretize(0, value), 43)
        self.assertEquals(JeevesLib.concretize(0, value), 43)
        self.assertEquals(JeevesLib.concretize(1, value), 43)
        self.assertEquals(JeevesLib.concretize(1, value), 43)
コード例 #17
0
    def test_jmap(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda ctxt: ctxt)

        l = JeevesLib.mkSensitive(x, [0, 1, 2], [3, 4, 5, 6])
        m = [x * x for x in l]

        self.assertEqual(JeevesLib.concretize(True, m[0]), 0)
        self.assertEqual(JeevesLib.concretize(True, m[1]), 1)
        self.assertEqual(JeevesLib.concretize(True, m[2]), 4)
        self.assertEqual(JeevesLib.concretize(False, m[0]), 9)
        self.assertEqual(JeevesLib.concretize(False, m[1]), 16)
        self.assertEqual(JeevesLib.concretize(False, m[2]), 25)
        self.assertEqual(JeevesLib.concretize(False, m[3]), 36)
        self.assertEqual(JeevesLib.concretize(True, m[0]), 0)
        self.assertEqual(JeevesLib.concretize(True, m[1]), 1)
        self.assertEqual(JeevesLib.concretize(True, m[2]), 4)
        self.assertEqual(JeevesLib.concretize(False, m[0]), 9)
        self.assertEqual(JeevesLib.concretize(False, m[1]), 16)
        self.assertEqual(JeevesLib.concretize(False, m[2]), 25)
        self.assertEqual(JeevesLib.concretize(False, m[3]), 36)
コード例 #18
0
ファイル: testCaching.py プロジェクト: jeanqasaur/jeeves
    def test_jmap(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda ctxt : ctxt)

        l = JeevesLib.mkSensitive(x, [0,1,2], [3,4,5,6])
        m = [x*x for x in l]

        self.assertEqual(JeevesLib.concretize(True, m[0]), 0)
        self.assertEqual(JeevesLib.concretize(True, m[1]), 1)
        self.assertEqual(JeevesLib.concretize(True, m[2]), 4)
        self.assertEqual(JeevesLib.concretize(False, m[0]), 9)
        self.assertEqual(JeevesLib.concretize(False, m[1]), 16)
        self.assertEqual(JeevesLib.concretize(False, m[2]), 25)
        self.assertEqual(JeevesLib.concretize(False, m[3]), 36)
        self.assertEqual(JeevesLib.concretize(True, m[0]), 0)
        self.assertEqual(JeevesLib.concretize(True, m[1]), 1)
        self.assertEqual(JeevesLib.concretize(True, m[2]), 4)
        self.assertEqual(JeevesLib.concretize(False, m[0]), 9)
        self.assertEqual(JeevesLib.concretize(False, m[1]), 16)
        self.assertEqual(JeevesLib.concretize(False, m[2]), 25)
        self.assertEqual(JeevesLib.concretize(False, m[3]), 36)
コード例 #19
0
ファイル: testCaching.py プロジェクト: jeanqasaur/jeeves
    def test_jlist(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda ctxt : ctxt)

        l = JeevesLib.mkSensitive(x, [0,1,2], [3,4,5,6])
        if x:
            l.append(10)
        else:
            l.append(11)

        self.assertEqual(JeevesLib.concretize(True, l[0]), 0)
        self.assertEqual(JeevesLib.concretize(True, l[1]), 1)
        self.assertEqual(JeevesLib.concretize(True, l[2]), 2)
        self.assertEqual(JeevesLib.concretize(True, l[3]), 10)
        self.assertEqual(JeevesLib.concretize(False, l[0]), 3)
        self.assertEqual(JeevesLib.concretize(False, l[1]), 4)
        self.assertEqual(JeevesLib.concretize(False, l[2]), 5)
        self.assertEqual(JeevesLib.concretize(False, l[3]), 6)
        self.assertEqual(JeevesLib.concretize(False, l[4]), 11)
        self.assertEqual(JeevesLib.concretize(True, l[0]), 0)
        self.assertEqual(JeevesLib.concretize(True, l[1]), 1)
        self.assertEqual(JeevesLib.concretize(True, l[2]), 2)
        self.assertEqual(JeevesLib.concretize(True, l[3]), 10)
        self.assertEqual(JeevesLib.concretize(False, l[0]), 3)
        self.assertEqual(JeevesLib.concretize(False, l[1]), 4)
        self.assertEqual(JeevesLib.concretize(False, l[2]), 5)
        self.assertEqual(JeevesLib.concretize(False, l[3]), 6)
        self.assertEqual(JeevesLib.concretize(False, l[4]), 11)

        if x:
            l[0] = 20
        self.assertEqual(JeevesLib.concretize(True, l[0]), 20)
        self.assertEqual(JeevesLib.concretize(False, l[0]), 3)
        self.assertEqual(JeevesLib.concretize(True, l[0]), 20)
        self.assertEqual(JeevesLib.concretize(False, l[0]), 3)
コード例 #20
0
    def test_jlist(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda ctxt: ctxt)

        l = JeevesLib.mkSensitive(x, [0, 1, 2], [3, 4, 5, 6])
        if x:
            l.append(10)
        else:
            l.append(11)

        self.assertEqual(JeevesLib.concretize(True, l[0]), 0)
        self.assertEqual(JeevesLib.concretize(True, l[1]), 1)
        self.assertEqual(JeevesLib.concretize(True, l[2]), 2)
        self.assertEqual(JeevesLib.concretize(True, l[3]), 10)
        self.assertEqual(JeevesLib.concretize(False, l[0]), 3)
        self.assertEqual(JeevesLib.concretize(False, l[1]), 4)
        self.assertEqual(JeevesLib.concretize(False, l[2]), 5)
        self.assertEqual(JeevesLib.concretize(False, l[3]), 6)
        self.assertEqual(JeevesLib.concretize(False, l[4]), 11)
        self.assertEqual(JeevesLib.concretize(True, l[0]), 0)
        self.assertEqual(JeevesLib.concretize(True, l[1]), 1)
        self.assertEqual(JeevesLib.concretize(True, l[2]), 2)
        self.assertEqual(JeevesLib.concretize(True, l[3]), 10)
        self.assertEqual(JeevesLib.concretize(False, l[0]), 3)
        self.assertEqual(JeevesLib.concretize(False, l[1]), 4)
        self.assertEqual(JeevesLib.concretize(False, l[2]), 5)
        self.assertEqual(JeevesLib.concretize(False, l[3]), 6)
        self.assertEqual(JeevesLib.concretize(False, l[4]), 11)

        if x:
            l[0] = 20
        self.assertEqual(JeevesLib.concretize(True, l[0]), 20)
        self.assertEqual(JeevesLib.concretize(False, l[0]), 3)
        self.assertEqual(JeevesLib.concretize(True, l[0]), 20)
        self.assertEqual(JeevesLib.concretize(False, l[0]), 3)
コード例 #21
0
    def test_jfun(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda ctxt: ctxt)

        y = JeevesLib.mkSensitive(x, [1, 2, 3], [4, 5, 6, 7])

        z = [x * x for x in y]

        self.assertEqual(JeevesLib.concretize(True, z[0]), 1)
        self.assertEqual(JeevesLib.concretize(True, z[1]), 4)
        self.assertEqual(JeevesLib.concretize(True, z[2]), 9)
        self.assertEqual(JeevesLib.concretize(False, z[0]), 16)
        self.assertEqual(JeevesLib.concretize(False, z[1]), 25)
        self.assertEqual(JeevesLib.concretize(False, z[2]), 36)
        self.assertEqual(JeevesLib.concretize(False, z[3]), 49)
        self.assertEqual(JeevesLib.concretize(True, z[0]), 1)
        self.assertEqual(JeevesLib.concretize(True, z[1]), 4)
        self.assertEqual(JeevesLib.concretize(True, z[2]), 9)
        self.assertEqual(JeevesLib.concretize(False, z[0]), 16)
        self.assertEqual(JeevesLib.concretize(False, z[1]), 25)
        self.assertEqual(JeevesLib.concretize(False, z[2]), 36)
        self.assertEqual(JeevesLib.concretize(False, z[3]), 49)
コード例 #22
0
ファイル: testCaching.py プロジェクト: jeanqasaur/jeeves
    def test_jfun(self):
        JeevesLib.clear_cache()

        x = JeevesLib.mkLabel('x')
        JeevesLib.restrict(x, lambda ctxt : ctxt)
 
        y = JeevesLib.mkSensitive(x, [1,2,3], [4,5,6,7])

        z = [x*x for x in y]

        self.assertEqual(JeevesLib.concretize(True, z[0]), 1)
        self.assertEqual(JeevesLib.concretize(True, z[1]), 4)
        self.assertEqual(JeevesLib.concretize(True, z[2]), 9)
        self.assertEqual(JeevesLib.concretize(False, z[0]), 16)
        self.assertEqual(JeevesLib.concretize(False, z[1]), 25)
        self.assertEqual(JeevesLib.concretize(False, z[2]), 36)
        self.assertEqual(JeevesLib.concretize(False, z[3]), 49)
        self.assertEqual(JeevesLib.concretize(True, z[0]), 1)
        self.assertEqual(JeevesLib.concretize(True, z[1]), 4)
        self.assertEqual(JeevesLib.concretize(True, z[2]), 9)
        self.assertEqual(JeevesLib.concretize(False, z[0]), 16)
        self.assertEqual(JeevesLib.concretize(False, z[1]), 25)
        self.assertEqual(JeevesLib.concretize(False, z[2]), 36)
        self.assertEqual(JeevesLib.concretize(False, z[3]), 49)