1

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 によって自動生成されたスキーマのインスタンス化であることだと思います。

これを解決する方法を知っている人はいますか?

よろしくお願いします!

4

1 に答える 1