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)
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)
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)
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)