repoapi.py
author Julien Cristau <julien.cristau@logilab.fr>
Mon, 16 Feb 2015 10:21:29 +0100
changeset 10256 f753f364550f
parent 10236 ef3059a692cb
child 10354 635cfac73d28
permissions -rw-r--r--
[req] make rebuild_url predictable Fixes test with python -R. Related to #4959402.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10235
684215aca046 Remove remote repository-access-through-pyro support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10087
diff changeset
     1
# copyright 2013-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
9045
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     3
#
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     4
# This file is part of CubicWeb.
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     5
#
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
     9
# any later version.
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    10
#
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    14
# details.
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    15
#
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    18
"""Official API to access the content of a repository
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    19
"""
9125
9aaf8472bad0 [repoapi] deprecate dbapi compat method
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9116
diff changeset
    20
from logilab.common.deprecation import deprecated
9aaf8472bad0 [repoapi] deprecate dbapi compat method
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9116
diff changeset
    21
9045
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    22
from cubicweb.utils import parse_repo_uri
9062
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    23
from cubicweb import ConnectionError, ProgrammingError, AuthenticationError
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    24
from uuid import uuid4
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    25
from contextlib import contextmanager
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    26
from cubicweb.req import RequestSessionBase
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
    27
from functools import wraps
9045
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    28
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    29
### private function for specific method ############################
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    30
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    31
def _get_inmemory_repo(config, vreg=None):
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    32
    from cubicweb.server.repository import Repository
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    33
    from cubicweb.server.utils import TasksManager
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    34
    return Repository(config, TasksManager(), vreg=vreg)
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    35
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    36
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    37
### public API ######################################################
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    38
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    39
def get_repository(uri=None, config=None, vreg=None):
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    40
    """get a repository for the given URI or config/vregistry (in case we're
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    41
    loading the repository for a client, eg web server, configuration).
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    42
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    43
    The returned repository may be an in-memory repository or a proxy object
10235
684215aca046 Remove remote repository-access-through-pyro support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10087
diff changeset
    44
    using a specific RPC method, depending on the given URI.
9045
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    45
    """
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    46
    if uri is None:
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    47
        return _get_inmemory_repo(config, vreg)
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    48
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    49
    protocol, hostport, appid = parse_repo_uri(uri)
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    50
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    51
    if protocol == 'inmemory':
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    52
        # me may have been called with a dummy 'inmemory://' uri ...
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    53
        return _get_inmemory_repo(config, vreg)
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    54
10236
ef3059a692cb Remove the remote repository-access-through-zmq support
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10235
diff changeset
    55
    raise ConnectionError('unknown protocol: `%s`' % protocol)
9045
5378a738f333 [repoapi] move get_repository function into a new repoapi module
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff changeset
    56
9061
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    57
def connect(repo, login, **kwargs):
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    58
    """Take credential and return associated ClientConnection.
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    59
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    60
    The ClientConnection is associated to a new Session object that will be
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    61
    closed when the ClientConnection is closed.
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    62
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    63
    raise AuthenticationError if the credential are invalid."""
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    64
    sessionid = repo.connect(login, **kwargs)
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    65
    session = repo._get_session(sessionid)
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    66
    # XXX the autoclose_session should probably be handle on the session directly
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    67
    # this is something to consider once we have proper server side Connection.
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    68
    return ClientConnection(session, autoclose_session=True)
e86fdab3d296 [repoapi] add a connect function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9060
diff changeset
    69
9062
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    70
def anonymous_cnx(repo):
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    71
    """return a ClientConnection for Anonymous user.
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    72
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    73
    The ClientConnection is associated to a new Session object that will be
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    74
    closed when the ClientConnection is closed.
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    75
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    76
    raises an AuthenticationError if anonymous usage is not allowed
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    77
    """
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    78
    anoninfo = getattr(repo.config, 'anonymous_user', lambda: None)()
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    79
    if anoninfo is None: # no anonymous user
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    80
        raise AuthenticationError('anonymous access is not authorized')
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    81
    anon_login, anon_password = anoninfo
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    82
    # use vreg's repository cache
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    83
    return connect(repo, anon_login, password=anon_password)
