author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
Mon, 24 Jun 2013 12:05:35 +0200 | |
changeset 9034 | cc3442054e48 |
parent 9015 | 65b8236e1bb4 |
child 9402 | 2c48c091b6a2 |
permissions | -rw-r--r-- |
8268
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
1 |
# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
2 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
3 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
4 |
# This file is part of CubicWeb. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
5 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
6 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
7 |
# terms of the GNU Lesser General Public License as published by the Free |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
8 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
9 |
# any later version. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
10 |
# |
5424
8ecbcbff9777
replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5421
diff
changeset
|
11 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
12 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
13 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
14 |
# details. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
15 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
16 |
# You should have received a copy of the GNU Lesser General Public License along |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5090
diff
changeset
|
17 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
0 | 18 |
"""Server subcube of cubicweb : defines objects used only on the server |
19 |
(repository) side |
|
20 |
||
7529
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
21 |
The server module contains functions to initialize a new repository. |
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
22 |
""" |
0 | 23 |
|
24 |
__docformat__ = "restructuredtext en" |
|
25 |
||
26 |
import sys |
|
27 |
from os.path import join, exists |
|
2730
bb6fcb8c5d71
to make cw schemas importable, they have to be installed w/ cw code, not in /usr/share/cubicweb/schemas
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2633
diff
changeset
|
28 |
from glob import glob |
0 | 29 |
|
30 |
from logilab.common.modutils import LazyObject |
|
2633
bc9386c3b2c9
get_csv is being renamed to splitstrip
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2631
diff
changeset
|
31 |
from logilab.common.textutils import splitstrip |
8268
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
32 |
from logilab.common.registry import yes |
2730
bb6fcb8c5d71
to make cw schemas importable, they have to be installed w/ cw code, not in /usr/share/cubicweb/schemas
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2633
diff
changeset
|
33 |
from yams import BASE_GROUPS |
bb6fcb8c5d71
to make cw schemas importable, they have to be installed w/ cw code, not in /usr/share/cubicweb/schemas
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2633
diff
changeset
|
34 |
|
bb6fcb8c5d71
to make cw schemas importable, they have to be installed w/ cw code, not in /usr/share/cubicweb/schemas
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2633
diff
changeset
|
35 |
from cubicweb import CW_SOFTWARE_ROOT |
8268
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
36 |
from cubicweb.appobject import AppObject |
2730
bb6fcb8c5d71
to make cw schemas importable, they have to be installed w/ cw code, not in /usr/share/cubicweb/schemas
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2633
diff
changeset
|
37 |
|
7573
c8f8762c986d
[repo, looping task] raise a custom exception when repository is shuting down, avoid looping task to be restarted in such case. Closes #1021276
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7529
diff
changeset
|
38 |
class ShuttingDown(BaseException): |
c8f8762c986d
[repo, looping task] raise a custom exception when repository is shuting down, avoid looping task to be restarted in such case. Closes #1021276
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7529
diff
changeset
|
39 |
"""raised when trying to access some resources while the repository is |
c8f8762c986d
[repo, looping task] raise a custom exception when repository is shuting down, avoid looping task to be restarted in such case. Closes #1021276
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7529
diff
changeset
|
40 |
shutting down. Inherit from BaseException so that `except Exception` won't |
c8f8762c986d
[repo, looping task] raise a custom exception when repository is shuting down, avoid looping task to be restarted in such case. Closes #1021276
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7529
diff
changeset
|
41 |
catch it. |
c8f8762c986d
[repo, looping task] raise a custom exception when repository is shuting down, avoid looping task to be restarted in such case. Closes #1021276
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7529
diff
changeset
|
42 |
""" |
c8f8762c986d
[repo, looping task] raise a custom exception when repository is shuting down, avoid looping task to be restarted in such case. Closes #1021276
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7529
diff
changeset
|
43 |
|
8268
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
44 |
# server-side services ######################################################### |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
45 |
|
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
46 |
class Service(AppObject): |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
47 |
"""Base class for services. |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
48 |
|
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
49 |
A service is a selectable object that performs an action server-side. |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
50 |
Use :class:`cubicweb.dbapi.Connection.call_service` to call them from |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
51 |
the web-side. |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
52 |
|
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
53 |
When inheriting this class, do not forget to define at least the __regid__ |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
54 |
attribute (and probably __select__ too). |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
55 |
""" |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
56 |
__registry__ = 'services' |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
57 |
__select__ = yes() |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
58 |
|
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
59 |
def call(self, **kwargs): |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
60 |
raise NotImplementedError |
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
61 |
|
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
62 |
|
c9babe49c1c1
[repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents:
8188
diff
changeset
|
63 |
# server-side debugging ######################################################## |
2593
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
64 |
|
2628
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
65 |
# server debugging flags. They may be combined using binary operators. |
7529
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
66 |
|
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
67 |
#:no debug information |
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
68 |
DBG_NONE = 0 #: no debug information |
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
69 |
#: rql execution information |
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
70 |
DBG_RQL = 1 |
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
71 |
#: executed sql |
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
72 |
DBG_SQL = 2 |
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
73 |
#: repository events |
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
74 |
DBG_REPO = 4 |
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
75 |
#: multi-sources |
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
76 |
DBG_MS = 8 |
8626
e2ba137b2bf9
[server] add debugging for Hooks & Operations (closes #2470048)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8580
diff
changeset
|
77 |
#: hooks |
e2ba137b2bf9
[server] add debugging for Hooks & Operations (closes #2470048)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8580
diff
changeset
|
78 |
DBG_HOOKS = 16 |
e2ba137b2bf9
[server] add debugging for Hooks & Operations (closes #2470048)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8580
diff
changeset
|
79 |
#: operations |
e2ba137b2bf9
[server] add debugging for Hooks & Operations (closes #2470048)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8580
diff
changeset
|
80 |
DBG_OPS = 32 |
7529
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
81 |
#: more verbosity |
8626
e2ba137b2bf9
[server] add debugging for Hooks & Operations (closes #2470048)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8580
diff
changeset
|
82 |
DBG_MORE = 64 |
7529
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
83 |
#: all level enabled |
8626
e2ba137b2bf9
[server] add debugging for Hooks & Operations (closes #2470048)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8580
diff
changeset
|
84 |
DBG_ALL = DBG_RQL + DBG_SQL + DBG_REPO + DBG_MS + DBG_HOOKS + DBG_OPS + DBG_MORE |
7529
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
85 |
|
2fdc310be7cd
[book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents:
7186
diff
changeset
|
86 |
#: current debug mode |
2628
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
87 |
DEBUG = 0 |
2593
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
88 |
|
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
89 |
def set_debug(debugmode): |
2628
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
90 |
"""change the repository debugging mode""" |
2593
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
91 |
global DEBUG |
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
92 |
if not debugmode: |
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
93 |
DEBUG = 0 |
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
94 |
return |
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
95 |
if isinstance(debugmode, basestring): |
2633
bc9386c3b2c9
get_csv is being renamed to splitstrip
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2631
diff
changeset
|
96 |
for mode in splitstrip(debugmode, sep='|'): |
2628
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
97 |
DEBUG |= globals()[mode] |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
98 |
else: |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
99 |
DEBUG |= debugmode |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
100 |
|
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
101 |
class debugged(object): |
7079
6024de6094f6
[doc] fix rql/debugging.rst and server.__init__ docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
7056
diff
changeset
|
102 |
"""Context manager and decorator to help debug the repository. |
2628
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
103 |
|
7079
6024de6094f6
[doc] fix rql/debugging.rst and server.__init__ docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
7056
diff
changeset
|
104 |
It can be used either as a context manager: |
2628
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
105 |
|
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
106 |
>>> with debugged(server.DBG_RQL | server.DBG_REPO): |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
107 |
... # some code in which you want to debug repository activity, |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
108 |
... # seing information about RQL being executed an repository events. |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
109 |
|
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
110 |
or as a function decorator: |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
111 |
|
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
112 |
>>> @debugged(server.DBG_RQL | server.DBG_REPO) |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
113 |
... def some_function(): |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
114 |
... # some code in which you want to debug repository activity, |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
115 |
... # seing information about RQL being executed an repository events |
2593
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
116 |
|
7079
6024de6094f6
[doc] fix rql/debugging.rst and server.__init__ docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
7056
diff
changeset
|
117 |
The debug mode will be reset to its original value when leaving the "with" |
6024de6094f6
[doc] fix rql/debugging.rst and server.__init__ docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
7056
diff
changeset
|
118 |
block or the decorated function. |
2628
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
119 |
""" |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
120 |
def __init__(self, debugmode): |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
121 |
self.debugmode = debugmode |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
122 |
self._clevel = None |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
123 |
|
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
124 |
def __enter__(self): |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
125 |
"""enter with block""" |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
126 |
self._clevel = DEBUG |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
127 |
set_debug(self.debugmode) |
2593
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
128 |
|
2628
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
129 |
def __exit__(self, exctype, exc, traceback): |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
130 |
"""leave with block""" |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
131 |
set_debug(self._clevel) |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
132 |
return traceback is None |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
133 |
|
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
134 |
def __call__(self, func): |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
135 |
"""decorate function""" |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
136 |
def wrapped(*args, **kwargs): |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
137 |
_clevel = DEBUG |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
138 |
set_debug(self.debugmode) |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
139 |
try: |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
140 |
return func(*args, **kwargs) |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
141 |
finally: |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
142 |
set_debug(self._clevel) |
a2cc32c1d982
document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2595
diff
changeset
|
143 |
return wrapped |
2593
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
144 |
|
16d9419a4a79
F: start to handle binary debug log level on the server side
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2589
diff
changeset
|
145 |
# database initialization ###################################################### |
0 | 146 |
|
4612
d6ae30c5d055
added a function to create admin/anon user during db initialization process so one get a chance to monkey patch it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
147 |
def create_user(session, login, pwd, *groups): |
d6ae30c5d055
added a function to create admin/anon user during db initialization process so one get a chance to monkey patch it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
148 |
# monkey patch this method if you want to customize admin/anon creation |
d6ae30c5d055
added a function to create admin/anon user during db initialization process so one get a chance to monkey patch it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
149 |
# (that maybe necessary if you change CWUser's schema) |
4634
b2a3232783f8
fix create_user function introduced in d6ae30c5d055 for database initialization: messup admin user groups when anon is created due to missing restriction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4612
diff
changeset
|
150 |
user = session.create_entity('CWUser', login=login, upassword=pwd) |
4612
d6ae30c5d055
added a function to create admin/anon user during db initialization process so one get a chance to monkey patch it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
151 |
for group in groups: |
4634
b2a3232783f8
fix create_user function introduced in d6ae30c5d055 for database initialization: messup admin user groups when anon is created due to missing restriction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4612
diff
changeset
|
152 |
session.execute('SET U in_group G WHERE U eid %(u)s, G name %(group)s', |
b2a3232783f8
fix create_user function introduced in d6ae30c5d055 for database initialization: messup admin user groups when anon is created due to missing restriction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4612
diff
changeset
|
153 |
{'u': user.eid, 'group': group}) |
b2a3232783f8
fix create_user function introduced in d6ae30c5d055 for database initialization: messup admin user groups when anon is created due to missing restriction
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4612
diff
changeset
|
154 |
return user |
4612
d6ae30c5d055
added a function to create admin/anon user during db initialization process so one get a chance to monkey patch it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4252
diff
changeset
|
155 |
|
0 | 156 |
def init_repository(config, interactive=True, drop=False, vreg=None): |
157 |
"""initialise a repository database by creating tables add filling them |
|
158 |
with the minimal set of entities (ie at least the schema, base groups and |
|
159 |
a initial user) |
|
160 |
""" |
|
7056
51f88f13d6f3
[dbapi] split in_memory_cnx functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6427
diff
changeset
|
161 |
from cubicweb.dbapi import in_memory_repo_cnx |
0 | 162 |
from cubicweb.server.repository import Repository |
163 |
from cubicweb.server.utils import manager_userpasswd |
|
8755
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
164 |
from cubicweb.server.sqlutils import sqlexec, sqlschema, sql_drop_all_user_tables |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
165 |
from cubicweb.server.sqlutils import _SQL_DROP_ALL_USER_TABLES_FILTER_FUNCTION as drop_filter |
0 | 166 |
# configuration to avoid db schema loading and user'state checking |
167 |
# on connection |
|
168 |
config.creating = True |
|
169 |
config.consider_user_state = False |
|
8580
d753d6a6798f
[repository] move modification of appobject_path to repository initialization code so we can restore it later to avoid side effect on the config. Fix regression introduced in d32ab8570e5d
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8561
diff
changeset
|
170 |
config.cubicweb_appobject_path = set(('hooks', 'entities')) |
d753d6a6798f
[repository] move modification of appobject_path to repository initialization code so we can restore it later to avoid side effect on the config. Fix regression introduced in d32ab8570e5d
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8561
diff
changeset
|
171 |
config.cube_appobject_path = set(('hooks', 'entities')) |
6126
aca6a2c357fd
[repository] enabled sources refactoring: to avoid error, we should always have all known source in repo.sources_by_uri and only enabled ones in repo.sources, so we still have access to the definition of temporarily disabled sources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5750
diff
changeset
|
172 |
# only enable the system source at initialization time |
0 | 173 |
repo = Repository(config, vreg=vreg) |
174 |
schema = repo.schema |
|
175 |
sourcescfg = config.sources() |
|
176 |
source = sourcescfg['system'] |
|
177 |
driver = source['db-driver'] |
|
178 |
sqlcnx = repo.system_source.get_connection() |
|
179 |
sqlcursor = sqlcnx.cursor() |
|
2306
95da5d9f0870
give session to doexec so it's able to rollback the connection on unexpected error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2172
diff
changeset
|
180 |
execute = sqlcursor.execute |
0 | 181 |
if drop: |
8755
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
182 |
helper = database.get_db_helper(driver) |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
183 |
dropsql = sql_drop_all_user_tables(helper, sqlcursor) |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
184 |
# We may fail dropping some tables because of table dependencies, in a first pass. |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
185 |
# So, we try a second drop sequence to drop remaining tables if needed. |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
186 |
# Note that 2 passes is an arbitrary choice as it seems enougth for our usecases. |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
187 |
# (looping may induce infinite recursion when user have no right for example) |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
188 |
# Here we try to keep code simple and backend independant. That why we don't try to |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
189 |
# distinguish remaining tables (wrong right, dependencies, ...). |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
190 |
failed = sqlexec(dropsql, execute, cnx=sqlcnx, |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
191 |
pbtitle='-> dropping tables (first pass)') |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
192 |
if failed: |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
193 |
failed = sqlexec(failed, execute, cnx=sqlcnx, |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
194 |
pbtitle='-> dropping tables (second pass)') |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
195 |
remainings = filter(drop_filter, helper.list_tables(sqlcursor)) |
1f3757ef3762
[server] *init_repository* lookup the database instead of the schema to drop tables (closes #810743)
Alain Leufroy <alain.leufroy@logilab.fr>
parents:
8695
diff
changeset
|
196 |
assert not remainings, 'Remaining tables: %s' % ', '.join(remainings) |
7906
203d574c8a1d
repaire cctl db-init -d on sqlserver (closes #1979670)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7574
diff
changeset
|
197 |
_title = '-> creating tables ' |
203d574c8a1d
repaire cctl db-init -d on sqlserver (closes #1979670)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents:
7574
diff
changeset
|
198 |
print _title, |
0 | 199 |
# schema entities and relations tables |
200 |
# can't skip entities table even if system source doesn't support them, |
|
201 |
# they are used sometimes by generated sql. Keeping them empty is much |
|
202 |
# simpler than fixing this... |
|
4837
54969eec48eb
misc fixes to ensure logilab.db compatibility
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4759
diff
changeset
|
203 |
schemasql = sqlschema(schema, driver) |
54969eec48eb
misc fixes to ensure logilab.db compatibility
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4759
diff
changeset
|
204 |
#skip_entities=[str(e) for e in schema.entities() |
54969eec48eb
misc fixes to ensure logilab.db compatibility
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4759
diff
changeset
|
205 |
# if not repo.system_source.support_entity(str(e))]) |
4913
083b4d454192
server/web api for accessing to deleted_entites
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents:
4848
diff
changeset
|
206 |
sqlexec(schemasql, execute, pbtitle=_title, delimiter=';;') |
0 | 207 |
sqlcursor.close() |
208 |
sqlcnx.commit() |
|
209 |
sqlcnx.close() |
|
210 |
session = repo.internal_session() |
|
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
211 |
# insert entity representing the system source |
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
212 |
ssource = session.create_entity('CWSource', type=u'native', name=u'system') |
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
213 |
repo.system_source.eid = ssource.eid |
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
214 |
session.execute('SET X cw_source X WHERE X eid %(x)s', {'x': ssource.eid}) |
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
215 |
# insert base groups and default admin |
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
216 |
print '-> inserting default user and default groups.' |
0 | 217 |
try: |
218 |
login = unicode(sourcescfg['admin']['login']) |
|
219 |
pwd = sourcescfg['admin']['password'] |
|
220 |
except KeyError: |
|
221 |
if interactive: |
|
222 |
msg = 'enter login and password of the initial manager account' |
|
223 |
login, pwd = manager_userpasswd(msg=msg, confirm=True) |
|
224 |
else: |
|
225 |
login, pwd = unicode(source['db-user']), source['db-password'] |
|
2595
e76bf303c6f2
[F server test] sort for test predictability
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2593
diff
changeset
|
226 |
# sort for eid predicatability as expected in some server tests |
e76bf303c6f2
[F server test] sort for test predictability
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2593
diff
changeset
|
227 |
for group in sorted(BASE_GROUPS): |
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
228 |
session.create_entity('CWGroup', name=unicode(group)) |
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
229 |
admin = create_user(session, login, pwd, 'managers') |
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
230 |
session.execute('SET X owned_by U WHERE X is IN (CWGroup,CWSource), U eid %(u)s', |
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
231 |
{'u': admin.eid}) |
0 | 232 |
session.commit() |
7186
287f2273917f
[test] drop some warnings introduced by new test dabase handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7129
diff
changeset
|
233 |
session.close() |
5750
b3bc214cd479
[repo] on repository initialization, properly shutdown intermediary repository
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
234 |
repo.shutdown() |
0 | 235 |
# reloging using the admin user |
236 |
config._cubes = None # avoid assertion error |
|
7056
51f88f13d6f3
[dbapi] split in_memory_cnx functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6427
diff
changeset
|
237 |
repo, cnx = in_memory_repo_cnx(config, login, password=pwd) |
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
238 |
repo.system_source.eid = ssource.eid # redo this manually |
0 | 239 |
assert len(repo.sources) == 1, repo.sources |
240 |
handler = config.migration_handler(schema, interactive=False, |
|
241 |
cnx=cnx, repo=repo) |
|
3903
7967d3766ecf
fix #544758 by calling custom sql scripts in add_cubes.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3823
diff
changeset
|
242 |
# install additional driver specific sql files |
7915
a7f3245e1728
[migration] expose migration methods to execute schema/*.sql and migration/<event>.py files (closes #1986498)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7574
diff
changeset
|
243 |
handler.cmd_install_custom_sql_scripts() |
a7f3245e1728
[migration] expose migration methods to execute schema/*.sql and migration/<event>.py files (closes #1986498)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7574
diff
changeset
|
244 |
for cube in reversed(config.cubes()): |
a7f3245e1728
[migration] expose migration methods to execute schema/*.sql and migration/<event>.py files (closes #1986498)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7574
diff
changeset
|
245 |
handler.cmd_install_custom_sql_scripts(cube) |
4759 | 246 |
# serialize the schema |
0 | 247 |
initialize_schema(config, schema, handler) |
248 |
# yoo ! |
|
249 |
cnx.commit() |
|
6427
c8a5ac2d1eaa
[schema / sources] store data sources as cubicweb entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6126
diff
changeset
|
250 |
repo.system_source.init_creating() |
0 | 251 |
cnx.commit() |
252 |
cnx.close() |
|
4766
162b2b127b15
[test] get a chance to get proper garbage collection when running pytest on whole cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4759
diff
changeset
|
253 |
repo.shutdown() |
0 | 254 |
# restore initial configuration |
255 |
config.creating = False |
|
256 |
config.consider_user_state = True |
|
8580
d753d6a6798f
[repository] move modification of appobject_path to repository initialization code so we can restore it later to avoid side effect on the config. Fix regression introduced in d32ab8570e5d
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8561
diff
changeset
|
257 |
# (drop instance attribute to get back to class attribute) |
d753d6a6798f
[repository] move modification of appobject_path to repository initialization code so we can restore it later to avoid side effect on the config. Fix regression introduced in d32ab8570e5d
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8561
diff
changeset
|
258 |
del config.cubicweb_appobject_path |
d753d6a6798f
[repository] move modification of appobject_path to repository initialization code so we can restore it later to avoid side effect on the config. Fix regression introduced in d32ab8570e5d
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8561
diff
changeset
|
259 |
del config.cube_appobject_path |
2476
1294a6bdf3bf
application -> instance where it makes sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2458
diff
changeset
|
260 |
print '-> database for instance %s initialized.' % config.appid |
0 | 261 |
|
262 |
||
263 |
def initialize_schema(config, schema, mhandler, event='create'): |
|
264 |
from cubicweb.server.schemaserial import serialize_schema |
|
4834
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4831
diff
changeset
|
265 |
session = mhandler.session |
7915
a7f3245e1728
[migration] expose migration methods to execute schema/*.sql and migration/<event>.py files (closes #1986498)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7574
diff
changeset
|
266 |
cubes = config.cubes() |
4834
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4831
diff
changeset
|
267 |
# deactivate every hooks but those responsible to set metadata |
5090
8c39d2bf58fd
[repo creation] removing existing entities of 'single' cardinality relatino should be considered as 'activeintegrity' hook. Also don't disable that category during repo creation to avoid pb such as two default workflows for one entity types
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5043
diff
changeset
|
268 |
# so, NO INTEGRITY CHECKS are done, to have quicker db creation. |
8c39d2bf58fd
[repo creation] removing existing entities of 'single' cardinality relatino should be considered as 'activeintegrity' hook. Also don't disable that category during repo creation to avoid pb such as two default workflows for one entity types
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5043
diff
changeset
|
269 |
# Active integrity is kept else we may pb such as two default |
8c39d2bf58fd
[repo creation] removing existing entities of 'single' cardinality relatino should be considered as 'activeintegrity' hook. Also don't disable that category during repo creation to avoid pb such as two default workflows for one entity types
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5043
diff
changeset
|
270 |
# workflows for one entity type. |
8561
77ea3eed9946
[session] promote usage of [deny|all]_all_hooks_but session methods rather than hooks_control context manager directly
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8539
diff
changeset
|
271 |
with session.deny_all_hooks_but('metadata', 'activeintegrity'): |
4834
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4831
diff
changeset
|
272 |
# execute cubicweb's pre<event> script |
7915
a7f3245e1728
[migration] expose migration methods to execute schema/*.sql and migration/<event>.py files (closes #1986498)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7574
diff
changeset
|
273 |
mhandler.cmd_exec_event_script('pre%s' % event) |
4834
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4831
diff
changeset
|
274 |
# execute cubes pre<event> script if any |
7915
a7f3245e1728
[migration] expose migration methods to execute schema/*.sql and migration/<event>.py files (closes #1986498)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7574
diff
changeset
|
275 |
for cube in reversed(cubes): |
a7f3245e1728
[migration] expose migration methods to execute schema/*.sql and migration/<event>.py files (closes #1986498)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7574
diff
changeset
|
276 |
mhandler.cmd_exec_event_script('pre%s' % event, cube) |
7974
77eec6d6e144
[test] fix regression introduced in 7915:a7f3245e1728 leading to test's postcreate not being executed anymore
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7915
diff
changeset
|
277 |
# execute instance's pre<event> script (useful in tests) |
77eec6d6e144
[test] fix regression introduced in 7915:a7f3245e1728 leading to test's postcreate not being executed anymore
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7915
diff
changeset
|
278 |
mhandler.cmd_exec_event_script('pre%s' % event, apphome=True) |
4834
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4831
diff
changeset
|
279 |
# enter instance'schema into the database |
7398
26695dd703d8
[repository api] definitly kill usage of word 'pool' to refer to connections set used by a session
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7186
diff
changeset
|
280 |
session.set_cnxset() |
4834
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4831
diff
changeset
|
281 |
serialize_schema(session, schema) |
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4831
diff
changeset
|
282 |
# execute cubicweb's post<event> script |
7915
a7f3245e1728
[migration] expose migration methods to execute schema/*.sql and migration/<event>.py files (closes #1986498)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7574
diff
changeset
|
283 |
mhandler.cmd_exec_event_script('post%s' % event) |
4834
b718626a0e60
move hooks activation control on session object, so we can have a per transaction control. Added a new `hooks_control` context manager for usual modification of hooks activation.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4831
diff
changeset
|
284 |
# execute cubes'post<event> script if any |
7915
a7f3245e1728
[migration] expose migration methods to execute schema/*.sql and migration/<event>.py files (closes #1986498)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7574
diff
changeset
|
285 |
for cube in reversed(cubes): |
a7f3245e1728
[migration] expose migration methods to execute schema/*.sql and migration/<event>.py files (closes #1986498)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7574
diff
changeset
|
286 |
mhandler.cmd_exec_event_script('post%s' % event, cube) |
7974
77eec6d6e144
[test] fix regression introduced in 7915:a7f3245e1728 leading to test's postcreate not being executed anymore
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7915
diff
changeset
|
287 |
# execute instance's post<event> script (useful in tests) |
77eec6d6e144
[test] fix regression introduced in 7915:a7f3245e1728 leading to test's postcreate not being executed anymore
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7915
diff
changeset
|
288 |
mhandler.cmd_exec_event_script('post%s' % event, apphome=True) |
0 | 289 |
|
290 |
||
4831
c5aec27c1bf7
[repo] use logilab.db instead of lgc.adbh/lgc.db/lgc.sqlgen/indexer, test new date extranction functions
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4766
diff
changeset
|
291 |
# sqlite'stored procedures have to be registered at connection opening time |
4848
41f84eea63c9
rename logilab.db into logilab.database
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4845
diff
changeset
|
292 |
from logilab.database import SQL_CONNECT_HOOKS |
0 | 293 |
|
294 |
# add to this set relations which should have their add security checking done |
|
295 |
# *BEFORE* adding the actual relation (done after by default) |
|
296 |
BEFORE_ADD_RELATIONS = set(('owned_by',)) |
|
297 |
||
298 |
# add to this set relations which should have their add security checking done |
|
299 |
# *at COMMIT TIME* (done after by default) |
|
300 |
ON_COMMIT_ADD_RELATIONS = set(()) |
|
301 |
||
302 |
# available sources registry |
|
303 |
SOURCE_TYPES = {'native': LazyObject('cubicweb.server.sources.native', 'NativeSQLSource'), |
|
8188
1867e252e487
[repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7979
diff
changeset
|
304 |
'datafeed': LazyObject('cubicweb.server.sources.datafeed', 'DataFeedSource'), |
1867e252e487
[repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7979
diff
changeset
|
305 |
'ldapfeed': LazyObject('cubicweb.server.sources.ldapfeed', 'LDAPFeedSource'), |
1867e252e487
[repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7979
diff
changeset
|
306 |
'pyrorql': LazyObject('cubicweb.server.sources.pyrorql', 'PyroRQLSource'), |
8355
557295b5b68a
[zmq] Add a new ZMQ-based RQL source (closes #2290203)
Vincent Michel <vincent.michel@logilab.fr>
parents:
8268
diff
changeset
|
307 |
'zmqrql': LazyObject('cubicweb.server.sources.zmqrql', 'ZMQRQLSource'), |
0 | 308 |
} |