コード例 #1
0
ファイル: schemas.py プロジェクト: gpul-org/xea-core
    def get_link(self, path, method, callback, view):
        """
        Return a `coreapi.Link` instance for the given endpoint.
        """
        fields = self.get_path_fields(path, method, callback, view)
        fields += self.get_serializer_fields(path, method, callback, view)
        fields += self.get_pagination_fields(path, method, callback, view)
        fields += self.get_filter_fields(path, method, callback, view)

        if fields and any(
            [field.location in ('form', 'body') for field in fields]):
            encoding = self.get_encoding(path, method, callback, view)
        else:
            encoding = None

        description = self.get_description(path, method, callback, view)

        return coreapi.Link(
            url=urlparse.urljoin(self.url, path),
            action=method.lower(),
            encoding=encoding,
            description=description,
            fields=fields,
            transform=None,  # Not handled, but here for future reference
        )
コード例 #2
0
    def get_link(self, path, method, view):
        """
        Return a `coreapi.Link` instance for the given endpoint.
        """
        fields = self.get_path_fields(path, method, view)
        fields += self.get_serializer_fields(path, method, view)
        fields += self.get_pagination_fields(path, method, view)
        fields += self.get_filter_fields(path, method, view)

        if fields and any([field.location in ('form', 'body') for field in fields]):
            encoding = self.get_encoding(path, method, view)
        else:
            encoding = None

        description = self.get_description(path, method, view)

        if self.url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(
            url=urlparse.urljoin(self.url, path),
            action=method.lower(),
            encoding=encoding,
            fields=fields,
            description=description
        )
コード例 #3
0
    def get_link(self, path, method, view):
        """
        Return a `coreapi.Link` instance for the given endpoint.
        """
        fields = self.get_path_fields(path, method, view)
        fields += self.get_serializer_fields(path, method, view)
        fields += self.get_pagination_fields(path, method, view)
        fields += self.get_filter_fields(path, method, view)

        if fields and any([field.location in ('form', 'body') for field in fields]):
            encoding = self.get_encoding(path, method, view)
        else:
            encoding = None

        description = self.get_description(path, method, view)

        if self.url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(
            url=urlparse.urljoin(self.url, path),
            action=method.lower(),
            encoding=encoding,
            fields=fields,
            description=description
        )
コード例 #4
0
    def get_link(self, path, method, base_url):
        fields = self.get_path_fields(path, method)
        fields += self.get_serializer_fields(path, method)
        fields += self.get_pagination_fields(path, method)
        fields += self.get_filter_fields(path, method)

        if self._manual_fields is not None:
            by_name = {f.name: f for f in fields}
            for f in self._manual_fields:
                by_name[f.name] = f
            fields = list(by_name.values())

        if fields and any([field.location in ('form', 'body') for field in fields]):
            encoding = self.get_encoding(path, method)
        else:
            encoding = None

        description = self.get_description(path, method)

        if base_url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(
            url=urlparse.urljoin(base_url, path),
            action=method.lower(),
            encoding=encoding,
            fields=fields,
            description=description
        )
コード例 #5
0
    def get_link(self, path, method, base_url):
        fields = self.get_path_fields(path, method)
        fields += self.get_serializer_fields(path, method)
        fields += self.get_pagination_fields(path, method)
        fields += self.get_filter_fields(path, method)

        if self._manual_fields is not None:
            by_name = {f.name: f for f in fields}
            for f in self._manual_fields:
                by_name[f.name] = f
            fields = list(by_name.values())

        if fields and any(
            [field.location in ('form', 'body') for field in fields]):
            encoding = self.get_encoding(path, method)
        else:
            encoding = None

        description = self.get_description(path, method)

        if base_url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(url=urlparse.urljoin(base_url, path),
                            action=method.lower(),
                            encoding=encoding,
                            fields=fields,
                            description=description)
コード例 #6
0
    def get_link(self, path, method, callback):
        """
        Return a `coreapi.Link` instance for the given endpoint.
        """
        view = callback.cls()
        for attr, val in getattr(callback, 'initkwargs', {}).items():
            setattr(view, attr, val)

        fields = self.get_path_fields(path, method, callback, view)
        fields += self.get_serializer_fields(path, method, callback, view)
        fields += self.get_pagination_fields(path, method, callback, view)
        fields += self.get_filter_fields(path, method, callback, view)

        if fields and any([field.location in ('form', 'body') for field in fields]):
            encoding = self.get_encoding(path, method, callback, view)
        else:
            encoding = None

        if self.url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(
            url=urlparse.urljoin(self.url, path),
            action=method.lower(),
            encoding=encoding,
            fields=fields
        )
コード例 #7
0
    def get_link(self, path, method, view):
        """ Return a `coreapi.Link` instance for the given endpoint. """
        fields = []
        getters = [
            self.get_path_fields, self.get_serializer_fields,
            self.get_pagination_fields, self.get_filter_fields,
            self.get_docs_fields
        ]
        for getter in getters:
            try:
                fields.extend(getter(path, method, view))
            except Exception:
                pass

        if fields and any(
            [field.location in ('form', 'body') for field in fields]):
            encoding = self.get_encoding(path, method, view)
        else:
            encoding = None

        description = self.get_description(path, method, view)
        permissions = self.get_permissions_docs(path, method, view)
        if permissions is not None:
            description = "{}\nPermissions:\n========\n{}".format(
                description, permissions)

        if self.url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(url=urlparse.urljoin(self.url, path),
                            action=method.lower(),
                            encoding=encoding,
                            fields=fields,
                            description=description)
