summaryrefslogtreecommitdiff
path: root/tests/test_config/test_util.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_config/test_util.py')
-rw-r--r--tests/test_config/test_util.py273
1 files changed, 151 insertions, 122 deletions
diff --git a/tests/test_config/test_util.py b/tests/test_config/test_util.py
index 540f3d14c..a56c00082 100644
--- a/tests/test_config/test_util.py
+++ b/tests/test_config/test_util.py
@@ -2,9 +2,11 @@ import unittest
from pyramid.compat import text_
+
class TestActionInfo(unittest.TestCase):
def _getTargetClass(self):
from pyramid.config.util import ActionInfo
+
return ActionInfo
def _makeOne(self, filename, lineno, function, linerepr):
@@ -13,11 +15,13 @@ class TestActionInfo(unittest.TestCase):
def test_class_conforms(self):
from zope.interface.verify import verifyClass
from pyramid.interfaces import IActionInfo
+
verifyClass(IActionInfo, self._getTargetClass())
def test_instance_conforms(self):
from zope.interface.verify import verifyObject
from pyramid.interfaces import IActionInfo
+
verifyObject(IActionInfo, self._makeOne('f', 0, 'f', 'f'))
def test_ctor(self):
@@ -29,15 +33,16 @@ class TestActionInfo(unittest.TestCase):
def test___str__(self):
inst = self._makeOne('filename', 0, 'function', ' linerepr ')
- self.assertEqual(str(inst),
- "Line 0 of file filename:\n linerepr ")
+ self.assertEqual(
+ str(inst), "Line 0 of file filename:\n linerepr "
+ )
class TestPredicateList(unittest.TestCase):
-
def _makeOne(self):
from pyramid.config.util import PredicateList
from pyramid import predicates
+
inst = PredicateList()
for name, factory in (
('xhr', predicates.XHRPredicate),
@@ -51,7 +56,7 @@ class TestPredicateList(unittest.TestCase):
('match_param', predicates.MatchParamPredicate),
('custom', predicates.CustomPredicate),
('traverse', predicates.TraversePredicate),
- ):
+ ):
inst.add(name, factory)
return inst
@@ -67,6 +72,7 @@ class TestPredicateList(unittest.TestCase):
def test_ordering_number_of_predicates(self):
from pyramid.config.util import predvalseq
+
order1, _, _ = self._callFUT(
xhr='xhr',
request_method='request_method',
@@ -78,7 +84,7 @@ class TestPredicateList(unittest.TestCase):
containment='containment',
request_type='request_type',
custom=predvalseq([DummyCustomPredicate()]),
- )
+ )
order2, _, _ = self._callFUT(
xhr='xhr',
request_method='request_method',
@@ -90,7 +96,7 @@ class TestPredicateList(unittest.TestCase):
containment='containment',
request_type='request_type',
custom=predvalseq([DummyCustomPredicate()]),
- )
+ )
order3, _, _ = self._callFUT(
xhr='xhr',
request_method='request_method',
@@ -101,7 +107,7 @@ class TestPredicateList(unittest.TestCase):
accept='accept',
containment='containment',
request_type='request_type',
- )
+ )
order4, _, _ = self._callFUT(
xhr='xhr',
request_method='request_method',
@@ -111,7 +117,7 @@ class TestPredicateList(unittest.TestCase):
header='header',
accept='accept',
containment='containment',
- )
+ )
order5, _, _ = self._callFUT(
xhr='xhr',
request_method='request_method',
@@ -120,7 +126,7 @@ class TestPredicateList(unittest.TestCase):
match_param='foo=bar',
header='header',
accept='accept',
- )
+ )
order6, _, _ = self._callFUT(
xhr='xhr',
request_method='request_method',
@@ -128,34 +134,28 @@ class TestPredicateList(unittest.TestCase):
request_param='param',
match_param='foo=bar',
header='header',
- )
+ )
order7, _, _ = self._callFUT(
xhr='xhr',
request_method='request_method',
path_info='path_info',
request_param='param',
match_param='foo=bar',
- )
+ )
order8, _, _ = self._callFUT(
xhr='xhr',
request_method='request_method',
path_info='path_info',
request_param='param',
- )
+ )
order9, _, _ = self._callFUT(
- xhr='xhr',
- request_method='request_method',
- path_info='path_info',
- )
+ xhr='xhr', request_method='request_method', path_info='path_info'
+ )
order10, _, _ = self._callFUT(
- xhr='xhr',
- request_method='request_method',
- )
- order11, _, _ = self._callFUT(
- xhr='xhr',
- )
- order12, _, _ = self._callFUT(
- )
+ xhr='xhr', request_method='request_method'
+ )
+ order11, _, _ = self._callFUT(xhr='xhr')
+ order12, _, _ = self._callFUT()
self.assertEqual(order1, order2)
self.assertTrue(order3 > order2)
self.assertTrue(order4 > order3)
@@ -170,36 +170,19 @@ class TestPredicateList(unittest.TestCase):
def test_ordering_importance_of_predicates(self):
from pyramid.config.util import predvalseq
- order1, _, _ = self._callFUT(
- xhr='xhr',
- )
- order2, _, _ = self._callFUT(
- request_method='request_method',
- )
- order3, _, _ = self._callFUT(
- path_info='path_info',
- )
- order4, _, _ = self._callFUT(
- request_param='param',
- )
- order5, _, _ = self._callFUT(
- header='header',
- )
- order6, _, _ = self._callFUT(
- accept='accept',
- )
- order7, _, _ = self._callFUT(
- containment='containment',
- )
- order8, _, _ = self._callFUT(
- request_type='request_type',
- )
- order9, _, _ = self._callFUT(
- match_param='foo=bar',
- )
+
+ order1, _, _ = self._callFUT(xhr='xhr')
+ order2, _, _ = self._callFUT(request_method='request_method')
+ order3, _, _ = self._callFUT(path_info='path_info')
+ order4, _, _ = self._callFUT(request_param='param')
+ order5, _, _ = self._callFUT(header='header')
+ order6, _, _ = self._callFUT(accept='accept')
+ order7, _, _ = self._callFUT(containment='containment')
+ order8, _, _ = self._callFUT(request_type='request_type')
+ order9, _, _ = self._callFUT(match_param='foo=bar')
order10, _, _ = self._callFUT(
- custom=predvalseq([DummyCustomPredicate()]),
- )
+ custom=predvalseq([DummyCustomPredicate()])
+ )
self.assertTrue(order1 > order2)
self.assertTrue(order2 > order3)
self.assertTrue(order3 > order4)
@@ -212,53 +195,50 @@ class TestPredicateList(unittest.TestCase):
def test_ordering_importance_and_number(self):
from pyramid.config.util import predvalseq
+
order1, _, _ = self._callFUT(
- xhr='xhr',
- request_method='request_method',
- )
+ xhr='xhr', request_method='request_method'
+ )
order2, _, _ = self._callFUT(
- custom=predvalseq([DummyCustomPredicate()]),
- )
+ custom=predvalseq([DummyCustomPredicate()])
+ )
self.assertTrue(order1 < order2)
order1, _, _ = self._callFUT(
- xhr='xhr',
- request_method='request_method',
- )
+ xhr='xhr', request_method='request_method'
+ )
order2, _, _ = self._callFUT(
request_method='request_method',
custom=predvalseq([DummyCustomPredicate()]),
- )
+ )
self.assertTrue(order1 > order2)
order1, _, _ = self._callFUT(
- xhr='xhr',
- request_method='request_method',
- path_info='path_info',
- )
+ xhr='xhr', request_method='request_method', path_info='path_info'
+ )
order2, _, _ = self._callFUT(
request_method='request_method',
custom=predvalseq([DummyCustomPredicate()]),
- )
+ )
self.assertTrue(order1 < order2)
order1, _, _ = self._callFUT(
- xhr='xhr',
- request_method='request_method',
- path_info='path_info',
- )
+ xhr='xhr', request_method='request_method', path_info='path_info'
+ )
order2, _, _ = self._callFUT(
xhr='xhr',
request_method='request_method',
custom=predvalseq([DummyCustomPredicate()]),
- )
+ )
self.assertTrue(order1 > order2)
def test_different_custom_predicates_with_same_hash(self):
from pyramid.config.util import predvalseq
+
class PredicateWithHash(object):
def __hash__(self):
return 1
+
a = PredicateWithHash()
b = PredicateWithHash()
_, _, a_phash = self._callFUT(custom=predvalseq([a]))
@@ -269,57 +249,71 @@ class TestPredicateList(unittest.TestCase):
order, predicates, phash = self._callFUT(traverse='/1/:a/:b')
self.assertEqual(len(predicates), 1)
pred = predicates[0]
- info = {'traverse':'abc'}
+ info = {'traverse': 'abc'}
request = DummyRequest()
result = pred(info, request)
self.assertEqual(result, True)
- self.assertEqual(info, {'traverse':'abc'})
+ self.assertEqual(info, {'traverse': 'abc'})
def test_traverse_matches(self):
order, predicates, phash = self._callFUT(traverse='/1/:a/:b')
self.assertEqual(len(predicates), 1)
pred = predicates[0]
- info = {'match':{'a':'a', 'b':'b'}}
+ info = {'match': {'a': 'a', 'b': 'b'}}
request = DummyRequest()
result = pred(info, request)
self.assertEqual(result, True)
- self.assertEqual(info, {'match':
- {'a':'a', 'b':'b', 'traverse':('1', 'a', 'b')}})
+ self.assertEqual(
+ info, {'match': {'a': 'a', 'b': 'b', 'traverse': ('1', 'a', 'b')}}
+ )
def test_traverse_matches_with_highorder_chars(self):
order, predicates, phash = self._callFUT(
- traverse=text_(b'/La Pe\xc3\xb1a/{x}', 'utf-8'))
+ traverse=text_(b'/La Pe\xc3\xb1a/{x}', 'utf-8')
+ )
self.assertEqual(len(predicates), 1)
pred = predicates[0]
- info = {'match':{'x':text_(b'Qu\xc3\xa9bec', 'utf-8')}}
+ info = {'match': {'x': text_(b'Qu\xc3\xa9bec', 'utf-8')}}
request = DummyRequest()
result = pred(info, request)
self.assertEqual(result, True)
self.assertEqual(
info['match']['traverse'],
- (text_(b'La Pe\xc3\xb1a', 'utf-8'),
- text_(b'Qu\xc3\xa9bec', 'utf-8'))
- )
+ (
+ text_(b'La Pe\xc3\xb1a', 'utf-8'),
+ text_(b'Qu\xc3\xa9bec', 'utf-8'),
+ ),
+ )
def test_custom_predicates_can_affect_traversal(self):
from pyramid.config.util import predvalseq
+
def custom(info, request):
m = info['match']
m['dummy'] = 'foo'
return True
+
_, predicates, _ = self._callFUT(
- custom=predvalseq([custom]),
- traverse='/1/:dummy/:a')
+ custom=predvalseq([custom]), traverse='/1/:dummy/:a'
+ )
self.assertEqual(len(predicates), 2)
- info = {'match':{'a':'a'}}
+ info = {'match': {'a': 'a'}}
request = DummyRequest()
self.assertTrue(all([p(info, request) for p in predicates]))
- self.assertEqual(info, {'match':
- {'a':'a', 'dummy':'foo',
- 'traverse':('1', 'foo', 'a')}})
+ self.assertEqual(
+ info,
+ {
+ 'match': {
+ 'a': 'a',
+ 'dummy': 'foo',
+ 'traverse': ('1', 'foo', 'a'),
+ }
+ },
+ )
def test_predicate_text_is_correct(self):
from pyramid.config.util import predvalseq
+
_, predicates, _ = self._callFUT(
xhr='xhr',
request_method='request_method',
@@ -336,10 +330,12 @@ class TestPredicateList(unittest.TestCase):
DummyCustomPredicate.classmethod_predicate_no_text,
]
),
- match_param='foo=bar')
+ match_param='foo=bar',
+ )
self.assertEqual(predicates[0].text(), 'xhr = True')
- self.assertEqual(predicates[1].text(),
- "request_method = request_method")
+ self.assertEqual(
+ predicates[1].text(), "request_method = request_method"
+ )
self.assertEqual(predicates[2].text(), 'path_info = path_info')
self.assertEqual(predicates[3].text(), 'request_param param')
self.assertEqual(predicates[4].text(), 'header header')
@@ -354,25 +350,25 @@ class TestPredicateList(unittest.TestCase):
def test_match_param_from_string(self):
_, predicates, _ = self._callFUT(match_param='foo=bar')
request = DummyRequest()
- request.matchdict = {'foo':'bar', 'baz':'bum'}
+ request.matchdict = {'foo': 'bar', 'baz': 'bum'}
self.assertTrue(predicates[0](Dummy(), request))
def test_match_param_from_string_fails(self):
_, predicates, _ = self._callFUT(match_param='foo=bar')
request = DummyRequest()
- request.matchdict = {'foo':'bum', 'baz':'bum'}
+ request.matchdict = {'foo': 'bum', 'baz': 'bum'}
self.assertFalse(predicates[0](Dummy(), request))
def test_match_param_from_dict(self):
- _, predicates, _ = self._callFUT(match_param=('foo=bar','baz=bum'))
+ _, predicates, _ = self._callFUT(match_param=('foo=bar', 'baz=bum'))
request = DummyRequest()
- request.matchdict = {'foo':'bar', 'baz':'bum'}
+ request.matchdict = {'foo': 'bar', 'baz': 'bum'}
self.assertTrue(predicates[0](Dummy(), request))
def test_match_param_from_dict_fails(self):
- _, predicates, _ = self._callFUT(match_param=('foo=bar','baz=bum'))
+ _, predicates, _ = self._callFUT(match_param=('foo=bar', 'baz=bum'))
request = DummyRequest()
- request.matchdict = {'foo':'bar', 'baz':'foo'}
+ request.matchdict = {'foo': 'bar', 'baz': 'foo'}
self.assertFalse(predicates[0](Dummy(), request))
def test_request_method_sequence(self):
@@ -386,20 +382,22 @@ class TestPredicateList(unittest.TestCase):
self.assertFalse(predicates[0](Dummy(), request))
def test_request_method_ordering_hashes_same(self):
- hash1, _, __= self._callFUT(request_method=('GET', 'HEAD'))
- hash2, _, __= self._callFUT(request_method=('HEAD', 'GET'))
+ hash1, _, __ = self._callFUT(request_method=('GET', 'HEAD'))
+ hash2, _, __ = self._callFUT(request_method=('HEAD', 'GET'))
self.assertEqual(hash1, hash2)
- hash1, _, __= self._callFUT(request_method=('GET',))
- hash2, _, __= self._callFUT(request_method='GET')
+ hash1, _, __ = self._callFUT(request_method=('GET',))
+ hash2, _, __ = self._callFUT(request_method='GET')
self.assertEqual(hash1, hash2)
def test_unknown_predicate(self):
from pyramid.exceptions import ConfigurationError
+
self.assertRaises(ConfigurationError, self._callFUT, unknown=1)
def test_predicate_close_matches(self):
from pyramid.exceptions import ConfigurationError
- with self.assertRaises(ConfigurationError) as context:
+
+ with self.assertRaises(ConfigurationError) as context:
self._callFUT(method='GET')
expected_msg = (
"Unknown predicate values: {'method': 'GET'} "
@@ -410,81 +408,111 @@ class TestPredicateList(unittest.TestCase):
def test_notted(self):
from pyramid.config import not_
from pyramid.testing import DummyRequest
+
request = DummyRequest()
_, predicates, _ = self._callFUT(
- xhr='xhr',
- request_method=not_('POST'),
- header=not_('header'),
- )
+ xhr='xhr', request_method=not_('POST'), header=not_('header')
+ )
self.assertEqual(predicates[0].text(), 'xhr = True')
- self.assertEqual(predicates[1].text(),
- "!request_method = POST")
+ self.assertEqual(predicates[1].text(), "!request_method = POST")
self.assertEqual(predicates[2].text(), '!header header')
self.assertEqual(predicates[1](None, request), True)
self.assertEqual(predicates[2](None, request), True)
+
class TestDeprecatedPredicates(unittest.TestCase):
def test_it(self):
import warnings
+
with warnings.catch_warnings(record=True) as w:
warnings.filterwarnings('always')
from pyramid.config.predicates import XHRPredicate
+
self.assertEqual(len(w), 1)
+
class Test_sort_accept_offers(unittest.TestCase):
def _callFUT(self, offers, order=None):
from pyramid.config.util import sort_accept_offers
+
return sort_accept_offers(offers, order)
def test_default_specificities(self):
result = self._callFUT(['text/html', 'text/html;charset=utf8'])
- self.assertEqual(result, [
- 'text/html;charset=utf8', 'text/html',
- ])
+ self.assertEqual(result, ['text/html;charset=utf8', 'text/html'])
def test_specific_type_order(self):
result = self._callFUT(
- ['text/html', 'application/json', 'text/html;charset=utf8', 'text/plain'],
+ [
+ 'text/html',
+ 'application/json',
+ 'text/html;charset=utf8',
+ 'text/plain',
+ ],
['application/json', 'text/html'],
)
- self.assertEqual(result, [
- 'application/json', 'text/html;charset=utf8', 'text/html', 'text/plain',
- ])
+ self.assertEqual(
+ result,
+ [
+ 'application/json',
+ 'text/html;charset=utf8',
+ 'text/html',
+ 'text/plain',
+ ],
+ )
def test_params_order(self):
result = self._callFUT(
- ['text/html;charset=utf8', 'text/html;charset=latin1', 'text/html;foo=bar'],
+ [
+ 'text/html;charset=utf8',
+ 'text/html;charset=latin1',
+ 'text/html;foo=bar',
+ ],
['text/html;charset=latin1', 'text/html;charset=utf8'],
)
- self.assertEqual(result, [
- 'text/html;charset=latin1', 'text/html;charset=utf8', 'text/html;foo=bar',
- ])
+ self.assertEqual(
+ result,
+ [
+ 'text/html;charset=latin1',
+ 'text/html;charset=utf8',
+ 'text/html;foo=bar',
+ ],
+ )
def test_params_inherit_type_prefs(self):
result = self._callFUT(
['text/html;charset=utf8', 'text/plain;charset=latin1'],
['text/plain', 'text/html'],
)
- self.assertEqual(result, ['text/plain;charset=latin1', 'text/html;charset=utf8'])
+ self.assertEqual(
+ result, ['text/plain;charset=latin1', 'text/html;charset=utf8']
+ )
+
class DummyCustomPredicate(object):
def __init__(self):
self.__text__ = 'custom predicate'
- def classmethod_predicate(*args): pass
+ def classmethod_predicate(*args):
+ pass
+
classmethod_predicate.__text__ = 'classmethod predicate'
classmethod_predicate = classmethod(classmethod_predicate)
@classmethod
- def classmethod_predicate_no_text(*args): pass # pragma: no cover
+ def classmethod_predicate_no_text(*args):
+ pass # pragma: no cover
+
class Dummy(object):
def __init__(self, **kw):
self.__dict__.update(**kw)
+
class DummyRequest:
subpath = ()
matchdict = None
+
def __init__(self, environ=None):
if environ is None:
environ = {}
@@ -492,6 +520,7 @@ class DummyRequest:
self.params = {}
self.cookies = {}
+
class DummyConfigurator(object):
def maybe_dotted(self, thing):
return thing