__init__.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:yarl 作者: aio-libs 项目源码 文件源码
def _get_str_query(self, *args, **kwargs):
        if kwargs:
            if len(args) > 0:
                raise ValueError("Either kwargs or single query parameter "
                                 "must be present")
            query = kwargs
        elif len(args) == 1:
            query = args[0]
        else:
            raise ValueError("Either kwargs or single query parameter "
                             "must be present")

        if query is None:
            query = ''
        elif isinstance(query, Mapping):
            quoter = partial(_quote, qs=True)
            lst = []
            for k, v in query.items():
                if isinstance(v, str):
                    pass
                elif type(v) == int:  # no subclasses like bool
                    v = str(v)
                else:
                    raise TypeError("Invalid variable type: mapping value "
                                    "should be str or int, got {!r}".format(v))
                lst.append(
                    quoter(k, safe='/?:@') + '=' + quoter(v, safe='/?:@'))
            query = '&'.join(lst)
        elif isinstance(query, str):
            query = _quote(query, safe='/?:@',
                           protected=PROTECT_CHARS,
                           qs=True)
        elif isinstance(query, (bytes, bytearray, memoryview)):
            raise TypeError("Invalid query type: bytes, bytearray and "
                            "memoryview are forbidden")
        elif isinstance(query, Sequence):
            quoter = partial(_quote, qs=True, safe='/?:@')
            query = '&'.join(quoter(k) + '=' + quoter(v)
                             for k, v in query)
        else:
            raise TypeError("Invalid query type: only str, mapping or "
                            "sequence of (str, str) pairs is allowed")

        return query
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号