101 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import boto
 | |
| 
 | |
| from moto.swf.models import (
 | |
|     ActivityType,
 | |
|     Domain,
 | |
|     WorkflowType,
 | |
|     WorkflowExecution,
 | |
| )
 | |
| 
 | |
| 
 | |
| # Some useful constants
 | |
| # Here are some activity timeouts we use in moto/swf tests ; they're extracted
 | |
| # from semi-real world example, the goal is mostly to have predictible and
 | |
| # intuitive behaviour in moto/swf own tests...
 | |
| ACTIVITY_TASK_TIMEOUTS = {
 | |
|     "heartbeatTimeout": "300",        # 5 mins
 | |
|     "scheduleToStartTimeout": "1800",  # 30 mins
 | |
|     "startToCloseTimeout": "1800",    # 30 mins
 | |
|     "scheduleToCloseTimeout": "2700",  # 45 mins
 | |
| }
 | |
| 
 | |
| # Some useful decisions
 | |
| SCHEDULE_ACTIVITY_TASK_DECISION = {
 | |
|     "decisionType": "ScheduleActivityTask",
 | |
|     "scheduleActivityTaskDecisionAttributes": {
 | |
|         "activityId": "my-activity-001",
 | |
|         "activityType": {"name": "test-activity", "version": "v1.1"},
 | |
|         "taskList": {"name": "activity-task-list"},
 | |
|     }
 | |
| }
 | |
| for key, value in ACTIVITY_TASK_TIMEOUTS.items():
 | |
|     SCHEDULE_ACTIVITY_TASK_DECISION[
 | |
|         "scheduleActivityTaskDecisionAttributes"][key] = value
 | |
| 
 | |
| 
 | |
| # A test Domain
 | |
| def get_basic_domain():
 | |
|     return Domain("test-domain", "90")
 | |
| 
 | |
| 
 | |
| # A test WorkflowType
 | |
| def _generic_workflow_type_attributes():
 | |
|     return [
 | |
|         "test-workflow", "v1.0"
 | |
|     ], {
 | |
|         "task_list": "queue",
 | |
|         "default_child_policy": "ABANDON",
 | |
|         "default_execution_start_to_close_timeout": "7200",
 | |
|         "default_task_start_to_close_timeout": "300",
 | |
|     }
 | |
| 
 | |
| 
 | |
| def get_basic_workflow_type():
 | |
|     args, kwargs = _generic_workflow_type_attributes()
 | |
|     return WorkflowType(*args, **kwargs)
 | |
| 
 | |
| 
 | |
| def mock_basic_workflow_type(domain_name, conn):
 | |
|     args, kwargs = _generic_workflow_type_attributes()
 | |
|     conn.register_workflow_type(domain_name, *args, **kwargs)
 | |
|     return conn
 | |
| 
 | |
| 
 | |
| # A test WorkflowExecution
 | |
| def make_workflow_execution(**kwargs):
 | |
|     domain = get_basic_domain()
 | |
|     domain.add_type(ActivityType("test-activity", "v1.1"))
 | |
|     wft = get_basic_workflow_type()
 | |
|     return WorkflowExecution(domain, wft, "ab1234", **kwargs)
 | |
| 
 | |
| 
 | |
| # Makes decision tasks start automatically on a given workflow
 | |
| def auto_start_decision_tasks(wfe):
 | |
|     wfe.schedule_decision_task = wfe.schedule_and_start_decision_task
 | |
|     return wfe
 | |
| 
 | |
| 
 | |
| # Setup a complete example workflow and return the connection object
 | |
| def setup_workflow():
 | |
|     conn = boto.connect_swf("the_key", "the_secret")
 | |
|     conn.register_domain("test-domain", "60", description="A test domain")
 | |
|     conn = mock_basic_workflow_type("test-domain", conn)
 | |
|     conn.register_activity_type(
 | |
|         "test-domain", "test-activity", "v1.1",
 | |
|         default_task_heartbeat_timeout="600",
 | |
|         default_task_schedule_to_close_timeout="600",
 | |
|         default_task_schedule_to_start_timeout="600",
 | |
|         default_task_start_to_close_timeout="600",
 | |
|     )
 | |
|     wfe = conn.start_workflow_execution(
 | |
|         "test-domain", "uid-abcd1234", "test-workflow", "v1.0")
 | |
|     conn.run_id = wfe["runId"]
 | |
|     return conn
 | |
| 
 | |
| 
 | |
| # A helper for processing the first timeout on a given object
 | |
| def process_first_timeout(obj):
 | |
|     _timeout = obj.first_timeout()
 | |
|     if _timeout:
 | |
|         obj.timeout(_timeout)
 |