Generate proper empty value for XML/JSON
This commit is contained in:
		
							parent
							
								
									2e33e2be90
								
							
						
					
					
						commit
						b632df3aa4
					
				@ -1,6 +1,7 @@
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
import datetime
 | 
			
		||||
import json
 | 
			
		||||
import logging
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
from boto.exception import JSONResponseError
 | 
			
		||||
@ -17,6 +18,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():
 | 
			
		||||
@ -544,11 +548,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:
 | 
			
		||||
@ -560,9 +573,15 @@ def xml_to_json_response(service_spec, operation, xml, result_node=None):
 | 
			
		||||
                else:
 | 
			
		||||
                    raise ValueError('Malformatted input')
 | 
			
		||||
            elif spec[k]['type'] == 'map':
 | 
			
		||||
                if v is None:
 | 
			
		||||
                    od[k] = {}
 | 
			
		||||
                else:
 | 
			
		||||
                    key = from_str(v['entry']['key'], spec[k]['key'])
 | 
			
		||||
                    val = from_str(v['entry']['value'], spec[k]['value'])
 | 
			
		||||
                    od[k] = {key: val}
 | 
			
		||||
            else:
 | 
			
		||||
                if v is None:
 | 
			
		||||
                    od[k] = None
 | 
			
		||||
                else:
 | 
			
		||||
                    od[k] = transform(v, spec[k])
 | 
			
		||||
        return od
 | 
			
		||||
 | 
			
		||||
@ -24,12 +24,19 @@ class FakeBootstrapAction(object):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class FakeInstanceGroup(object):
 | 
			
		||||
    def __init__(self, instance_count, instance_role, instance_type, market, name,
 | 
			
		||||
                 id=None, bid_price=None):
 | 
			
		||||
    def __init__(self, instance_count, instance_role, instance_type,
 | 
			
		||||
                 market='ON_DEMAND', name=None, id=None, bid_price=None):
 | 
			
		||||
        self.id = id or random_instance_group_id()
 | 
			
		||||
 | 
			
		||||
        self.bid_price = bid_price
 | 
			
		||||
        self.market = market
 | 
			
		||||
        if name is None:
 | 
			
		||||
            if instance_role == 'MASTER':
 | 
			
		||||
                name = 'master'
 | 
			
		||||
            elif instance_role == 'CORE':
 | 
			
		||||
                name = 'slave'
 | 
			
		||||
            else:
 | 
			
		||||
                name = 'Task instance group'
 | 
			
		||||
        self.name = name
 | 
			
		||||
        self.num_instances = instance_count
 | 
			
		||||
        self.role = instance_role
 | 
			
		||||
 | 
			
		||||
@ -194,8 +194,8 @@ def test_describe_job_flow():
 | 
			
		||||
    jf['LogUri'].should.equal(args['LogUri'])
 | 
			
		||||
    jf['Name'].should.equal(args['Name'])
 | 
			
		||||
    jf['ServiceRole'].should.equal(args['ServiceRole'])
 | 
			
		||||
    jf.shouldnt.have.key('Steps')
 | 
			
		||||
    jf.shouldnt.have.key('SupportedProducts')
 | 
			
		||||
    jf['Steps'].should.equal([])
 | 
			
		||||
    jf['SupportedProducts'].should.equal([])
 | 
			
		||||
    jf['VisibleToAllUsers'].should.equal(True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -254,7 +254,7 @@ def test_run_job_flow():
 | 
			
		||||
    resp['LogUri'].should.equal(args['LogUri'])
 | 
			
		||||
    resp['VisibleToAllUsers'].should.equal(args['VisibleToAllUsers'])
 | 
			
		||||
    resp['Instances']['NormalizedInstanceHours'].should.equal(0)
 | 
			
		||||
    resp.shouldnt.have.key('Steps')
 | 
			
		||||
    resp['Steps'].should.equal([])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@mock_emr
 | 
			
		||||
@ -379,10 +379,11 @@ def test_bootstrap_actions():
 | 
			
		||||
        {'Name': 'bs1',
 | 
			
		||||
         'ScriptBootstrapAction': {
 | 
			
		||||
             'Args': ['arg1', 'arg2'],
 | 
			
		||||
             'Path': 'path/to/script'}},
 | 
			
		||||
             'Path': 's3://path/to/script'}},
 | 
			
		||||
        {'Name': 'bs2',
 | 
			
		||||
         'ScriptBootstrapAction': {
 | 
			
		||||
             'Path': 'path/to/anotherscript'}}
 | 
			
		||||
             'Args': [],
 | 
			
		||||
             'Path': 's3://path/to/anotherscript'}}
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    client = boto3.client('emr', region_name='us-east-1')
 | 
			
		||||
@ -583,4 +584,4 @@ def test_tags():
 | 
			
		||||
 | 
			
		||||
    client.remove_tags(ResourceId=cluster_id, TagKeys=[t['Key'] for t in input_tags])
 | 
			
		||||
    resp = client.describe_cluster(ClusterId=cluster_id)['Cluster']
 | 
			
		||||
    resp.shouldnt.have.key('Tags')
 | 
			
		||||
    resp['Tags'].should.equal([])
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user