def generate_client_and_spec(self, yaml_str, callback=default_error_callback): swagger_dict = yaml.load(yaml_str) spec = ApiSpec(swagger_dict) callers_dict = generate_client_callers( spec, 10, callback, ) assert len(callers_dict.keys()) == 1 assert 'do_test' in callers_dict handler = callers_dict['do_test'] assert type(handler).__name__ == 'function' return handler, spec
def __init__(self, name, yaml_str=None, yaml_path=None, timeout=None, error_callback=None, formats=None, do_persist=True, host=None, port=None): """An API Specification""" self.name = name if yaml_path: log.info("Loading swagger file at %s" % yaml_path) swagger_dict = yaml.load(open(yaml_path)) elif yaml_str: swagger_dict = yaml.load(yaml_str) else: raise Exception("No swagger file specified") self.api_spec = ApiSpec(swagger_dict, formats, host, port) if timeout: self.client_timeout = timeout if error_callback: self.error_callback = error_callback # Auto-generate class methods for every object model defined # in the swagger spec, calling that model's constructor # Ex: # klue_api.Version(version='1.2.3') => return a Version object for model_name in self.api_spec.definitions: model_generator = generate_model_instantiator(model_name, self.api_spec.definitions) # Associate model generator to ApiPool().<api_name>.model.<model_name> setattr(self.model, model_name, model_generator) # Make this bravado-core model persistent? if do_persist: spec = swagger_dict['definitions'][model_name] if 'x-persist' in spec: self._make_persistent(model_name, spec['x-persist']) # Auto-generate client callers # so we can write # api.call.login(param) => call /v1/login/ on server with param as json parameter callers_dict = generate_client_callers(self.api_spec, self.client_timeout, self.error_callback) for method, caller in callers_dict.items(): setattr(self.client, method, caller)