# HG changeset patch # User Paul Boddie # Date 1340576337 -7200 # Node ID 1af773c486012a3a17695aa5dfa396c097b87736 # Parent 75836226b403f5e8c2eaad925b82148309c5bb2b Changed the preferences API to expose acceptable and preferred content types. Added a header retrieval utility function. diff -r 75836226b403 -r 1af773c48601 MoinSupport.py --- a/MoinSupport.py Sat Jun 16 21:24:39 2012 +0200 +++ b/MoinSupport.py Mon Jun 25 00:18:57 2012 +0200 @@ -224,6 +224,14 @@ else: return request.path +def getHeader(request, header_name, prefix=None): + if hasattr(request, "getHeader"): + return request.getHeader(header_name) + elif hasattr(request, "headers"): + return request.headers[header_name] + else: + return request.env[(prefix and prefix + "_" or "") + header_name.upper()] + # Content/media type and preferences support. class MediaRange: @@ -432,11 +440,12 @@ keys.sort(reverse=True) return [ordered[key] for key in keys] - def get_preferred_type(self, available): + def get_acceptable_types(self, available): """ - Return the preferred content/media type from those in the 'available' - list, given the known preferences. + Return content/media types from those in the 'available' list supported + by the known preferences grouped by preference level in descending order + of preference. """ matches = {} @@ -467,9 +476,22 @@ if all_q: all_q.sort(reverse=True) - return matches[all_q[0]] + return [matches[q] for q in all_q] else: - return None + return [] + + def get_preferred_types(self, available): + + """ + Return the preferred content/media types from those in the 'available' + list, given the known preferences. + """ + + preferred = self.get_acceptable_types(available) + if preferred: + return preferred[0] + else: + return [] # Page access functions. diff -r 75836226b403 -r 1af773c48601 tests/test_preferences.py --- a/tests/test_preferences.py Sat Jun 16 21:24:39 2012 +0200 +++ b/tests/test_preferences.py Mon Jun 25 00:18:57 2012 +0200 @@ -54,20 +54,20 @@ "text/html" ] expected = ["text/html;level=1"] -print prefs.get_preferred_type(available) == expected, ":", prefs.get_preferred_type(available), "==", expected +print prefs.get_preferred_types(available) == expected, ":", prefs.get_preferred_types(available), "==", expected available = [ "text/plain", "image/jpeg" ] expected = ["image/jpeg"] -print prefs.get_preferred_type(available) == expected, ":", prefs.get_preferred_type(available), "==", expected +print prefs.get_preferred_types(available) == expected, ":", prefs.get_preferred_types(available), "==", expected available = [ "text/html;level=2", "text/html;level=3" ] expected = ["text/html;level=3"] -print prefs.get_preferred_type(available) == expected, ":", prefs.get_preferred_type(available), "==", expected +print prefs.get_preferred_types(available) == expected, ":", prefs.get_preferred_types(available), "==", expected # vim: tabstop=4 expandtab shiftwidth=4