Legend:

Given that these are all public, we mustn't break compatibility with code that invokes them with existing resource objects, as long as those resource objects return resources synchronously. So we could either do a bunch of conditionals to make sure we return resource objects synchronously when no deferreds are returned, or we could just come up with a separate implementation of Request.process that uses a different codepath entirely. If we do the latter, we must make sure we maintain compatibility with users utilizing the various resource hooks.