Использование repoze.what с декларативным синтаксисом в пилонах - PullRequest
0 голосов
/ 18 июня 2011

Я пишу приложение в Pylons и хочу добавить схему авторизации.Я выбрал repoze.что.Я следовал учебнику из кулинарной книги Pylons:

http://wiki.pylonshq.com/display/pylonscookbook/Authorization+with+repoze.what

Проблема в том, что в lib/auth.py мне нужно включить модели для пользователя, группы и разрешения.Использование декларативной базы в модели выдает ошибку при развертывании:

sqlalchemy.exc.UnboundExecutionError: No engine is bound to this Table's MetaData.
Pass an engine to the Table via autoload_with=<someengine>, or associate the MetaData
with an engine via metadata.bind=<someengine>

Я обнаружил похожую проблему здесь:

Декларативный синтаксис SQLAlchemy с автозагрузкой (отражением) вПилоны

У меня все модели для авторизации объявлены в отдельном файле от __init__.py.Я также следовал всем указанным выше вопросам, но все же что-то не так.Кто-нибудь нашел решение?

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Я думаю, что нашел решение. Я просто создаю движок в модуле, который содержит модели для авторизации, и привязываю его к метаданным. Я понятия не имею, почему init_model не делает это самостоятельно. Так что это не проблема декларативного синтаксиса. Приносим извинения за неудобства.

0 голосов
/ 19 июня 2011

В модели __init__.py вам необходимо привязать движок к сеансу.

def init_model(engine):
    """Call me before using any of the tables or classes in the model"""
    ## Reflected tables must be defined and mapped here
    #global reflected_table
    #reflected_table = sa.Table("Reflected", meta.metadata, autoload=True,
    #                           autoload_with=engine)
    #orm.mapper(Reflected, reflected_table)

    session = orm.sessionmaker(bind=engine, autoflush=True, autocommit=False)
    meta.metadata.bind = engine
    meta.engine = engine
    meta.Session = orm.scoped_session(session)

Ресурсы: http://docs.pylonsproject.org/projects/pylons_framework/dev/advanced_models.html

...