def __call__(self, *args, **kwargs): if 'handler' in kwargs: handler = kwargs['handler']; del kwargs['handler'] else: handler = None if 'binding' in kwargs: binding = kwargs['binding']; del kwargs['binding'] else: binding = None if REF in self.schema and self.schema[REF] == "#": self.schema = binding._schema if REF in self.target_schema and self.target_schema[REF] == "#": self.target_schema = binding._schema url = self.generate_url(binding, self.route) params = utils.dictionary_to_params(kwargs) args = self._process_args(args) data = loads(dumps(args, cls=utils.JSONEncoder)) res = requests.request(self.method, url=url, json=data, params=params, **self.request_kwargs) utils.validate_response_status(res) return handler(res)
def __init__(self, base_url="http://localhost", schema_path="/schema", **requests_kwargs): self._resources = {} self.base_url = base_url self._schema_cache = {} response = requests.get(base_url+schema_path, **requests_kwargs) utils.validate_response_status(response) self._schema = response.json() self._schema_cache[schema_path+"#"] = self._schema for name, desc in self._schema[PROPERTIES].items(): response = requests.get(self.base_url + desc[REF], **requests_kwargs) utils.validate_response_status(response) class_schema = response.json() resource = Resource.factory(desc.get(DOC, ""), name, class_schema, requests_kwargs, self) setattr(self, resource.__name__, resource) self._resources[name] = resource self._schema_cache[desc[REF]] = class_schema self._schema[PROPERTIES][name] = class_schema