コード例 #1
0
ファイル: routes.py プロジェクト: openECOE/potion
    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
コード例 #2
0
    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
コード例 #3
0
ファイル: routes.py プロジェクト: abbi031892/potion
    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
コード例 #4
0
ファイル: fields.py プロジェクト: rolandjitsu/potion
 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
コード例 #5
0
 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
コード例 #6
0
ファイル: routes.py プロジェクト: abbi031892/potion
    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