fa5bc8aef7ed [repoapi] add an anonymous_cnx function
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9061
diff changeset
    84
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    85
def _srv_cnx_func(name):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    86
    """Decorate ClientConnection method blindly forward to Connection
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    87
    THIS TRANSITIONAL PURPOSE
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    88
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    89
    will be dropped when we have standalone connection"""
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    90
    def proxy(clt_cnx, *args, **kwargs):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    91
        # the ``with`` dance is transitional. We do not have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    92
        # Connection yet so we use this trick to unsure the session have the
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    93
        # proper cnx loaded. This can be simplified one we have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    94
        # Connection object
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
    95
        if not clt_cnx._open:
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
    96
            raise ProgrammingError('Closed client connection')
9101
e6d1df619949 [client-connection] remove the _srv_cnx usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9100
diff changeset
    97
        return getattr(clt_cnx._cnx, name)(*args, **kwargs)
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    98
    return proxy
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
    99
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   100
def _open_only(func):
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   101
    """decorator for ClientConnection method that check it is open"""
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   102
    @wraps(func)
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   103
    def check_open(clt_cnx, *args, **kwargs):
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   104
        if not clt_cnx._open:
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   105
            raise ProgrammingError('Closed client connection')
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   106
        return func(clt_cnx, *args, **kwargs)
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   107
    return check_open
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   108
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   109
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   110
class ClientConnection(RequestSessionBase):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   111
    """A Connection object to be used Client side.
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   112
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   113
    This object is aimed to be used client side (so potential communication
9475
7863c546b135 [repoapi] Fix typos in doc strings and comments
Julien Cristau <julien.cristau@logilab.fr>
parents: 9469
diff changeset
   114
    with the repo through RPC) and aims to offer some compatibility with the
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   115
    cubicweb.dbapi.Connection interface.
9060
8c0016d7a091 [client-connection] add an auto-close property for ClientConnection
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9058
diff changeset
   116
9475
7863c546b135 [repoapi] Fix typos in doc strings and comments
Julien Cristau <julien.cristau@logilab.fr>
parents: 9469
diff changeset
   117
    The autoclose_session parameter informs the connection that this session
7863c546b135 [repoapi] Fix typos in doc strings and comments
Julien Cristau <julien.cristau@logilab.fr>
parents: 9469
diff changeset
   118
    has been opened explicitly and only for this client connection. The
7863c546b135 [repoapi] Fix typos in doc strings and comments
Julien Cristau <julien.cristau@logilab.fr>
parents: 9469
diff changeset
   119
    connection will close the session on exit.
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   120
    """
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   121
    # make exceptions available through the connection object
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   122
    ProgrammingError = ProgrammingError
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   123
    # attributes that may be overriden per connection instance
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   124
    anonymous_connection = False # XXX really needed ?
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   125
    is_repo_in_memory = True # BC, always true
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   126
9060
8c0016d7a091 [client-connection] add an auto-close property for ClientConnection
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9058
diff changeset
   127
    def __init__(self, session, autoclose_session=False):
9813
c20956f5862d [repoapi] make ClientConnection call RequestSessionBase's init
Julien Cristau <julien.cristau@logilab.fr>
parents: 9774
diff changeset
   128
        super(ClientConnection, self).__init__(session.vreg)
9096
9d1b5f07d9ca [ClientConnection] directly use the Connection object to access the database
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9062
diff changeset
   129
        self._session = session # XXX there is no real reason to keep the
9d1b5f07d9ca [ClientConnection] directly use the Connection object to access the database
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9062
diff changeset
   130
                                # session around function still using it should
9d1b5f07d9ca [ClientConnection] directly use the Connection object to access the database
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9062
diff changeset
   131
                                # be rewritten and migrated.
9d1b5f07d9ca [ClientConnection] directly use the Connection object to access the database
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9062
diff changeset
   132
        self._cnx = None
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   133
        self._open = None
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   134
        self._web_request = False
9582
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   135
        #: cache entities built during the connection
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   136
        self._eid_cache = {}
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   137
        self._set_user(session.user)
9060
8c0016d7a091 [client-connection] add an auto-close property for ClientConnection
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9058
diff changeset
   138
        self._autoclose_session = autoclose_session
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   139
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   140
    def __enter__(self):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   141
        assert self._open is None
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   142
        self._open = True
