Я использую Python 3.11 и pydantic 2.7. Я хочу собрать конкретную информацию из моей модели, а сама модель очень большая. Могу ли я собирать данные при анализе/проверке модели?
Я пытался использовать валидатор и переменную класса, но если вы попытаетесь сделать это несколько раз, сбор данных продолжится. Мне нужно, чтобы это было, например. Есть советы?
Мой код с проверкой скорости:
import copy
from time import perf_counter as time
from typing import Any, ClassVar
from pydantic import BaseModel, field_validator
class Employees(BaseModel):
name: str
employees_names: ClassVar[list[str]] = []
@field_validator('name')
@classmethod
def collect_employees_names(cls, value):
cls.employees_names.append(value)
return value
class EmployeesNative(BaseModel):
name: str
class Manager(BaseModel):
name: str
employees: list[Employees]
managers_names: ClassVar[list[str]] = []
@field_validator('name')
@classmethod
def collect_managers_names(cls, value):
cls.managers_names.append(value)
return value
class ManagerNative(BaseModel):
name: str
employees: list[EmployeesNative]
class Results(BaseModel):
managers: list[Manager]
class ResultsNative(BaseModel):
managers: list[ManagerNative]
class Data(BaseModel):
results: list[Results]
class DataNative(BaseModel):
results: list[ResultsNative]
class Schema(BaseModel):
data: Data
class SchemaNative(BaseModel):
data: DataNative
man1 = {'name': 'max', 'employees': [{'name': 'Jorge'}, {'name': 'Sasha'}]}
man2 = {'name': 'kate', 'employees': [{'name': 'Eva'}, {'name': 'Mike'}, {'name': 'Riss'}]}
man3 = {'name': 'bub', 'employees': []}
man4 = {'name': 'slava', 'employees': [{'name': 'Martha'}]}
res1 = {'managers': [man1]}
res2 = {'managers': [man2, man3]}
res3 = {'managers': [man4]}
def parse_native(obj: dict[str, Any]) -> list[str]:
""" Get all persons names in schema. """
mod = SchemaNative.model_validate(obj)
m = [m.name for res in mod.data.results for m in res.managers]
e = [e.name for res in mod.data.results for m in res.managers for e in m.employees]
r = m + e
print('native: ', r)
return r
def parse_validators(obj: dict[str, Any]) -> list[str]:
""" Get all persons names in schema. """
Schema.model_validate(obj)
r = Manager.managers_names + Employees.employees_names
print('validators: ', r)
return r
def run_test(func, objs, comment='', reps=1, average=True, prec=.6):
""" Speed checker. """
total = 0
for _ in range(reps):
for e in objs:
beg = time()
func(e)
end = time()
total += (end - beg)
t = total / reps if average else total
print(f'{t:{prec}f} ({comment})')
# payload for tests
test_obj = {'data': {'results': [res1, res2, res3]}}
payload = tuple(copy.deepcopy(test_obj) for _ in range(1))
# number of repetitions
REPS = 1
run_test(func=parse_native, objs=payload, comment='No validators', reps=REPS)
run_test(func=parse_validators, objs=payload, comment='With validators', reps=REPS)
Я безуспешно пытался установить переменные экземпляра во вложенных моделях и переопределить метод .model_validate()
Я использую Python 3.11 и pydantic 2.7. Я хочу собрать конкретную информацию из моей модели, а сама модель очень большая. Могу ли я собирать данные при анализе/проверке модели? Я пытался использовать валидатор и переменную класса, но если вы попытаетесь сделать это несколько раз, сбор данных продолжится. Мне нужно, чтобы это было, например. Есть советы? Мой код с проверкой скорости: [code]import copy from time import perf_counter as time from typing import Any, ClassVar
from pydantic import BaseModel, field_validator
class Employees(BaseModel): name: str employees_names: ClassVar[list[str]] = []
def parse_native(obj: dict[str, Any]) -> list[str]: """ Get all persons names in schema. """ mod = SchemaNative.model_validate(obj)
m = [m.name for res in mod.data.results for m in res.managers] e = [e.name for res in mod.data.results for m in res.managers for e in m.employees] r = m + e print('native: ', r)
return r
def parse_validators(obj: dict[str, Any]) -> list[str]: """ Get all persons names in schema. """ Schema.model_validate(obj) r = Manager.managers_names + Employees.employees_names print('validators: ', r)
return r
def run_test(func, objs, comment='', reps=1, average=True, prec=.6): """ Speed checker. """ total = 0 for _ in range(reps): for e in objs: beg = time() func(e) end = time() total += (end - beg) t = total / reps if average else total print(f'{t:{prec}f} ({comment})')
# payload for tests test_obj = {'data': {'results': [res1, res2, res3]}} payload = tuple(copy.deepcopy(test_obj) for _ in range(1))
Враги движутся и должны лететь в другую сторону, когда достигают экрана, но им все равно, и они продолжают летать (за кадром).
game.py
import sys
import pygame
from files.player import Player
from files.settings import Settings
from files.bullet...
У меня есть модель Pydantic, представляющая транзакции по хранению банковского счета, которые сами по себе являются моделями, вложенными в модель счета. Транзакции хранятся в списке в скрытом поле, и доступ к ним осуществляется через вычисляемое...
У меня есть тест, в котором мне нужно собрать некоторые действия пользователя и затем сохранить их в базе данных, но я сталкиваюсь с внутренней ошибкой сервера 500, возможно, мои настройки неверны, или я пока что-то делаю неправильно, это я впервые...
У меня есть тест, в котором мне нужно собрать некоторые действия пользователя и затем сохранить их в базе данных, но я сталкиваюсь с внутренней ошибкой сервера 500, возможно, мои настройки неверны, или я пока что-то делаю неправильно, это я впервые...
У меня было много проблем с Test Explorer в VSCode. До прошлой недели все работало нормально. Я писал новые тесты и нажимал «Обновить тесты», а потом он внезапно (и довольно случайно) перестал работать — в частности, он «обнаруживает» тесты...