author | julien tayon <julien.tayon@logilab.fr> |
Tue, 11 Jun 2019 09:07:24 +0200 | |
changeset 12637 | 234ca3cbbb46 |
parent 11987 | d432911e3c26 |
permissions | -rw-r--r-- |
11967
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
1 |
# copyright 2017 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
2 |
# copyright 2014-2016 UNLISH S.A.S. (Montpellier, FRANCE), all rights reserved. |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
3 |
# |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
4 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
5 |
# |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
6 |
# This file is part of CubicWeb. |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
7 |
# |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
8 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
9 |
# terms of the GNU Lesser General Public License as published by the Free |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
10 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
11 |
# any later version. |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
12 |
# |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
13 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
14 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
15 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
16 |
# details. |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
17 |
# |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
18 |
# You should have received a copy of the GNU Lesser General Public License along |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
19 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
83739be20fab
[pyramid] Add a copyright and docstring to all modules
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11958
diff
changeset
|
20 |
|
11551
444cd2bba89d
[doc] Document tools
Christophe de Vienne <christophe@unlish.com>
parents:
11550
diff
changeset
|
21 |
"""Various tools. |
444cd2bba89d
[doc] Document tools
Christophe de Vienne <christophe@unlish.com>
parents:
11550
diff
changeset
|
22 |
|
444cd2bba89d
[doc] Document tools
Christophe de Vienne <christophe@unlish.com>
parents:
11550
diff
changeset
|
23 |
.. warning:: |
444cd2bba89d
[doc] Document tools
Christophe de Vienne <christophe@unlish.com>
parents:
11550
diff
changeset
|
24 |
|
444cd2bba89d
[doc] Document tools
Christophe de Vienne <christophe@unlish.com>
parents:
11550
diff
changeset
|
25 |
This module should be considered as internal implementation details. Use |
444cd2bba89d
[doc] Document tools
Christophe de Vienne <christophe@unlish.com>
parents:
11550
diff
changeset
|
26 |
with caution, as the API may change without notice. |
444cd2bba89d
[doc] Document tools
Christophe de Vienne <christophe@unlish.com>
parents:
11550
diff
changeset
|
27 |
""" |
11550
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
28 |
|
11987
d432911e3c26
[pyramid] Drop module-level cache and cleanup looping tasks in tools
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11967
diff
changeset
|
29 |
from repoze.lru import lru_cache |
11550
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
30 |
|
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
31 |
|
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
32 |
def clone_user(repo, user): |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
33 |
"""Clone a CWUser instance. |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
34 |
|
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
35 |
.. warning:: |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
36 |
|
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
37 |
The returned clone is detached from any cnx. |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
38 |
Before using it in any way, it should be attached to a cnx that has not |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
39 |
this user already loaded. |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
40 |
""" |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
41 |
CWUser = repo.vreg['etypes'].etype_class('CWUser') |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
42 |
clone = CWUser( |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
43 |
None, |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
44 |
rset=user.cw_rset.copy(), |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
45 |
row=user.cw_row, |
11701
ca536eec556b
[pyramid] Retrieve user's groups using a custom RQL instead of user's groups property
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11631
diff
changeset
|
46 |
col=user.cw_col) |
11550
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
47 |
clone.cw_attr_cache = dict(user.cw_attr_cache) |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
48 |
return clone |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
49 |
|
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
50 |
|
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
51 |
def cnx_attach_entity(cnx, entity): |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
52 |
"""Attach an entity to a cnx.""" |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
53 |
entity._cw = cnx |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
54 |
if entity.cw_rset: |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
55 |
entity.cw_rset.req = cnx |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
56 |
|
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
57 |
|
11987
d432911e3c26
[pyramid] Drop module-level cache and cleanup looping tasks in tools
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11967
diff
changeset
|
58 |
@lru_cache(10) |
11550
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
59 |
def cached_build_user(repo, eid): |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
60 |
"""Cached version of |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
61 |
:meth:`cubicweb.server.repository.Repository._build_user` |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
62 |
""" |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
63 |
with repo.internal_cnx() as cnx: |
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
64 |
user = repo._build_user(cnx, eid) |
11824
d7ecf6dab085
Fix AttributeError for "lang" on repo/client connections
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11811
diff
changeset
|
65 |
lang = user.prefered_language() |
11550
38ed4c3ac3de
[tools] Provide a faster build_user
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
66 |
user.cw_clear_relation_cache() |
11987
d432911e3c26
[pyramid] Drop module-level cache and cleanup looping tasks in tools
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11967
diff
changeset
|
67 |
return clone_user(repo, user), lang |