This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
glasnost/shared/common/faults.py

644 lines
18 KiB
Python

# -*- coding: iso-8859-15 -*-
# Glasnost
# By: Odile Bénassy <obenassy@entrouvert.com>
# Romain Chantereau <rchantereau@entrouvert.com>
# Nicolas Clapiès <nclapies@entrouvert.com>
# Pierre-Antoine Dejace <padejace@entrouvert.be>
# Thierry Dulieu <tdulieu@easter-eggs.com>
# Florent Monnier <monnier@codelutin.com>
# Cédric Musso <cmusso@easter-eggs.org>
# Frédéric Péters <fpeters@entrouvert.be>
# Benjamin Poussin <poussin@codelutin.com>
# Emmanuel Raviart <eraviart@entrouvert.com>
# Sébastien Régnier <regnier@codelutin.com>
# Emmanuel Saracco <esaracco@easter-eggs.com>
#
# Copyright (C) 2000, 2001 Easter-eggs & Emmanuel Raviart
# Copyright (C) 2002 Odile Bénassy, Code Lutin, Thierry Dulieu, Easter-eggs,
# Entr'ouvert, Frédéric Péters, Benjamin Poussin, Emmanuel Raviart,
# Emmanuel Saracco & Théridion
# Copyright (C) 2003 Odile Bénassy, Romain Chantereau, Nicolas Clapiès,
# Code Lutin, Pierre-Antoine Dejace, Thierry Dulieu, Easter-eggs,
# Entr'ouvert, Florent Monnier, Cédric Musso, Ouvaton, Frédéric Péters,
# Benjamin Poussin, Rodolphe Quiédeville, Emmanuel Raviart, Sébastien
# Régnier, Emmanuel Saracco, Théridion & Vecam
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
__doc__ = """Glasnost XMLRPC Faults"""
__version__ = '$Revision$'[11:-2]
import types
import xmlrpclib
faultCodeUnknownServerException = 0
faultCodeUnknownApplicationToken = 1
faultCodeUnknownServerId = 2
faultCodeConnectionRefused = 3
faultCodeUnknownUserToken = 4
faultCodeUserAccessDenied = 5
faultCodeMissingItem = 6
faultCodeUnknownSessionToken = 7
faultCodeApplicationAccessDenied = 8
faultCodeReadOnlyObject = 9
faultCodeMissingMainRubric = 10
faultCodeBadEmailAddress = 11
faultCodeSmtpError = 12
faultCodeNonExistentFilePath = 13
faultCodeNotAFile = 14
faultCodeFileAccessDenied = 15
faultCodeWrongLogin = 16
faultCodeWrongPassword = 17
faultCodeUnknownStringDigest = 18
faultCodeWrongVersion = 19
faultCodeIncompatibleKinds = 20
faultCodeServerRegistrationDenied = 21
faultCodeNoneValue = 22
faultCodeMissingId = 23
faultCodeDuplicateValue = 24
faultCodeInconsistentPrototypeHierarchy = 25
faultCodeNonExistentSlotPath = 26
faultCodeBadValue = 27
faultCodeInvalidSessionToken = 28
faultCodeMissingSlotValue = 29
faultCodeBadSlotValue = 30
faultCodeKindsIncompatibility = 31
faultCodeInvalidSearchRequest = 32
faultCodeUnknownDispatcherInId = 33
faultCodeUnregisteredServer = 34
faultCodeUnknownAuthenticationMethod = 35
faultCodeUncountableGroup = 36
faultCodeNotAGroupUnion = 37
faultCodeIllegalRecursiveGroup = 38
faultCodeStringNotAvailableThroughGettext = 39
faultCodeUnknownCommandAction = 40
faultCodeValueTooBig = 41
faultCodeValueTooSmall = 42
faultCodeRoleNotInProfiles = 43
faultCodeUnknownObjectVersion = 44
faultCodeWrongArtifact = 45
faultCodeUnableToChangePasswordStorage = 46
faultCodeWrongNameIdentifier = 47
faultCodeWrongX509Serial = 48
faultCodeUnknownVoteToken = 1000
faultCodeUnknownVoterToken = 1001
faultCodeUnknownElectionToken = 1002
faultCodeWinnersGroupNotEmpty = 1003
faultCodeDuplicateLogin = 2000
faultCodeDuplicateFullName = 2001
faultCodeDuplicateEmail = 2002
faultCodeDuplicateFingerprint = 2003
faultCodeDuplicateHostName = 3000
# Accounting
faultCodeMissingParent = 4000
faultCodeDuplicateNumber = 4001
# Dataflow.
## faultCodeUnknownHolder = 5001
## faultCodeUnknownResultConnector = 5002
## faultCodeInstructionNotImplementable = 5003
## faultCodeDeactivatedInstruction = 5004
Fault = xmlrpclib.Fault
class BaseFault(Fault):
"""Base class for errors in Glasnost XML-RPC.
This class extend the xmlrpclib.Fault constructor with Glasnost faultCode.
Attribute:
==========
*faultCode*:
The error fault code. It must be **set in subclasses**.
"""
uiFaultString = N_('Unknown error')
def __init__(self, *arguments):
Fault.__init__(self, self.faultCode,
self.makeFaultString(*arguments))
def makeFaultString(self, *arguments):
return 'Unknown fault (arguments = %s)' % str(arguments)
class UnknownServerException(BaseFault):
faultCode = faultCodeUnknownServerException
def makeFaultString(self):
return 'Unknown server exception'
class UnknownApplicationToken(BaseFault):
faultCode = faultCodeUnknownApplicationToken
def makeFaultString(self, applicationToken):
return 'Unknown application token = %s' % applicationToken
class UnknownServerId(BaseFault):
faultCode = faultCodeUnknownServerId
def makeFaultString(self, serverId):
return 'Unknown server id = %s' % serverId
class ConnectionRefused(BaseFault):
faultCode = faultCodeConnectionRefused
def makeFaultString(self, serverHostName, serverPort, functionName,
arguments):
return 'Connection refused by server %s:%s while calling' \
' %s(*%s)' % (serverHostName, serverPort, functionName,
arguments)
class UnknownUserToken(BaseFault):
faultCode = faultCodeUnknownUserToken
def makeFaultString(self, userToken):
return 'Unknown user token = %s' % userToken
class UserAccessDenied(BaseFault):
faultCode = faultCodeUserAccessDenied
def makeFaultString(self):
return 'Access denied to user'
class MissingItem(BaseFault):
faultCode = faultCodeMissingItem
def makeFaultString(self, itemId):
return 'Missing item = %s' % itemId
class UnknownSessionToken(BaseFault):
faultCode = faultCodeUnknownSessionToken
def makeFaultString(self, sessionToken):
return 'Unknown session token = %s' % sessionToken
class ApplicationAccessDenied(BaseFault):
faultCode = faultCodeApplicationAccessDenied
def makeFaultString(self, virtualServerId):
return 'Access denied to application = %s' % virtualServerId
class ReadOnlyObject(BaseFault):
faultCode = faultCodeReadOnlyObject
def makeFaultString(self):
return 'Object is read only'
class MissingMainRubric(BaseFault):
faultCode = faultCodeMissingMainRubric
def makeFaultString(self):
return 'Main rubric is missing'
class BadEmailAddress(BaseFault):
faultCode = faultCodeBadEmailAddress
uiFaultString = N_('Invalid email address')
def makeFaultString(self, email):
return 'Bad email address = %s' % email
class SmtpError(BaseFault):
faultCode = faultCodeSmtpError
def makeFaultString(self):
return 'A SMTP error occurred'
class NonExistentFilePath(BaseFault):
faultCode = faultCodeNonExistentFilePath
uiFaultString = N_('Specified file path does not exist!')
def makeFaultString(self, filePath):
return 'Non existent file path = %s' % filePath
class NotAFile(BaseFault):
faultCode = faultCodeNotAFile
uiFaultString = N_('Specified path is not a file!')
def makeFaultString(self, filePath):
return 'Not a file = %s' % filePath
class FileAccessDenied(BaseFault):
faultCode = faultCodeFileAccessDenied
uiFaultString = N_('Access to file is denied!')
def makeFaultString(self, filePath):
return 'File access denied = %s' % filePath
class WrongLogin(BaseFault):
faultCode = faultCodeWrongLogin
uiFaultString = N_('Wrong value!')
def makeFaultString(self, login):
return 'Unknown login = "%s"' % login
class WrongPassword(BaseFault):
faultCode = faultCodeWrongPassword
uiFaultString = N_('Wrong value!')
def makeFaultString(self, password):
return 'Unknown password = "%s"' % password
class UnknownStringDigest(BaseFault):
faultCode = faultCodeUnknownStringDigest
def makeFaultString(self, digest):
return 'Unknown string digest = "%s"' % digest
class WrongVersion(BaseFault):
faultCode = faultCodeWrongVersion
def makeFaultString(self):
return 'Wrong version'
class IncompatibleKinds(BaseFault):
faultCode = faultCodeIncompatibleKinds
def makeFaultString(self, kind1, kind2):
return 'Incompatible kinds : %s(%s) and %s(%s)' % (
kind1, kind1.__dict__, kind2, kind2.__dict__)
class ServerRegistrationDenied(BaseFault):
faultCode = faultCodeServerRegistrationDenied
def makeFaultString(self, hostName, port):
return 'Registration denied to host name = %s, port = %s' % (
hostName, port)
class NoneValue(BaseFault):
faultCode = faultCodeNoneValue
def makeFaultString(self):
return 'Wrong value: None'
class MissingId(BaseFault):
faultCode = faultCodeMissingId
def makeFaultString(self):
return 'Missing ID'
class DuplicateValue(BaseFault):
faultCode = faultCodeDuplicateValue
uiFaultString = N_('Value already used!')
def makeFaultString(self, name, value):
return 'Duplicate value for %s = %s' % (name, value)
class InconsistentPrototypeHierarchy(BaseFault):
faultCode = faultCodeInconsistentPrototypeHierarchy
def makeFaultString(self, implementation):
return 'Inconsistent prototype hierarchy for implementation %s' \
% implementation
class NonExistentSlotPath(BaseFault):
faultCode = faultCodeNonExistentSlotPath
def makeFaultString(self, slotPath):
return 'Non existent slot path = %s' % slotPath
class BadValue(BaseFault):
faultCode = faultCodeBadValue
uiFaultString = N_('Wrong value!')
def makeFaultString(self):
return 'Bad value for object'
class InvalidSessionToken(BaseFault):
faultCode = faultCodeInvalidSessionToken
def makeFaultString(self, sessionToken):
return 'Invalid session token = %s' % sessionToken
class MissingSlotValue(BaseFault):
faultCode = faultCodeMissingSlotValue
uiFaultString = N_('Missing value!')
def makeFaultString(self, slot):
return 'Missing slot = %s' % (slot)
class BadSlotValue(BaseFault):
faultCode = faultCodeBadSlotValue
def makeFaultString(self, slot, value):
return 'Bad value (= %s) for slot "%s"' % (value, slot)
class KindsIncompatibility(BaseFault):
faultCode = faultCodeKindsIncompatibility
def makeFaultString(self, theoricalKind, realKind):
return 'Kind %s doesn\'t accept kind %s' % (theoricalKind, realKind)
class InvalidSearchRequest(BaseFault):
faultCode = faultCodeInvalidSearchRequest
def makeFaultString(self, searchKeyword, searchValue):
return 'Invalid search request (%s = %s)' % (
searchKeyword, searchValue)
class UnknownDispatcherInId(BaseFault):
faultCode = faultCodeUnknownDispatcherInId
def makeFaultString(self, id):
import tools_new as commonTools
return 'Unknown dispatcher (= %s) in id (= %s)' % (
commonTools.extractDispatcherId(id), id)
class UnregisteredServer(BaseFault):
faultCode = faultCodeUnregisteredServer
def makeFaultString(self, hostName, port):
return 'Unregistered server: host name = %s, port = %s' % (
hostName, port)
class UnknownAuthenticationMethod(BaseFault):
faultCode = faultCodeUnknownAuthenticationMethod
def makeFaultString(self, authenticationMethod):
return 'Unknown authentication method: %s' % authenticationMethod
class UncountableGroup(BaseFault):
faultCode = faultCodeUncountableGroup
def makeFaultString(self, group):
return 'Uncountable group: %s' % group
class NotAGroupUnion(BaseFault):
faultCode = faultCodeNotAGroupUnion
def makeFaultString(self, group):
return 'Group %s is not an union' % group
class IllegalRecursiveGroup(BaseFault):
faultCode = faultCodeIllegalRecursiveGroup
def makeFaultString(self, groupId):
return 'Illegal recursive group %s' % groupId
class StringNotAvailableThroughGettext(BaseFault):
faultCode = faultCodeStringNotAvailableThroughGettext
def makeFaultString(self, string):
return 'String not available throught gettext: \'%s\'' % string
class UnknownCommandAction(BaseFault):
faultCode = faultCodeUnknownCommandAction
def makeFaultString(self, action):
return 'Unknown command action: "%s"' % action
class WrongArtifact(BaseFault):
faultCode = faultCodeWrongArtifact
def makeFaultString(self, artifact):
return 'Unknown artifact = %s' % artifact
class UnableToChangePasswordStorage(BaseFault):
faultCode = faultCodeUnableToChangePasswordStorage
def makeFaultString(self):
return 'Unable to change password storage'
class WrongNameIdentifier(BaseFault):
faultCode = faultCodeWrongNameIdentifier
def makeFaultString(self, nameIdentifier):
return 'Unknown name identifier = %s' % nameIdentifier
class WrongX509Serial(BaseFault):
faultCode = faultCodeWrongX509Serial
uiFaultString = N_('Wrong value!')
def makeFaultString(self, serial):
return 'Unknown serial = "%s"' % serial
# Vote
class UnknownVoteToken(BaseFault):
faultCode = faultCodeUnknownVoteToken
def makeFaultString(self, voteToken):
return 'Unknown vote token = %s' % voteToken
class UnknownVoterToken(BaseFault):
faultCode = faultCodeUnknownVoterToken
def makeFaultString(self, voterToken):
return 'Unknown voter token = %s' % voterToken
class UnknownElectionToken(BaseFault):
faultCode = faultCodeUnknownElectionToken
def makeFaultString(self, electionToken):
return 'Unknown election token = %s' % electionToken
class WinnersGroupNotEmpty(BaseFault):
faultCode = faultCodeWinnersGroupNotEmpty
uiFaultString = N_('Winners group is not empty!')
def makeFaultString(self):
return 'Winner group not empty'
#
class DuplicateLogin(BaseFault):
faultCode = faultCodeDuplicateLogin
uiFaultString = N_('Value already used!')
def makeFaultString(self, login):
return 'Duplicate login = %s' % login
class DuplicateFullName(BaseFault):
faultCode = faultCodeDuplicateFullName
uiFaultString = N_('Value already used!')
def makeFaultString(self, fullName):
return 'Duplicate fullName = %s' % fullName
class DuplicateEmail(BaseFault):
faultCode = faultCodeDuplicateEmail
uiFaultString = N_('Value already used!')
def makeFaultString(self, email):
return 'Duplicate email address = %s' % email
class DuplicateFingerprint(BaseFault):
faultCode = faultCodeDuplicateFingerprint
uiFaultString = N_('Value already used!')
def makeFaultString(self, fingerprint):
return 'Duplicate fingerprint = %s' % fingerprint
class DuplicateHostName(BaseFault):
faultCode = faultCodeDuplicateHostName
uiFaultString = N_('Value already used!')
def makeFaultString(self, hostName):
return 'Duplicate host name = %s' % hostName
class DuplicateNumber(BaseFault):
faultCode = faultCodeDuplicateNumber
uiFaultString = N_('Value already used!')
def makeFaultString(self, number):
return 'Duplicate number = %s' % number
class MissingParent(BaseFault):
faultCode = faultCodeMissingParent
def makeFaultString(self, objectId):
return 'Missing parent for %s' % objectId
class ValueTooSmall(BaseFault):
faultCode = faultCodeValueTooSmall
uiFaultString = N_('Value too small!')
def makeFaultString(self, slot, value):
return 'Value (= %s) too small for slot "%s"' % (value, slot)
class ValueTooBig(BaseFault):
faultCode = faultCodeValueTooBig
uiFaultString = N_('Value too big!')
def makeFaultString(self, slot, value):
return 'Value (= %s) too big for slot "%s"' % (value, slot)
class RoleNotInProfiles(BaseFault):
faultCode = faultCodeRoleNotInProfiles
uiFaultString = N_('Role not in profiles')
def makeFaultString(self, role):
return 'Role (%s) not in profiles' % role
class UnknownObjectVersion(BaseFault):
faultCode = faultCodeUnknownObjectVersion
uiFaultString = N_('Unknown object revision')
def makeFaultString(self, objectId, versionNumber):
return 'Unknown version (%d) for object %s' % (versionNumber, objectId)
# Dataflow.
## class UnknownHolder(BaseFault):
## faultCode = faultCodeUnknownHolder
## def makeFaultString(self, instruction, holderName):
## return 'Unknown value holder (= %s) in instruction %s' % (
## holderName, instruction)
## class UnknownResultConnector(BaseFault):
## faultCode = faultCodeUnknownResultConnector
## def makeFaultString(self, instruction, pinNumber, connector):
## return 'Unknown result connector (= %s) in pin %s of instruction %s' \
## % (connector, pinNumber, instruction)
## class InstructionNotImplementable(BaseFault):
## faultCode = faultCodeInstructionNotImplementable
## def makeFaultString(self, instruction):
## return 'Instruction %s can not be implemented' % instruction
## class DeactivatedInstruction(BaseFault):
## faultCode = faultCodeDeactivatedInstruction
## def makeFaultString(self, instruction):
## return 'Instruction %s is deactivated' % instruction
faults = {}
for value in locals().values():
if type(value) == types.ClassType and not value in (Fault, BaseFault):
faults[value.faultCode] = value