cubicweb/repoapi.py
changeset 11057 0b59724cb3f2
parent 10688 fa29f3628a1b
child 11195 5de859b95988
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/repoapi.py	Sat Jan 16 13:48:51 2016 +0100
@@ -0,0 +1,71 @@
+# copyright 2013-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
+#
+# This file is part of CubicWeb.
+#
+# CubicWeb is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License along
+# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
+"""Official API to access the content of a repository
+"""
+from warnings import warn
+
+from six import add_metaclass
+
+from logilab.common.deprecation import class_deprecated
+
+from cubicweb.utils import parse_repo_uri
+from cubicweb import AuthenticationError
+from cubicweb.server.session import Connection
+
+
+### public API ######################################################
+
+def get_repository(uri=None, config=None, vreg=None):
+    """get a repository for the given URI or config/vregistry (in case we're
+    loading the repository for a client, eg web server, configuration).
+
+    The returned repository may be an in-memory repository or a proxy object
+    using a specific RPC method, depending on the given URI.
+    """
+    if uri is not None:
+        warn('[3.22] get_repository only wants a config')
+
+    assert config is not None, 'get_repository(config=config)'
+    return config.repository(vreg)
+
+def connect(repo, login, **kwargs):
+    """Take credential and return associated Connection.
+
+    raise AuthenticationError if the credential are invalid."""
+    sessionid = repo.connect(login, **kwargs)
+    session = repo._get_session(sessionid)
+    # XXX the autoclose_session should probably be handle on the session directly
+    # this is something to consider once we have proper server side Connection.
+    return Connection(session)
+
+def anonymous_cnx(repo):
+    """return a Connection for Anonymous user.
+
+    raises an AuthenticationError if anonymous usage is not allowed
+    """
+    anoninfo = getattr(repo.config, 'anonymous_user', lambda: None)()
+    if anoninfo is None: # no anonymous user
+        raise AuthenticationError('anonymous access is not authorized')
+    anon_login, anon_password = anoninfo
+    # use vreg's repository cache
+    return connect(repo, anon_login, password=anon_password)
+
+
+@add_metaclass(class_deprecated)
+class ClientConnection(Connection):
+    __deprecation_warning__ = '[3.20] %(cls)s is deprecated, use Connection instead'