From c4fa6d3290766c0adbf6e94a49f503430fd40028 Mon Sep 17 00:00:00 2001 From: Andre D Date: Mon, 1 Jul 2013 15:51:56 -0700 Subject: [PATCH] by_id: Ignore missing Things. --- r2/r2/controllers/listingcontroller.py | 3 ++- r2/r2/lib/validator/validator.py | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/r2/r2/controllers/listingcontroller.py b/r2/r2/controllers/listingcontroller.py index d75aa65c1..feda8f51d 100755 --- a/r2/r2/controllers/listingcontroller.py +++ b/r2/r2/controllers/listingcontroller.py @@ -514,7 +514,8 @@ class ByIDController(ListingController): return self.names @require_oauth2_scope("read") - @validate(links = VByName("names", thing_cls = Link, multiple = True)) + @validate(links=VByName("names", thing_cls=Link, + ignore_missing=True, multiple=True)) def GET_listing(self, links, **env): if not links: return self.abort404() diff --git a/r2/r2/lib/validator/validator.py b/r2/r2/lib/validator/validator.py index 68bfae2cb..65c6293d4 100644 --- a/r2/r2/lib/validator/validator.py +++ b/r2/r2/lib/validator/validator.py @@ -664,7 +664,8 @@ class VByName(Validator): # Lookup tdb_sql.Thing or tdb_cassandra.Thing objects by fullname. splitter = re.compile('[ ,]+') def __init__(self, param, thing_cls=None, multiple=False, limit=None, - error=errors.NO_THING_ID, backend='sql', **kw): + error=errors.NO_THING_ID, ignore_missing=False, + backend='sql', **kw): # Limit param only applies when multiple is True if not multiple and limit is not None: raise TypeError('multiple must be True when limit is set') @@ -673,6 +674,7 @@ class VByName(Validator): self.multiple = multiple self.limit = limit self._error = error + self.ignore_missing = ignore_missing self.backend = backend Validator.__init__(self, param, **kw) @@ -686,7 +688,11 @@ class VByName(Validator): return self.set_error(errors.TOO_MANY_THING_IDS) if items: try: - return tdb_cassandra.Thing._by_fullname(items, return_dict=False) + return tdb_cassandra.Thing._by_fullname( + items, + ignore_missing=self.ignore_missing, + return_dict=False, + ) except NotFound: pass else: @@ -697,8 +703,12 @@ class VByName(Validator): return self.set_error(errors.TOO_MANY_THING_IDS) if items and (self.multiple or self.re.match(items)): try: - return Thing._by_fullname(items, return_dict=False, - data=True) + return Thing._by_fullname( + items, + return_dict=False, + ignore_missing=self.ignore_missing, + data=True, + ) except NotFound: pass