小编Ste*_*veJ的帖子

如何使用 FastAPI 和 Swagger 允许任意查询参数?

注意:这个问题与这里的问题不同,因为我需要它与 Swagger 一起工作。

给定一个 FastAPIGET端点,我希望允许任意一组 URL 参数,同时保持 Swagger 支持。

我的用例是我想要支持一组类似于 JSON API 的查询参数,如下所示:

/api/books/?include=author&sort=name,zip&sort[author]=-lname&fields=name,phone,street
Run Code Online (Sandbox Code Playgroud)

使用方括号使我无法使用传统的类来对查询参数进行建模,因此我直接使用该Request对象。但是,我想使用 Swagger 来测试端点。我找不到提供任意 URL 参数的方法。我很高兴将它们作为单个字符串输入。

人们可能会这样想:

def books(**params): 
    ....
Run Code Online (Sandbox Code Playgroud)

这给出了一个curl语句:

api/books?params=sort%5Bone%5D%3Dtwo'
Run Code Online (Sandbox Code Playgroud)

我真正想要的是:

api/books?sort&one%5D%3Dtwo'
Run Code Online (Sandbox Code Playgroud)

python swagger fastapi

9
推荐指数
1
解决办法
2946
查看次数

在Python中,如何输入提示“has attribute”?

考虑这个人为的例子;

@dataclass
class A:
    name: str = "John"
    ....

@dataclass
class B:
    name: str = "Doe"
Run Code Online (Sandbox Code Playgroud)

问:如何键入提示具有属性的对象,例如以下内容?

def print_name(obj: HasAttr['name'])
    print(obj.name)
Run Code Online (Sandbox Code Playgroud)

我理解展示你所尝试的内容的 SO 规则。我能提供的最好的就是我已经搜索了文档;Pep526PythonSheets文档,并且我知道这个问题。似乎没有任何帮助(或者也许我错过了。)

[编辑]我认识到你可以通过继承到达那里,但我不想走那条路。

python type-hinting python-3.x

8
推荐指数
1
解决办法
2078
查看次数

SVN (Tortoise) 不再检测提交时新添加的文件(自动忽略)

问题:截至最近,如果我将新文件添加到签出的存储库中,则添加的文件默认会被忽略,并且在提交期间不会显示在文件列表中。

重现: 1)在签出的文件夹中创建一个新文件。2) 文件上方的图标是“忽略” 3) 提交 4) 添加的文件未显示在要提交的文件列表中

故障排除:我怀疑我不小心设置了全局或项目忽略设置,但我找不到它。

(这是我的全局忽略列表)

*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store Thumbs.db .vs Outputx86 x86 Debug Release obj bin *.user *.DotSettings *.cache new.lzip VERSION Output *.suo *cache *.mybackup *-cache *-SetupFiles
Run Code Online (Sandbox Code Playgroud)

(在问这个问题之前我已经做了很多搜索,但找不到合适的答案。)

编辑: 我已经验证它仅针对此结帐...但我似乎在文件夹的 svn-properties 下的忽略中找不到任何问题。我什至尝试删除属性的忽略字段,但无济于事。

已解决:感谢吉恩的帮助。事实证明,有人不小心对主结帐文件夹进行了递归忽略。有一个条目“.vs *”,两者之间有一个空格,很难找到。要查看文件夹的忽略属性,请右键单击该文件夹并选择 SVN=> 属性。请注意,忽略属性继承自全局忽略设置和父文件夹。

svn tortoisesvn

5
推荐指数
1
解决办法
1996
查看次数

在 Uvicorn/FastAPI 内发出下游 Https 请求的正确方法是什么?

我有一个 API 端点(FastAPI / Uvicorn)。除此之外,它还向另一个 API 请求信息。当我使用多个并发请求加载 API 时,我开始收到以下错误:

h11._util.LocalProtocolError: can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE
Run Code Online (Sandbox Code Playgroud)

在正常环境中,我会利用request.session,但我知道它不是完全线程安全的。

因此,在 FastAPI 等框架内使用请求的正确方法是什么,其中多个线程将requests同时使用该库?

python python-requests fastapi

5
推荐指数
1
解决办法
4478
查看次数

Python:从函数创建列表,返回单个项目或另一个列表

(Python 3.5).

问题陈述:给定一个返回项目或项目列表的函数,是否有一行语句可以从调用上述函数的结果初始化新列表?

细节:我查看了python列表上的文档,并在repl上尝试了一些东西,但我似乎无法想出这个.