コード例 #8
0
ファイル: schemas.py プロジェクト: renato-farias/foodtasker
    def get_link(self, path, method, callback):
        """
        Return a `coreapi.Link` instance for the given endpoint.
        """
        view = callback.cls()
        for attr, val in getattr(callback, 'initkwargs', {}).items():
            setattr(view, attr, val)

        fields = self.get_path_fields(path, method, callback, view)
        fields += self.get_serializer_fields(path, method, callback, view)
        fields += self.get_pagination_fields(path, method, callback, view)
        fields += self.get_filter_fields(path, method, callback, view)

        if fields and any(
            [field.location in ('form', 'body') for field in fields]):
            encoding = self.get_encoding(path, method, callback, view)
        else:
            encoding = None

        if self.url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(url=urlparse.urljoin(self.url, path),
                            action=method.lower(),
                            encoding=encoding,
                            fields=fields)
コード例 #9
0
    def get_link(self, path, method, base_url):

        if base_url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(url=urlparse.urljoin(base_url, path),
                            action=method.lower(),
                            encoding=None,
                            fields=self._fields,
                            description=self._description)

        return self._link
コード例 #10
0
    def get_link(self, path, method, base_url):

        if base_url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(
            url=urlparse.urljoin(base_url, path),
            action=method.lower(),
            encoding=None,
            fields=self._fields,
            description=self._description
        )

        return self._link
コード例 #11
0
    def get_link(self, path, method, view):
        fields = self.get_path_fields(path, method, view)
        yaml_doc = None
        func = getattr(view, view.action) if getattr(view, 'action',
                                                     None) else None
        if func and func.__doc__:
            try:
                yaml_doc = yaml.load(func.__doc__)
            except:
                yaml_doc = None
        if yaml_doc and 'desc' in yaml_doc:
            desc = yaml_doc.get('desc', '')
            _method_desc = desc
            params = yaml_doc.get('parameters', [])
            for i in params:
                _name = i.get('name')
                _desc = i.get('desc')
                _required = i.get('required', True)
                _type = i.get('type', 'string')
                _location = i.get('location', 'query')
                _example = i.get('example')
                f = coreapi.Field(name=_name,
                                  location=_location,
                                  required=_required,
                                  description=_desc,
                                  type=_type,
                                  example=_example)
                fields.append(f)
        else:
            _method_desc = func.__doc__ if func and func.__doc__ else ''
            fields += self.get_serializer_fields(path, method, view)
        fields += self.get_pagination_fields(path, method, view)
        fields += self.get_filter_fields(path, method, view)

        if fields and any(
            [field.location in ('form', 'body') for field in fields]):
            encoding = self.get_encoding(path, method, view)
        else:
            encoding = None

        if self.url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(url=urlparse.urljoin(self.url, path),
                            action=method.lower(),
                            encoding=encoding,
                            fields=fields,
                            description=_method_desc)
コード例 #12
0
    def get_link(self, path, method, view):
        """
        Return a `coreapi.Link` instance for the given endpoint.
        """
        description = self.get_description(path, method, view)

        fields = []
        if '---' not in description:
            fields += self.get_path_fields(path, method, view)
            fields += self.get_serializer_fields(path, method, view)
            fields += self.get_pagination_fields(path, method, view)
            fields += self.get_filter_fields(path, method, view)

        if description:
            vals = list(yaml.load_all(description))
            description, para_lst = vals[0], vals[1]
            if para_lst and para_lst.get('parameters'):
                for para in para_lst['parameters']:
                    fields.append(coreapi.Field(
                        name=para['name'],
                        required=para['required'],
                        location=para.get('paramType', 'query'),
                        description=para['description'],
                        type=para.get('type', 'string')
                    ))

        if fields and any([field.location in ('form', 'body') for field in fields]):
            # encoding = self.get_encoding(path, method, view)
            encoding = 'multipart/form-data'
        else:
            encoding = None


        if self.url and path.startswith('/'):
            path = path[1:]

        return coreapi.Link(
            url=urlparse.urljoin(self.url, path),
            action=method.lower(),
            encoding=encoding,
            fields=fields,
            description=description
        )
コード例 #13
0
    def get_link(self, path, method, callback):
        """
        Return a `coreapi.Link` instance for the given endpoint.
        """
        view = callback.cls()

        fields = self.get_path_fields(path, method, callback, view)
        fields += self.get_serializer_fields(path, method, callback, view)
        fields += self.get_pagination_fields(path, method, callback, view)
        fields += self.get_filter_fields(path, method, callback, view)

        if fields and any([field.location in ('form', 'body') for field in fields]):
            encoding = self.get_encoding(path, method, callback, view)
        else:
            encoding = None

        return coreapi.Link(
            url=urlparse.urljoin(self.url, path),
            action=method.lower(),
            encoding=encoding,
            fields=fields
        )