9111
9c867d852067 use standalone Connection to Client Connection
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9105
diff changeset
   143
        self._cnx = self._session.new_cnx()
9c867d852067 use standalone Connection to Client Connection
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9105
diff changeset
   144
        self._cnx.__enter__()
9096
9d1b5f07d9ca [ClientConnection] directly use the Connection object to access the database
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9062
diff changeset
   145
        self._cnx.ctx_count += 1
9116
57387c6482e5 [repoapi] make ClientConnection.__enter__ return self
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9111
diff changeset
   146
        return self
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   147
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   148
    def __exit__(self, exc_type, exc_val, exc_tb):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   149
        self._open = False
9096
9d1b5f07d9ca [ClientConnection] directly use the Connection object to access the database
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9062
diff changeset
   150
        self._cnx.ctx_count -= 1
9111
9c867d852067 use standalone Connection to Client Connection
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9105
diff changeset
   151
        self._cnx.__exit__(exc_type, exc_val, exc_tb)
9096
9d1b5f07d9ca [ClientConnection] directly use the Connection object to access the database
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9062
diff changeset
   152
        self._cnx = None
9060
8c0016d7a091 [client-connection] add an auto-close property for ClientConnection
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9058
diff changeset
   153
        if self._autoclose_session:
9475
7863c546b135 [repoapi] Fix typos in doc strings and comments
Julien Cristau <julien.cristau@logilab.fr>
parents: 9469
diff changeset
   154
            # we have to call repo.close to ensure the repo properly forgets the
7863c546b135 [repoapi] Fix typos in doc strings and comments
Julien Cristau <julien.cristau@logilab.fr>
parents: 9469
diff changeset
   155
            # session; calling session.close() is not enough :-(
9575
754904ac4248 [repoapi] Avoid deprecation warnings from session.id
Julien Cristau <julien.cristau@logilab.fr>
parents: 9554
diff changeset
   156
            self._session.repo.close(self._session.sessionid)
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   157
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   158
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   159
    # begin silly BC
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   160
    @property
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   161
    def _closed(self):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   162
        return not self._open
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   163
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   164
    def close(self):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   165
        if self._open:
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   166
            self.__exit__(None, None, None)
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   167
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   168
    def __repr__(self):
9099
b7f7aa1b1123 [client-connection] handle the lack of connection id while not open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9098
diff changeset
   169
        # XXX we probably want to reference the user of the session here
b7f7aa1b1123 [client-connection] handle the lack of connection id while not open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9098
diff changeset
   170
        if self._open is None:
b7f7aa1b1123 [client-connection] handle the lack of connection id while not open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9098
diff changeset
   171
            return '<ClientConnection (not open yet)>'
b7f7aa1b1123 [client-connection] handle the lack of connection id while not open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9098
diff changeset
   172
        elif not self._open:
b7f7aa1b1123 [client-connection] handle the lack of connection id while not open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9098
diff changeset
   173
            return '<ClientConnection (closed)>'
b7f7aa1b1123 [client-connection] handle the lack of connection id while not open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9098
diff changeset
   174
        elif self.anonymous_connection:
9097
39be1e548270 [client-connection] explicit the client part in __repr__
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9096
diff changeset
   175
            return '<ClientConnection %s (anonymous)>' % self._cnx.connectionid
9099
b7f7aa1b1123 [client-connection] handle the lack of connection id while not open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9098
diff changeset
   176
        else:
b7f7aa1b1123 [client-connection] handle the lack of connection id while not open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9098
diff changeset
   177
            return '<ClientConnection %s>' % self._cnx.connectionid
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   178
    # end silly BC
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   179
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   180
    # Main Connection purpose in life #########################################
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   181
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   182
    call_service = _srv_cnx_func('call_service')
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   183
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   184
    @_open_only
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   185
    def execute(self, *args, **kwargs):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   186
        # the ``with`` dance is transitional. We do not have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   187
        # Connection yet so we use this trick to unsure the session have the
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   188
        # proper cnx loaded. This can be simplified one we have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   189
        # Connection object
