class Resource(object): def __init__(self, client, name, resource_base, api_defines=None): self.route_base = resource_base self.client = client self.name = name if api_defines: self.apis = api_defines def __getattr__(self, item): api_info = self.apis.get(item) if not api_info: raise AttributeError('unknown api name: %s' % item) url = '/'.join([self.route_base, api_info['url']]) url = url.replace('//', '/') method = api_info['method'] def fn(params=None, **payload): return self.client.request_api(url, params, method, payload) setattr(self, item, fn) return fn resource_yaml_name = '/'.join(__name__.split('.')[:-1]) + '/resources' _records = load_yaml_file(resource_yaml_name + '.yml') _resource_registry.extend(_records) del _records