diff -r 058bb3dc685f -r 0b59724cb3f2 _exceptions.py --- a/_exceptions.py Mon Jan 04 18:40:30 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,209 +0,0 @@ -# copyright 2003-2013 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 . -"""Exceptions shared by different cubicweb packages.""" - -__docformat__ = "restructuredtext en" - -from warnings import warn - -from six import PY3, text_type - -from logilab.common.decorators import cachedproperty - -from yams import ValidationError - -# abstract exceptions ######################################################### - -class CubicWebException(Exception): - """base class for cubicweb server exception""" - msg = "" - def __unicode__(self): - if self.msg: - if self.args: - return self.msg % tuple(self.args) - else: - return self.msg - else: - return u' '.join(text_type(arg) for arg in self.args) - __str__ = __unicode__ if PY3 else lambda self: self.__unicode__().encode('utf-8') - -class ConfigurationError(CubicWebException): - """a misconfiguration error""" - -class InternalError(CubicWebException): - """base class for exceptions which should not occur""" - -class SecurityError(CubicWebException): - """base class for cubicweb server security exceptions""" - -class RepositoryError(CubicWebException): - """base class for repository exceptions""" - -class SourceException(CubicWebException): - """base class for source exceptions""" - -class CubicWebRuntimeError(CubicWebException): - """base class for runtime exceptions""" - -# repository exceptions ####################################################### - -class ConnectionError(RepositoryError): - """raised when a bad connection id is given or when an attempt to establish - a connection failed - """ - -class AuthenticationError(ConnectionError): - """raised when an attempt to establish a connection failed due to wrong - connection information (login / password or other authentication token) - """ - -class BadConnectionId(ConnectionError): - """raised when a bad connection id is given""" - -class UnknownEid(RepositoryError): - """the eid is not defined in the system tables""" - msg = 'No entity with eid %s in the repository' - -class UniqueTogetherError(RepositoryError): - """raised when a unique_together constraint caused an IntegrityError""" - def __init__(self, session, **kwargs): - self.session = session - assert 'rtypes' in kwargs or 'cstrname' in kwargs - self.kwargs = kwargs - # fill cache while the session is open - self.rtypes - - @cachedproperty - def rtypes(self): - if 'rtypes' in self.kwargs: - return self.kwargs['rtypes'] - cstrname = unicode(self.kwargs['cstrname']) - cstr = self.session.find('CWUniqueTogetherConstraint', name=cstrname).one() - return sorted(rtype.name for rtype in cstr.relations) - - @cachedproperty - def args(self): - warn('[3.18] UniqueTogetherError.args is deprecated, just use ' - 'the .rtypes accessor.', - DeprecationWarning) - # the first argument, etype, is never used and was never garanteed anyway - return None, self.rtypes - - -class ViolatedConstraint(RepositoryError): - def __init__(self, cnx, cstrname): - self.cnx = cnx - self.cstrname = cstrname - - -# security exceptions ######################################################### - -class Unauthorized(SecurityError): - """raised when a user tries to perform an action without sufficient - credentials - """ - msg = 'You are not allowed to perform this operation' - msg1 = 'You are not allowed to perform %s operation on %s' - var = None - - def __str__(self): - try: - if self.args and len(self.args) == 2: - return self.msg1 % self.args - if self.args: - return ' '.join(self.args) - return self.msg - except Exception as ex: - return str(ex) - -class Forbidden(SecurityError): - """raised when a user tries to perform a forbidden action - """ - -# source exceptions ########################################################### - -class EidNotInSource(SourceException): - """trying to access an object with a particular eid from a particular - source has failed - """ - msg = 'No entity with eid %s in %s' - - -# registry exceptions ######################################################### - -# pre 3.15 bw compat -from logilab.common.registry import RegistryException, ObjectNotFound, NoSelectableObject - -class UnknownProperty(RegistryException): - """property found in database but unknown in registry""" - -# query exception ############################################################# - -class QueryError(CubicWebRuntimeError): - """a query try to do something it shouldn't""" - -class NotAnEntity(CubicWebRuntimeError): - """raised when get_entity is called for a column which doesn't contain - a non final entity - """ - -class MultipleResultsError(CubicWebRuntimeError): - """raised when ResultSet.one() is called on a resultset with multiple rows - of multiple columns. - """ - -class NoResultError(CubicWebRuntimeError): - """raised when no result is found but at least one is expected. - """ - -class UndoTransactionException(QueryError): - """Raised when undoing a transaction could not be performed completely. - - Note that : - 1) the partial undo operation might be acceptable - depending upon the final application - - 2) the undo operation can also fail with a `ValidationError` in - cases where the undoing breaks integrity constraints checked - immediately. - - 3) It might be that neither of those exception is raised but a - subsequent `commit` might raise a `ValidationError` in cases - where the undoing breaks integrity constraints checked at - commit time. - - :type txuuix: int - :param txuuid: Unique identifier of the partially undone transaction - - :type errors: list - :param errors: List of errors occurred during undoing - """ - msg = u"The following error(s) occurred while undoing transaction #%d : %s" - - def __init__(self, txuuid, errors): - super(UndoTransactionException, self).__init__(txuuid, errors) - self.txuuid = txuuid - self.errors = errors - -# tools exceptions ############################################################ - -class ExecutionError(Exception): - """server execution control error (already started, not running...)""" - -# pylint: disable=W0611 -from logilab.common.clcommands import BadCommandUsage