irkerd: Add InvalidRequest and use it to flatten Irker.handle()
authorW. Trevor King <wking@tremily.us>
Fri, 7 Mar 2014 04:21:03 +0000 (20:21 -0800)
committerEric S. Raymond <esr@thyrsus.com>
Tue, 11 Mar 2014 04:42:04 +0000 (00:42 -0400)
commitaae700b19db564d1ef37cdfa60dcb032a6cee166
tree3f3c656d7d9f55f20906fdadee0914cf099d2157
parent9a53ff42a920e015b819f762d916604289f15502
irkerd: Add InvalidRequest and use it to flatten Irker.handle()

The old implementation had several instances of logic like this:

  if exception_condition:
      self.logerr("invalid request")
  else:
      # continue_processing

This increases nesting after each round of exception checking, and
makes the logic of the whole function harder to follow.  This commit
replaces that logic with:

  try:
      if exception_condition:
          raise InvalidRequest("invalid request")
      # continue peocessing
  except InvalidRequest, e:
      self.logerr(str(e))

Because the guts of the handle() function are already inside a
try/except block, we can add our except clause to the existing block,
and now exception checks don't increase nesting at all.

The exception to this global try/except block is the 'URL has
unexpected type' error, where we do want a local try/except block
inside the channel loop.  That way we get both errors about invalid
URLs and continue to attempt valid URLs.  This matches the existing
logic for this check, but conflicts with the current target.valid
check (which doesn't log an error and does stop processing of further
channels).
irkerd