Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 15, 2015 22:25:58

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

sqlalchemy проблема с примесями

Ну вторая ошибка понятно когда возникает. И это естественно. А вот когда первая?

Офлайн

#2 Апрель 15, 2015 22:31:35

lightarhont
Зарегистрирован: 2014-07-20
Сообщения: 44
Репутация: +  1  -
Профиль   Отправить e-mail  

sqlalchemy проблема с примесями

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

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

Отредактировано lightarhont (Апрель 15, 2015 22:32:34)

Офлайн

#3 Апрель 15, 2015 22:38:25

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

sqlalchemy проблема с примесями

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

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

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

То, что там написано я в состоянии прочитать Я пытаюсь понять как вызвана такая ошибка.

Офлайн

#4 Апрель 15, 2015 22:42:28

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

sqlalchemy проблема с примесями

Может Вам это нужно:

from testproject.models.manager import rbac
class Users(rbac.Users, Base):

Отредактировано 4kpt_III (Апрель 15, 2015 22:43:06)

Офлайн

#5 Апрель 15, 2015 22:49:58

lightarhont
Зарегистрирован: 2014-07-20
Сообщения: 44
Репутация: +  1  -
Профиль   Отправить e-mail  

sqlalchemy проблема с примесями

4kpt_III
В каких комментариях? Я Вас не понимаю…
Суть в том, что это приложение Pyramid, пока реализованы две части:

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

С 1 частью проблем нет. А со второй частью, есть посольку я хочу расширить “модели” (скорее схемы) своими функциями. например, что-бы в одном случае было одно форматрирование вывода даты, а в другом другое. Потому я хочу идти по пути “разделяй и властвуй”. И что-бы не было лишнего кода там где это не нужно. Потому я переформатировал код по другому и попал в тупик. С которого пока не совсем понятно как выходить.

Отредактировано lightarhont (Апрель 15, 2015 22:53:05)

Офлайн

#6 Апрель 15, 2015 22:52:14

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

sqlalchemy проблема с примесями

from testproject.models.manager import rbac
class Users(rbac.Users, Base):

Это не работает?

Офлайн

#7 Апрель 15, 2015 22:58:07

lightarhont
Зарегистрирован: 2014-07-20
Сообщения: 44
Репутация: +  1  -
Профиль   Отправить e-mail  

sqlalchemy проблема с примесями

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

Отредактировано lightarhont (Апрель 15, 2015 23:01:11)

Офлайн

#8 Апрель 15, 2015 23:11:12

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

sqlalchemy проблема с примесями

4kpt_III
теперь я тоже понял

lightarhont
а что будет если в абстрактных классах указывать связь на абстрактный класс?

relationship("SUsers")

Офлайн

#9 Апрель 15, 2015 23:13:47

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

sqlalchemy проблема с примесями

Я наконец-таки понял, что Вы хотите сделать. Самый простой вариант - использовать фиксированный префикс, как я написал выше. Второй вариант значительно хардкорнее. Теперь я его не рекомендую.

Офлайн

#10 Апрель 15, 2015 23:14:09

lightarhont
Зарегистрирован: 2014-07-20
Сообщения: 44
Репутация: +  1  -
Профиль   Отправить e-mail  

sqlalchemy проблема с примесями

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.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version