Merge pull request #736 from okomestudio/ts/botocore_update

Remove botocore version pinning
This commit is contained in:
Steve Pulec 2016-11-06 09:50:28 -05:00 committed by GitHub
commit 721d1b3a3f
7 changed files with 74 additions and 32 deletions

View file

@ -1,6 +1,7 @@
from __future__ import unicode_literals
import datetime
import json
import logging
import re
import pytz
@ -18,6 +19,9 @@ from moto.compat import OrderedDict
from moto.core.utils import camelcase_to_underscores, method_names_from_class
log = logging.getLogger(__name__)
def _decode_dict(d):
decoded = {}
for key, value in d.items():
@ -550,11 +554,20 @@ def xml_to_json_response(service_spec, operation, xml, result_node=None):
od = OrderedDict()
for k, v in value.items():
if k.startswith('@') or v is None:
if k.startswith('@'):
continue
if k not in spec:
# this can happen when with an older version of
# botocore for which the node in XML template is not
# defined in service spec.
log.warning('Field %s is not defined by the botocore version in use', k)
continue
if spec[k]['type'] == 'list':
if len(spec[k]['member']) == 1:
if v is None:
od[k] = []
elif len(spec[k]['member']) == 1:
if isinstance(v['member'], list):
od[k] = transform(v['member'], spec[k]['member'])
else:
@ -566,11 +579,22 @@ def xml_to_json_response(service_spec, operation, xml, result_node=None):
else:
raise ValueError('Malformatted input')
elif spec[k]['type'] == 'map':
key = from_str(v['entry']['key'], spec[k]['key'])
val = from_str(v['entry']['value'], spec[k]['value'])
od[k] = {key: val}
if v is None:
od[k] = {}
else:
items = ([v['entry']] if not isinstance(v['entry'], list) else
v['entry'])
for item in items:
key = from_str(item['key'], spec[k]['key'])
val = from_str(item['value'], spec[k]['value'])
if k not in od:
od[k] = {}
od[k][key] = val
else:
od[k] = transform(v, spec[k])
if v is None:
od[k] = None
else:
od[k] = transform(v, spec[k])
return od
dic = xmltodict.parse(xml)