def find(self, base_url=None, **kwargs): """Find a single item with attributes matching ``**kwargs``. :param base_url: if provided, the generated URL will be appended to it """ kwargs = self._filter_kwargs(kwargs) rl = self._list( '%(base_url)s%(query)s' % { 'base_url': self.build_url(base_url=base_url, **kwargs), 'query': '?%s' % utils.safe_urlencode(kwargs) if kwargs else '' }, self.collection_key) num = len(rl) if num == 0: msg = _("No %(name)s matching %(args)s.") % { 'name': self.resource_class.__name__, 'args': kwargs } raise exceptions.NotFound(404, msg) elif num > 1: raise exceptions.NoUniqueMatch else: return rl[0]
def _build_query_string(self, search_opts): search_opts = search_opts or {} search_opts = utils.unicode_key_value_to_string(search_opts) params = sorted( [(k, v) for (k, v) in search_opts.items() if v]) query_string = "?%s" % utils.safe_urlencode(params) if params else '' return query_string
def list(self, base_url=None, **kwargs): """List the collection. :param base_url: if provided, the generated URL will be appended to it """ kwargs = self._filter_kwargs(kwargs) return self._list( '%(base_url)s%(query)s' % { 'base_url': self.build_url(base_url=base_url, **kwargs), 'query': '?%s' % utils.safe_urlencode(kwargs) if kwargs else '' }, self.collection_key)
def _build_query_string(self, search_opts): search_opts = search_opts or {} params = sorted([(k, v) for (k, v) in search_opts.items() if v]) query_string = "?%s" % utils.safe_urlencode(params) if params else '' return query_string