Cornice のドキュメントMappingSchema
には、ザルのサブクラスを使用してスキーマを検証する方法が記載されています。同じ目的で colanderalchemy スキーマをどのように使用すればよいでしょうか? ドキュメントにあるように colanderalchemy を使用してスキーマを作成すると、スキーマ オブジェクトは既に colander のクラスをインスタンス化しているため、エラーになると思います。
より正確には、ここに私のサンプルコードがあります:
from sqlalchemy.ext.declarative import declarative_base
from cornice.resource import resource, view
from colanderalchemy import SQLAlchemySchemaNode
from sqlalchemy import (
Column,
Integer,
Unicode,
)
Base = declarative_base()
'''
SQLAlchemy part
'''
class DBTable(Base):
__tablename__ = 'mytable'
id = Column(Integer, primary_key=True,
info={'colanderalchemy': {'exclude': True}})
name = Column(Unicode(70), nullable=False)
description = Column(Unicode(256))
'''
ColanderAlchemy part
'''
ClndrTable = SQLAlchemySchemaNode(DBTable)
'''
Cornice part
'''
PRF='api'
@resource(collection_path='%s/' % PRF, path='%s/{fid}' % PRF)
class TableApi(object):
def __init__(self, request):
self.request = request
@view(schema=ClndrTable, renderer='json')
def put(self):
# do my stuff here
pass
ClndrTable
自動生成されたスキーマはどこにありますか。このコードをデプロイしようとすると、次のエラーが表示されます。
NotImplementedError: Schema node construction without a typ argument or a schema_type() callable present on the node class
前に述べたように、問題はClndrTable
(デコレータへの引数として与えられたview
) が colanderalchemy によって自動生成されたスキーマのインスタンス化であることだと思います。
これを解決する方法を知っている人はいますか?
よろしくお願いします!