From 433efe06191a7007ca8c5bf8fafee5c7c1439ebb Mon Sep 17 00:00:00 2001 From: Michael Merickel <github@m.merickel.org> Date: Mon, 15 Oct 2018 04:03:15 +0200 Subject: [PATCH] Merge pull request #3326 from mmerickel/fix-deprecated-accept-predicate --- pyramid/predicates.py | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pyramid/predicates.py b/pyramid/predicates.py index 5e54bad..97edae8 100644 --- a/pyramid/predicates.py +++ b/pyramid/predicates.py @@ -130,16 +130,26 @@ return self.val.match(val) is not None class AcceptPredicate(object): - def __init__(self, val, config): - self.val = val + _is_using_deprecated_ranges = False + + def __init__(self, values, config): + if not is_nonstr_iter(values): + values = (values,) + # deprecated media ranges were only supported in versions of the + # predicate that didn't support lists, so check it here + if len(values) == 1 and '*' in values[0]: + self._is_using_deprecated_ranges = True + self.values = values def text(self): - return 'accept = %s' % (self.val,) + return 'accept = %s' % (', '.join(self.values),) phash = text def __call__(self, context, request): - return self.val in request.accept + if self._is_using_deprecated_ranges: + return self.values[0] in request.accept + return bool(request.accept.acceptable_offers(self.values)) class ContainmentPredicate(object): def __init__(self, val, config): -- Gitblit v1.9.3