def buildbucket_api_method( request_message_class, response_message_class, **kwargs ): """Defines a buildbucket API method.""" init_auth = auth.endpoints_method( request_message_class, response_message_class, **kwargs ) def decorator(fn): fn = catch_errors(fn, response_message_class) fn = init_auth(fn) ts_mon_time = lambda: utils.datetime_to_timestamp(utils.utcnow()) / 1e6 fn = gae_ts_mon.instrument_endpoint(time_fn=ts_mon_time)(fn) # ndb.toplevel must be the last one. # We use it because codebase uses the following pattern: # results = [f.get_result() for f in futures] # without ndb.Future.wait_all. # If a future has an exception, get_result won't be called successive # futures, and thus may be left running. return ndb.toplevel(fn) return decorator
def buildbucket_api_method( request_message_class, response_message_class, **kwargs): """Extends auth.endpoints_method by converting service errors.""" endpoints_decorator = auth.endpoints_method( request_message_class, response_message_class, **kwargs) def decorator(fn): fn = catch_errors(fn, response_message_class) fn = endpoints_decorator(fn) fn = ndb.toplevel(fn) return fn return decorator
def buildbucket_api_method( request_message_class, response_message_class, **kwargs): """Extends auth.endpoints_method by converting service errors.""" endpoints_decorator = auth.endpoints_method( request_message_class, response_message_class, **kwargs) def decorator(fn): @functools.wraps(fn) def decorated(*args, **kwargs): try: return fn(*args, **kwargs) except errors.Error as ex: assert hasattr(response_message_class, 'error') return response_message_class(error=exception_to_error_message(ex)) return endpoints_decorator(decorated) return decorator
def buildbucket_api_method(request_message_class, response_message_class, **kwargs): """Defines a buildbucket API method.""" endpoints_decorator = auth.endpoints_method(request_message_class, response_message_class, **kwargs) def decorator(fn): fn = catch_errors(fn, response_message_class) fn = endpoints_decorator(fn) fn = ndb.toplevel(fn) def ts_mon_time(): return utils.datetime_to_timestamp(utils.utcnow()) / 1000000.0 fn = gae_ts_mon.instrument_endpoint(time_fn=ts_mon_time)(fn) return fn return decorator
def swarmbucket_api_method(request_message_class, response_message_class, **kwargs): """Defines a swarmbucket API method.""" endpoints_decorator = auth.endpoints_method(request_message_class, response_message_class, **kwargs) def decorator(fn): fn = adapt_exceptions(fn) fn = auth.public(fn) fn = endpoints_decorator(fn) ts_mon_time = lambda: utils.datetime_to_timestamp(utils.utcnow()) / 1e6 fn = gae_ts_mon.instrument_endpoint(time_fn=ts_mon_time)(fn) # ndb.toplevel must be the last one. # See also the comment in endpoint decorator in api.py return ndb.toplevel(fn) return decorator
def buildbucket_api_method(request_message_class, response_message_class, **kwargs): """Extends auth.endpoints_method by converting service errors.""" endpoints_decorator = auth.endpoints_method(request_message_class, response_message_class, **kwargs) def decorator(fn): @functools.wraps(fn) def decorated(*args, **kwargs): try: return fn(*args, **kwargs) except errors.Error as ex: assert hasattr(response_message_class, 'error') return response_message_class( error=exception_to_error_message(ex)) return endpoints_decorator(decorated) return decorator