9101
e6d1df619949 [client-connection] remove the _srv_cnx usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9100
diff changeset
   190
        rset = self._cnx.execute(*args, **kwargs)
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   191
        rset.req = self
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   192
        return rset
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   193
9582
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   194
    @_open_only
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   195
    def commit(self, *args, **kwargs):
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   196
        try:
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   197
            return self._cnx.commit(*args, **kwargs)
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   198
        finally:
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   199
            self.drop_entity_cache()
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   200
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   201
    @_open_only
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   202
    def rollback(self, *args, **kwargs):
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   203
        try:
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   204
            return self._cnx.rollback(*args, **kwargs)
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   205
        finally:
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   206
            self.drop_entity_cache()
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   207
9554
d2fd866f69a2 [repoapi] add security/hook control and system_sql
Julien Cristau <julien.cristau@logilab.fr>
parents: 9475
diff changeset
   208
    # security #################################################################
d2fd866f69a2 [repoapi] add security/hook control and system_sql
Julien Cristau <julien.cristau@logilab.fr>
parents: 9475
diff changeset
   209
d2fd866f69a2 [repoapi] add security/hook control and system_sql
Julien Cristau <julien.cristau@logilab.fr>
parents: 9475
diff changeset
   210
    allow_all_hooks_but = _srv_cnx_func('allow_all_hooks_but')
d2fd866f69a2 [repoapi] add security/hook control and system_sql
Julien Cristau <julien.cristau@logilab.fr>
parents: 9475
diff changeset
   211
    deny_all_hooks_but = _srv_cnx_func('deny_all_hooks_but')
d2fd866f69a2 [repoapi] add security/hook control and system_sql
Julien Cristau <julien.cristau@logilab.fr>
parents: 9475
diff changeset
   212
    security_enabled = _srv_cnx_func('security_enabled')
d2fd866f69a2 [repoapi] add security/hook control and system_sql
Julien Cristau <julien.cristau@logilab.fr>
parents: 9475
diff changeset
   213
d2fd866f69a2 [repoapi] add security/hook control and system_sql
Julien Cristau <julien.cristau@logilab.fr>
parents: 9475
diff changeset
   214
    # direct sql ###############################################################
d2fd866f69a2 [repoapi] add security/hook control and system_sql
Julien Cristau <julien.cristau@logilab.fr>
parents: 9475
diff changeset
   215
d2fd866f69a2 [repoapi] add security/hook control and system_sql
Julien Cristau <julien.cristau@logilab.fr>
parents: 9475
diff changeset
   216
    system_sql = _srv_cnx_func('system_sql')
d2fd866f69a2 [repoapi] add security/hook control and system_sql
Julien Cristau <julien.cristau@logilab.fr>
parents: 9475
diff changeset
   217
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   218
    # session data methods #####################################################
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   219
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   220
    get_shared_data = _srv_cnx_func('get_shared_data')
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   221
    set_shared_data = _srv_cnx_func('set_shared_data')
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   222
9774
b7b71be569cf deprecate get/set_shared_data API
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9630
diff changeset
   223
    @property
b7b71be569cf deprecate get/set_shared_data API
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9630
diff changeset
   224
    def transaction_data(self):
b7b71be569cf deprecate get/set_shared_data API
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9630
diff changeset
   225
        return self._cnx.transaction_data
b7b71be569cf deprecate get/set_shared_data API
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9630
diff changeset
   226
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   227
    # meta-data accessors ######################################################
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   228
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   229
    @_open_only
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   230
    def source_defs(self):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   231
        """Return the definition of sources used by the repository."""
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   232
        return self._session.repo.source_defs()
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   233
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   234
    @_open_only
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   235
    def get_schema(self):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   236
        """Return the schema currently used by the repository."""
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   237
        return self._session.repo.source_defs()
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   238
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   239
    @_open_only
9459
d3016c08b4ae [repoapi] drop get_option_value's foreid argument
Julien Cristau <julien.cristau@logilab.fr>
parents: 9458
diff changeset
   240
    def get_option_value(self, option):
d3016c08b4ae [repoapi] drop get_option_value's foreid argument
Julien Cristau <julien.cristau@logilab.fr>
parents: 9458
diff changeset
   241
        """Return the value for `option` in the configuration."""
