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