Найти - Пользователи
Полная версия: sqlalchemy проблема с примесями
Начало » Базы данных » sqlalchemy проблема с примесями
1 2 3
4kpt_III
Ну вторая ошибка понятно когда возникает. И это естественно. А вот когда первая?
lightarhont
4kpt_III
Ну вторая ошибка понятно когда возникает. И это естественно. А вот когда первая?
Первая когда называю класс Users в комментариях. А поскольку они наследуют класс Base, который является один и тот же:
Base = declarative_base()

То видно друг друга.
Base говорит: я вижу два класса Users как мне поступать?
4kpt_III
lightarhont
Первая когда называю класс Users в комментариях. А поскольку они наследуют класс Base, который является один и тот же:

В каких комментариях? Я Вас не понимаю…

lightarhont
Base говорит: я вижу два класса Users как мне поступать?

То, что там написано я в состоянии прочитать Я пытаюсь понять как вызвана такая ошибка.
4kpt_III
Может Вам это нужно:

from testproject.models.manager import rbac
class Users(rbac.Users, Base):
lightarhont
4kpt_III
В каких комментариях? Я Вас не понимаю…
Суть в том, что это приложение Pyramid, пока реализованы две части:

1. Пользователи, Пользователи, Профили, Роли, Права, Блокировки в общем как RBAC(Roled Based Access Control) в панели администратора
2. Ajax Комменентарии на фронтэде.

С 1 частью проблем нет. А со второй частью, есть посольку я хочу расширить “модели” (скорее схемы) своими функциями. например, что-бы в одном случае было одно форматрирование вывода даты, а в другом другое. Потому я хочу идти по пути “разделяй и властвуй”. И что-бы не было лишнего кода там где это не нужно. Потому я переформатировал код по другому и попал в тупик. С которого пока не совсем понятно как выходить.
4kpt_III
from testproject.models.manager import rbac
class Users(rbac.Users, Base):

Это не работает?
lightarhont
4kpt_III
Это не работает?
Это не правильно, поскольку нужно наследовать “голую” схему без функций-методов(__init__ и прочие). Т.е. class Users(SUsers, Base)
Просто иначе смысла оптимизации не будет.
bismigalis
4kpt_III
теперь я тоже понял

lightarhont
а что будет если в абстрактных классах указывать связь на абстрактный класс?
relationship("SUsers")
4kpt_III
Я наконец-таки понял, что Вы хотите сделать. Самый простой вариант - использовать фиксированный префикс, как я написал выше. Второй вариант значительно хардкорнее. Теперь я его не рекомендую.
lightarhont
bismigalis
а что будет если в абстрактных классах указывать связь на абстрактный класс?
Будет ошибка

2015-04-15 20:21:13,447 ERROR Exception at http://testproject.python/manager/options/control/users
traceback url: http://testproject.python/_debug_toolbar/exception?token=622760435c7864625c7830655c7838395c786261355c7861625c7830635e27&tb=140470152488848
Traceback (most recent call last):
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/ext/declarative/clsregistry.py”, line 271, in __call__
x = eval(self.arg, globals(), self._dict)
File “<string>”, line 1, in <module>
NameError: name ‘SPermissions’ is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/pyramid_debugtoolbar-2.0.2-py3.3.egg/pyramid_debugtoolbar/toolbar.py”, line 172, in toolbar_tween
response = _handler(request)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/pyramid_debugtoolbar-2.0.2-py3.3.egg/pyramid_debugtoolbar/panels/performance.py”, line 55, in resource_timer_handler
result = handler(request)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/pyramid/tweens.py”, line 21, in excview_tween
response = handler(request)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/pyramid/router.py”, line 163, in handle_request
response = view_callable(context, request)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/pyramid/config/views.py”, line 596, in __call__
return view(context, request)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/pyramid/config/views.py”, line 329, in attr_view
return view(context, request)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/pyramid/config/views.py”, line 305, in predicate_wrapper
return view(context, request)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/pyramid/config/views.py”, line 355, in rendered_view
result = view(context, request)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/pyramid/config/views.py”, line 472, in _class_requestonly_view
inst = view(request)
File “/mnt/webserver/pythonproject/testproject/testproject/views/manager/users.py”, line 139, in __init__
Manager.__init__(self, request, 0)
File “/mnt/webserver/pythonproject/testproject/testproject/views/manager/common.py”, line 59, in __init__
user = get_user2(request.authenticated_userid)
File “/mnt/webserver/pythonproject/testproject/testproject/models/manager/rbac/users_func.py”, line 7, in get_user2
return DBSession.query(Users).filter(Users.id == itemid).one()
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/scoping.py”, line 150, in do
return getattr(self.registry(), name)(*args, **kwargs)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/session.py”, line 1165, in query
return self._query_cls(entities, self, **kwargs)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/query.py”, line 108, in __init__
self._set_entities(entities)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/query.py”, line 118, in _set_entities
self._set_entity_selectables(self._entities)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/query.py”, line 151, in _set_entity_selectables
ent.setup_entity(*d)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/query.py”, line 3036, in setup_entity
self._with_polymorphic = ext_info.with_polymorphic_mappers
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/util/langhelpers.py”, line 725, in __get__
obj.__dict__ = result = self.fget(obj)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/mapper.py”, line 1877, in _with_polymorphic_mappers
configure_mappers()
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/mapper.py”, line 2589, in configure_mappers
mapper._post_configure_properties()
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/mapper.py”, line 1694, in _post_configure_properties
prop.init()
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/interfaces.py”, line 144, in init
self.do_init()
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/relationships.py”, line 1549, in do_init
self._process_dependent_arguments()
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/relationships.py”, line 1605, in _process_dependent_arguments
self.target = self.mapper.mapped_table
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/util/langhelpers.py”, line 725, in __get__
obj.__dict__ = result = self.fget(obj)
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/orm/relationships.py”, line 1522, in mapper
argument = self.argument()
File “/home/mikhail/.virtualenvs/testproject/lib/python3.3/site-packages/sqlalchemy/ext/declarative/clsregistry.py”, line 283, in __call__
(self.prop.parent, self.arg, n.args, self.cls)
sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper|PermissionsRoles|perms_roles, expression ‘SPermissions’ failed to locate a name (“name ‘SPermissions’ is not defined”). If this is a class name, consider adding this relationship() to the <class ‘testproject.models.manager.rbac.PermissionsRoles’> class after both dependent classes have been defined.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB