注意:这个问题与这里的问题不同,因为我需要它与 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) 考虑这个人为的例子;
@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 规则。我能提供的最好的就是我已经搜索了文档;Pep526、PythonSheets、文档,并且我知道这个问题。似乎没有任何帮助(或者也许我错过了。)
[编辑]我认识到你可以通过继承到达那里,但我不想走那条路。
问题:截至最近,如果我将新文件添加到签出的存储库中,则添加的文件默认会被忽略,并且在提交期间不会显示在文件列表中。
重现: 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=> 属性。请注意,忽略属性继承自全局忽略设置和父文件夹。
我有一个 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 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
我正在尝试使用 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-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。
这可能看起来微不足道,但这是我经常遇到的一个条件,并希望找到一种更优雅的方式来编写这段代码.该方法虽然与问题不是非常相关,但它采用文本值和可选的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 ×7
fastapi ×2
python-3.x ×2
drag ×1
lines ×1
list ×1
matplotlib ×1
pydantic ×1
svn ×1
swagger ×1
tortoisesvn ×1
type-hinting ×1