def CreateFlow(self, args, context=None): if not args.client_id: raise ValueError("client_id must be provided") if args.flow.name in self.allowed_file_finder_flow_names: self._CheckFileFinderArgs(args.flow.args) override_flow_name = self.effective_file_finder_flow_name override_flow_args = self._FixFileFinderArgs(args.flow.args) throttler = self._GetFileFinderThrottler() elif args.flow.name in self.allowed_artifact_collector_flow_names: self._CheckArtifactCollectorFlowArgs(args.flow.args) override_flow_name = self.effective_artifact_collector_flow_name override_flow_args = None throttler = self._GetArtifactCollectorFlowThrottler() else: raise access_control.UnauthorizedAccess( "Creating arbitrary flows (%s) is not allowed." % args.flow.name) try: throttler.EnforceLimits(args.client_id.ToString(), context.username, args.flow.name, args.flow.args) except throttle.DuplicateFlowError as e: # If a similar flow did run recently, just return it. return ApiRobotReturnDuplicateFlowHandler(flow_id=e.flow_id) except throttle.DailyFlowRequestLimitExceededError as e: # Raise ResourceExhaustedError so that the user gets an HTTP 429. raise api_call_handler_base.ResourceExhaustedError(str(e)) return ApiRobotCreateFlowHandler( override_flow_name=override_flow_name, override_flow_args=override_flow_args)
def FailureResourceExhausted(self, args, context=None): raise api_call_handler_base.ResourceExhaustedError("exhausted")