Revision 8b4ba753 kamaki/clients/astakos/__init__.py

b/kamaki/clients/astakos/__init__.py
38 38
from kamaki.clients import Client, ClientError, RequestManager, recvlog
39 39

  
40 40

  
41
class AstakosClientError(AstakosClientException, ClientError):
42
    """Join AstakosClientException as ClientError in one class"""
43

  
44

  
45
def _astakos_error(foo):
46
    def wrap(self, *args, **kwargs):
47
        try:
48
            return foo(self, *args, **kwargs)
49
        except AstakosClientException as sace:
50
            raise AstakosClientError('%s' % sace, sace.status, sace.details)
51
    return wrap
52

  
53

  
41 54
class AstakosClient(OriginalAstakosClient):
42 55
    """Wrap Original AstakosClient to ensure compatibility in kamaki clients"""
43 56

  
57
    @_astakos_error
44 58
    def __init__(self, *args, **kwargs):
45 59
        if args:
46 60
            args = list(args)
......
64 78
        return self.user_info[term]
65 79

  
66 80

  
67
def _astakos_error(foo):
68
    def wrap(self, *args, **kwargs):
69
        try:
70
            return foo(self, *args, **kwargs)
71
        except AstakosClientException as sace:
72
            self._raise_for_status(sace)
73
    return wrap
81
#  Wrap AstakosClient public methods to raise AstakosClientError
82
from inspect import getmembers
83
for m in getmembers(AstakosClient):
84
    if hasattr(m[1], '__call__') and not ('%s' % m[0]).startswith('_'):
85
        setattr(AstakosClient, m[0], _astakos_error(m[1]))
74 86

  
75 87

  
76 88
class LoggedAstakosClient(AstakosClient):

Also available in: Unified diff