from pydantic import BaseModel
class Request(BaseModel):
num: int
@validator("num")
@classmethod
def validate_num(cls, num: int) -> int:
return num
Run Code Online (Sandbox Code Playgroud)
对于上述代码,PyCharm 发出警告“此装饰器不会收到它可能期望的可调用对象;内置装饰器返回一个特殊对象”。我认为警告不明确,因此我希望得到一些帮助。
当我将上面的代码更改为:
from fastapi.exceptions import RequestValidationError
from pydantic import BaseModel, validator
from pydantic.error_wrappers import ErrorWrapper
class Request(BaseModel):
num: int
@classmethod
@validator("num")
def validate_num(cls, num: int) -> int:
if num < 0:
raise RequestValidationError([ErrorWrapper(ValueError("error"), ())])
return num
request = Request(num=-2)
Run Code Online (Sandbox Code Playgroud)
警告消失了,但代码在不应该执行的情况下执行时没有任何问题,这意味着验证由于某种原因被忽略。
当我将 parquet 文件加载到 Polars DataFrame 中时,需要大约 5.5 GB 的 RAM。与我尝试过的其他选择相比,Polars 非常棒。然而,Polars 不支持创建像 Pandas 这样的索引。这对我来说很麻烦,因为我的 DataFrame 中的一列是唯一的,并且在我的应用程序中访问 df 中的数据的模式是基于唯一列(类似字典)的行查找。
由于数据帧很大,过滤成本太高。不过,我的 RAM 似乎也不够(32 GB)。我目前正在将 df 转换为“块”,如下所示:
h = df.height # number of rows
chunk_size = 1_000_000 # split each rows
b = (np.linspace(1, math.ceil(h/chunk_size), num=math.ceil(h/chunk_size)))
new_col = (np.repeat(b, chunk_size))[:-( chunk_size - (h%chunk_size))]
df = df.with_column(polars.lit(new_col).alias('new_index'))
m = df.partition_by(groups="new_index", as_dict=True)
del df
gc.collect()
my_dict = {}
for key, value in list(m.items()):
my_dict.update(
{
uas: frame.select(polars.exclude("unique_col")).to_dicts()[0]
for uas, frame in
(
value
.drop("new_index")
.unique(subset=["unique_col"], …Run Code Online (Sandbox Code Playgroud)