def view_factory(self, name, resource): """ Returns a view function for all links within this route and resource. :param name: Flask view name :param flask_potion.Resource resource: """ request_schema = _bind_schema(self.request_schema, resource) response_schema = _bind_schema(self.response_schema, resource) view_func = self.view_func def view(*args, **kwargs): instance = resource() if isinstance(request_schema, (FieldSet, Instances)): kwargs.update(request_schema.parse_request(request)) elif isinstance(request_schema, Schema): args += (request_schema.parse_request(request),) response = view_func(instance, *args, **kwargs) # TODO add 'describedBy' link header if response schema is a ToOne/ToMany/Instances field. if response_schema is None or not self.format_response: return response else: return response_schema.format_response(response) return view
def schema_factory(self, resource): """ Returns a link schema for a specific resource. """ request_schema = _bind_schema(self.request_schema, resource) response_schema = _bind_schema(self.response_schema, resource) # NOTE "href" for rel="instances" MUST NOT be relative; others MAY BE relative schema = OrderedDict([("rel", self.relation), ("href", url_rule_to_uri_pattern( self.rule_factory(resource, relative=False))), ("method", self.method)]) if self.title: schema["title"] = self.title if self.description: schema["description"] = self.description if request_schema: schema["schema"] = request_schema.request if response_schema: schema["targetSchema"] = response_schema.response return schema
def bind(self, resource): if self.properties: self.properties = { key: _bind_schema(value, resource) for key, value in self.properties.items()} if self.pattern_properties: self.pattern_properties = { key: _bind_schema(value, resource) for key, value in self.pattern_properties.items()} if self.additional_properties: self.additional_properties = _bind_schema(self.additional_properties, resource) return self
def schema_factory(self, resource): """ Returns a link schema for a specific resource. """ request_schema = _bind_schema(self.request_schema, resource) response_schema = _bind_schema(self.response_schema, resource) # NOTE "href" for rel="instances" MUST NOT be relative; others MAY BE relative schema = OrderedDict([ ("rel", self.relation), ("href", url_rule_to_uri_pattern(self.rule_factory(resource, relative=False))), ("method", self.method) ]) if self.title: schema["title"] = self.title if self.description: schema["description"] = self.description if request_schema: schema["schema"] = request_schema.request if response_schema: schema["targetSchema"] = response_schema.response return schema