def resolve(media_type, default, raise_not_found=True): if media_type == '*/*' or not media_type: media_type = default # PERF(kgriffs): Under CPython we do not need this shortcut to # improve performance since most calls will be resolved by the # LRU cache on resolve(). On the other hand, it doesn't hurt, # and it certainly makes a difference under PyPy. try: handler = self.data[media_type] except KeyError: handler = None if not handler: # PERF(kgriffs): We just do this slower check every time, rather # than trying to first check the dict directly, since the result # will almost always be cached anyway. # NOTE(kgriffs): Wrap keys in a tuple to make them hashable. matched_type = _best_match(media_type, tuple(self.data.keys())) if not matched_type: if raise_not_found: raise errors.HTTPUnsupportedMediaType( description='{0} is an unsupported media type.'. format(media_type)) return None, None, None handler = self.data[matched_type] return ( handler, getattr(handler, '_serialize_sync', None), getattr(handler, '_deserialize_sync', None), )
def find_by_media_type(self, media_type, default): # PERF(jmvrbanac): Check via a quick methods first for performance if media_type == '*/*' or not media_type: return self.data[default] try: return self.data[media_type] except KeyError: pass # PERF(jmvrbanac): Fallback to the slower method resolved = self._resolve_media_type(media_type, self.data.keys()) if not resolved: raise errors.HTTPUnsupportedMediaType( '{0} is an unsupported media type.'.format(media_type)) return self.data[resolved]
def find_by_media_type(self, media_type, default, raise_not_found=True): # PERF(jmvrbanac): Check via a quick methods first for performance if media_type == '*/*' or not media_type: media_type = default try: return self.data[media_type] except KeyError: pass # PERF(jmvrbanac): Fallback to the slower method. # NOTE(kgriffs): Wrap keys in a tuple to make them hashable. resolved = _best_match(media_type, tuple(self.data.keys())) if not resolved: if raise_not_found: raise errors.HTTPUnsupportedMediaType( description='{0} is an unsupported media type.'.format( media_type)) return None return self.data[resolved]