читать схему дуршлаг из файла конфигурации или базы данных - PullRequest
2 голосов
/ 15 октября 2011

Я некоторое время гуглил, но не мог найти справку о том, как извлечь схему Коландера из файла конфигурации или из базы данных. Я думаю, что это не сложно реализовать, но я мог что-то упустить. Может быть, кто-то сделал или видел что-то подобное и может поделиться некоторыми идеями.

Вот образец схемы дуршлаг:

class PageSchema(colander.MappingSchema):
    title = SchemaNode(String(),
                       title='Page title',
                       description='The title of the page',
                       )
    description  = SchemaNode(String(),
                              title='A short description', 
                              description='Keep it under 60 characters or so',
                              missing = u'',
                              validator=colander.Length(max=79)
                              )
    body = colander.SchemaNode(colander.String(),
                               description='Tell the world',
                               missing = u'')

Ответы [ 3 ]

1 голос
/ 05 июля 2012

Как сказал micheal, он может не поддерживаться.Если тебе это действительно нужно.Вот несколько указателей.

Сохраните вашу схему в базе данных по имени, например: «PageSchema».Сохраните все свои записи в базе данных со всеми необходимыми параметрами.

Вы должны сделать что-то вроде этого:

for row in rows:
    attrinbutes[row['name']] = build_attribute(row)

schemas[schema_name] = type(schema_name, (colander.MappingSchema,), attributes)
exec('%s = schemas[schema_name]' % schema_name)

Другими словами, он загружает все атрибуты и создает класс, используя оператор типа.Задача такого рода довольно проста и должна работать так же хорошо, как привычный синтаксис class.Вызов exec - это просто название для местных жителей.Возможно, вы могли бы использовать locals()[schema_name] = schmea или даже другие области.

Таким образом, вы можете при необходимости загружать схемы из любого места.Вы можете создать себе фабрику, например:

  • schemas.get('PageSchema'), которая будет возвращать схему, если это возможно, или None, если ее нет.

Вот и все!

0 голосов
/ 15 июня 2015

ColanderAlchemy может делать то, что вам нужно.Он принимает объекты SQLAlchemy и генерирует из них схему Colander.Однако генерация из объекта SQLAlchemy не совсем «из базы данных».

0 голосов
/ 18 октября 2011

Это не поддерживается дуршлагом.Единственное, что я знаю в этой области - это «лимонный» пакет, который делает обратное.Он может генерировать произвольные объекты Python из схемы дуршлаг.

...