Index: third_party/gsutil/third_party/boto/boto/fps/response.py |
diff --git a/third_party/gsutil/third_party/boto/boto/fps/response.py b/third_party/gsutil/third_party/boto/boto/fps/response.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c0a9e2837f8395fd5288c9fb8e3ce9d5b13ab52d |
--- /dev/null |
+++ b/third_party/gsutil/third_party/boto/boto/fps/response.py |
@@ -0,0 +1,207 @@ |
+# Copyright (c) 2012 Andy Davidoff http://www.disruptek.com/ |
+# Copyright (c) 2010 Jason R. Coombs http://www.jaraco.com/ |
+# Copyright (c) 2008 Chris Moyer http://coredumped.org/ |
+# Copyright (c) 2006-2009 Mitch Garnaat http://garnaat.org/ |
+# |
+# Permission is hereby granted, free of charge, to any person obtaining a |
+# copy of this software and associated documentation files (the |
+# "Software"), to deal in the Software without restriction, including |
+# without limitation the rights to use, copy, modify, merge, publish, dis- |
+# tribute, sublicense, and/or sell copies of the Software, and to permit |
+# persons to whom the Software is furnished to do so, subject to the fol- |
+# lowing conditions: |
+# |
+# The above copyright notice and this permission notice shall be included |
+# in all copies or substantial portions of the Software. |
+# |
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- |
+# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT |
+# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
+# IN THE SOFTWARE. |
+from decimal import Decimal |
+from boto.compat import filter, map |
+ |
+ |
+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': |
+ super(FPSResponse, self).endElement(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 super(Response, self).startElement(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 super(ComplexAmount, self).startElement(name, attrs, connection) |
+ |
+ def endElement(self, name, value, connection): |
+ if name == 'Value': |
+ value = Decimal(value) |
+ super(ComplexAmount, self).endElement(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 super(AccountBalance, self).startElement(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 super(GetAccountBalanceResult, self).startElement(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 super(GetTotalPrepaidLiabilityResult, self).startElement(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 super(GetPrepaidBalanceResult, self).startElement(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 super(GetOutstandingDebtBalanceResult, self).startElement(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 super(TransactionPart, self).startElement(name, attrs, |
+ connection) |
+ |
+ |
+class Transaction(ResponseElement): |
+ def __init__(self, *args, **kw): |
+ self.TransactionPart = [] |
+ super(Transaction, self).__init__(*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 super(Transaction, self).startElement(name, attrs, connection) |
+ |
+ |
+class GetAccountActivityResult(ResponseElement): |
+ def __init__(self, *args, **kw): |
+ self.Transaction = [] |
+ super(GetAccountActivityResult, self).__init__(*args, **kw) |
+ |
+ def startElement(self, name, attrs, connection): |
+ if name == 'Transaction': |
+ getattr(self, name).append(Transaction(name=name)) |
+ return getattr(self, name)[-1] |
+ return super(GetAccountActivityResult, self).startElement(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 super(GetTransactionResult, self).startElement(name, attrs, |
+ connection) |
+ |
+ |
+class GetTokensResult(ResponseElement): |
+ def __init__(self, *args, **kw): |
+ self.Token = [] |
+ super(GetTokensResult, self).__init__(*args, **kw) |
+ |
+ def startElement(self, name, attrs, connection): |
+ if name == 'Token': |
+ getattr(self, name).append(ResponseElement(name=name)) |
+ return getattr(self, name)[-1] |
+ return super(GetTokensResult, self).startElement(name, attrs, |
+ connection) |