moto/moto/stepfunctions/responses.py
2019-10-31 10:36:05 -07:00

155 lines
5.3 KiB
Python

from __future__ import unicode_literals
import json
from moto.core.responses import BaseResponse
from moto.core.utils import amzn_request_id
from .exceptions import AWSError
from .models import stepfunction_backends
class StepFunctionResponse(BaseResponse):
@property
def stepfunction_backend(self):
return stepfunction_backends[self.region]
@amzn_request_id
def create_state_machine(self):
name = self._get_param("name")
definition = self._get_param("definition")
roleArn = self._get_param("roleArn")
tags = self._get_param("tags")
try:
state_machine = self.stepfunction_backend.create_state_machine(
name=name, definition=definition, roleArn=roleArn, tags=tags
)
response = {
"creationDate": state_machine.creation_date,
"stateMachineArn": state_machine.arn,
}
return 200, {}, json.dumps(response)
except AWSError as err:
return err.response()
@amzn_request_id
def list_state_machines(self):
list_all = self.stepfunction_backend.list_state_machines()
list_all = sorted(
[
{
"creationDate": sm.creation_date,
"name": sm.name,
"stateMachineArn": sm.arn,
}
for sm in list_all
],
key=lambda x: x["name"],
)
response = {"stateMachines": list_all}
return 200, {}, json.dumps(response)
@amzn_request_id
def describe_state_machine(self):
arn = self._get_param("stateMachineArn")
return self._describe_state_machine(arn)
@amzn_request_id
def _describe_state_machine(self, state_machine_arn):
try:
state_machine = self.stepfunction_backend.describe_state_machine(
state_machine_arn
)
response = {
"creationDate": state_machine.creation_date,
"stateMachineArn": state_machine.arn,
"definition": state_machine.definition,
"name": state_machine.name,
"roleArn": state_machine.roleArn,
"status": "ACTIVE",
}
return 200, {}, json.dumps(response)
except AWSError as err:
return err.response()
@amzn_request_id
def delete_state_machine(self):
arn = self._get_param("stateMachineArn")
try:
self.stepfunction_backend.delete_state_machine(arn)
return 200, {}, json.dumps("{}")
except AWSError as err:
return err.response()
@amzn_request_id
def list_tags_for_resource(self):
arn = self._get_param("resourceArn")
try:
state_machine = self.stepfunction_backend.describe_state_machine(arn)
tags = state_machine.tags or []
except AWSError:
tags = []
response = {"tags": tags}
return 200, {}, json.dumps(response)
@amzn_request_id
def start_execution(self):
arn = self._get_param("stateMachineArn")
name = self._get_param("name")
execution = self.stepfunction_backend.start_execution(arn, name)
response = {
"executionArn": execution.execution_arn,
"startDate": execution.start_date,
}
return 200, {}, json.dumps(response)
@amzn_request_id
def list_executions(self):
arn = self._get_param("stateMachineArn")
state_machine = self.stepfunction_backend.describe_state_machine(arn)
executions = self.stepfunction_backend.list_executions(arn)
executions = [
{
"executionArn": execution.execution_arn,
"name": execution.name,
"startDate": execution.start_date,
"stateMachineArn": state_machine.arn,
"status": execution.status,
}
for execution in executions
]
return 200, {}, json.dumps({"executions": executions})
@amzn_request_id
def describe_execution(self):
arn = self._get_param("executionArn")
try:
execution = self.stepfunction_backend.describe_execution(arn)
response = {
"executionArn": arn,
"input": "{}",
"name": execution.name,
"startDate": execution.start_date,
"stateMachineArn": execution.state_machine_arn,
"status": execution.status,
"stopDate": execution.stop_date,
}
return 200, {}, json.dumps(response)
except AWSError as err:
return err.response()
@amzn_request_id
def describe_state_machine_for_execution(self):
arn = self._get_param("executionArn")
try:
execution = self.stepfunction_backend.describe_execution(arn)
return self._describe_state_machine(execution.state_machine_arn)
except AWSError as err:
return err.response()
@amzn_request_id
def stop_execution(self):
arn = self._get_param("executionArn")
execution = self.stepfunction_backend.stop_execution(arn)
response = {"stopDate": execution.stop_date}
return 200, {}, json.dumps(response)