Проверки с помощью SQLAlchemy версии Python Eve - PullRequest
2 голосов
/ 10 марта 2019

Я бы хотел использовать инфраструктуру Eve для создания API REST и проверки данных.Но я хочу использовать версию Eve для SQLAlchemy с бэкэндом rdbms.В документации Eve-SQLAlchemy ничего не говорится о том, как это сделать.

Например, у меня будет таблица базы данных с именем People:

# sql_schema.py
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import column_property, relationship

Base = declarative_base()

class People(Base):
    __tablename__ = 'people'
    id = Column(Integer, primary_key=True, autoincrement=True)
    firstname = Column(String(80))
    lastname = Column(String(120))
    fullname = column_property(firstname + " " + lastname)

Позже я расскажу Еве об определениях моей базы данных:

from eve_sqlalchemy.config import DomainConfig, ResourceConfig
from sql_schema import People

# The default schema is generated using DomainConfig:
DOMAIN = DomainConfig({
    'people': ResourceConfig(People)
}).render()

# now I can stuff in my validations, a bit klunkily
DOMAIN['people']['schema']['firstname'].update({'allowed': ['Pete']})

Выше работает!Если я пытаюсь сохранить People с именем, отличным от «Пит», я получаю ошибку проверки.Но это немного сложно для проверки правильности после определения схемы, как это.Например, Ева выбирает ограничение максимальной длины 80 из определения таблицы People.Было бы хорошо, если бы здесь также можно было указать разрешенное ограничение firstname.Есть ли рекомендуемый подход, и поддерживается ли он вообще или может сломаться в будущей версии.

1 Ответ

1 голос
/ 23 марта 2019

Я попытался уточнить связь между DomainConfig и настройками Евы в документах: https://eve -sqlalchemy.readthedocs.io / en / latest / tutorial.html # eve-settings :

Вы можете сделать это, используя DomainConfig и ResourceConfig, которые даст вам схему по умолчанию (DOMAIN словарь), полученную из вашего Модели SQLAlchemy. Это задумано как отправная точка и чтобы спасти вас из резервной конфигурации, но нет ничего плохого в настройке этого словарь если нужно!

# examples/simple/settings.py

# ...

# Even adding custom validations just for the REST-layer is possible:
DOMAIN['invoices']['schema']['number'].update({
    'min': 10000
})

Тем не менее, если у вас действительно есть ограничение, указанное в ваших моделях SQLAlchemy, которое не переводится автоматически в надлежащие правила проверки в определении схемы Евы, пожалуйста, откройте проблему!

...