docs: def create_injector(param_name, fun_param_value):
      '''Dependency injection with Bottle.
  
      This creates a simple dependency injector that will map
      ``param_name`` in routes to the value ``fun_param_value()``
      each time the route is invoked.
  
      ``fun_param_value`` is a closure so that it is lazily evaluated.
      This is useful for handling thread local services like database
      connections.
  
      :param str param_name: name of function parameter to inject into
      :param fun_param_value: the value to insert
      :type fun_param_value: a closure that can be applied with zero
                             arguments
      '''
      class _(object):
          api = 2
  
          def apply(self, callback, route):
              if param_name not in inspect.getargspec(route.callback)[0]:
                  return callback
  
              def _(*args, **kwargs):
                  pval = fun_param_value()
                  if pval is None:
                      logger.error('service "%s" unavailable', param_name)
                      bottle.abort(503, 'service "%s" unavailable' % param_name)
                      return
                  kwargs[param_name] = pval
                  return callback(*args, **kwargs)
              return _
      return _()