Implement JSON responses for EMR (for Boto3)

This commit is contained in:
Akira Chiku 2015-11-15 17:24:36 +09:00
parent 32dd72f6b7
commit 7a11500171
2 changed files with 74 additions and 0 deletions

View File

@ -1,4 +1,5 @@
from __future__ import unicode_literals
import json
from moto.core.responses import BaseResponse
from .models import emr_backends
@ -11,6 +12,10 @@ class ElasticMapReduceResponse(BaseResponse):
def backend(self):
return emr_backends[self.region]
@property
def boto3_request(self):
return 'Boto3' in self.headers.get('User-Agent', [])
def add_job_flow_steps(self):
job_flow_id = self._get_param('JobFlowId')
steps = self._get_list_prefix('Steps.member')
@ -35,6 +40,11 @@ class ElasticMapReduceResponse(BaseResponse):
if instance_groups:
self.backend.add_instance_groups(job_flow.id, instance_groups)
if self.boto3_request:
return json.dumps({
"JobFlowId": job_flow.id
})
template = self.response_template(RUN_JOB_FLOW_TEMPLATE)
return template.render(job_flow=job_flow)
@ -79,6 +89,24 @@ class ElasticMapReduceResponse(BaseResponse):
def list_clusters(self):
clusters = self.backend.list_clusters()
if self.boto3_request:
return json.dumps({
"Clusters": [
{
"Id": cluster.id,
"Name": cluster.name,
"Status": {
"State": cluster.state,
"StatusChangeReason": {},
"TimeLine": {},
},
"NormalizedInstanceHours": cluster.normalized_instance_hours,
} for cluster in clusters
],
"Marker": ""
})
template = self.response_template(LIST_CLUSTERS_TEMPLATE)
return template.render(clusters=clusters)

View File

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import boto3
import sure # noqa
from moto import mock_emr
@mock_emr
def test_run_job_flow():
client = boto3.client('emr', region_name='us-east-1')
cluster_id = client.run_job_flow(
Name='cluster',
Instances={
'MasterInstanceType': 'c3.xlarge',
'SlaveInstanceType': 'c3.xlarge',
'InstanceCount': 3,
'Placement': {'AvailabilityZone': 'us-east-1a'},
'KeepJobFlowAliveWhenNoSteps': True,
},
VisibleToAllUsers=True,
)
cluster_id.should.have.key('JobFlowId')
@mock_emr
def test_list_clusters():
client = boto3.client('emr', region_name='us-east-1')
client.run_job_flow(
Name='cluster',
Instances={
'MasterInstanceType': 'c3.xlarge',
'SlaveInstanceType': 'c3.xlarge',
'InstanceCount': 3,
'Placement': {'AvailabilityZone': 'us-east-1a'},
'KeepJobFlowAliveWhenNoSteps': True,
},
VisibleToAllUsers=True,
)
summary = client.list_clusters()
clusters = summary['Clusters']
clusters.should.have.length_of(1)
cluster = clusters[0]
cluster['NormalizedInstanceHours'].should.equal(0)
cluster['Status']['State'].should.equal("RUNNING")