d3016c08b4ae [repoapi] drop get_option_value's foreid argument
Julien Cristau <julien.cristau@logilab.fr>
parents: 9458
diff changeset
   242
        return self._session.repo.get_option_value(option)
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   243
9469
032825bbacab [multi-sources-removal] Drop entities.source column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9459
diff changeset
   244
    entity_metas = _srv_cnx_func('entity_metas')
032825bbacab [multi-sources-removal] Drop entities.source column
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9459
diff changeset
   245
    describe = _srv_cnx_func('describe') # XXX deprecated in 3.19
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   246
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   247
    # undo support ############################################################
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   248
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   249
    @_open_only
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   250
    def undoable_transactions(self, ueid=None, req=None, **actionfilters):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   251
        """Return a list of undoable transaction objects by the connection's
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   252
        user, ordered by descendant transaction time.
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   253
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   254
        Managers may filter according to user (eid) who has done the transaction
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   255
        using the `ueid` argument. Others will only see their own transactions.
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   256
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   257
        Additional filtering capabilities is provided by using the following
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   258
        named arguments:
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   259
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   260
        * `etype` to get only transactions creating/updating/deleting entities
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   261
          of the given type
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   262
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   263
        * `eid` to get only transactions applied to entity of the given eid
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   264
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   265
        * `action` to get only transactions doing the given action (action in
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   266
          'C', 'U', 'D', 'A', 'R'). If `etype`, action can only be 'C', 'U' or
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   267
          'D'.
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   268
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   269
        * `public`: when additional filtering is provided, their are by default
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   270
          only searched in 'public' actions, unless a `public` argument is given
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   271
          and set to false.
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   272
        """
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   273
        # the ``with`` dance is transitional. We do not have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   274
        # Connection yet so we use this trick to unsure the session have the
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   275
        # proper cnx loaded. This can be simplified one we have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   276
        # Connection object
9101
e6d1df619949 [client-connection] remove the _srv_cnx usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9100
diff changeset
   277
        source = self._cnx.repo.system_source
e6d1df619949 [client-connection] remove the _srv_cnx usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9100
diff changeset
   278
        txinfos = source.undoable_transactions(self._cnx, ueid, **actionfilters)
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   279
        for txinfo in txinfos:
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   280
            txinfo.req = req or self  # XXX mostly wrong
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   281
        return txinfos
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   282
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   283
    @_open_only
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   284
    def transaction_info(self, txuuid, req=None):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   285
        """Return transaction object for the given uid.
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   286
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   287
        raise `NoSuchTransaction` if not found or if session's user is not
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   288
        allowed (eg not in managers group and the transaction doesn't belong to
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   289
        him).
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   290
        """
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   291
        # the ``with`` dance is transitional. We do not have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   292
        # Connection yet so we use this trick to unsure the session have the
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   293
        # proper cnx loaded. This can be simplified one we have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   294
        # Connection object
9101
e6d1df619949 [client-connection] remove the _srv_cnx usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9100
diff changeset
   295
        txinfo = self._cnx.repo.system_source.tx_info(self._cnx, txuuid)
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   296
        if req:
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   297
            txinfo.req = req
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   298
        else:
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   299
            txinfo.cnx = self
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   300
        return txinfo
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   301
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   302
    @_open_only
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   303
    def transaction_actions(self, txuuid, public=True):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   304
        """Return an ordered list of action effectued during that transaction.
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   305
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   306
        If public is true, return only 'public' actions, eg not ones triggered
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   307
        under the cover by hooks, else return all actions.
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   308
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   309
        raise `NoSuchTransaction` if the transaction is not found or if
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   310
        session's user is not allowed (eg not in managers group and the
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   311
        transaction doesn't belong to him).
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   312
        """
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   313
        # the ``with`` dance is transitional. We do not have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   314
        # Connection yet so we use this trick to unsure the session have the
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   315
        # proper cnx loaded. This can be simplified one we have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   316
        # Connection object
9101
e6d1df619949 [client-connection] remove the _srv_cnx usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9100
diff changeset
   317
        return self._cnx.repo.system_source.tx_actions(self._cnx, txuuid, public)
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   318
9100
8a1132c7cbd1 [client-connection] explicitly check that the client-connection is open
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9099
diff changeset
   319
    @_open_only
