cubicweb/server/__init__.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Fri, 05 Apr 2019 17:58:19 +0200
changeset 12567 26744ad37953
parent 12023 0d2b889c85d3
child 12716 f5300acd8f4f
permissions -rw-r--r--
Drop python2 support This mostly consists in removing the dependency on "six" and updating the code to use only Python3 idioms. Notice that we previously used TemporaryDirectory from cubicweb.devtools.testlib for compatibility with Python2. We now directly import it from tempfile.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11413
c172fa18565e [schema2sql] Avoid "parsing" SQL statements for database initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11129
diff changeset
     1
# copyright 2003-2016 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
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    18
"""Server subcube of cubicweb : defines objects used only on the server
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
(repository) side
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    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
"""
9148
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    23
from contextlib import contextmanager
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
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
    26
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
    27
from logilab.common.registry import yes
10026
621646d5f010 [server] Add missing import of logilab.database
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9790
diff changeset
    28
from logilab import database
621646d5f010 [server] Add missing import of logilab.database
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9790
diff changeset
    29
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
    30
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
    31
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 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
    33
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
    34
8268
c9babe49c1c1 [repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents: 8188
diff changeset
    35
# 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
    36
c9babe49c1c1 [repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents: 8188
diff changeset
    37
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
    38
    """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
    39
c9babe49c1c1 [repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents: 8188
diff changeset
    40
    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
    41
    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
    42
    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
    43
c9babe49c1c1 [repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents: 8188
diff changeset
    44
    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
    45
    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
    46
    """
c9babe49c1c1 [repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents: 8188
diff changeset
    47
    __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
    48
    __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
    49
c9babe49c1c1 [repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents: 8188
diff changeset
    50
    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
    51
        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
    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
c9babe49c1c1 [repository] implement a generic way to call repo-side services; closes #2203418
Florent Cayré <florent.cayre@logilab.fr>
parents: 8188
diff changeset
    54
# 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
    55
2628
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
    56
# 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
    57
12023
0d2b889c85d3 [repo] Fix flake8 errors in server/__init__.py
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12022
diff changeset
    58
#: no debug information
7529
2fdc310be7cd [book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 7186
diff changeset
    59
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
    60
#: rql execution information
12023
0d2b889c85d3 [repo] Fix flake8 errors in server/__init__.py
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12022
diff changeset
    61
DBG_RQL = 1
7529
2fdc310be7cd [book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 7186
diff changeset
    62
#: executed sql
12023
0d2b889c85d3 [repo] Fix flake8 errors in server/__init__.py
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12022
diff changeset
    63
DBG_SQL = 2
7529
2fdc310be7cd [book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 7186
diff changeset
    64
#: repository events
2fdc310be7cd [book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 7186
diff changeset
    65
DBG_REPO = 4
2fdc310be7cd [book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 7186
diff changeset
    66
#: multi-sources
12023
0d2b889c85d3 [repo] Fix flake8 errors in server/__init__.py
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12022
diff changeset
    67
DBG_MS = 8
8626
e2ba137b2bf9 [server] add debugging for Hooks & Operations (closes #2470048)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8580
diff changeset
    68
#: hooks
e2ba137b2bf9 [server] add debugging for Hooks & Operations (closes #2470048)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8580
diff changeset
    69
DBG_HOOKS = 16
e2ba137b2bf9 [server] add debugging for Hooks & Operations (closes #2470048)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8580
diff changeset
    70
#: operations
e2ba137b2bf9 [server] add debugging for Hooks & Operations (closes #2470048)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8580
diff changeset
    71
DBG_OPS = 32
9148
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    72
#: security
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    73
DBG_SEC = 64
7529
2fdc310be7cd [book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 7186
diff changeset
    74
#: more verbosity
9148
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    75
DBG_MORE = 128
7529
2fdc310be7cd [book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 7186
diff changeset
    76
#: all level enabled
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
    77
DBG_ALL = DBG_RQL + DBG_SQL + DBG_REPO + DBG_MS + DBG_HOOKS + DBG_OPS + DBG_SEC + DBG_MORE
9148
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    78
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    79
_SECURITY_ITEMS = []
10096
decd60fa8cc5 [entities/wfobjs] add missing `DBG_SEC` debugging informations and a new `transition` capability
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10095
diff changeset
    80
_SECURITY_CAPS = ['read', 'add', 'update', 'delete', 'transition']
7529
2fdc310be7cd [book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 7186
diff changeset
    81
2fdc310be7cd [book] add autoload section from code and fix sphinx warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 7186
diff changeset
    82
#: 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
    83
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
    84
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
    85
9148
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    86
@contextmanager
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    87
def tunesecurity(items=(), capabilities=()):
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    88
    """Context manager to use in conjunction with DBG_SEC.
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    89
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    90
    This allows some tuning of:
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    91
    * the monitored capabilities ('read', 'add', ....)
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    92
    * the object being checked by the security checkers
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    93
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    94
    When no item is given, all of them will be watched.
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    95
    By default all capabilities are monitored, unless specified.
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    96
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    97
    Example use::
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    98
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
    99
      from cubicweb.server import debugged, DBG_SEC, tunesecurity
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   100
      with debugged(DBG_SEC):
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   101
          with tunesecurity(items=('Elephant', 'trumps'),
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   102
                            capabilities=('update', 'delete')):
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   103
              babar.cw_set(trumps=celeste)
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   104
              flore.cw_delete()
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   105
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   106
      ==>
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   107
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   108
      check_perm: 'update' 'relation Elephant.trumps.Elephant'
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   109
       [(ERQLExpression(Any X WHERE U has_update_permission X, X eid %(x)s, U eid %(u)s),
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   110
       {'eid': 2167}, True)]
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   111
      check_perm: 'delete' 'Elephant'
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   112
       [(ERQLExpression(Any X WHERE U has_delete_permission X, X eid %(x)s, U eid %(u)s),
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   113
       {'eid': 2168}, True)]
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   114
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   115
    """
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   116
    olditems = _SECURITY_ITEMS[:]
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   117
    _SECURITY_ITEMS.extend(list(items))
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   118
    oldactions = _SECURITY_CAPS[:]
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   119
    _SECURITY_CAPS[:] = capabilities
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   120
    yield
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   121
    _SECURITY_ITEMS[:] = olditems
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   122
    _SECURITY_CAPS[:] = oldactions
1b549c1acd4f [schema,server] add a security debugging aid (closes #2920304)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9015
diff changeset
   123
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
   124
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
   125
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
   126
    """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
   127
    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
   128
    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
   129
        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
   130
        return
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12023
diff changeset
   131
    if isinstance(debugmode, str):
2633
bc9386c3b2c9 get_csv is being renamed to splitstrip
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2631
diff changeset
   132
        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
   133
            DEBUG |= globals()[mode]
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   134
    else:
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   135
        DEBUG |= debugmode
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   136
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
   137
2628
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   138
class debugged(object):
7079
6024de6094f6 [doc] fix rql/debugging.rst and server.__init__ docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 7056
diff changeset
   139
    """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
   140
7079
6024de6094f6 [doc] fix rql/debugging.rst and server.__init__ docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 7056
diff changeset
   141
    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
   142
9325
a4fc09836329 [doc] Use string debug mode in debugged docstring
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 8755
diff changeset
   143
    >>> with debugged('DBG_RQL | DBG_REPO'):
2628
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   144
    ...     # 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
   145
    ...     # 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
   146
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   147
    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
   148
9325
a4fc09836329 [doc] Use string debug mode in debugged docstring
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 8755
diff changeset
   149
    >>> @debugged('DBG_RQL | DBG_REPO')
2628
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   150
    ... def some_function():
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   151
    ...     # 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
   152
    ...     # 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
   153
7079
6024de6094f6 [doc] fix rql/debugging.rst and server.__init__ docstrings
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 7056
diff changeset
   154
    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
   155
    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
   156
    """
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   157
    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
   158
        self.debugmode = debugmode
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   159
        self._clevel = None
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   160
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   161
    def __enter__(self):
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   162
        """enter with block"""
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   163
        self._clevel = DEBUG
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   164
        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
   165
2628
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   166
    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
   167
        """leave with block"""
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   168
        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
   169
        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
   170
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   171
    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
   172
        """decorate function"""
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   173
        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
   174
            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
   175
            try:
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   176
                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
   177
            finally:
a2cc32c1d982 document and replace debugged by a contextmanager/decorator class
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2595
diff changeset
   178
                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
   179
        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
   180
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
   181
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
   182
# database initialization ######################################################
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   183
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
   184
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
   185
    # 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
   186
    # (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
   187
    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
   188
    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
   189
        session.execute('SET U in_group G WHERE U eid %(u)s, G name %(group)s',
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12023
diff changeset
   190
                        {'u': user.eid, 'group': group})
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
   191
    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
   192
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
   193
9790
0872ac2a1db0 [testlib] call init_config once the config has been properly bootstraped
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9556
diff changeset
   194
def init_repository(config, interactive=True, drop=False, vreg=None,
0872ac2a1db0 [testlib] call init_config once the config has been properly bootstraped
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9556
diff changeset
   195
                    init_config=None):
11998
cd09178c80a8 [server] fix a typo in a docstring
David Douard <david.douard@logilab.fr>
parents: 11983
diff changeset
   196
    """Initialise a repository database by creating tables and filling them
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   197
    with the minimal set of entities (ie at least the schema, base groups and
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   198
    a initial user)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   199
    """
9511
241b1232ed7f Use repoapi instead of dbapi for cwctl shell, upgrade and db-init
Julien Cristau <julien.cristau@logilab.fr>
parents: 9494
diff changeset
   200
    from cubicweb.repoapi import get_repository, connect
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   201
    from cubicweb.server.repository import Repository
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   202
    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
   203
    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
   204
    from cubicweb.server.sqlutils import _SQL_DROP_ALL_USER_TABLES_FILTER_FUNCTION as drop_filter
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   205
    # configuration to avoid db schema loading and user'state checking
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   206
    # on connection
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   207
    config.creating = True
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   208
    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
   209
    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
   210
    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
   211
    # only enable the system source at initialization time
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   212
    repo = Repository(config, vreg=vreg)
11983
5de78b6fff2e [server] Separate repository bootstrap from initialization
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11767
diff changeset
   213
    repo.bootstrap()
9790
0872ac2a1db0 [testlib] call init_config once the config has been properly bootstraped
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9556
diff changeset
   214
    if init_config is not None:
0872ac2a1db0 [testlib] call init_config once the config has been properly bootstraped
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9556
diff changeset
   215
        # further config initialization once it has been bootstrapped
0872ac2a1db0 [testlib] call init_config once the config has been properly bootstraped
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9556
diff changeset
   216
        init_config(config)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   217
    schema = repo.schema
9460
a2a0bc984863 [config] cleanup/refactor server sources file values handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9456
diff changeset
   218
    sourcescfg = config.read_sources_file()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   219
    source = sourcescfg['system']
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   220
    driver = source['db-driver']
10894
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   221
    with repo.internal_cnx() as cnx:
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   222
        sqlcnx = cnx.cnxset.cnx
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   223
        sqlcursor = cnx.cnxset.cu
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   224
        execute = sqlcursor.execute
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   225
        if drop:
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   226
            helper = database.get_db_helper(driver)
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   227
            dropsql = sql_drop_all_user_tables(helper, sqlcursor)
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   228
            # We may fail dropping some tables because of table dependencies, in a first pass.
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   229
            # So, we try a second drop sequence to drop remaining tables if needed.
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   230
            # Note that 2 passes is an arbitrary choice as it seems enough for our usecases
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   231
            # (looping may induce infinite recursion when user have no rights for example).
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   232
            # Here we try to keep code simple and backend independent. That's why we don't try to
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   233
            # distinguish remaining tables (missing privileges, dependencies, ...).
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   234
            failed = sqlexec(dropsql, execute, cnx=sqlcnx,
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   235
                             pbtitle='-> dropping tables (first pass)')
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   236
            if failed:
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   237
                failed = sqlexec(failed, execute, cnx=sqlcnx,
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   238
                                 pbtitle='-> dropping tables (second pass)')
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   239
                remainings = list(filter(drop_filter, helper.list_tables(sqlcursor)))
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   240
                assert not remainings, 'Remaining tables: %s' % ', '.join(remainings)
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   241
        handler = config.migration_handler(schema, interactive=False, repo=repo, cnx=cnx)
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   242
        # install additional driver specific sql files
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   243
        handler.cmd_install_custom_sql_scripts()
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   244
        for cube in reversed(config.cubes()):
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   245
            handler.cmd_install_custom_sql_scripts(cube)
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   246
        _title = '-> creating tables '
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   247
        print(_title, end=' ')
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   248
        # schema entities and relations tables
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   249
        # can't skip entities table even if system source doesn't support them,
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   250
        # they are used sometimes by generated sql. Keeping them empty is much
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   251
        # simpler than fixing this...
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   252
        schemasql = sqlschema(schema, driver)
11413
c172fa18565e [schema2sql] Avoid "parsing" SQL statements for database initialization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11129
diff changeset
   253
        failed = sqlexec(schemasql, execute, pbtitle=_title)
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
   254
        if failed:
10894
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   255
            print('The following SQL statements failed. You should check your schema.')
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   256
            print(failed)
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   257
            raise Exception('execution of the sql schema failed, you should check your schema')
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   258
        sqlcursor.close()
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   259
        sqlcnx.commit()
9494
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   260
    with repo.internal_cnx() as cnx:
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   261
        # insert entity representing the system source
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   262
        ssource = cnx.create_entity('CWSource', type=u'native', name=u'system')
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   263
        repo.system_source.eid = ssource.eid
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   264
        cnx.execute('SET X cw_source X WHERE X eid %(x)s', {'x': ssource.eid})
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   265
        # insert base groups and default admin
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10473
diff changeset
   266
        print('-> inserting default user and default groups.')
9494
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   267
        try:
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12023
diff changeset
   268
            login = sourcescfg['admin']['login']
9494
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   269
            pwd = sourcescfg['admin']['password']
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   270
        except KeyError:
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   271
            if interactive:
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   272
                msg = 'enter login and password of the initial manager account'
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   273
                login, pwd = manager_userpasswd(msg=msg, confirm=True)
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   274
            else:
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12023
diff changeset
   275
                login, pwd = source['db-user'], source['db-password']
9494
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   276
        # sort for eid predicatability as expected in some server tests
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   277
        for group in sorted(BASE_GROUPS):
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12023
diff changeset
   278
            cnx.create_entity('CWGroup', name=group)
10473
23a2fa8cb725 avoid sanitizing warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10354
diff changeset
   279
        admin = create_user(cnx, login, pwd, u'managers')
9494
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   280
        cnx.execute('SET X owned_by U WHERE X is IN (CWGroup,CWSource), U eid %(u)s',
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
   281
                    {'u': admin.eid})
9494
197b7a4ef544 [server] Use internal_cnx instead of internal_session in init_repository
Julien Cristau <julien.cristau@logilab.fr>
parents: 9460
diff changeset
   282
        cnx.commit()
5750
b3bc214cd479 [repo] on repository initialization, properly shutdown intermediary repository
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
   283
    repo.shutdown()
10894
c8c6ad8adbdb [server] install custom sql scripts before creating tables for the schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 10767
diff changeset
   284
    # re-login using the admin user
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
   285
    config._cubes = None  # avoid assertion error
9511
241b1232ed7f Use repoapi instead of dbapi for cwctl shell, upgrade and db-init
Julien Cristau <julien.cristau@logilab.fr>
parents: 9494
diff changeset
   286
    repo = get_repository(config=config)
11090
b4b854c25de5 [repository] set .eid on eschema when schema is loaded from the filesystem
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10894
diff changeset
   287
    # replace previous schema by the new repo's one. This is necessary so that we give the proper
b4b854c25de5 [repository] set .eid on eschema when schema is loaded from the filesystem
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10894
diff changeset
   288
    # schema to `initialize_schema` above since it will initialize .eid attribute of schema elements
b4b854c25de5 [repository] set .eid on eschema when schema is loaded from the filesystem
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10894
diff changeset
   289
    schema = repo.schema
9511
241b1232ed7f Use repoapi instead of dbapi for cwctl shell, upgrade and db-init
Julien Cristau <julien.cristau@logilab.fr>
parents: 9494
diff changeset
   290
    with connect(repo, login, password=pwd) as cnx:
9556
12ee310541bb [server/migractions] finish migration to repoapi objects
Julien Cristau <julien.cristau@logilab.fr>
parents: 9555
diff changeset
   291
        with cnx.security_enabled(False, False):
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
   292
            repo.system_source.eid = ssource.eid  # redo this manually
9556
12ee310541bb [server/migractions] finish migration to repoapi objects
Julien Cristau <julien.cristau@logilab.fr>
parents: 9555
diff changeset
   293
            handler = config.migration_handler(schema, interactive=False,
12ee310541bb [server/migractions] finish migration to repoapi objects
Julien Cristau <julien.cristau@logilab.fr>
parents: 9555
diff changeset
   294
                                               cnx=cnx, repo=repo)
12ee310541bb [server/migractions] finish migration to repoapi objects
Julien Cristau <julien.cristau@logilab.fr>
parents: 9555
diff changeset
   295
            # serialize the schema
12ee310541bb [server/migractions] finish migration to repoapi objects
Julien Cristau <julien.cristau@logilab.fr>
parents: 9555
diff changeset
   296
            initialize_schema(config, schema, handler)
12ee310541bb [server/migractions] finish migration to repoapi objects
Julien Cristau <julien.cristau@logilab.fr>
parents: 9555
diff changeset
   297
            # yoo !
12ee310541bb [server/migractions] finish migration to repoapi objects
Julien Cristau <julien.cristau@logilab.fr>
parents: 9555
diff changeset
   298
            cnx.commit()
12ee310541bb [server/migractions] finish migration to repoapi objects
Julien Cristau <julien.cristau@logilab.fr>
parents: 9555
diff changeset
   299
            repo.system_source.init_creating()
12ee310541bb [server/migractions] finish migration to repoapi objects
Julien Cristau <julien.cristau@logilab.fr>
parents: 9555
diff changeset
   300
            cnx.commit()
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
   301
    repo.shutdown()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   302
    # restore initial configuration
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   303
    config.creating = False
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   304
    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
   305
    # (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
   306
    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
   307
    del config.cube_appobject_path
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10473
diff changeset
   308
    print('-> database for instance %s initialized.' % config.appid)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   309
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   310
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   311
def initialize_schema(config, schema, mhandler, event='create'):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   312
    from cubicweb.server.schemaserial import serialize_schema
9511
241b1232ed7f Use repoapi instead of dbapi for cwctl shell, upgrade and db-init
Julien Cristau <julien.cristau@logilab.fr>
parents: 9494
diff changeset
   313
    cnx = mhandler.cnx
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
   314
    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
   315
    # 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
   316
    # 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
   317
    # 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
   318
    # workflows for one entity type.
9555
370a7c40864f [server] use the ClientConnection directly now that it has more methods available
Julien Cristau <julien.cristau@logilab.fr>
parents: 9511
diff changeset
   319
    with cnx.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
   320
        # 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
   321
        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
   322
        # 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
   323
        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
   324
            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
   325
        # 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
   326
        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
   327
        # enter instance'schema into the database
9511
241b1232ed7f Use repoapi instead of dbapi for cwctl shell, upgrade and db-init
Julien Cristau <julien.cristau@logilab.fr>
parents: 9494
diff changeset
   328
        serialize_schema(cnx, schema)
10024
2a08247b57fb [server] commit after serializing schema
Julien Cristau <julien.cristau@logilab.fr>
parents: 9790
diff changeset
   329
        cnx.commit()
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
   330
        # 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
   331
        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
   332
        # 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
   333
        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
   334
            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
   335
        # 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
   336
        mhandler.cmd_exec_event_script('post%s' % event, apphome=True)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   337
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   338
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
   339
# sqlite'stored procedures have to be registered at connection opening time
11417
5e5e224239c3 pep8 bits
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11413
diff changeset
   340
from logilab.database import SQL_CONNECT_HOOKS  # noqa
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   341
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   342
# add to this set relations which should have their add security checking done
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   343
# *BEFORE* adding the actual relation (done after by default)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   344
BEFORE_ADD_RELATIONS = set(('owned_by',))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   345
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   346
# add to this set relations which should have their add security checking done
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   347
# *at COMMIT TIME* (done after by default)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   348
ON_COMMIT_ADD_RELATIONS = set(())
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   349
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   350
# available sources registry
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   351
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
   352
                '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
   353
                'ldapfeed': LazyObject('cubicweb.server.sources.ldapfeed', 'LDAPFeedSource'),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   354
                }