--- /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'