def dispatch(**kwargs):
    if "default" in kwargs:
        default = kwargs["default"].lower() if hasattr(
            kwargs["default"], "lower") else kwargs["default"]
        del kwargs["default"]
    else:
        default = "get"

    verbs = CaseInsensitiveDict()
    verbs.update(kwargs)

    def dispatch_request(request, *args, **kwargs):
        if request.method.lower() not in verbs:
            if default in verbs:
                view = verbs[default]
            else:
                # sorted is for determinist ordering for testing purpose
                return HttpResponseNotAllowed(
                    sorted(map(lambda x: x.upper(), verbs.keys())))

        else:
            view = verbs[request.method.lower()]

        return view(request, *args, **kwargs)

    return dispatch_request
Ejemplo n.º 2
0
class CaseInsensitiveTestCase(unittest.TestCase):
    def setUp(self):
        self.d = CaseInsensitiveDict(foo='bar')

    def test_keyfunc_passthrough(self):
        self.d[42] = 'bar'
        self.assertEqual(self.d[42], 'bar')

    def test_getitem(self):
        self.assertEqual(self.d['FOO'], 'bar')

    def test_setitem(self):
        self.d['BAR'] = 'baz'
        self.assertEqual(self.d['bar'], 'baz')

    def test_delitem(self):
        del self.d['FOO']
        with self.assertRaises(KeyError):
            self.d['foo']

    def test_update_new_key(self):
        self.d.update({'bar': 'baz', 'BAZ': 'quux'})
        self.assertEqual(self.d['bar'], 'baz')
        self.assertEqual(self.d['baz'], 'quux')

    def test_update_overwrite(self):
        self.d.update({'FOO': 'baz'})
        self.assertEqual(self.d['foo'], 'baz')

    def test_setdefault(self):
        self.d.setdefault('FOO', 'baz')
        self.assertEqual(self.d['foo'], 'bar')

    def test_fromkeys(self):
        d = CaseInsensitiveDict.fromkeys(['foo'], 'bar')
        self.assertEqual(d['FOO'], 'bar')
Ejemplo n.º 3
0
class CaseInsensitiveTestCase(unittest.TestCase):
    def setUp(self):
        self.d = CaseInsensitiveDict(foo='bar')

    def test_keyfunc_passthrough(self):
        self.d[42] = 'bar'
        self.assertEqual(self.d[42], 'bar')

    def test_getitem(self):
        self.assertEqual(self.d['FOO'], 'bar')

    def test_setitem(self):
        self.d['BAR'] = 'baz'
        self.assertEqual(self.d['bar'], 'baz')

    def test_delitem(self):
        del self.d['FOO']
        with self.assertRaises(KeyError):
            self.d['foo']

    def test_update_new_key(self):
        self.d.update({'bar': 'baz', 'BAZ': 'quux'})
        self.assertEqual(self.d['bar'], 'baz')
        self.assertEqual(self.d['baz'], 'quux')

    def test_update_overwrite(self):
        self.d.update({'FOO': 'baz'})
        self.assertEqual(self.d['foo'], 'baz')

    def test_setdefault(self):
        self.d.setdefault('FOO', 'baz')
        self.assertEqual(self.d['foo'], 'bar')

    def test_fromkeys(self):
        d = CaseInsensitiveDict.fromkeys(['foo'], 'bar')
        self.assertEqual(d['FOO'], 'bar')
Ejemplo n.º 4
0
 def test_fromkeys(self):
     d = CaseInsensitiveDict.fromkeys(['foo'], 'bar')
     self.assertEqual(d['FOO'], 'bar')
Ejemplo n.º 5
0
 def setUp(self):
     self.d = CaseInsensitiveDict(foo='bar')
Ejemplo n.º 6
0
 def test_fromkeys(self):
     d = CaseInsensitiveDict.fromkeys(['foo'], 'bar')
     self.assertEqual(d['FOO'], 'bar')
Ejemplo n.º 7
0
 def setUp(self):
     self.d = CaseInsensitiveDict(foo='bar')