by_id: Ignore missing Things.

This commit is contained in:
Andre D
2013-07-01 15:51:56 -07:00
committed by Chad Birch
parent 1c4ef53b4e
commit c4fa6d3290
2 changed files with 16 additions and 5 deletions

View File

@@ -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()

View File

@@ -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