示例#1
0
 def handle(self, req):
     # type: (Request) -> Response
     params = self.params_class(self.ctx.config)
     if req.access_route:
         self.user_ip = req.access_route[0]
     else:
         self.user_ip = req.remote_addr
     self.is_secure = req.is_secure
     self.user_agent = req.user_agent
     self.rate_limiter = RateLimiter(self.ctx.redis, 'rl')
     try:
         try:
             params.parse(req.values, self.ctx.db)
             self._rate_limit(self.user_ip,
                              getattr(params, 'application_id', None))
             return self._ok(self._handle_internal(params), params.format)
         except errors.WebServiceError:
             raise
         except Exception:
             logger.exception('Error while handling API request')
             raise errors.InternalError()
     except errors.WebServiceError as e:
         if not isinstance(e, errors.TooManyRequests):
             logger.warning("WS error: %s", e.message)
         return self._error(e.code,
                            e.message,
                            params.format,
                            status=e.status)
示例#2
0
 def handle(self, req):
     params = self.params_class(self.config)
     if req.access_route:
         self.user_ip = req.access_route[0]
     else:
         self.user_ip = req.remote_addr
     self.is_secure = req.is_secure
     self.user_agent = req.user_agent
     self.rate_limiter = RateLimiter(self.redis, 'rl')
     try:
         try:
             params.parse(req.values, self.conn)
             self._rate_limit(self.user_ip,
                              getattr(params, 'application_id', None))
             return self._ok(self._handle_internal(params), params.format)
         except errors.WebServiceError:
             raise
         except StandardError:
             logger.exception('Error while handling API request')
             raise errors.InternalError()
     except errors.WebServiceError, e:
         logger.error("WS error: %s", e.message)
         return self._error(e.code,
                            e.message,
                            params.format,
                            status=e.status)
示例#3
0
 def handle(self, req):
     params = self.params_class()
     try:
         try:
             params.parse(req.values, self.conn)
             return self._ok(self._handle_internal(params), params.format)
         except errors.WebServiceError:
             raise
         except StandardError:
             logger.exception('Error while handling API request')
             raise errors.InternalError()
     except errors.WebServiceError, e:
         return self._error(e.code, e.message, params.format, status=e.status)
示例#4
0
 def handle(self, req):
     # type: (Request) -> Response
     params = self.params_class(self.ctx.config)
     if req.access_route:
         self.user_ip = req.access_route[0]
     else:
         self.user_ip = req.remote_addr
     self.is_secure = req.is_secure
     self.user_agent = req.user_agent
     self.rate_limiter = RateLimiter(self.ctx.redis, 'rl')
     try:
         t0 = time.time()
         try:
             try:
                 params.parse(req.values, self.ctx.db)
                 application_id = getattr(params, 'application_id', None)
                 if self.ctx.statsd is not None:
                     request_type = self.__class__.__name__
                     self.ctx.statsd.incr(
                         'requests,app={},request={}'.format(
                             application_id, request_type))
                 self._rate_limit(self.user_ip, application_id)
                 return self._ok(self._handle_internal(params),
                                 params.format)
             except errors.WebServiceError:
                 raise
             except Exception:
                 logger.exception('Error while handling API request')
                 raise errors.InternalError()
         finally:
             t1 = time.time()
             if self.ctx.statsd is not None:
                 request_type = self.__class__.__name__
                 self.ctx.statsd.timing(
                     'request_duration,request={}'.format(request_type),
                     1000 * (t1 - t0))
     except errors.WebServiceError as e:
         if not isinstance(e, errors.TooManyRequests):
             logger.warning("WS error: %s", e.message)
         return self._error(e.code,
                            e.message,
                            params.format,
                            status=e.status)