我正在调用一个读取xml文档的第三方函数.该函数有时会返回一个列表,有时会返回一个项目(取决于存在多少个xml条目).

出于我的目的,我总是需要一个可以迭代的列表 - 即使它是一个长度.下面的代码正确地完成了我想要的.鉴于Python的优雅,它看起来很笨重.我怀疑有一种单行方式.

def force_list(item_or_list):
    """
    Returns a list from either an item or a list.
    :param item_or_list: Either a single object, or a list of objects
    :return: A list of objects, potentially with a length of 1.
    """
    if item_or_list is None: return None
    _new_list = []
    if isinstance(item_or_list, list):
        _new_list.extend(item_or_list)
    else:
        _new_list.append(item_or_list)
    return _new_list
Run Code Online (Sandbox Code Playgroud)

先谢谢,SteveJ

python list

4
推荐指数
1
解决办法
2772
查看次数

可拖动的线在 Matplotlib 中相互选择

我正在尝试使用 matplotlib 处理和挑选创建一类可拖动的线。目的是在图形上设置不同的阈值和间隔。这是代码:

import matplotlib.pyplot as plt
import matplotlib.lines as lines
import numpy as np

class draggable_lines:

    def __init__(self, ax, kind, XorY):

        self.ax = ax
        self.c = ax.get_figure().canvas
        self.o = kind
        self.XorY = XorY

        if kind == "h":
            x = [-1, 1]
            y = [XorY, XorY]

        elif kind == "v":
            x = [XorY, XorY]
            y = [-1, 1]

        else:
            print("choose h or v line")

        self.line = lines.Line2D(x, y, picker=5)
        self.ax.add_line(self.line)
        self.c.draw()
        sid = self.c.mpl_connect('pick_event', self.clickonline)

    # pick line when I …
Run Code Online (Sandbox Code Playgroud)

python lines matplotlib event-handling drag

4
推荐指数
1
解决办法
1936
查看次数

动态创建类时如何在字段上设置类型提示

由于超出这个问题范围的原因,我想创建一个动态的 Python-Pydantic 类。我很接近,但不知道如何添加类型提示。

鉴于:

class MyClass(BaseModel):

    class Config:
        extra = Extra.allow

        schema_extra = {
            '$id': "http://my-site.com/production.json",
            '$schema': "https://json-schema.org/draft/2020-12/schema",
            'title': 'pattern="^.+-.*"'
        }


if __name__ == '__main__':

    cls = type('A', (MyClass,), {'__doc__': 'class created by type', 'my_field': Field("test", type='int')})
    p = cls()
    schema = p.schema()
    pprint(schema)
Run Code Online (Sandbox Code Playgroud)

我明白了:

{'$id': 'http://my-site.com/production.json',
 '$schema': 'https://json-schema.org/draft/2020-12/schema',
 'description': 'class created by type',
 'properties': {'my_field': {'default': 'test',
                             'title': 'My Field',
                             'type': 'string'}},
 'title': 'pattern="^.+-.*"',
 'type': 'object'}
Run Code Online (Sandbox Code Playgroud)

我希望“ properties -> myfield -> type ”为int而不是string

python pydantic

4
推荐指数
1
解决办法
2412
查看次数

Python:为方法调用添加可选参数的更优雅方式

这可能看起来微不足道,但这是我经常遇到的一个条件,并希望找到一种更优雅的方式来编写这段代码.该方法虽然与问题不是非常相关,但它采用文本值和可选的is_checked值来创建单选按钮(使用dominate).在这种情况下,我不能将'checked'设置为None,或者设置为false - 它必须存在或不存在.看起来我不应该两次写'输入'行,只是为了可选地添加一个参数.

def _get_radio_button(text: str, is_checked=False):

    with label(text, cls="radio-inline") as lbl:
        if is_checked:
            input(text, type="radio", name="optradio", checked='checked')
        else:
            input(text, type="radio", name="optradio")

    return lbl
Run Code Online (Sandbox Code Playgroud)

这将是我的第二种方法,但它是相同的代码行,而且可读性较差 - 尽管可能更多一些干.

a = dict(type='radio', name='optradio')
if is_checked: 
    a['checked']='checked'
with label(text, cls="radio-inline") as lbl:
    input(text, **a)
Run Code Online (Sandbox Code Playgroud)

问题:如何在不牺牲可读性的情况下以最少的行处理此代码案例?

python optional-parameters keyword-argument python-3.x

2
推荐指数
1
解决办法
158
查看次数