code: def get_response(self):
          
          last_good_request = self.request
          middleware_result = None
          try:
              last_good_request, middleware_result = self.program.execute_input_middleware_stream(self.request, self)
          except GiottoException as exc:
              # save this exception so it can be re-raised from within
              # get_data_response() so that get_concrete_response() can handle it
              self.middleware_interrupt_exc = exc
              self.request = last_good_request
          else:
              self.request = middleware_result # middleware ended cleanly
  
          if GiottoControl in type(middleware_result).mro():
              # middleware returned a control object
              self.middleware_control = middleware_result
              self.request = last_good_request
  
          response = self.get_concrete_response()
  
          if self.persist_data:
              response = self.persist(self.persist_data, response)
  
          return self.program.execute_output_middleware_stream(self.request, response, self)
docs: High level function for getting a response. This is what the concrete
          controller should call. Returns a controller specific response.