| Index: third_party/boto/fps/response.py
|
| diff --git a/third_party/boto/fps/response.py b/third_party/boto/fps/response.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fa77b2d4199fcb0e4312911a52a05b7fcb924f79
|
| --- /dev/null
|
| +++ b/third_party/boto/fps/response.py
|
| @@ -0,0 +1,175 @@
|
| +from decimal import Decimal
|
| +
|
| +
|
| +def ResponseFactory(action):
|
| + class FPSResponse(Response):
|
| + _action = action
|
| + _Result = globals().get(action + 'Result', ResponseElement)
|
| +
|
| + # due to nodes receiving their closing tags
|
| + def endElement(self, name, value, connection):
|
| + if name != action + 'Response':
|
| + Response.endElement(self, name, value, connection)
|
| + return FPSResponse
|
| +
|
| +
|
| +class ResponseElement(object):
|
| + def __init__(self, connection=None, name=None):
|
| + if connection is not None:
|
| + self._connection = connection
|
| + self._name = name or self.__class__.__name__
|
| +
|
| + @property
|
| + def connection(self):
|
| + return self._connection
|
| +
|
| + def __repr__(self):
|
| + render = lambda pair: '{!s}: {!r}'.format(*pair)
|
| + do_show = lambda pair: not pair[0].startswith('_')
|
| + attrs = filter(do_show, self.__dict__.items())
|
| + return '{0}({1})'.format(self.__class__.__name__,
|
| + ', '.join(map(render, attrs)))
|
| +
|
| + def startElement(self, name, attrs, connection):
|
| + return None
|
| +
|
| + # due to nodes receiving their closing tags
|
| + def endElement(self, name, value, connection):
|
| + if name != self._name:
|
| + setattr(self, name, value)
|
| +
|
| +
|
| +class Response(ResponseElement):
|
| + _action = 'Undefined'
|
| +
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'ResponseMetadata':
|
| + setattr(self, name, ResponseElement(name=name))
|
| + elif name == self._action + 'Result':
|
| + setattr(self, name, self._Result(name=name))
|
| + else:
|
| + return ResponseElement.startElement(self, name, attrs, connection)
|
| + return getattr(self, name)
|
| +
|
| +
|
| +class ComplexAmount(ResponseElement):
|
| + def __repr__(self):
|
| + return '{0} {1}'.format(self.CurrencyCode, self.Value)
|
| +
|
| + def __float__(self):
|
| + return float(self.Value)
|
| +
|
| + def __str__(self):
|
| + return str(self.Value)
|
| +
|
| + def startElement(self, name, attrs, connection):
|
| + if name not in ('CurrencyCode', 'Value'):
|
| + message = 'Unrecognized tag {0} in ComplexAmount'.format(name)
|
| + raise AssertionError(message)
|
| + return ResponseElement.startElement(self, name, attrs, connection)
|
| +
|
| + def endElement(self, name, value, connection):
|
| + if name == 'Value':
|
| + value = Decimal(value)
|
| + ResponseElement.endElement(self, name, value, connection)
|
| +
|
| +
|
| +class AmountCollection(ResponseElement):
|
| + def startElement(self, name, attrs, connection):
|
| + setattr(self, name, ComplexAmount(name=name))
|
| + return getattr(self, name)
|
| +
|
| +
|
| +class AccountBalance(AmountCollection):
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'AvailableBalances':
|
| + setattr(self, name, AmountCollection(name=name))
|
| + return getattr(self, name)
|
| + return AmountCollection.startElement(self, name, attrs, connection)
|
| +
|
| +
|
| +class GetAccountBalanceResult(ResponseElement):
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'AccountBalance':
|
| + setattr(self, name, AccountBalance(name=name))
|
| + return getattr(self, name)
|
| + return Response.startElement(self, name, attrs, connection)
|
| +
|
| +
|
| +class GetTotalPrepaidLiabilityResult(ResponseElement):
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'OutstandingPrepaidLiability':
|
| + setattr(self, name, AmountCollection(name=name))
|
| + return getattr(self, name)
|
| + return Response.startElement(self, name, attrs, connection)
|
| +
|
| +
|
| +class GetPrepaidBalanceResult(ResponseElement):
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'PrepaidBalance':
|
| + setattr(self, name, AmountCollection(name=name))
|
| + return getattr(self, name)
|
| + return Response.startElement(self, name, attrs, connection)
|
| +
|
| +
|
| +class GetOutstandingDebtBalanceResult(ResponseElement):
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'OutstandingDebt':
|
| + setattr(self, name, AmountCollection(name=name))
|
| + return getattr(self, name)
|
| + return Response.startElement(self, name, attrs, connection)
|
| +
|
| +
|
| +class TransactionPart(ResponseElement):
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'FeesPaid':
|
| + setattr(self, name, ComplexAmount(name=name))
|
| + return getattr(self, name)
|
| + return ResponseElement.startElement(self, name, attrs, connection)
|
| +
|
| +
|
| +class Transaction(ResponseElement):
|
| + def __init__(self, *args, **kw):
|
| + self.TransactionPart = []
|
| + ResponseElement.__init__(self, *args, **kw)
|
| +
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'TransactionPart':
|
| + getattr(self, name).append(TransactionPart(name=name))
|
| + return getattr(self, name)[-1]
|
| + if name in ('TransactionAmount', 'FPSFees', 'Balance'):
|
| + setattr(self, name, ComplexAmount(name=name))
|
| + return getattr(self, name)
|
| + return ResponseElement.startElement(self, name, attrs, connection)
|
| +
|
| +
|
| +class GetAccountActivityResult(ResponseElement):
|
| + def __init__(self, *args, **kw):
|
| + self.Transaction = []
|
| + ResponseElement.__init__(self, *args, **kw)
|
| +
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'Transaction':
|
| + getattr(self, name).append(Transaction(name=name))
|
| + return getattr(self, name)[-1]
|
| + return ResponseElement.startElement(self, name, attrs, connection)
|
| +
|
| +
|
| +class GetTransactionResult(ResponseElement):
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'Transaction':
|
| + setattr(self, name, Transaction(name=name))
|
| + return getattr(self, name)
|
| + return ResponseElement.startElement(self, name, attrs, connection)
|
| +
|
| +
|
| +class GetTokensResult(ResponseElement):
|
| + def __init__(self, *args, **kw):
|
| + self.Token = []
|
| + ResponseElement.__init__(self, *args, **kw)
|
| +
|
| + def startElement(self, name, attrs, connection):
|
| + if name == 'Token':
|
| + getattr(self, name).append(ResponseElement(name=name))
|
| + return getattr(self, name)[-1]
|
| + return ResponseElement.startElement(self, name, attrs, connection)
|
|
|