9052
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   320
    def undo_transaction(self, txuuid):
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   321
        """Undo the given transaction. Return potential restoration errors.
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   322
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   323
        raise `NoSuchTransaction` if not found or if session's user is not
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   324
        allowed (eg not in managers group and the transaction doesn't belong to
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   325
        him).
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   326
        """
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   327
        # the ``with`` dance is transitional. We do not have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   328
        # Connection yet so we use this trick to unsure the session have the
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   329
        # proper cnx loaded. This can be simplified one we have Standalone
4cba5f2cd57b [repoapi] introduce a basic ClientConnection class
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9045
diff changeset
   330
        # Connection object
9101
e6d1df619949 [client-connection] remove the _srv_cnx usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9100
diff changeset
   331
        return self._cnx.repo.system_source.undo_transaction(self._cnx, txuuid)
9053
862040061173 [client-connection] add a request() method for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9052
diff changeset
   332
9582
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   333
    # cache management
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   334
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   335
    def entity_cache(self, eid):
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   336
        return self._eid_cache[eid]
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   337
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   338
    def set_entity_cache(self, entity):
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   339
        self._eid_cache[entity.eid] = entity
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   340
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   341
    def cached_entities(self):
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   342
        return self._eid_cache.values()
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   343
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   344
    def drop_entity_cache(self, eid=None):
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   345
        if eid is None:
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   346
            self._eid_cache = {}
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   347
        else:
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   348
            del self._eid_cache[eid]
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   349
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   350
    # deprecated stuff
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9575
diff changeset
   351
9404
3e3e9b37e177 fix version number: we still target cw 3.19
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9125
diff changeset
   352
    @deprecated('[3.19] This is a repoapi.ClientConnection object not a dbapi one')
9053
862040061173 [client-connection] add a request() method for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9052
diff changeset
   353
    def request(self):
862040061173 [client-connection] add a request() method for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9052
diff changeset
   354
        return self
9054
d7e78645dab6 [client-connection] add a cursor() method for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9053
diff changeset
   355
9404
3e3e9b37e177 fix version number: we still target cw 3.19
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9125
diff changeset
   356
    @deprecated('[3.19] This is a repoapi.ClientConnection object not a dbapi one')
9054
d7e78645dab6 [client-connection] add a cursor() method for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9053
diff changeset
   357
    def cursor(self):
d7e78645dab6 [client-connection] add a cursor() method for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9053
diff changeset
   358
        return self
9055
2567b7d04e49 [client-connection] add a sessionid property for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9054
diff changeset
   359
9630
e7dbc4f06a48 minor cleanups
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   360
    @property
9404
3e3e9b37e177 fix version number: we still target cw 3.19
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9125
diff changeset
   361
    @deprecated('[3.19] This is a repoapi.ClientConnection object not a dbapi one')
9055
2567b7d04e49 [client-connection] add a sessionid property for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9054
diff changeset
   362
    def sessionid(self):
9575
754904ac4248 [repoapi] Avoid deprecation warnings from session.id
Julien Cristau <julien.cristau@logilab.fr>
parents: 9554
diff changeset
   363
        return self._session.sessionid
9056
e777be2c5007 [client-connection] add a connection property for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9055
diff changeset
   364
e777be2c5007 [client-connection] add a connection property for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9055
diff changeset
   365
    @property
9404
3e3e9b37e177 fix version number: we still target cw 3.19
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9125
diff changeset
   366
    @deprecated('[3.19] This is a repoapi.ClientConnection object not a dbapi one')
9056
e777be2c5007 [client-connection] add a connection property for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9055
diff changeset
   367
    def connection(self):
e777be2c5007 [client-connection] add a connection property for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9055
diff changeset
   368
        return self
9057
99cd4761aee6 [client-connection] add a repo property for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9056
diff changeset
   369
99cd4761aee6 [client-connection] add a repo property for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9056
diff changeset
   370
    @property
9404
3e3e9b37e177 fix version number: we still target cw 3.19
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9125
diff changeset
   371
    @deprecated('[3.19] This is a repoapi.ClientConnection object not a dbapi one')
9057
99cd4761aee6 [client-connection] add a repo property for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9056
diff changeset
   372
    def _repo(self):
99cd4761aee6 [client-connection] add a repo property for dbapi compatibility
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 9056
diff changeset
   373
        return self._session.repo