97ae864196
This change includes several new features to PyKMIP, including: * support for Python 3.3 and 3.4 * support for KMIP client/server SSL connections * removal of all Thrift library dependencies
131 lines
4.4 KiB
Python
131 lines
4.4 KiB
Python
# Copyright (c) 2014 The Johns Hopkins University/Applied Physics Laboratory
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
|
|
class ErrorStrings:
|
|
BAD_EXP_RECV = "Bad {0} {1}: expected {2}, received {3}"
|
|
BAD_ENCODING = "Bad {0} {1}: encoding mismatch"
|
|
|
|
|
|
class BaseError(Exception):
|
|
"""Base class for exceptions defined in this module."""
|
|
|
|
def __init__(self, args):
|
|
[setattr(self, k, v) for k, v in args.items() if k is not 'self']
|
|
|
|
|
|
class KMIPServerError(BaseError):
|
|
"""Base Exception for KMIP server errors."""
|
|
def __init__(self, args):
|
|
super(KMIPServerError, self).__init__(args)
|
|
|
|
|
|
class KMIPServerZombieError(KMIPServerError):
|
|
"""KMIP server error for hung and persistent live KMIP servers."""
|
|
def __init__(self, pid):
|
|
message = 'KMIP server alive after termination: PID {0}'.format(pid)
|
|
super(KMIPServerZombieError, self).__init__({'message': message})
|
|
|
|
def __str__(self):
|
|
return self.message
|
|
|
|
|
|
class KMIPServerSuicideError(KMIPServerError):
|
|
"""KMIP server error for prematurely dead KMIP servers."""
|
|
def __init__(self, pid):
|
|
message = 'KMIP server dead prematurely: PID {0}'.format(pid)
|
|
super(KMIPServerSuicideError, self).__init__({'message': message})
|
|
|
|
def __str__(self):
|
|
return self.message
|
|
|
|
|
|
class InitError(BaseError):
|
|
"""Exception thrown for bad initializations."""
|
|
def __init__(self, cls, exp, recv):
|
|
super(InitError, self).__init__(locals())
|
|
|
|
def __str__(self):
|
|
msg = "Tried to initialize {0} instance with bad type: "
|
|
msg += "expected {1}, received {2}"
|
|
return msg.format(self.cls, self.exp, self.recv)
|
|
|
|
|
|
class WriteValueError(BaseError):
|
|
def __init__(self, cls, attr, value):
|
|
super(WriteValueError, self).__init__(locals())
|
|
|
|
def __str__(self):
|
|
msg = "Tried to write {0}.{1} with invalid value: {2}"
|
|
return msg.format(self.cls, self.attr, self.value)
|
|
|
|
|
|
class WriteTypeError(BaseError):
|
|
def __init__(self, cls, attr, value):
|
|
super(WriteTypeError, self).__init__(locals())
|
|
|
|
def __str__(self):
|
|
msg = "Tried to write {0}.{1} with invalid type: {2}"
|
|
return msg.format(self.cls, self.attr, self.value)
|
|
|
|
|
|
class WriteOverflowError(BaseError):
|
|
def __init__(self, cls, attr, exp, recv):
|
|
super(WriteOverflowError, self).__init__(locals())
|
|
|
|
def __str__(self):
|
|
msg = "Tried to write {0}.{1} with too many bytes: "
|
|
msg += "expected {2}, received {3}"
|
|
return msg.format(self.cls, self.attr, self.exp, self.recv)
|
|
|
|
|
|
class ReadValueError(BaseError):
|
|
def __init__(self, cls, attr, exp, recv):
|
|
super(ReadValueError, self).__init__(locals())
|
|
|
|
def __str__(self):
|
|
msg = "Tried to read {0}.{1}: expected {2}, received {3}"
|
|
return msg.format(self.cls, self.attr, self.exp, self.recv)
|
|
|
|
|
|
class InvalidLengthError(ValueError):
|
|
def __init__(self, cls, exp, recv):
|
|
msg = "Invalid length read for {0}: expected {1}, received {2}"
|
|
super(InvalidLengthError, self).__init__(msg.format(cls, exp, recv))
|
|
|
|
|
|
class StreamNotEmptyError(BaseError):
|
|
def __init__(self, cls, extra):
|
|
super(StreamNotEmptyError, self).__init__(locals())
|
|
|
|
def __str__(self):
|
|
msg = "Invalid length used to read {0}, bytes remaining: {1}"
|
|
return msg.format(self.cls, self.extra)
|
|
|
|
|
|
class StateTypeError(TypeError):
|
|
def __init__(self, cls, exp, recv):
|
|
msg = "Tried to initialize {0} instance with bad type: "
|
|
msg += "expected {1}, received {2}"
|
|
super(StateTypeError, self).__init__(msg.format(cls, exp, recv))
|
|
|
|
|
|
class StateOverflowError(ValueError):
|
|
def __init__(self, cls, attr, exp, recv):
|
|
msg = "Tried to write {0}.{1} with too many bytes: "
|
|
msg += "expected {2}, received {3}"
|
|
super(StateOverflowError, self).__init__(msg.format(cls, attr, exp,
|
|
recv))
|