# HG changeset patch # User Sylvain Thénault # Date 1489160470 -3600 # Node ID ba79f4a4f5d8d8ce82895111c864405f0262b9a6 # Parent 5f46195b95955d59896dceb73210a13c695b812f [session] Stop relying on _sessions to synchronize living session by doing what we currently do in pyramid. Also, attempt to synchronize CWUser's class sounds like a dark corner case handling that should be removed in favor of short lived user objects (beside it shouldn't occur except during migration). diff -r 5f46195b9595 -r ba79f4a4f5d8 cubicweb/hooks/syncschema.py --- a/cubicweb/hooks/syncschema.py Fri Mar 10 12:01:31 2017 +0100 +++ b/cubicweb/hooks/syncschema.py Fri Mar 10 16:41:10 2017 +0100 @@ -217,10 +217,6 @@ repo.schema.rebuild_infered_relations() # trigger vreg reload repo.set_schema(repo.schema) - # CWUser class might have changed, update current session users - cwuser_cls = self.cnx.vreg['etypes'].etype_class('CWUser') - for session in repo._sessions.values(): - session.user.__class__ = cwuser_cls except Exception: self.critical('error while setting schema', exc_info=True) diff -r 5f46195b9595 -r ba79f4a4f5d8 cubicweb/hooks/syncsession.py --- a/cubicweb/hooks/syncsession.py Fri Mar 10 12:01:31 2017 +0100 +++ b/cubicweb/hooks/syncsession.py Fri Mar 10 16:41:10 2017 +0100 @@ -24,11 +24,9 @@ from cubicweb.entities.authobjs import user_session_cache_key -# take cnx and not repo because it's needed for other sessions implementation (e.g. pyramid) -def get_user_sessions(cnx, ueid): - for session in cnx.repo._sessions.values(): - if ueid == session.user.eid: - yield session +def get_user_sessions(cnx, user_eid): + if cnx.user.eid == user_eid: + yield cnx class CachedValueMixin(object): diff -r 5f46195b9595 -r ba79f4a4f5d8 cubicweb/pyramid/__init__.py --- a/cubicweb/pyramid/__init__.py Fri Mar 10 12:01:31 2017 +0100 +++ b/cubicweb/pyramid/__init__.py Fri Mar 10 16:41:10 2017 +0100 @@ -231,7 +231,6 @@ config.include(name) config.include('cubicweb.pyramid.core') - config.include('cubicweb.pyramid.syncsession') if asbool(config.registry.settings.get('cubicweb.bwcompat', True)): config.include('cubicweb.pyramid.bwcompat') diff -r 5f46195b9595 -r ba79f4a4f5d8 cubicweb/pyramid/syncsession.py --- a/cubicweb/pyramid/syncsession.py Fri Mar 10 12:01:31 2017 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -# copyright 2016 LOGILAB S.A. (Paris, FRANCE), all rights reserved. -# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr -# -# This file is part of CubicWeb. -# -# CubicWeb is free software: you can redistribute it and/or modify it under the -# terms of the GNU Lesser General Public License as published by the Free -# Software Foundation, either version 2.1 of the License, or (at your option) -# any later version. -# -# CubicWeb is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -# details. -# -# You should have received a copy of the GNU Lesser General Public License along -# with CubicWeb. If not, see . -"""Override cubicweb's syncsession hooks to handle them in the pyramid's way""" - -from logilab.common.decorators import monkeypatch -from cubicweb.hooks import syncsession - - -def includeme(config): - - @monkeypatch(syncsession) - def get_user_sessions(cnx, user_eid): - if cnx.user.eid == user_eid: - yield cnx diff -r 5f46195b9595 -r ba79f4a4f5d8 cubicweb/server/repository.py --- a/cubicweb/server/repository.py Fri Mar 10 12:01:31 2017 +0100 +++ b/cubicweb/server/repository.py Fri Mar 10 16:41:10 2017 +0100 @@ -45,7 +45,7 @@ from cubicweb import (CW_MIGRATION_MAP, QueryError, UnknownEid, AuthenticationError, ExecutionError, BadConnectionId, - UniqueTogetherError, onevent, ViolatedConstraint) + UniqueTogetherError, ViolatedConstraint) from cubicweb import set_log_methods from cubicweb import cwvreg, schema, server from cubicweb.server import utils, hook, querier, sources @@ -242,17 +242,6 @@ # the hooks manager self.hm = hook.HooksManager(self.vreg) - # registry hook to fix user class on registry reload - @onevent('after-registry-reload', self) - def fix_user_classes(self): - # After registry reload the 'CWUser' class used for CWEtype - # changed. So any existing user object have a different class than - # the new loaded one. We are hot fixing this. - usercls = self.vreg['etypes'].etype_class('CWUser') - for session in self._sessions.values(): - if not isinstance(session.user, InternalManager): - session.user.__class__ = usercls - def bootstrap(self): self.info('starting repository from %s', self.config.apphome) self.shutting_down = False