Showing preview only (1,548K chars total). Download the full file or copy to clipboard to get everything.
Repository: Miserlou/Zappa
Branch: master
Commit: 5a11c17f5ecf
Files: 474
Total size: 1.4 MB
Directory structure:
gitextract_xj1w1emc/
├── .github/
│ ├── ISSUE_TEMPLATE.md
│ └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── LICENSE
├── MANIFEST.in
├── README.md
├── docs/
│ ├── domain_with_free_ssl_dns.md
│ └── domain_with_free_ssl_http.md
├── example/
│ ├── README.md
│ ├── app.py
│ ├── authmodule.py
│ ├── mymodule.py
│ ├── policy/
│ │ └── deploy.json
│ └── requirements.txt
├── requirements.in
├── requirements.sh
├── requirements.txt
├── setup.py
├── test.sh
├── test_requirements.in
├── test_requirements.txt
├── test_settings.json
├── test_settings.py
├── tests/
│ ├── README.md
│ ├── __init__.py
│ ├── data/
│ │ ├── test1/
│ │ │ └── this_dir_is_not_a_module.txt
│ │ ├── test1.py
│ │ └── test2/
│ │ └── test.py
│ ├── name_scenarios.json
│ ├── placebo/
│ │ ├── TestZappa.test_cli_aws/
│ │ │ ├── apigateway.CreateApiKey_1.json
│ │ │ ├── apigateway.CreateDeployment_1.json
│ │ │ ├── apigateway.CreateDeployment_2.json
│ │ │ ├── apigateway.CreateDeployment_3.json
│ │ │ ├── apigateway.CreateResource_1.json
│ │ │ ├── apigateway.CreateResource_2.json
│ │ │ ├── apigateway.CreateResource_3.json
│ │ │ ├── apigateway.CreateResource_4.json
│ │ │ ├── apigateway.CreateResource_5.json
│ │ │ ├── apigateway.CreateResource_6.json
│ │ │ ├── apigateway.CreateResource_7.json
│ │ │ ├── apigateway.CreateResource_8.json
│ │ │ ├── apigateway.CreateResource_9.json
│ │ │ ├── apigateway.DeleteApiKey_1.json
│ │ │ ├── apigateway.DeleteRestApi_1.json
│ │ │ ├── apigateway.DeleteRestApi_2.json
│ │ │ ├── apigateway.GetApiKeys_1.json
│ │ │ ├── apigateway.GetResources_1.json
│ │ │ ├── apigateway.GetResources_2.json
│ │ │ ├── apigateway.GetResources_3.json
│ │ │ ├── apigateway.GetRestApi_1.json
│ │ │ ├── apigateway.GetRestApi_2.json
│ │ │ ├── apigateway.GetRestApis_1.json
│ │ │ ├── apigateway.GetRestApis_2.json
│ │ │ ├── apigateway.GetRestApis_3.json
│ │ │ ├── apigateway.GetRestApis_4.json
│ │ │ ├── apigateway.GetRestApis_5.json
│ │ │ ├── apigateway.GetRestApis_6.json
│ │ │ ├── apigateway.GetRestApis_7.json
│ │ │ ├── apigateway.GetRestApis_8.json
│ │ │ ├── apigateway.GetRestApis_9.json
│ │ │ ├── apigateway.GetStages_1.json
│ │ │ ├── apigateway.UpdateRestApi_1.json
│ │ │ ├── apigateway.UpdateStage_1.json
│ │ │ ├── apigateway.UpdateStage_2.json
│ │ │ ├── apigateway.UpdateStage_3.json
│ │ │ ├── cloudformation.CreateStack_1.json
│ │ │ ├── cloudformation.DeleteStack_1.json
│ │ │ ├── cloudformation.DescribeStackResource_1.json
│ │ │ ├── cloudformation.DescribeStackResource_2.json
│ │ │ ├── cloudformation.DescribeStackResource_3.json
│ │ │ ├── cloudformation.DescribeStacks_1.json
│ │ │ ├── cloudformation.DescribeStacks_10.json
│ │ │ ├── cloudformation.DescribeStacks_11.json
│ │ │ ├── cloudformation.DescribeStacks_12.json
│ │ │ ├── cloudformation.DescribeStacks_13.json
│ │ │ ├── cloudformation.DescribeStacks_14.json
│ │ │ ├── cloudformation.DescribeStacks_15.json
│ │ │ ├── cloudformation.DescribeStacks_16.json
│ │ │ ├── cloudformation.DescribeStacks_2.json
│ │ │ ├── cloudformation.DescribeStacks_3.json
│ │ │ ├── cloudformation.DescribeStacks_4.json
│ │ │ ├── cloudformation.DescribeStacks_5.json
│ │ │ ├── cloudformation.DescribeStacks_6.json
│ │ │ ├── cloudformation.DescribeStacks_7.json
│ │ │ ├── cloudformation.DescribeStacks_8.json
│ │ │ ├── cloudformation.DescribeStacks_9.json
│ │ │ ├── cloudformation.ListStackResources_1.json
│ │ │ ├── cloudformation.ListStackResources_10.json
│ │ │ ├── cloudformation.ListStackResources_11.json
│ │ │ ├── cloudformation.ListStackResources_12.json
│ │ │ ├── cloudformation.ListStackResources_2.json
│ │ │ ├── cloudformation.ListStackResources_3.json
│ │ │ ├── cloudformation.ListStackResources_4.json
│ │ │ ├── cloudformation.ListStackResources_5.json
│ │ │ ├── cloudformation.ListStackResources_6.json
│ │ │ ├── cloudformation.ListStackResources_7.json
│ │ │ ├── cloudformation.ListStackResources_8.json
│ │ │ ├── cloudformation.ListStackResources_9.json
│ │ │ ├── cloudformation.UpdateStack_1.json
│ │ │ ├── cognito-idp.DescribeUserPool_1.json
│ │ │ ├── cognito-idp.UpdateUserPool_1.json
│ │ │ ├── events.DeleteRule_1.json
│ │ │ ├── events.DeleteRule_2.json
│ │ │ ├── events.DeleteRule_3.json
│ │ │ ├── events.DeleteRule_4.json
│ │ │ ├── events.DeleteRule_5.json
│ │ │ ├── events.DeleteRule_6.json
│ │ │ ├── events.DeleteRule_7.json
│ │ │ ├── events.DeleteRule_8.json
│ │ │ ├── events.DeleteRule_9.json
│ │ │ ├── events.ListRuleNamesByTarget_1.json
│ │ │ ├── events.ListRuleNamesByTarget_2.json
│ │ │ ├── events.ListRuleNamesByTarget_3.json
│ │ │ ├── events.ListRuleNamesByTarget_4.json
│ │ │ ├── events.ListRuleNamesByTarget_5.json
│ │ │ ├── events.ListRuleNamesByTarget_6.json
│ │ │ ├── events.ListRuleNamesByTarget_7.json
│ │ │ ├── events.ListRuleNamesByTarget_8.json
│ │ │ ├── events.ListTargetsByRule_1.json
│ │ │ ├── events.ListTargetsByRule_10.json
│ │ │ ├── events.ListTargetsByRule_11.json
│ │ │ ├── events.ListTargetsByRule_12.json
│ │ │ ├── events.ListTargetsByRule_2.json
│ │ │ ├── events.ListTargetsByRule_3.json
│ │ │ ├── events.ListTargetsByRule_4.json
│ │ │ ├── events.ListTargetsByRule_5.json
│ │ │ ├── events.ListTargetsByRule_6.json
│ │ │ ├── events.ListTargetsByRule_7.json
│ │ │ ├── events.ListTargetsByRule_8.json
│ │ │ ├── events.ListTargetsByRule_9.json
│ │ │ ├── events.PutRule_1.json
│ │ │ ├── events.PutRule_10.json
│ │ │ ├── events.PutRule_11.json
│ │ │ ├── events.PutRule_12.json
│ │ │ ├── events.PutRule_13.json
│ │ │ ├── events.PutRule_14.json
│ │ │ ├── events.PutRule_2.json
│ │ │ ├── events.PutRule_3.json
│ │ │ ├── events.PutRule_4.json
│ │ │ ├── events.PutRule_5.json
│ │ │ ├── events.PutRule_6.json
│ │ │ ├── events.PutRule_7.json
│ │ │ ├── events.PutRule_8.json
│ │ │ ├── events.PutRule_9.json
│ │ │ ├── events.PutTargets_1.json
│ │ │ ├── events.PutTargets_10.json
│ │ │ ├── events.PutTargets_11.json
│ │ │ ├── events.PutTargets_12.json
│ │ │ ├── events.PutTargets_13.json
│ │ │ ├── events.PutTargets_14.json
│ │ │ ├── events.PutTargets_2.json
│ │ │ ├── events.PutTargets_3.json
│ │ │ ├── events.PutTargets_4.json
│ │ │ ├── events.PutTargets_5.json
│ │ │ ├── events.PutTargets_6.json
│ │ │ ├── events.PutTargets_7.json
│ │ │ ├── events.PutTargets_8.json
│ │ │ ├── events.PutTargets_9.json
│ │ │ ├── events.RemoveTargets_1.json
│ │ │ ├── events.RemoveTargets_2.json
│ │ │ ├── events.RemoveTargets_3.json
│ │ │ ├── events.RemoveTargets_4.json
│ │ │ ├── events.RemoveTargets_5.json
│ │ │ ├── events.RemoveTargets_6.json
│ │ │ ├── events.RemoveTargets_7.json
│ │ │ ├── events.RemoveTargets_8.json
│ │ │ ├── events.RemoveTargets_9.json
│ │ │ ├── iam.GetRolePolicy_1.json
│ │ │ ├── iam.GetRolePolicy_10.json
│ │ │ ├── iam.GetRolePolicy_11.json
│ │ │ ├── iam.GetRolePolicy_12.json
│ │ │ ├── iam.GetRolePolicy_2.json
│ │ │ ├── iam.GetRolePolicy_3.json
│ │ │ ├── iam.GetRolePolicy_4.json
│ │ │ ├── iam.GetRolePolicy_5.json
│ │ │ ├── iam.GetRolePolicy_6.json
│ │ │ ├── iam.GetRolePolicy_7.json
│ │ │ ├── iam.GetRolePolicy_8.json
│ │ │ ├── iam.GetRolePolicy_9.json
│ │ │ ├── iam.GetRole_1.json
│ │ │ ├── iam.GetRole_10.json
│ │ │ ├── iam.GetRole_11.json
│ │ │ ├── iam.GetRole_12.json
│ │ │ ├── iam.GetRole_2.json
│ │ │ ├── iam.GetRole_3.json
│ │ │ ├── iam.GetRole_4.json
│ │ │ ├── iam.GetRole_5.json
│ │ │ ├── iam.GetRole_6.json
│ │ │ ├── iam.GetRole_7.json
│ │ │ ├── iam.GetRole_8.json
│ │ │ ├── iam.GetRole_9.json
│ │ │ ├── iam.PutRolePolicy_1.json
│ │ │ ├── lambda.AddPermission_1.json
│ │ │ ├── lambda.AddPermission_10.json
│ │ │ ├── lambda.AddPermission_11.json
│ │ │ ├── lambda.AddPermission_12.json
│ │ │ ├── lambda.AddPermission_13.json
│ │ │ ├── lambda.AddPermission_14.json
│ │ │ ├── lambda.AddPermission_2.json
│ │ │ ├── lambda.AddPermission_3.json
│ │ │ ├── lambda.AddPermission_4.json
│ │ │ ├── lambda.AddPermission_5.json
│ │ │ ├── lambda.AddPermission_6.json
│ │ │ ├── lambda.AddPermission_7.json
│ │ │ ├── lambda.AddPermission_8.json
│ │ │ ├── lambda.AddPermission_9.json
│ │ │ ├── lambda.CreateFunction_1.json
│ │ │ ├── lambda.CreateFunction_2.json
│ │ │ ├── lambda.CreateFunction_3.json
│ │ │ ├── lambda.CreateFunction_4.json
│ │ │ ├── lambda.CreateFunction_5.json
│ │ │ ├── lambda.DeleteFunctionConcurrency_1.json
│ │ │ ├── lambda.DeleteFunction_1.json
│ │ │ ├── lambda.DeleteFunction_2.json
│ │ │ ├── lambda.GetAlias_1.json
│ │ │ ├── lambda.GetFunctionConfiguration_1.json
│ │ │ ├── lambda.GetFunction_1.json
│ │ │ ├── lambda.GetFunction_2.json
│ │ │ ├── lambda.GetFunction_3.json
│ │ │ ├── lambda.GetFunction_4.json
│ │ │ ├── lambda.GetFunction_5.json
│ │ │ ├── lambda.GetFunction_6.json
│ │ │ ├── lambda.GetFunction_7.json
│ │ │ ├── lambda.GetFunction_8.json
│ │ │ ├── lambda.GetPolicy_1.json
│ │ │ ├── lambda.ListVersionsByFunction_1.json
│ │ │ ├── lambda.ListVersionsByFunction_2.json
│ │ │ ├── lambda.ListVersionsByFunction_3.json
│ │ │ ├── lambda.ListVersionsByFunction_4.json
│ │ │ ├── lambda.UpdateAlias_1.json
│ │ │ ├── lambda.UpdateFunctionCode_1.json
│ │ │ ├── lambda.UpdateFunctionCode_2.json
│ │ │ ├── lambda.UpdateFunctionCode_3.json
│ │ │ ├── lambda.UpdateFunctionCode_4.json
│ │ │ ├── lambda.UpdateFunctionCode_5.json
│ │ │ ├── lambda.UpdateFunctionCode_6.json
│ │ │ ├── lambda.UpdateFunctionConfiguration_1.json
│ │ │ ├── logs.DeleteLogGroup_1.json
│ │ │ ├── logs.DeleteLogGroup_2.json
│ │ │ ├── logs.DeleteLogGroup_3.json
│ │ │ ├── logs.DescribeLogStreams_1.json
│ │ │ ├── logs.DescribeLogStreams_2.json
│ │ │ ├── logs.DescribeLogStreams_3.json
│ │ │ ├── logs.DescribeLogStreams_4.json
│ │ │ ├── logs.FilterLogEvents_1.json
│ │ │ ├── logs.FilterLogEvents_2.json
│ │ │ ├── logs.FilterLogEvents_3.json
│ │ │ ├── logs.FilterLogEvents_4.json
│ │ │ ├── s3.CompleteMultipartUpload_1.json
│ │ │ ├── s3.CompleteMultipartUpload_2.json
│ │ │ ├── s3.CompleteMultipartUpload_3.json
│ │ │ ├── s3.CompleteMultipartUpload_4.json
│ │ │ ├── s3.CompleteMultipartUpload_5.json
│ │ │ ├── s3.CompleteMultipartUpload_6.json
│ │ │ ├── s3.CreateBucket_1.json
│ │ │ ├── s3.CreateBucket_10.json
│ │ │ ├── s3.CreateBucket_2.json
│ │ │ ├── s3.CreateBucket_3.json
│ │ │ ├── s3.CreateBucket_4.json
│ │ │ ├── s3.CreateBucket_5.json
│ │ │ ├── s3.CreateBucket_6.json
│ │ │ ├── s3.CreateBucket_7.json
│ │ │ ├── s3.CreateBucket_8.json
│ │ │ ├── s3.CreateBucket_9.json
│ │ │ ├── s3.CreateMultipartUpload_1.json
│ │ │ ├── s3.CreateMultipartUpload_2.json
│ │ │ ├── s3.CreateMultipartUpload_3.json
│ │ │ ├── s3.CreateMultipartUpload_4.json
│ │ │ ├── s3.CreateMultipartUpload_5.json
│ │ │ ├── s3.CreateMultipartUpload_6.json
│ │ │ ├── s3.CreateMultipartUpload_7.json
│ │ │ ├── s3.CreateMultipartUpload_8.json
│ │ │ ├── s3.DeleteObject_1.json
│ │ │ ├── s3.DeleteObject_2.json
│ │ │ ├── s3.DeleteObject_3.json
│ │ │ ├── s3.DeleteObject_4.json
│ │ │ ├── s3.DeleteObject_5.json
│ │ │ ├── s3.DeleteObject_6.json
│ │ │ ├── s3.HeadBucket_1.json
│ │ │ ├── s3.HeadBucket_2.json
│ │ │ ├── s3.HeadBucket_3.json
│ │ │ ├── s3.HeadBucket_4.json
│ │ │ ├── s3.HeadBucket_5.json
│ │ │ ├── s3.HeadBucket_6.json
│ │ │ ├── s3.PutObject_1.json
│ │ │ ├── s3.PutObject_2.json
│ │ │ ├── s3.UploadPart_1.json
│ │ │ ├── s3.UploadPart_10.json
│ │ │ ├── s3.UploadPart_11.json
│ │ │ ├── s3.UploadPart_12.json
│ │ │ ├── s3.UploadPart_13.json
│ │ │ ├── s3.UploadPart_14.json
│ │ │ ├── s3.UploadPart_15.json
│ │ │ ├── s3.UploadPart_16.json
│ │ │ ├── s3.UploadPart_17.json
│ │ │ ├── s3.UploadPart_18.json
│ │ │ ├── s3.UploadPart_19.json
│ │ │ ├── s3.UploadPart_2.json
│ │ │ ├── s3.UploadPart_20.json
│ │ │ ├── s3.UploadPart_21.json
│ │ │ ├── s3.UploadPart_22.json
│ │ │ ├── s3.UploadPart_23.json
│ │ │ ├── s3.UploadPart_24.json
│ │ │ ├── s3.UploadPart_25.json
│ │ │ ├── s3.UploadPart_26.json
│ │ │ ├── s3.UploadPart_27.json
│ │ │ ├── s3.UploadPart_28.json
│ │ │ ├── s3.UploadPart_29.json
│ │ │ ├── s3.UploadPart_3.json
│ │ │ ├── s3.UploadPart_30.json
│ │ │ ├── s3.UploadPart_31.json
│ │ │ ├── s3.UploadPart_32.json
│ │ │ ├── s3.UploadPart_33.json
│ │ │ ├── s3.UploadPart_34.json
│ │ │ ├── s3.UploadPart_35.json
│ │ │ ├── s3.UploadPart_36.json
│ │ │ ├── s3.UploadPart_37.json
│ │ │ ├── s3.UploadPart_38.json
│ │ │ ├── s3.UploadPart_39.json
│ │ │ ├── s3.UploadPart_4.json
│ │ │ ├── s3.UploadPart_40.json
│ │ │ ├── s3.UploadPart_41.json
│ │ │ ├── s3.UploadPart_42.json
│ │ │ ├── s3.UploadPart_43.json
│ │ │ ├── s3.UploadPart_44.json
│ │ │ ├── s3.UploadPart_45.json
│ │ │ ├── s3.UploadPart_46.json
│ │ │ ├── s3.UploadPart_47.json
│ │ │ ├── s3.UploadPart_48.json
│ │ │ ├── s3.UploadPart_5.json
│ │ │ ├── s3.UploadPart_6.json
│ │ │ ├── s3.UploadPart_7.json
│ │ │ ├── s3.UploadPart_8.json
│ │ │ ├── s3.UploadPart_9.json
│ │ │ ├── sns.ListSubscriptionsByTopic_1.json
│ │ │ ├── sns.ListSubscriptionsByTopic_2.json
│ │ │ ├── sns.ListSubscriptionsByTopic_3.json
│ │ │ ├── sns.ListSubscriptionsByTopic_4.json
│ │ │ ├── sns.ListSubscriptionsByTopic_5.json
│ │ │ ├── sns.ListSubscriptionsByTopic_6.json
│ │ │ ├── sns.ListSubscriptionsByTopic_7.json
│ │ │ ├── sns.ListSubscriptionsByTopic_8.json
│ │ │ ├── sns.SetSubscriptionAttributes_1.json
│ │ │ ├── sns.Subscribe_1.json
│ │ │ ├── sns.Subscribe_2.json
│ │ │ ├── sns.Subscribe_3.json
│ │ │ ├── sns.Subscribe_4.json
│ │ │ ├── sns.Subscribe_5.json
│ │ │ ├── sns.Subscribe_6.json
│ │ │ ├── sns.Unsubscribe_1.json
│ │ │ ├── sns.Unsubscribe_2.json
│ │ │ ├── sns.Unsubscribe_3.json
│ │ │ ├── sns.Unsubscribe_4.json
│ │ │ ├── sns.Unsubscribe_5.json
│ │ │ └── sts.GetCallerIdentity_1.json
│ │ ├── TestZappa.test_cli_aws_status/
│ │ │ ├── apigateway.GetApiKeys_1.json
│ │ │ ├── apigateway.GetRestApis_1.json
│ │ │ ├── events.DescribeRule_1.json
│ │ │ ├── events.ListRuleNamesByTarget_1.json
│ │ │ ├── events.ListRules_1.json
│ │ │ ├── lambda.GetFunction_1.json
│ │ │ ├── lambda.ListVersionsByFunction_1.json
│ │ │ ├── monitoring.GetMetricStatistics_1.json
│ │ │ └── monitoring.GetMetricStatistics_2.json
│ │ ├── TestZappa.test_cli_cognito_triggers/
│ │ │ ├── cognito-idp.DescribeUserPool_1.json
│ │ │ ├── cognito-idp.UpdateUserPool_1.json
│ │ │ ├── lambda.AddPermission_1.json
│ │ │ └── sts.GetCallerIdentity_1.json
│ │ ├── TestZappa.test_cognito_trigger/
│ │ │ ├── cognito-idp.DescribeUserPool_1.json
│ │ │ ├── cognito-idp.UpdateUserPool_1.json
│ │ │ ├── lambda.AddPermission_1.json
│ │ │ └── sts.GetCallerIdentity_1.json
│ │ ├── TestZappa.test_cognito_trigger_existing/
│ │ │ ├── cognito-idp.DescribeUserPool_1.json
│ │ │ ├── cognito-idp.UpdateUserPool_1.json
│ │ │ ├── lambda.AddPermission_1.json
│ │ │ └── sts.GetCallerIdentity_1.json
│ │ ├── TestZappa.test_cognito_trigger_existing_UnusedAccountValidityDays/
│ │ │ ├── cognito-idp.DescribeUserPool_1.json
│ │ │ ├── cognito-idp.UpdateUserPool_1.json
│ │ │ ├── lambda.AddPermission_1.json
│ │ │ └── sts.GetCallerIdentity_1.json
│ │ ├── TestZappa.test_copy_on_s3/
│ │ │ ├── s3.AbortMultipartUpload_1.json
│ │ │ ├── s3.CompleteMultipartUpload_1.json
│ │ │ ├── s3.CopyObject_1.json
│ │ │ ├── s3.CreateBucket_1.json
│ │ │ ├── s3.CreateMultipartUpload_1.json
│ │ │ ├── s3.HeadBucket_1.json
│ │ │ ├── s3.HeadObject_1.json
│ │ │ ├── s3.PutObject_1.json
│ │ │ └── s3.UploadPart_1.json
│ │ ├── TestZappa.test_create_iam_roles/
│ │ │ ├── iam.CreateRole_1.json
│ │ │ ├── iam.GetRolePolicy_1.json
│ │ │ ├── iam.GetRolePolicy_2.json
│ │ │ ├── iam.GetRole_1.json
│ │ │ ├── iam.GetRole_2.json
│ │ │ └── iam.PutRolePolicy_1.json
│ │ ├── TestZappa.test_create_lambda_function_local/
│ │ │ ├── lambda.CreateAlias_1.json
│ │ │ ├── lambda.CreateFunction_1.json
│ │ │ ├── lambda.DeleteFunctionConcurrency_1.json
│ │ │ ├── lambda.GetAlias_1.json
│ │ │ ├── lambda.UpdateAlias_1.json
│ │ │ └── lambda.UpdateFunctionCode_1.json
│ │ ├── TestZappa.test_create_lambda_function_s3/
│ │ │ ├── lambda.CreateAlias_1.json
│ │ │ ├── lambda.CreateFunction_1.json
│ │ │ ├── lambda.DeleteFunctionConcurrency_1.json
│ │ │ ├── lambda.GetAlias_1.json
│ │ │ ├── lambda.UpdateAlias_1.json
│ │ │ └── lambda.UpdateFunctionCode_1.json
│ │ ├── TestZappa.test_deploy_api_gateway/
│ │ │ ├── apigateway.CreateDeployment_1.json
│ │ │ ├── apigateway.CreateRestApi_1.json
│ │ │ ├── apigateway.GetResources_1.json
│ │ │ ├── apigateway.GetRestApi_1.json
│ │ │ ├── apigateway.GetRestApis_1.json
│ │ │ ├── apigateway.PutIntegrationResponse_1.json
│ │ │ ├── apigateway.PutIntegration_1.json
│ │ │ ├── apigateway.PutMethodResponse_1.json
│ │ │ ├── apigateway.PutMethod_1.json
│ │ │ └── apigateway.UpdateStage_1.json
│ │ ├── TestZappa.test_fetch_logs/
│ │ │ ├── logs.DescribeLogStreams_1.json
│ │ │ └── logs.FilterLogEvents_1.json
│ │ ├── TestZappa.test_get_api_url/
│ │ │ └── apigateway.GetRestApis_1.json
│ │ ├── TestZappa.test_handler/
│ │ │ └── s3.GetObject_1.json
│ │ ├── TestZappa.test_invoke_lambda_function/
│ │ │ └── lambda.Invoke_1.json
│ │ ├── TestZappa.test_rollback_lambda_function_version/
│ │ │ ├── lambda.GetFunction_1.json
│ │ │ ├── lambda.ListVersionsByFunction_1.json
│ │ │ ├── lambda.ListVersionsByFunction_2.json
│ │ │ └── lambda.UpdateFunctionCode_1.json
│ │ └── TestZappa.test_upload_remove_s3/
│ │ ├── s3.CompleteMultipartUpload_1.json
│ │ ├── s3.CreateBucket_1.json
│ │ ├── s3.CreateMultipartUpload_1.json
│ │ ├── s3.DeleteObject_1.json
│ │ ├── s3.HeadBucket_1.json
│ │ ├── s3.HeadObject_1.json
│ │ ├── s3.PutObject_1.json
│ │ └── s3.UploadPart_1.json
│ ├── test_app.py
│ ├── test_bad_circular_extends_settings.json
│ ├── test_bad_environment_vars.json
│ ├── test_bad_settings.json
│ ├── test_bad_stage_name_settings.json
│ ├── test_bot_exception_handler_settings.py
│ ├── test_bot_handler_being_triggered.py
│ ├── test_event_script_app.py
│ ├── test_event_script_settings.py
│ ├── test_exception_handler_settings.py
│ ├── test_handler.py
│ ├── test_non_ascii_environment_var_key.json
│ ├── test_one_env.json
│ ├── test_settings.toml
│ ├── test_settings.yaml
│ ├── test_settings.yml
│ ├── test_wsgi_script_name_app.py
│ ├── test_wsgi_script_name_settings.py
│ ├── tests.py
│ ├── tests_async.py
│ ├── tests_async_old.py
│ ├── tests_docs.py
│ ├── tests_middleware.py
│ ├── tests_placebo.py
│ └── utils.py
└── zappa/
├── __init__.py
├── async.py
├── asynchronous.py
├── cli.py
├── core.py
├── ext/
│ ├── __init__.py
│ └── django_zappa.py
├── handler.py
├── letsencrypt.py
├── middleware.py
├── policies.py
├── utilities.py
└── wsgi.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!--- Provide a general summary of the issue in the Title above -->
## Context
<!--- Provide a more detailed introduction to the issue itself, and why you consider it to be a bug -->
<!--- Also, please make sure that you are running Zappa _from a virtual environment_ and are using Python 3.6/3.7/3.8 -->
## Expected Behavior
<!--- Tell us what should happen -->
## Actual Behavior
<!--- Tell us what happens instead -->
## Possible Fix
<!--- Not obligatory, but suggest a fix or reason for the bug -->
## Steps to Reproduce
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug include code to reproduce, if relevant -->
1.
2.
3.
## Your Environment
<!--- Include as many relevant details about the environment you experienced the bug in -->
* Zappa version used:
* Operating System and Python version:
* The output of `pip freeze`:
* Link to your project (optional):
* Your `zappa_settings.json`:
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Before you submit this PR, please make sure that you meet these criteria:
* Did you read the [contributing guide](https://github.com/Miserlou/Zappa/#contributing)?
* If this is a non-trivial commit, did you **open a ticket** for discussion?
* Did you **put the URL for that ticket in a comment** in the code?
* If you made a new function, did you **write a good docstring** for it?
* Did you avoid putting "_" in front of your new function for no reason?
* Did you write a test for your new code?
* Did the Travis build pass?
* Did you improve (or at least not significantly reduce) the amount of code test coverage?
* Did you **make sure this code actually works on Lambda**, as well as locally?
* Did you test this code with all of **Python 3.6**, **Python 3.7** and **Python 3.8** ?
* Does this commit ONLY relate to the issue at hand and have your linter shit all over the code?
If so, awesome! If not, please try to fix those issues before submitting your Pull Request.
Thank you for your contribution!
-->
## Description
<!-- Please describe the changes included in this PR -->
## GitHub Issues
<!-- Proposed changes should be discussed in an issue before submitting a PR. -->
<!-- Link to relevant tickets here. -->
================================================
FILE: .gitignore
================================================
*~
*.zip
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coveragerc
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# pyenv
.python-version
# PyCharm
# Project settings from the PyCharm IDE are stored in the .idea folder
.idea/
# Apple OS X specific files are put into the .DS_Store file
.DS_Store
# Vim stuff:
*.swp
*.swo
*~
tests/zappa_settings.json
tests/example_template_outputs
# Locally generated settings file
zappa_settings.json
# Sublime Text stuff
*.sublime-project
*.sublime-workspace
README.test.md
.vscode
.mypy_cache
.pytest_cache
================================================
FILE: .travis.yml
================================================
language: python
python:
- "3.6"
- "3.7"
- "3.8"
dist: xenial
# command to install dependencies
cache:
- pip
install:
- "pip install --upgrade pip; pip install --upgrade setuptools; pip install -r test_requirements.txt; pip install -e git+https://github.com/django/django-contrib-comments.git#egg=django-contrib-comments; python setup.py install"
# command to run tests
env:
- TESTCASE=tests/tests_docs.py
- TESTCASE=tests/test_handler.py
- TESTCASE=tests/tests_middleware.py
- TESTCASE=tests/tests_placebo.py
- TESTCASE=tests/tests_async.py
- TESTCASE=tests/tests.py
before_script:
# stop the build if there are Python syntax errors or undefined names
- flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
script:
- nosetests $TESTCASE --with-coverage --cover-package=zappa --with-timer
# - coverage combine --append
after_success:
coveralls
notifications:
slack: zappateam:TTJ0mfHunDK0IBweKkEXjGpR
================================================
FILE: CHANGELOG.md
================================================
# Zappa Changelog
## 0.52.0
* Remove dateutil version restriction
* Fix failed downloads of wheel packages with non-alphanumeric characters
* Last release from Miserlou/Zappa
* Removed references to zappa.io
## 0.51.0
* Lambda Layers
* Cognito support
* Skip venv check if --no_venv argument is passed
* Fix for abi3 filename matching
* Wait for the Load Balancer to become active before proceeding
* Add option 'Scheme' for alb config
* Allow full path exclusions while packaging
* Workaround for werkzeug incompatibility
* And assorted fixes
## 0.50.0
* Updated manylinux to support manylinux1/manylinux2010/manylinux2014 packages
* Fixed issue with duplicated cookie headers in API Gateway
* Various maintenance updates to the README file
* Remove old python 2.7 code (not all yet)
* Use pip-tools to manage dependencies (and remove pinned dependencies from the package)
* Add option for concurrency limit
* Use safe_load with YAML
* Support for ABI3 binary packages (particularly cryptography)
* Remove dependency on lambda-packages
## 0.49.0
* Added support for Python 3.8
* Fixed boto3 reporting of long names
* Added support for new AWS Regions
* Minor bug and README fixes
## 0.48.2
* Last version with Python 2.7 support.
* Fix for invalid values of HTTP_HOST and others (introduced in 0.48.0)
## 0.48.1
* Fix for an issue where you couldn't update a function if it had been deployed with a version prior to 0.48.0
* Support for private (VPC-only) API Gateway endpoints
## 0.48.0
* Deprecation of zappa.async because async is a reserved word in 3.7, please use zappa.asynchronous
* Support for Application Load Balancer as an alternative to API Gateway
* Improvements in manylinux wheel downloads
* Support for multi-value query strings
* Python 3.7 support
* Support for multi-value headers
* Support for the new 256kB async limit
* Bunch of small typos, fixes and documentation improvements
* Use Django 2 on tests with python 3
* Stop applying tags on buckets not created by zappa
* Be more forgiving on 504 errors during deployment
* Fix cleanup of DynamoDB table for async tasks
* Detection of invalid bucket names
* Flake8 checks added to tests
## 0.47.1
* Handle accounts with more than 100 domains in route 53
* Force requests upgrade to 2.20.0 for compatibility with urllib3 1.24
* Allow defining API Gateway policies (including restricting access to one IP address)
## 0.47.0
* Support for SQS events
* Added test to enforce running of doctoc
* Add support for running django as a WSGI app (for NewRelic and others)
* Updates AWS regions for lambda and API Gateway
* Fix support for gcloud and other packages with slim_handler
* Add --disable-keep-open to zappa tail
* Dependency updates
* Fix pyenv invocation
* Add custom base_path stripping support
* Multiple documentation fixes and improvements
* first iteration of a documented deploy policy
## 0.46.2
* hotfix for creating virtual environments
## 0.46.1
* Hotfix for pipenv support (pip >10.0.1)
* Adds AWS GovCloud support!
* Test fix
## 0.46.0
_Okay, I dropped the ball for a long time. Bad BDFL!_
_New releases will come much faster once again_
* Pip10 compatibility
* Add support for base path configuration in API gateway custom domain.
* Fix path case sensitivity in get_installed_packages
* Move task decorator async decision from import time to call time.
* Fix documentation error in authorizer stanza of zappa_settings.json.
* Adding explicit UTF-8 encoding for Flask app detection
* Bump lambda packages version
* Fix for work with latest Werkezeug
* Fixed parameter name from 'FunctionNmae' -> 'FunctionName'
* Remove `use`; fixes #1522
* Philippe Trounev is awesome
* fix case sensitivity problem for comparing package location
* isBase64Encoded is a boolean flag instead of string true
* check pip return code as sometimes pypi lookup fails
* Add support to delete old versions of lambda functions.
* Reactor title casing of dict keys into a utility function
* Add `role_arn` settings variable
* ..and too many more, check the changelog!
## 0.45.1
* Make `package_info.json` consistent across Python versions
* Fixes to `task_sns`
## 0.45.0
* Add support for SQLite on Python 3.6 (LP bump)
* Add unique package identifier file
* Fixes #1171 don't colorize partial words
* Various small changes
* More robust OpenSSL parsing for LE
* Update applies tags
* Allows deploying and updating from existing S3 package
## 0.44.3
* Slim handler packaging hotfix - thanks @mcrowson!
## 0.44.2
* Non-Dynamo asynx hotfix - thanks @jwkvam!
## 0.44.1
* Packaging hotfix - thank Yunseop!
## 0.44.0
* Async responses (thanks Sean!)
* Remove setLevel call from common log
* Fix #1023
* Merge #1058, 1059, 1073
* Allow overriding of endpoint_url arg
* Add support for API Gateway stage variables
* Add AWS X-Ray support (thanks @mathom!)
* Events take kwargs (Thanks @mcrowson!)
* Detect P2/3 during `init`
* Include stage names in `slim_handler` zips
* Allow `-s` with `manage`
* Use same S3 bucket for global endpoints
* Fix bug with mixed-case packages
* Cache wheels, fix 0-byte wheels
## 0.43.2
* Add index prefix to each subsequent schedule expression for the same event (#1051)
* fix/Only update CORS on resources which have an OPTIONS method (#1036)
* Support for binary support and cors simultaneously (#1011)
* Set Flask script name based on domain which the request was made to (#1015)
* Fix SNS Async (#1055)
* GZip for slim handler
* Force color option
* Various dep bumps
## 0.43.1
* Fixes #1001, don't override AWS env vars if k:v not set. Thanks Nik and Sean!
## 0.43.0
* Checks for the key 'Environment' when fetching remote lambda env vars (#988)
* except BotoCoreError before general exception in zappa.cli.update
* make cookie hack case-insensitive
* Fix #998 - Make environment variable keys strings instead of byte arrays in python 3.6
* Add --disable_progress command line parameter
* #946 - Allow setting cors to false.
* #870 Lambda from outside
* Implement context header mappings - Feature Request Issue #939
* Separating out native AWS environment variables ##962
* Rule name shortening
* Splintering aws_environment_variables from environment_variables (to avoid overwriting AWS native env vars).
## 0.42.2
* Add exclude for __pycache__ contents (#943)
* Fix #937 - Use get_data
* Add support for configuring APIGW cache TTL and encryption #942
* Addressing #909: Don't load credentials for 'package' command
## 0.42.1
* Small fixes for #918, #922, #803, #802, #799, #888, #903, #893, #828, #874, and others.
* Support for manylinux wheels Python 3.6 package downloading.
* Py3 `certify` fixes.
* Add support for multiple expressions when scheduling
* Fix content-type headers not passing through on DELETE
* Avoid creating __init__.py in a directory next to a module (.py file) with the same name
* Check recursively if there is any .py{,c} file in a directory before creating __init__.py
* Fix SNS event tasks
* Bump lambda-packages
## 0.42.0
* Cached manylinux wheel installed
* New dependency installation formatting
* Clarify "stage" vs "environment" terminology in code
* Fix problem with capitalized packages
* Delete local package if using wheels version. This saves several MBs on package size in some cases (e.g. numpy).
* Thanks to @mcrowson, @nikbora and @schuyler1d
## 0.41.3
* Various Python3 fixes
* Remove some dead code
* More binary package fixes thanks to and @nikbora and @bxm156
* Improved async tasks thanks to @schuyler1d
* Various small changes
## 0.41.2
* Support for new `lambda-packages` format (Python3 support)
* Fix `setup.py` on Windows Python3
* Fix #818 - python3 import for LE
* Support AWS-specific environment variables (with KMS)
## 0.41.1
* Add `template` command
* Add `--json` in more places
* Add `--output` to package
* Support for manylinux wheels Python 3.6 package downloading #803
from nikbora
* Fix PyEnv exit code #799
## 0.41.0
* Add Python3 Support! #793, #6
* Deprecate `lets_encrypt_expression`
* Refactor a bunch of stuff to work with Python3 package restrictions >:[
* #776 fix for libmysqlclient.so.18 error when using `slim_handler`
* add profile and region detection to init - thanks @pdpol
* #774 Wsgi environment improvements (Fix untrustworthy remote_addr)
* Only create `__init__.py` file if there are python files or sub dirs in the folder
* Update docs to reflect lambda name prepended to role_name
* Guard log responses (thanks @scoates)
## 0.40.0
* Add Async Task Support! Lots of tickets and PRs related, including #61, #603, #694 and #732.
* More info here: https://blog.zappa.io/posts/zappa-introduces-seamless-asynchronous-task-execution
* Fix Django non-WSGI function initialization, #748
* Add support for AWS Lambda Dead Letter Queue, #740
* Fix API Gateway test button (the bolt button), #735
* Switch to using per-lambda-name (project-stage) rather than a single default LambdaExecutionRole
## 0.39.1
* Fix broken Let's Encrypt trying to use new ACM ARNs
* Add `apigateway_description` setting, fixes #722
* More aggressive virtualenvironment checking
## 0.39.0
* Add `certificate_arn` setting, support for AWS Certificate Manager (#710)
* Fix zip permissions when building on Windows (#714)
* Change the active working directory to `/tmp` when using the slim handler so that relative filepaths work. (#711)
## 0.38.1
* Hotfix for broken Django deploys
## 0.38.0
* Add confirm to `certify`
* Add `--manual` to `--certify`
* Fix `certify` for existing domains
* Add `extra_permissions` setting
* Add `shell` command
## 0.37.2
* Revert to Kappa 0.6.0 #684 and others
* Add binary support for more HTTP methods, #696
## 0.37.1
* Add binary upload support, fix #683
## 0.37.0
* Add support for custom, non-Let's Encrypt certificates, thanks to Benjamin Congdon
* Change default permissions to allow executable binaries, #682
* Fix binary support for Django POST, #677
## 0.36.1
* Remove Kappa 0.6 specific hack
* Bring back '-' substitution
## 0.36.0
* Add automatic support for serving binary files! Via @wobeng, closes #481
* Fixes `rollback` default back to 1 from 0, #673
* Ensure correct chmodding during package creation, #484
* Update regions that Zappa supports, #667
* Validate function names based on actual gateway rules #521
* Fix unschedule events with trimmed names #662
* Fix a few places where `extends` wasn't respecting `stage_config`, #655
* Begin to remove some dead code
* Dependency bumps
## 0.35.2
* Adds `--non-http` to `tail`
## 0.35.1
* Fix 64bit `lambda-packages` (#645)
* Fix wheel packages (#642)
## 0.35.0
* Replace ZappaCookie with Set-Cookie permutation! :D (#636)
* Bump `lambda-packages` version
* Fix installed_packages_name_set (#637)
* Add `slim_handler` (#548)
* Various small requirements bumps and other fixes.
## 0.34.0
* Adds `--since` and `--filter` to `tail`
* Fixes `unschedule` command when used with specific stage
## 0.33.0
* Adds `package` command
* Forbids the use of unicode environment variable keys
* Initialize wsgi.errors to sys.stderr (was '')
* Accept `AWS_SESSION_TOKEN` when executing via an IAM role (#589)
* Set `REMOTE_USER` even when using `iam_authorization`
* Rename `lets_encrypt_schedule` to `lets_encrypt_expression` (#571)
* Messages in `tail` are now sequential
* Bump version requirements, update README
* Various other small changes
## 0.32.1
* File `tail` broken in CLI refactor
## 0.32.0
* Add Cognito Authorizers
* Refactor CLI, add Bash Completion
* Improve manylinux wheels
* Varios fixes and req bumps
## 0.31.0
* Adds the `cors` feature, big thanks to @AusIV!
* Adds support for `-e` eggs, thanks to @schuyler1d and @xuru!
* Adds support for YAML settings files. Eat up, hipsters.
## 0.30.1
* Add `--http` filter to `tail`
* Prefer `apigateway_enabled` but still respect `use_apigateway`, #493
## 0.30.0
* Adds colors to `zappa tail` output, fixes #492
* Adds `--no-color` CLI argument
* Adds fatal warning for bad `app_function`s, fixes #485.
## 0.29.2
* Fix S3 broken S3 events
* Move `use_apigateway` to `apigateway_enabled`
## 0.29.1
* Fixes progress bar error for manylinux packages
* Safely handle freezes when downloading from PyPI
* Adds `s3://` syntax for remote env files. (#478, thanks @Leandr!)
## 0.29.0
* Adds `extends` syntax to settings file.
* Fixes Django migrations, #464
* Adds support for manylinux wheels! #398
* Fixes multiple events in `status` command
* Fixes support for `certify` on apex domains, #451
## 0.28.3
* Filter private hosted zones to avoid conflicts while certifying
* Fix small Python3 bug (#457)
* Fix for #453 (windows os.path)
* Re-raise Zappa exception with full traceback
* Skip pyc on django migrations, fixes #436
* Delete correct domain name, #448
## 0.28.2
* added region and lambda name to not deployed error
## 0.28.1
* Add "global" mode to init. Expect a blog post soon!
* Small refactors and dependency upgrades.
## 0.28.0
* `--json` for machine readable status output
* `--all` for global deployment prep
* Better exit code handling
* Get AWS region from profile if not set in zappa_settings.json
* Fix broken Django management command invocation
* Add Kinesis permission
* Add capability to specify authoriser arn
* Various refactors and small fixes
## 0.27.1
* Bump lambda-packages
* Fix new Django unicode problems (#397)
* Ensure env vars are strings via @scoates
* Fix #382
## 0.27.0
* Remove many hacks using new API Gateway features.
* Closes #303, #363, #361
* See the [blog post](https://blog.zappa.io/posts/unhacking-zappa-with-new-apigateway-features) for more details!
* Bump dependencies - make sure you reinstall your requirements!
* Improved stack update handling.
### 0.26.1 (Never Published)
* Warn on namespace collisions.
* Bump lambda-packages version.
## 0.26.0
* Use simplified API Gateway configuration, via @koriaf.
* Add better support for `use_apigateway` without any supplied app function. Reported by @mguidone.
* Truncate illegally long event functions names. Reported by @mguidone.
## 0.25.1
* Remove 'boto' from default excludes. #333, thanks Claude!
* Don't allow invalid API Gateway characters in the config. Thanks @scoates!
* Better respect for `use_apigateway` in `update` command.
* Avoids hang with API Gateway limit reached.
* Fix DynamoDB/Kinesis event sources, add docs. Big thanks Claude!
## 0.25.0
* Add ability to invoke raw python strings, like so:
`zappa invoke dev "print 1+2+3" --raw`
* Fixes multi-argument `manage` commands.
* Updated related documentation.
* Fixes places where program was exiting with status 0 instead of -1. Thanks @mattc!
* Adds old-to-new-style check on delete, thanks @mathom.
## 0.24.2
* Fix a problem from trying to `update` old-style API routes using new Tropo code. Ensures `touch` works as intended again. Fix by @mathom.
## 0.24.1
* Add a helpful failure warning for users without permissions to automatically manage execution roles.
* Fix potential div by zero error in new Tropo code.
## 0.24.0
* Use Troposphere/CloudFormation to create API Gateway routes
- Thanks, @mathom!
* `zappa update` now updates changes to API Gateway routes
* Redirect HTML content injection is fixed
* Redirect HTML content injection now only happens for 'text/html' content types. This is a partial solution to #303.
* Added CHANGELOG.md
## 0.0.1 - 0.23.2
* Didn't keep a changelog
* Sorry!
* Read the commit log :)
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2017 Rich Jones
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: MANIFEST.in
================================================
include README.md LICENSE requirements.txt test_requirements.txt requirements.in test_requirements.in
recursive-include zappa *.py
================================================
FILE: README.md
================================================
Project moved to https://github.com/zappa/Zappa. Versions after 0.52.0 are published from there. Thank you Rich Jones for all your work on creating Zappa and maintaining it for years!
================================================
FILE: docs/domain_with_free_ssl_dns.md
================================================
# Using Let's Encrypt with Zappa
If you want to deploy a Zappa application using a domain or a subdomain, you'll need a valid SSL certificate. Fortunately for you, Zappa provides support for free SSL certificates using [Let's Encrypt](https://letsencrypt.org/) out of the box!
### Step 1: Creating a Hosted Zone
To verify that you own your domain, Let's Encrypt issues a challenge for you to prove that you control your domain's DNS servers. To do this automatically, Zappa requires that you use AWS's [Route 53](https://aws.amazon.com/route53/) DNS service.
In the AWS [Route 53 web console](https://console.aws.amazon.com/route53/), create a new "Hosted Zone" for your domain. Define this value as the _apex_ ("naked") domain of your target domain. (So even if you wanted `test.zappa.io`, call this zone `zappa.io`). This will automatically give you a set of NS servers for your domain to use, like so:
[](https://console.aws.amazon.com/route53/)
In your domain registrar's settings, set these new values as your domain's nameservers. These may take up to an hour to propagate.
### Step 2: Generating an AWS Account Key
Next, you'll need to generate an account key that you'll use with Let's Encrypt.
To generate it, simply:
```
$ openssl genrsa 2048 > account.key;
```
It's very important that you keep that key safe!
_Note that this is a 2048b key. It's generally preferred to use a stronger 4096b key, but at time of writing, AWS did not support keys that large. Use larger keys at your own risk. If you get it working with a 4096b key, please file an issue so that we can update this documentation._
### Step 3: Certification
Finally, configure your `zappa_settings.json` to use this domain and key:
```javascript
{
"dev": {
...
"domain": "test.zappa.io", // Your target domain
"lets_encrypt_key": "account.key", // Path to account key
...
}
}
```
If you're doing this as part of a continuous deployment system, you can also store account key in a secure S3 bucket and point to it like so:
```javascript
{
"dev": {
...
"domain": "test.zappa.io", // Your target domain
"lets_encrypt_key": "s3://your-secure-bucket/account.key", // S3 Path to account key
...
}
}
```
Then, to verify, create and install your certificate with your domain, simply run the command:
```
$ zappa certify
```
And you're done! You can now use your SSL-secured Zappa application on your target domain.
**Please note** that the first time you run this command, it can take around 45 minutes for Amazon to create your domain, and it'll take about 60 seconds every time after that.
Let's Encrypt certificates only last for 3 months, so make sure that you remember to renew in time.
### Step 4 (Optional): Auto-Renew
If you want your certificates to renew automatically, use simply need to define a `lets_encrypt_expression` in your settings, like so:
```javascript
{
"dev": {
...
"domain": "test.zappa.io", // Your target domain
"lets_encrypt_key": "s3://your-secure-bucket/account.key", // S3 Path to account key
"lets_encrypt_expression": "rate(15 days)", // LE Renew schedule
...
}
}
```
The only caveat with this is that your functions `timeout_seconds` must be greater than `60`, as that's how long it takes the DNS to propagate. The auto-renewer will be installed whenever you next `update` or `schedule`, though you may need to re`deploy` to up your `timeout_seconds`.
================================================
FILE: docs/domain_with_free_ssl_http.md
================================================
# Using Let's Encrypt with Zappa (HTTP Validation)
## IMPORTANT!: Zappa now supports DNS-based validation out of the box, so you should probably use that if possible!
This guide will show you the slightly convoluted way of running a Zappa website on an API Gateway Custom Domain Name with a free valid SSL certificate via Let's Encrypt with HTTP validation.
## Tool Installation
First, you should have a valid Zappa website deployed to API Gateway without a domain.
You'll also need to install Let's Encrypt via git:
```
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
```
and localtunnel via npm:
```
$ npm install -g localtunnel
```
## Generating the Certificate
In one terminal, run:
```
./letsencrypt-auto certonly -d yoursub.example.com --manual
```
Hit 'Yes' until you get to a message like this:
```
Make sure your web server displays the following content at
http://yoursub.example.com/.well-known/acme-challenge/OJkbegasdfnowA_xql_kqpl8hBImj9WbM88fDF35wBE before continuing:
OJkbegIsNpnowA_xql_kqpl8hBImj9WbM88fDF35wBE.Dowxk8snntasdfS433FYr2xtYZ0RaBcpaEXqmdc
If you don't have HTTP server configured, you can run the following
command on the target server (as root):
mkdir -p /tmp/letsencrypt/public_html/.well-known/acme-challenge
cd /tmp/letsencrypt/public_html
printf "%s" OJkbegIsNpnowA_xql_kqpl8hBImj9WbM88fDF35wBE.Dowxk8snnt2LxVZS3XS433FYr2xtYZ0RaBcpaEXqmdc > .well-known/acme-challenge/OJkbegIsNpnowA_xql_kqpl8hBImj9WbM88fDF35wBE
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"
Press ENTER to continue
```
Next, in another terminal, run the command it gave you as root.
```
sudo $(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"
```
In a third terminal, run the following command (make sure firewall is off or allow port 80 through):
```
lt --port 80 --subdomain yoursub
```
Then, in a browser, visit http://yoursub.localtunnel.me/.well-known/acme-challenge/ and make sure that your challenge value is there.
Next, point your DNS server's CNAME value to be "yoursub.localtunnel.me". Wait five minutes for this to propate, then visit http://yoursub.example.com/.well-known/acme-challenge/ and confirm that this is working.
Then, in the first terminal, press ENTER and your certificate will be generated. You can find all of the keys and certificates in /etc/letsencrypt/live/yoursub.example.com/
## Installing the Certificate
In the AWS API Gateway console, visit the [custom domains](https://console.aws.amazon.com/apigateway/home?region=us-east-1#/custom-domain-names) page. Press 'create' and fill in your values from your /etc/letsencrypt/live/yoursub.example.com/ directory.
| value | AWS API Gateway Custom Domain Name Setting field |
| --- | --- | --- |
| `yoursub.example.com` | Domain name |
| `yoursub.example.com` | Certificate name |
| `privkey.pem` | Certificate private key |
| `cert.pem` | Certificate body |
| `fullchain.pem` | Certificate chain. **Note**: only copy the 2nd part of the chain because the 1st part is the Certificate body, already provided.
Finally, press 'Save' and your domain with a free valid SSL certificate will be live! Update your domain DNS CNAME to point to API Gateway domain. Also, this certificate will expire after 90 days, remember to re-generate it!
================================================
FILE: example/README.md
================================================
# Zappa Example
This will deploy a simple Flask app
## Setup
# configure your AWS keys
$ aws configure
## Deploy WSGI App
# deploy API to dev environment
$ zappa deploy dev_api
# Zappa will creates the API Gateway url for you similar to this
$ curl https://zzz.execute-api.us-west-2.amazonaws.com/dev_api
## Schedule
You can deploy just a function with a schedule:
# deploy API to dev environment (doesn't create APIGateway resource)
$ zappa deploy dev_event
# schedule CloudWatch to run this Lambda function every minute
$ zappa schedule dev_event
# watch log
$ zappa tail dev_event
You can also call a scheduled function packaged along with your normal WSGI app:
# deploy API to prod environment
$ zappa deploy prod
# schedule CloudWatch to run mymodule.myfunc every 5 minutes
$ zappa schedule prod
This function can optionally take the usual `event` and `context` lambda arguments.
See `mymodule.myfunc_with_events` for an example of this.
## Local Testing
To test locally you can execute the WSGI app like you would normally.
$ python app.py
You can also call your scheduled function locally. When deployed, the handler will import and run this function.
For example, in "prod" it is defined as "mymodule.myfunc", so it can be called as such:
$ python -c "import mymodule; mymodule.myfunc()"
If your function uses the events argument you will need to send a dict with what the function expects.
Scheduled events use a structure similar to the following:
```python
{
"account": "123456789012",
"region": "us-east-1",
"detail": {},
"detail-type": "Scheduled Event",
"source": "aws.events",
"time": "1970-01-01T00:00:00Z",
"id": "cdc73f9d-aea9-11e3-9d5a-835b769c0d9c",
"resources": [
"arn:aws:events:us-east-1:123456789012:rule/mymodule.myfunc"
]
}
```
If your function is also using the context, check out [mock](https://pypi.python.org/pypi/mock) for help building
an artificial context object.
================================================
FILE: example/app.py
================================================
import logging
from flask import Flask
app = Flask(__name__)
logging.basicConfig()
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
@app.route('/', methods=['GET', 'POST'])
def lambda_handler(event=None, context=None):
logger.info('Lambda function invoked index()')
return 'Flask says Hello!!'
if __name__ == '__main__':
app.run(debug=True)
================================================
FILE: example/authmodule.py
================================================
"""
Copyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at
http://aws.amazon.com/apache2.0/
or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
"""
import re
import time
import pprint
import json
def lambda_handler(event, context):
print("Client token: " + event['authorizationToken'])
print("Method ARN: " + event['methodArn'])
"""validate the incoming token"""
"""and produce the principal user identifier associated with the token"""
"""this could be accomplished in a number of ways:"""
"""1. Call out to OAuth provider"""
"""2. Decode a JWT token inline"""
"""3. Lookup in a self-managed DB"""
principalId = "user|a1b2c3d4"
"""you can send a 401 Unauthorized response to the client by failing like so:"""
"""raise Exception('Unauthorized')"""
"""if the token is valid, a policy must be generated which will allow or deny access to the client"""
"""if access is denied, the client will receive a 403 Access Denied response"""
"""if access is allowed, API Gateway will proceed with the backend integration configured on the method that was called"""
"""this function must generate a policy that is associated with the recognized principal user identifier."""
"""depending on your use case, you might store policies in a DB, or generate them on the fly"""
"""keep in mind, the policy is cached for 5 minutes by default (TTL is configurable in the authorizer)"""
"""and will apply to subsequent calls to any method/resource in the RestApi"""
"""made with the same token"""
"""the example policy below denies access to all resources in the RestApi"""
tmp = event['methodArn'].split(':')
apiGatewayArnTmp = tmp[5].split('/')
awsAccountId = tmp[4]
policy = AuthPolicy(principalId, awsAccountId)
policy.restApiId = apiGatewayArnTmp[0]
policy.region = tmp[3]
policy.stage = apiGatewayArnTmp[1]
# Blueprint denies all methods by default
# policy.denyAllMethods()
# Example allows all methods
policy.allowAllMethods()
"""policy.allowMethod(HttpVerb.GET, "/pets/*")"""
"""finally, build the policy and exit the function using return"""
return policy.build()
class HttpVerb:
GET = "GET"
POST = "POST"
PUT = "PUT"
PATCH = "PATCH"
HEAD = "HEAD"
DELETE = "DELETE"
OPTIONS = "OPTIONS"
ALL = "*"
class AuthPolicy:
awsAccountId = ""
"""The AWS account id the policy will be generated for. This is used to create the method ARNs."""
principalId = ""
"""The principal used for the policy, this should be a unique identifier for the end user."""
version = "2012-10-17"
"""The policy version used for the evaluation. This should always be '2012-10-17'"""
pathRegex = r"^[/.a-zA-Z0-9-\*]+$"
"""The regular expression used to validate resource paths for the policy"""
"""these are the internal lists of allowed and denied methods. These are lists
of objects and each object has 2 properties: A resource ARN and a nullable
conditions statement.
the build method processes these lists and generates the appropriate
statements for the final policy"""
allowMethods = []
denyMethods = []
restApiId = "*"
"""The API Gateway API id. By default this is set to '*'"""
region = "*"
"""The region where the API is deployed. By default this is set to '*'"""
stage = "*"
"""The name of the stage used in the policy. By default this is set to '*'"""
def __init__(self, principal, awsAccountId):
self.awsAccountId = awsAccountId
self.principalId = principal
self.allowMethods = []
self.denyMethods = []
def _addMethod(self, effect, verb, resource, conditions):
"""Adds a method to the internal lists of allowed or denied methods. Each object in
the internal list contains a resource ARN and a condition statement. The condition
statement can be null."""
if verb != "*" and not hasattr(HttpVerb, verb):
raise NameError("Invalid HTTP verb " + verb + ". Allowed verbs in HttpVerb class")
resourcePattern = re.compile(self.pathRegex)
if not resourcePattern.match(resource):
raise NameError("Invalid resource path: " + resource + ". Path should match " + self.pathRegex)
if resource[:1] == "/":
resource = resource[1:]
resourceArn = ("arn:aws:execute-api:" +
self.region + ":" +
self.awsAccountId + ":" +
self.restApiId + "/" +
self.stage + "/" +
verb + "/" +
resource)
if effect.lower() == "allow":
self.allowMethods.append({
'resourceArn' : resourceArn,
'conditions' : conditions
})
elif effect.lower() == "deny":
self.denyMethods.append({
'resourceArn' : resourceArn,
'conditions' : conditions
})
def _getEmptyStatement(self, effect):
"""Returns an empty statement object prepopulated with the correct action and the
desired effect."""
statement = {
'Action': 'execute-api:Invoke',
'Effect': effect[:1].upper() + effect[1:].lower(),
'Resource': []
}
return statement
def _getStatementForEffect(self, effect, methods):
"""This function loops over an array of objects containing a resourceArn and
conditions statement and generates the array of statements for the policy."""
statements = []
if len(methods) > 0:
statement = self._getEmptyStatement(effect)
for curMethod in methods:
if curMethod['conditions'] is None or len(curMethod['conditions']) == 0:
statement['Resource'].append(curMethod['resourceArn'])
else:
conditionalStatement = self._getEmptyStatement(effect)
conditionalStatement['Resource'].append(curMethod['resourceArn'])
conditionalStatement['Condition'] = curMethod['conditions']
statements.append(conditionalStatement)
statements.append(statement)
return statements
def allowAllMethods(self):
"""Adds a '*' allow to the policy to authorize access to all methods of an API"""
self._addMethod("Allow", HttpVerb.ALL, "*", [])
def denyAllMethods(self):
"""Adds a '*' allow to the policy to deny access to all methods of an API"""
self._addMethod("Deny", HttpVerb.ALL, "*", [])
def allowMethod(self, verb, resource):
"""Adds an API Gateway method (Http verb + Resource path) to the list of allowed
methods for the policy"""
self._addMethod("Allow", verb, resource, [])
def denyMethod(self, verb, resource):
"""Adds an API Gateway method (Http verb + Resource path) to the list of denied
methods for the policy"""
self._addMethod("Deny", verb, resource, [])
def allowMethodWithConditions(self, verb, resource, conditions):
"""Adds an API Gateway method (Http verb + Resource path) to the list of allowed
methods and includes a condition for the policy statement. More on AWS policy
conditions here: http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Condition"""
self._addMethod("Allow", verb, resource, conditions)
def denyMethodWithConditions(self, verb, resource, conditions):
"""Adds an API Gateway method (Http verb + Resource path) to the list of denied
methods and includes a condition for the policy statement. More on AWS policy
conditions here: http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Condition"""
self._addMethod("Deny", verb, resource, conditions)
def build(self):
"""Generates the policy document based on the internal lists of allowed and denied
conditions. This will generate a policy with two main statements for the effect:
one statement for Allow and one statement for Deny.
Methods that includes conditions will have their own statement in the policy."""
if ((self.allowMethods is None or len(self.allowMethods) == 0) and
(self.denyMethods is None or len(self.denyMethods) == 0)):
raise NameError("No statements defined for the policy")
policy = {
'principalId' : self.principalId,
'policyDocument' : {
'Version' : self.version,
'Statement' : []
}
}
policy['policyDocument']['Statement'].extend(self._getStatementForEffect("Allow", self.allowMethods))
policy['policyDocument']['Statement'].extend(self._getStatementForEffect("Deny", self.denyMethods))
return policy
================================================
FILE: example/mymodule.py
================================================
def myfunc():
print('Running my function in a schedule!')
def myfunc_with_events(event, context):
print('Event time was', event['time'])
print('This log is', context.log_group_name, context.log_stream_name)
print('Time left for execution:', context.get_remaining_time_in_millis())
================================================
FILE: example/policy/deploy.json
================================================
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RoleManager",
"Effect": "Allow",
"Action": [
"iam:AttachRolePolicy",
"iam:CreateRole",
"iam:GetRole",
"iam:PutRolePolicy"
],
"Resource": [
"*"
]
},
{
"Sid": "RoleDelegation",
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::<account_id>:role/*-ZappaLambdaExecutionRole"
]
},
{
"Sid": "Core",
"Effect": "Allow",
"Action": [
"lambda:AddPermission",
"lambda:CreateFunction",
"lambda:DeleteFunction",
"lambda:GetFunction",
"lambda:GetFunctionConfiguration",
"lambda:GetPolicy",
"lambda:InvokeFunction",
"lambda:ListVersionsByFunction",
"lambda:RemovePermission",
"lambda:UpdateFunctionCode",
"lambda:UpdateFunctionConfiguration",
"cloudformation:CreateStack",
"cloudformation:DeleteStack",
"cloudformation:DescribeStackResource",
"cloudformation:DescribeStacks",
"cloudformation:ListStackResources",
"cloudformation:UpdateStack",
"logs:DescribeLogStreams",
"logs:DeleteLogGroup",
"logs:FilterLogEvents",
"s3:CreateBucket"
],
"Resource": [
"*"
]
},
{
"Sid": "CoreS3List",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::<s3_bucket from zappa_settings.json>"
]
},
{
"Sid": "CoreS3Object",
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::<s3_bucket from zappa_settings.json>/*"
]
},
{
"Sid": "APIGateway",
"Effect": "Allow",
"Action": [
"apigateway:OPTIONS",
"apigateway:DELETE",
"apigateway:GET",
"apigateway:PATCH",
"apigateway:POST",
"apigateway:PUT"
],
"Resource": [
"*"
]
},
{
"Sid": "Domain",
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"route53:ListResourceRecordSets",
"route53:ChangeResourceRecordSets",
"route53:GetHostedZone"
],
"Resource": [
"*"
]
},
{
"Sid": "Events",
"Effect": "Allow",
"Action": [
"events:DeleteRule",
"events:DescribeRule",
"events:ListRules",
"events:ListTargetsByRule",
"events:ListRuleNamesByTarget",
"events:PutRule",
"events:PutTargets",
"events:RemoveTargets"
],
"Resource": [
"*"
]
},
{
"Sid": "SNS",
"Effect": "Allow",
"Action": [
"SNS:ListSubscriptionsByTopic",
"SNS:Unsubscribe",
"SNS:Subscribe"
],
"Resource": [
"*"
]
},
{
"Sid": "VPCSecurity",
"Effect": "Allow",
"Action": [
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeVpcs",
"ec2:DescribeVpcsRequest"
],
"Resource": [
"*"
]
}
]
}
================================================
FILE: example/requirements.txt
================================================
Flask>=0.12
zappa>=0.17.6
================================================
FILE: requirements.in
================================================
argcomplete
boto3
durationpy
hjson
jmespath
kappa==0.6.0
pip>=9.0.1
python-dateutil
python-slugify
PyYAML
future
# previous version don't work with urllib3 1.24
requests>=2.20.0
six
toml
tqdm
troposphere
# See https://github.com/Miserlou/Zappa/issues/2036
Werkzeug<1.0
wheel
wsgi-request-logger
pip-tools
================================================
FILE: requirements.sh
================================================
#! /bin/bash
set -e
ARGS=""
if [ "$1" == "--upgrade" ]; then
ARGS="-U"
fi
pip-compile ${ARGS} -o test_requirements.txt requirements.in test_requirements.in
cp test_requirements.txt requirements.txt
pip-compile -o requirements.txt requirements.in
================================================
FILE: requirements.txt
================================================
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile --output-file=requirements.txt requirements.in
#
argcomplete==1.11.1 # via -r requirements.in (line 1)
boto3==1.14.2 # via -r requirements.in (line 2), kappa
botocore==1.17.2 # via boto3, s3transfer
certifi==2020.4.5.2 # via requests
cfn-flip==1.2.3 # via troposphere
chardet==3.0.4 # via requests
click==7.1.2 # via cfn-flip, kappa, pip-tools
docutils==0.15.2 # via botocore
durationpy==0.5 # via -r requirements.in (line 3)
future==0.18.2 # via -r requirements.in (line 11)
hjson==3.0.1 # via -r requirements.in (line 4)
idna==2.9 # via requests
jmespath==0.10.0 # via -r requirements.in (line 5), boto3, botocore
kappa==0.6.0 # via -r requirements.in (line 6)
pip-tools==5.2.1 # via -r requirements.in (line 22)
placebo==0.9.0 # via kappa
python-dateutil==2.8.1 # via -r requirements.in (line 8), botocore
python-slugify==4.0.0 # via -r requirements.in (line 9)
pyyaml==5.3.1 # via -r requirements.in (line 10), cfn-flip, kappa
requests==2.23.0 # via -r requirements.in (line 13)
s3transfer==0.3.3 # via boto3
six==1.15.0 # via -r requirements.in (line 14), cfn-flip, pip-tools, python-dateutil
text-unidecode==1.3 # via python-slugify
toml==0.10.1 # via -r requirements.in (line 15)
tqdm==4.46.1 # via -r requirements.in (line 16)
troposphere==2.6.1 # via -r requirements.in (line 17)
urllib3==1.25.9 # via botocore, requests
werkzeug==0.16.1 # via -r requirements.in (line 19)
wheel==0.34.2 # via -r requirements.in (line 20)
wsgi-request-logger==0.4.6 # via -r requirements.in (line 21)
# The following packages are considered to be unsafe in a requirements file:
# pip
================================================
FILE: setup.py
================================================
import os
import sys
from setuptools import setup
from io import open
from zappa import __version__
with open('README.md') as readme_file:
long_description = readme_file.read()
with open(os.path.join(os.path.dirname(__file__), 'requirements.in')) as f:
required = f.read().splitlines()
with open(os.path.join(os.path.dirname(__file__), 'test_requirements.in')) as f:
test_required = f.read().splitlines()
setup(
name='zappa',
version=__version__,
packages=['zappa'],
install_requires=required,
tests_require=test_required,
test_suite='nose.collector',
include_package_data=True,
license='MIT License',
description='Server-less Python Web Services for AWS Lambda and API Gateway',
long_description=long_description,
long_description_content_type='text/markdown',
url='https://github.com/Miserlou/Zappa',
author='Rich Jones',
author_email='rich@openwatch.net',
entry_points={
'console_scripts': [
'zappa=zappa.cli:handle',
'z=zappa.cli:handle',
]
},
classifiers=[
'Environment :: Console',
'License :: OSI Approved :: Apache Software License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Framework :: Django',
'Framework :: Django :: 1.11',
'Framework :: Django :: 2.0',
'Framework :: Django :: 3.0',
'Topic :: Internet :: WWW/HTTP',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
],
)
================================================
FILE: test.sh
================================================
#! /bin/bash
nosetests --with-coverage --cover-package=zappa
# For a specific test:
# nosetests tests.tests:TestZappa.test_lets_encrypt_sanity -s
================================================
FILE: test_requirements.in
================================================
coveralls
Django
flake8
Flask
mock
nose
nose-timer
placebo
================================================
FILE: test_requirements.txt
================================================
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile --output-file=test_requirements.txt requirements.in test_requirements.in
#
argcomplete==1.11.1 # via -r requirements.in (line 1)
asgiref==3.2.7 # via django
boto3==1.14.2 # via -r requirements.in (line 2), kappa
botocore==1.17.2 # via boto3, s3transfer
certifi==2020.4.5.2 # via requests
cfn-flip==1.2.3 # via troposphere
chardet==3.0.4 # via requests
click==7.1.2 # via cfn-flip, flask, kappa, pip-tools
coverage==5.1 # via coveralls
coveralls==2.0.0 # via -r test_requirements.in (line 1)
django==3.0.7 # via -r test_requirements.in (line 2)
docopt==0.6.2 # via coveralls
docutils==0.15.2 # via botocore
durationpy==0.5 # via -r requirements.in (line 3)
flake8==3.8.3 # via -r test_requirements.in (line 3)
flask==1.1.2 # via -r test_requirements.in (line 4)
future==0.18.2 # via -r requirements.in (line 11)
hjson==3.0.1 # via -r requirements.in (line 4)
idna==2.9 # via requests
itsdangerous==1.1.0 # via flask
jinja2==2.11.2 # via flask
jmespath==0.10.0 # via -r requirements.in (line 5), boto3, botocore
kappa==0.6.0 # via -r requirements.in (line 6)
markupsafe==1.1.1 # via jinja2
mccabe==0.6.1 # via flake8
mock==4.0.2 # via -r test_requirements.in (line 5)
nose-timer==1.0.0 # via -r test_requirements.in (line 7)
nose==1.3.7 # via -r test_requirements.in (line 6), nose-timer
pip-tools==5.2.1 # via -r requirements.in (line 22)
placebo==0.9.0 # via -r test_requirements.in (line 8), kappa
pycodestyle==2.6.0 # via flake8
pyflakes==2.2.0 # via flake8
python-dateutil==2.8.1 # via -r requirements.in (line 8), botocore
python-slugify==4.0.0 # via -r requirements.in (line 9)
pytz==2020.1 # via django
pyyaml==5.3.1 # via -r requirements.in (line 10), cfn-flip, kappa
requests==2.23.0 # via -r requirements.in (line 13), coveralls
s3transfer==0.3.3 # via boto3
six==1.15.0 # via -r requirements.in (line 14), cfn-flip, pip-tools, python-dateutil
sqlparse==0.3.1 # via django
text-unidecode==1.3 # via python-slugify
toml==0.10.1 # via -r requirements.in (line 15)
tqdm==4.46.1 # via -r requirements.in (line 16)
troposphere==2.6.1 # via -r requirements.in (line 17)
urllib3==1.25.9 # via botocore, requests
werkzeug==0.16.1 # via -r requirements.in (line 19), flask
wheel==0.34.2 # via -r requirements.in (line 20)
wsgi-request-logger==0.4.6 # via -r requirements.in (line 21)
# The following packages are considered to be unsafe in a requirements file:
# pip
================================================
FILE: test_settings.json
================================================
{
"ttt888": {
"touch": false,
"s3_bucket": "lmbda",
"app_function": "tests.test_app.hello_world",
"use_precompiled_packages": false,
"callbacks": {
"settings": "tests.test_app.callback",
"post": "tests.test_app.callback",
"zip": "test_settings.callback"
},
"delete_local_zip": true,
"debug": true,
"parameter_depth": 2,
"prebuild_script": "tests.test_app.prebuild_me",
"environment_variables": {
"TEST_ENV_VAR": "test_value"
},
"context_header_mappings": {
"CognitoIdentityId": "identity.cognitoIdentityId",
"APIStage": "stage"
},
"events": [
{
"function": "tests.test_app.schedule_me",
"expression": "rate(1 minute)"
},
{
"function": "test.test_app.method",
"event_source": {
"arn": "arn:aws:sns:::1",
"events": [
"sns:Publish"
]
}
},
{
"function": "test.test_app.method_filters",
"event_source": {
"arn": "arn:aws:sns:::with-filters",
"filters": {
"interests": ["python", "aws", "zappa"],
"version": ["1.0"]
},
"events": [
"sns:Publish"
]
}
}
],
"cognito": {
"user_pool": "user-pool-id",
"triggers": [
{"source": "PreSignUp_SignUp",
"function": "test.tasks.pre_signup_function"
}
]
}
},
"devor": {
"s3_bucket": "lmbda",
"app_function": "tests.test_app.hello_world",
"callbacks": {
"settings": "test_settings.callback",
"post": "test_settings.callback",
"zip": "test_settings.callback"
},
"delete_local_zip": true,
"debug": true,
"parameter_depth": 2,
"prebuild_script": "test_settings.prebuild_me",
"events": [{
"function": "tests.test_app.schedule_me",
"expression": "rate(1 minute)"
}]
},
"extendo": {
"extends": "ttt888",
"touch": true,
"prebuild_script": "test_settings.prebuild_me",
"environment_variables": {
"EXTENDO": "You bet"
}
},
"extendo2": {
"extends": "extendo",
"s3_bucket": "lmbda2"
},
"slim_handler": {
"extends": "ttt888",
"slim_handler": true,
"delete_local_zip": true
},
"deprecated_remote_env": {
"s3_bucket": "lmbda",
"remote_env_bucket": "lmbda-env",
"remote_env_file": "dev/env.json"
},
"remote_env": {
"s3_bucket": "lmbda",
"remote_env": "s3://lmbda-env/prod/env.json"
},
"extendofail": {
"extends": "failfail",
"prebuild_script": "test_settings.prebuild_me",
"environment_variables": {
"EXTENDO": "You bet"
}
},
"build_package_only_delete_local_zip_false": {
"delete_local_zip": false,
"use_precompiled_packages": false,
"delete_s3_zip": false
},
"build_package_only_delete_local_zip_true": {
"delete_local_zip": true,
"use_precompiled_packages": false,
"delete_s3_zip": false
},
"lambda_concurrency_enabled": {
"extends": "ttt888",
"lambda_concurrency": 6
}
}
================================================
FILE: test_settings.py
================================================
APP_MODULE = 'tests.test_app'
APP_FUNCTION = 'hello_world'
DJANGO_SETTINGS = None
DEBUG = 'True'
LOG_LEVEL = 'DEBUG'
SCRIPT_NAME = 'hello_world'
DOMAIN = None
API_STAGE = 'ttt888'
PROJECT_NAME = 'ttt888'
REMOTE_ENV='s3://lmbda/test_env.json'
## test_env.json
#{
# "hello": "world"
#}
#
AWS_EVENT_MAPPING = {
'arn:aws:s3:1': 'test_settings.aws_s3_event',
'arn:aws:sns:1': 'test_settings.aws_sns_event',
'arn:aws:dynamodb:1': 'test_settings.aws_dynamodb_event',
'arn:aws:kinesis:1': 'test_settings.aws_kinesis_event',
'arn:aws:sqs:1': 'test_settings.aws_sqs_event'
}
ENVIRONMENT_VARIABLES={'testenv': 'envtest'}
AUTHORIZER_FUNCTION='test_settings.authorizer_event'
def prebuild_me():
print("This is a prebuild script!")
def callback(self):
print("this is a callback")
def aws_s3_event(event, content):
return "AWS S3 EVENT"
def aws_sns_event(event, content):
return "AWS SNS EVENT"
def aws_async_sns_event(arg1, arg2, arg3):
return "AWS ASYNC SNS EVENT"
def aws_dynamodb_event(event, content):
return "AWS DYNAMODB EVENT"
def aws_kinesis_event(event, content):
return "AWS KINESIS EVENT"
def aws_sqs_event(event, content):
return "AWS SQS EVENT"
def authorizer_event(event, content):
return "AUTHORIZER_EVENT"
def command():
print("command")
================================================
FILE: tests/README.md
================================================
# Zappa Test Notes
Look here!: https://github.com/garnaat/placebo#usage-as-a-decorator
Also useful - OSX sed replace example:
`
find . -type f -name '*.json' -exec sed -i '' s/"Resource%22%3A%20%22arn%3Aaws%3Asqs%3A%3A%3A%2A%22%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Effect"/"Resource%22%3A%20%22arn%3Aaws%3Asqs%3A*%3A*%3A*%22%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Effect"/ {} +
`
================================================
FILE: tests/__init__.py
================================================
================================================
FILE: tests/data/test1/this_dir_is_not_a_module.txt
================================================
# test1 is a directory without any .py files in it, so a __init__.py file should NOT be created in it
Information is not knowledge.
Knowledge is not wisdom.
Wisdom is not truth.
Truth is not beauty.
Beauty is not love.
Love is not music.
Music is THE BEST.
================================================
FILE: tests/data/test1.py
================================================
# this is a module
def greet():
print('There is more stupidity than hydrogen in the universe, and it has a longer shelf life.')
================================================
FILE: tests/data/test2/test.py
================================================
# this is a module, so test2 should get an __init__.py
def get_some_wisdom():
return 'Art is making something out of nothing, and selling it.'
================================================
FILE: tests/name_scenarios.json
================================================
[
{
"id": "integer",
"value": 12,
"is_valid": false
},
{
"id": "float",
"value": 3.1415,
"is_valid": false
},
{
"id": "list",
"value": [
"a",
1,
null
],
"is_valid": false
},
{
"id": null,
"value": null,
"is_valid": false
},
{
"id": "empty string",
"value": "",
"is_valid": false
},
{
"id": "ok",
"value": "FrancoZappa",
"is_valid": true
},
{
"id": "with space",
"value": "Franco Zappa",
"is_valid": false
},
{
"id": "one char",
"value": "A",
"is_valid": true
},
{
"id": "one digit",
"value": "5",
"is_valid": true
},
{
"id": "80 chars",
"value": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz",
"is_valid": true
},
{
"id": "81 chars",
"value": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzza",
"is_valid": false
},
{
"id": "bad_chars",
"value": "hi&bye",
"is_valid": false
}
]
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateApiKey_1.json
================================================
{
"status_code": 201,
"data": {
"name": "test",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "e861edec-5901-11e6-8f63-a3652f6325da",
"HTTPHeaders": {
"x-amzn-requestid": "e861edec-5901-11e6-8f63-a3652f6325da",
"date": "Tue, 02 Aug 2016 22:39:00 GMT",
"content-length": "148",
"content-type": "application/json"
}
},
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 8,
"second": 1,
"microsecond": 0,
"year": 2016,
"day": 2,
"minute": 39
},
"lastUpdatedDate": {
"hour": 15,
"__class__": "datetime",
"month": 8,
"second": 1,
"microsecond": 0,
"year": 2016,
"day": 2,
"minute": 39
},
"enabled": true,
"id": "mOebO1Q4uFa8NUGutxr833XZb3quSqa35yCRkRci",
"stageKeys": []
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateDeployment_1.json
================================================
{
"status_code": 201,
"data": {
"id": "cahz60",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "8689874e-28f4-11e6-805d-312f5a261f21"
},
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 6,
"second": 20,
"microsecond": 0,
"year": 2016,
"day": 2,
"minute": 2
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateDeployment_2.json
================================================
{
"status_code": 201,
"data": {
"id": "szdwm0",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "976f3698-28f7-11e6-8233-6d2c402681cd"
},
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 6,
"second": 15,
"microsecond": 0,
"year": 2016,
"day": 2,
"minute": 24
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateDeployment_3.json
================================================
{
"status_code": 201,
"data": {
"id": "43p5hj",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "44700020-6a74-11e6-9e18-d13c6ce86685",
"HTTPHeaders": {
"x-amzn-requestid": "44700020-6a74-11e6-9e18-d13c6ce86685",
"date": "Thu, 25 Aug 2016 03:30:29 GMT",
"content-length": "41",
"content-type": "application/json"
}
},
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 8,
"second": 29,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 30
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_1.json
================================================
{
"status_code": 201,
"data": {
"path": "/{parameter_1}",
"pathPart": "{parameter_1}",
"id": "ndmj6n",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "5a09c6b7-28f4-11e6-b8f8-d1b42d374c32"
},
"parentId": "6ahk6mn0bi"
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_2.json
================================================
{
"status_code": 201,
"data": {
"path": "/{parameter_1}/{parameter_2}",
"pathPart": "{parameter_2}",
"id": "kbdbxf",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "608b4583-28f4-11e6-805d-312f5a261f21"
},
"parentId": "ndmj6n"
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_3.json
================================================
{
"status_code": 201,
"data": {
"path": "/{parameter_1}/{parameter_2}/{parameter_3}",
"pathPart": "{parameter_3}",
"id": "ozp3pf",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "663f1468-28f4-11e6-9152-ebe760f7884c"
},
"parentId": "kbdbxf"
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_4.json
================================================
{
"status_code": 201,
"data": {
"path": "/{parameter_1}/{parameter_2}/{parameter_3}/{parameter_4}",
"pathPart": "{parameter_4}",
"id": "hynkkf",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "6cdf3ecd-28f4-11e6-87ec-8f98a402daaf"
},
"parentId": "ozp3pf"
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_5.json
================================================
{
"status_code": 201,
"data": {
"path": "/{parameter_1}/{parameter_2}/{parameter_3}/{parameter_4}/{parameter_5}",
"pathPart": "{parameter_5}",
"id": "7rfu1h",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "7386e455-28f4-11e6-9152-ebe760f7884c"
},
"parentId": "hynkkf"
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_6.json
================================================
{
"status_code": 201,
"data": {
"path": "/{parameter_1}/{parameter_2}/{parameter_3}/{parameter_4}/{parameter_5}/{parameter_6}",
"pathPart": "{parameter_6}",
"id": "f97hp3",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "7a63547b-28f4-11e6-87ec-8f98a402daaf"
},
"parentId": "7rfu1h"
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_7.json
================================================
{
"status_code": 201,
"data": {
"path": "/{parameter_1}/{parameter_2}/{parameter_3}/{parameter_4}/{parameter_5}/{parameter_6}/{parameter_7}",
"pathPart": "{parameter_7}",
"id": "y78dak",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "8062abaa-28f4-11e6-b8f8-d1b42d374c32"
},
"parentId": "f97hp3"
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_8.json
================================================
{
"status_code": 201,
"data": {
"path": "/{parameter_1}",
"pathPart": "{parameter_1}",
"id": "lkkm6z",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "90702348-28f7-11e6-a01d-971fdfddbf7e"
},
"parentId": "vw69yjtx3b"
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_9.json
================================================
{
"status_code": 201,
"data": {
"path": "/{parameter_1}",
"pathPart": "{parameter_1}",
"id": "z65qvb",
"ResponseMetadata": {
"HTTPStatusCode": 201,
"RequestId": "3892e3ff-6a74-11e6-831b-43c278515a41",
"HTTPHeaders": {
"x-amzn-requestid": "3892e3ff-6a74-11e6-831b-43c278515a41",
"date": "Thu, 25 Aug 2016 03:30:07 GMT",
"content-length": "91",
"content-type": "application/json"
}
},
"parentId": "hq4rr1cie4"
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.DeleteApiKey_1.json
================================================
{
"status_code": 204,
"data": {
"ResponseMetadata": {
"HTTPStatusCode": 204,
"RequestId": "db1a1c1c0-28f7-11e6-8db2-597c5c8eebes5"
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.DeleteRestApi_1.json
================================================
{
"status_code": 202,
"data": {
"ResponseMetadata": {
"HTTPStatusCode": 202,
"RequestId": "af701457-28f7-11e6-a01d-971fdfddbf7e"
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.DeleteRestApi_2.json
================================================
{
"status_code": 202,
"data": {
"ResponseMetadata": {
"HTTPStatusCode": 202,
"RequestId": "a27ed33c-6a74-11e6-aaec-e994c773c0ae",
"HTTPHeaders": {
"x-amzn-requestid": "a27ed33c-6a74-11e6-aaec-e994c773c0ae",
"date": "Thu, 25 Aug 2016 03:33:06 GMT",
"content-length": "0",
"content-type": "application/json"
}
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetApiKeys_1.json
================================================
{
"status_code": 200,
"data": {
"items": [
{
"id": "randomid",
"name": "iw5z0jpx0d"
}
]
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetResources_1.json
================================================
{
"status_code": 200,
"data": {
"items": [
{
"path": "/",
"id": "6ahk6mn0bi"
}
],
"ResponseMetadata": {
"HTTPStatusCode": 200,
"RequestId": "5494870d-28f4-11e6-87ec-8f98a402daaf"
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetResources_2.json
================================================
{
"status_code": 200,
"data": {
"items": [
{
"path": "/",
"id": "vw69yjtx3b"
}
],
"ResponseMetadata": {
"HTTPStatusCode": 200,
"RequestId": "8b7bad0d-28f7-11e6-8233-6d2c402681cd"
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetResources_3.json
================================================
{
"status_code": 200,
"data": {
"items": [
{
"path": "/",
"id": "hq4rr1cie4"
}
],
"ResponseMetadata": {
"HTTPStatusCode": 200,
"RequestId": "2d381708-6a74-11e6-831b-43c278515a41",
"HTTPHeaders": {
"x-amzn-requestid": "2d381708-6a74-11e6-831b-43c278515a41",
"date": "Thu, 25 Aug 2016 03:29:48 GMT",
"content-length": "42",
"content-type": "application/json"
}
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApi_1.json
================================================
{
"status_code": 200,
"data": {
"description": "Created automatically by Zappa.",
"ResponseMetadata": {
"RetryAttempts": 0,
"HTTPStatusCode": 200,
"RequestId": "6c275db7-ef2b-11e6-a318-5fc3640c993c",
"HTTPHeaders": {
"date": "Fri, 10 Feb 2017 00:54:05 GMT",
"x-amzn-requestid": "6c275db7-ef2b-11e6-a318-5fc3640c993c",
"content-length": "145",
"content-type": "application/json",
"connection": "keep-alive"
}
},
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 2,
"second": 13,
"microsecond": 0,
"year": 2017,
"day": 9,
"minute": 24
},
"binaryMediaTypes": [
"*/*"
],
"id": "9q10y8x8j9",
"name": "image-fly-test5"
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApi_2.json
================================================
{
"status_code": 200,
"data": {
"id": "9q10y8x8j9",
"name": "image-fly-test5",
"description": "Created automatically by Zappa.",
"ResponseMetadata": {
"RetryAttempts": 0,
"HTTPStatusCode": 200,
"RequestId": "79948f9c-ef2b-11e6-854a-99ec105212e0",
"HTTPHeaders": {
"date": "Fri, 10 Feb 2017 00:54:28 GMT",
"x-amzn-requestid": "79948f9c-ef2b-11e6-854a-99ec105212e0",
"content-length": "118",
"content-type": "application/json",
"connection": "keep-alive"
}
},
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 2,
"second": 13,
"microsecond": 0,
"year": 2017,
"day": 9,
"minute": 24
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_1.json
================================================
{
"status_code": 200,
"data": {
"position": "aWQ9U2xraXVnNjhlazk%3D",
"ResponseMetadata": {
"HTTPStatusCode": 200,
"RequestId": "543aa6e1-28f4-11e6-805d-312f5a261f21"
},
"items": [
{
"description": "serverless-imagehost-devuhhh Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 4,
"second": 56,
"microsecond": 0,
"year": 2016,
"day": 22,
"minute": 41
},
"id": "0490ldmsmf",
"name": "serverless-imagehost-devuhhh"
},
{
"description": "spheres-beta Zappa",
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 2,
"second": 45,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 20
},
"id": "2djdovx6f3",
"name": "spheres-beta"
},
{
"description": "helloworld-zeta Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 2,
"second": 9,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 53
},
"id": "2uj5ini1yb",
"name": "helloworld-zeta"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 2,
"second": 57,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 29
},
"id": "60sck4xxob",
"name": "Spheres-dev"
},
{
"description": "helloworld-beta Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 2,
"second": 54,
"microsecond": 0,
"year": 2016,
"day": 3,
"minute": 1
},
"id": "67urt9dyf3",
"name": "helloworld-beta"
},
{
"description": "oort-dev3 Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 5,
"second": 9,
"microsecond": 0,
"year": 2016,
"day": 20,
"minute": 6
},
"id": "6nrpew3z4h",
"name": "oort-dev3"
},
{
"description": "django-helloworld-unicode Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 2,
"second": 35,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 39
},
"id": "arb9clq9k9",
"name": "django-helloworld-unicode"
},
{
"description": "issue110-dev Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 5,
"second": 2,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 29
},
"id": "bo02obhd7c",
"name": "issue110-dev"
},
{
"description": "serverless-imagehost-nob Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 5,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 11,
"minute": 14
},
"id": "cc1o38ldtb",
"name": "serverless-imagehost-nob"
},
{
"description": "oort-dev Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 5,
"second": 18,
"microsecond": 0,
"year": 2016,
"day": 20,
"minute": 28
},
"id": "cdvt3njuhk",
"name": "oort-dev"
},
{
"description": "serverless-imagehost-devuh Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 3,
"second": 44,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 6
},
"id": "ezjhledye7",
"name": "serverless-imagehost-devuh"
},
{
"description": "website-production Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 4,
"second": 3,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 7
},
"id": "fhbea4d5o6",
"name": "website-production"
},
{
"description": "helloworld-radmin Zappa",
"createdDate": {
"hour": 7,
"__class__": "datetime",
"month": 2,
"second": 51,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 38
},
"id": "h0ttqz46qc",
"name": "helloworld-radmin"
},
{
"description": "helloworld-dvlp Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 1,
"second": 0,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 49
},
"id": "h7twhyqkie",
"name": "helloworld-dvlp"
},
{
"description": "helloworld-devel Zappa",
"createdDate": {
"hour": 17,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 30
},
"id": "hbj992tfwl",
"name": "helloworld-devel"
},
{
"description": "Spheres-demonstration Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 2,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 16,
"minute": 53
},
"id": "ho43d1vcyb",
"name": "Spheres-demonstration"
},
{
"description": "helloworld-qq Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 1,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 21
},
"id": "hro3nhl7t4",
"name": "helloworld-qq"
},
{
"description": "helloworld-dvlperr Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 36,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 12
},
"id": "i2zrw3wku1",
"name": "helloworld-dvlperr"
},
{
"description": "website-derp Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 4,
"second": 40,
"microsecond": 0,
"year": 2016,
"day": 7,
"minute": 45
},
"id": "i75y1kwi47",
"name": "website-derp"
},
{
"description": "zappa-testerinooo Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 3,
"second": 10,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 11
},
"id": "ijs8po6ul8",
"name": "zappa-testerinooo"
},
{
"description": "helloworld-delloo Zappa",
"createdDate": {
"hour": 7,
"__class__": "datetime",
"month": 1,
"second": 47,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 38
},
"id": "j3rs1jti9g",
"name": "helloworld-delloo"
},
{
"description": "serverless-imagehost-dever Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 3,
"second": 55,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 6
},
"id": "jr75b74ip8",
"name": "serverless-imagehost-dever"
},
{
"description": "restful-demo-dev Zappa",
"createdDate": {
"hour": 23,
"__class__": "datetime",
"month": 4,
"second": 15,
"microsecond": 0,
"year": 2016,
"day": 4,
"minute": 12
},
"id": "k6ox1w18i7",
"name": "restful-demo-dev"
},
{
"description": "1453976638 Zappa",
"createdDate": {
"hour": 5,
"__class__": "datetime",
"month": 1,
"second": 59,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 23
},
"id": "kwzshzpitk",
"name": "1453976638"
},
{
"description": "1453989570 Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 1,
"second": 32,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 59
},
"id": "lkiug68ek9",
"name": "1453989570"
}
]
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_2.json
================================================
{
"status_code": 200,
"data": {
"position": "aWQ9U2xraXVnNjhlazk%3D",
"ResponseMetadata": {
"HTTPStatusCode": 200,
"RequestId": "12bcd642-28f6-11e6-805d-312f5a261f21"
},
"items": [
{
"description": "serverless-imagehost-devuhhh Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 4,
"second": 56,
"microsecond": 0,
"year": 2016,
"day": 22,
"minute": 41
},
"id": "0490ldmsmf",
"name": "serverless-imagehost-devuhhh"
},
{
"description": "spheres-beta Zappa",
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 2,
"second": 45,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 20
},
"id": "2djdovx6f3",
"name": "spheres-beta"
},
{
"description": "helloworld-zeta Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 2,
"second": 9,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 53
},
"id": "2uj5ini1yb",
"name": "helloworld-zeta"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 2,
"second": 57,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 29
},
"id": "60sck4xxob",
"name": "Spheres-dev"
},
{
"description": "helloworld-beta Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 2,
"second": 54,
"microsecond": 0,
"year": 2016,
"day": 3,
"minute": 1
},
"id": "67urt9dyf3",
"name": "helloworld-beta"
},
{
"description": "oort-dev3 Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 5,
"second": 9,
"microsecond": 0,
"year": 2016,
"day": 20,
"minute": 6
},
"id": "6nrpew3z4h",
"name": "oort-dev3"
},
{
"description": "django-helloworld-unicode Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 2,
"second": 35,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 39
},
"id": "arb9clq9k9",
"name": "django-helloworld-unicode"
},
{
"description": "issue110-dev Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 5,
"second": 2,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 29
},
"id": "bo02obhd7c",
"name": "issue110-dev"
},
{
"description": "serverless-imagehost-nob Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 5,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 11,
"minute": 14
},
"id": "cc1o38ldtb",
"name": "serverless-imagehost-nob"
},
{
"description": "oort-dev Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 5,
"second": 18,
"microsecond": 0,
"year": 2016,
"day": 20,
"minute": 28
},
"id": "cdvt3njuhk",
"name": "oort-dev"
},
{
"description": "serverless-imagehost-devuh Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 3,
"second": 44,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 6
},
"id": "ezjhledye7",
"name": "serverless-imagehost-devuh"
},
{
"description": "website-production Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 4,
"second": 3,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 7
},
"id": "fhbea4d5o6",
"name": "website-production"
},
{
"description": "helloworld-radmin Zappa",
"createdDate": {
"hour": 7,
"__class__": "datetime",
"month": 2,
"second": 51,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 38
},
"id": "h0ttqz46qc",
"name": "helloworld-radmin"
},
{
"description": "helloworld-dvlp Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 1,
"second": 0,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 49
},
"id": "h7twhyqkie",
"name": "helloworld-dvlp"
},
{
"description": "helloworld-devel Zappa",
"createdDate": {
"hour": 17,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 30
},
"id": "hbj992tfwl",
"name": "helloworld-devel"
},
{
"description": "Spheres-demonstration Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 2,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 16,
"minute": 53
},
"id": "ho43d1vcyb",
"name": "Spheres-demonstration"
},
{
"description": "helloworld-qq Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 1,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 21
},
"id": "hro3nhl7t4",
"name": "helloworld-qq"
},
{
"description": "helloworld-dvlperr Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 36,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 12
},
"id": "i2zrw3wku1",
"name": "helloworld-dvlperr"
},
{
"description": "website-derp Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 4,
"second": 40,
"microsecond": 0,
"year": 2016,
"day": 7,
"minute": 45
},
"id": "i75y1kwi47",
"name": "website-derp"
},
{
"description": "zappa-testerinooo Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 3,
"second": 10,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 11
},
"id": "ijs8po6ul8",
"name": "zappa-testerinooo"
},
{
"description": "helloworld-delloo Zappa",
"createdDate": {
"hour": 7,
"__class__": "datetime",
"month": 1,
"second": 47,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 38
},
"id": "j3rs1jti9g",
"name": "helloworld-delloo"
},
{
"description": "serverless-imagehost-dever Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 3,
"second": 55,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 6
},
"id": "jr75b74ip8",
"name": "serverless-imagehost-dever"
},
{
"description": "restful-demo-dev Zappa",
"createdDate": {
"hour": 23,
"__class__": "datetime",
"month": 4,
"second": 15,
"microsecond": 0,
"year": 2016,
"day": 4,
"minute": 12
},
"id": "k6ox1w18i7",
"name": "restful-demo-dev"
},
{
"description": "1453976638 Zappa",
"createdDate": {
"hour": 5,
"__class__": "datetime",
"month": 1,
"second": 59,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 23
},
"id": "kwzshzpitk",
"name": "1453976638"
},
{
"description": "1453989570 Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 1,
"second": 32,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 59
},
"id": "lkiug68ek9",
"name": "1453989570"
}
]
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_3.json
================================================
{
"status_code": 200,
"data": {
"position": "aWQ9U2xwaGZheGo4NGc%3D",
"ResponseMetadata": {
"HTTPStatusCode": 200,
"RequestId": "8b2f39ee-28f7-11e6-a8d7-ffa4edbd5522"
},
"items": [
{
"description": "serverless-imagehost-devuhhh Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 4,
"second": 56,
"microsecond": 0,
"year": 2016,
"day": 22,
"minute": 41
},
"id": "0490ldmsmf",
"name": "serverless-imagehost-devuhhh"
},
{
"description": "spheres-beta Zappa",
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 2,
"second": 45,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 20
},
"id": "2djdovx6f3",
"name": "spheres-beta"
},
{
"description": "helloworld-zeta Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 2,
"second": 9,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 53
},
"id": "2uj5ini1yb",
"name": "helloworld-zeta"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 2,
"second": 57,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 29
},
"id": "60sck4xxob",
"name": "Spheres-dev"
},
{
"description": "helloworld-beta Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 2,
"second": 54,
"microsecond": 0,
"year": 2016,
"day": 3,
"minute": 1
},
"id": "67urt9dyf3",
"name": "helloworld-beta"
},
{
"description": "django-helloworld-unicode Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 2,
"second": 35,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 39
},
"id": "arb9clq9k9",
"name": "django-helloworld-unicode"
},
{
"description": "issue110-dev Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 5,
"second": 2,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 29
},
"id": "bo02obhd7c",
"name": "issue110-dev"
},
{
"description": "serverless-imagehost-nob Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 5,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 11,
"minute": 14
},
"id": "cc1o38ldtb",
"name": "serverless-imagehost-nob"
},
{
"description": "oort-dev Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 5,
"second": 18,
"microsecond": 0,
"year": 2016,
"day": 20,
"minute": 28
},
"id": "cdvt3njuhk",
"name": "oort-dev"
},
{
"description": "serverless-imagehost-devuh Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 3,
"second": 44,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 6
},
"id": "ezjhledye7",
"name": "serverless-imagehost-devuh"
},
{
"description": "website-production Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 4,
"second": 3,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 7
},
"id": "fhbea4d5o6",
"name": "website-production"
},
{
"description": "helloworld-radmin Zappa",
"createdDate": {
"hour": 7,
"__class__": "datetime",
"month": 2,
"second": 51,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 38
},
"id": "h0ttqz46qc",
"name": "helloworld-radmin"
},
{
"description": "helloworld-dvlp Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 1,
"second": 0,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 49
},
"id": "h7twhyqkie",
"name": "helloworld-dvlp"
},
{
"description": "helloworld-devel Zappa",
"createdDate": {
"hour": 17,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 30
},
"id": "hbj992tfwl",
"name": "helloworld-devel"
},
{
"description": "Spheres-demonstration Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 2,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 16,
"minute": 53
},
"id": "ho43d1vcyb",
"name": "Spheres-demonstration"
},
{
"description": "helloworld-qq Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 1,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 21
},
"id": "hro3nhl7t4",
"name": "helloworld-qq"
},
{
"description": "helloworld-dvlperr Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 36,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 12
},
"id": "i2zrw3wku1",
"name": "helloworld-dvlperr"
},
{
"description": "website-derp Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 4,
"second": 40,
"microsecond": 0,
"year": 2016,
"day": 7,
"minute": 45
},
"id": "i75y1kwi47",
"name": "website-derp"
},
{
"description": "zappa-testerinooo Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 3,
"second": 10,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 11
},
"id": "ijs8po6ul8",
"name": "zappa-testerinooo"
},
{
"description": "helloworld-delloo Zappa",
"createdDate": {
"hour": 7,
"__class__": "datetime",
"month": 1,
"second": 47,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 38
},
"id": "j3rs1jti9g",
"name": "helloworld-delloo"
},
{
"description": "serverless-imagehost-dever Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 3,
"second": 55,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 6
},
"id": "jr75b74ip8",
"name": "serverless-imagehost-dever"
},
{
"description": "1453976638 Zappa",
"createdDate": {
"hour": 5,
"__class__": "datetime",
"month": 1,
"second": 59,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 23
},
"id": "kwzshzpitk",
"name": "1453976638"
},
{
"description": "1453989570 Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 1,
"second": 32,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 59
},
"id": "lkiug68ek9",
"name": "1453989570"
},
{
"description": "1453845110 Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 1,
"second": 52,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 51
},
"id": "lo9vjezry6",
"name": "1453845110"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 2,
"second": 37,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 0
},
"id": "lphfaxj84g",
"name": "Spheres-dev"
}
]
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_4.json
================================================
{
"status_code": 200,
"data": {
"items": [
{
"description": "serverless-imagehost-devuhhh Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 4,
"second": 56,
"microsecond": 0,
"year": 2016,
"day": 22,
"minute": 41
},
"id": "0490ldmsmf",
"name": "serverless-imagehost-devuhhh"
},
{
"description": "spheres-beta Zappa",
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 2,
"second": 45,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 20
},
"id": "2djdovx6f3",
"name": "spheres-beta"
},
{
"description": "helloworld-zeta Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 2,
"second": 9,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 53
},
"id": "2uj5ini1yb",
"name": "helloworld-zeta"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 2,
"second": 57,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 29
},
"id": "60sck4xxob",
"name": "Spheres-dev"
},
{
"description": "helloworld-beta Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 2,
"second": 54,
"microsecond": 0,
"year": 2016,
"day": 3,
"minute": 1
},
"id": "67urt9dyf3",
"name": "helloworld-beta"
},
{
"description": "django-helloworld-unicode Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 2,
"second": 35,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 39
},
"id": "arb9clq9k9",
"name": "django-helloworld-unicode"
},
{
"description": "issue110-dev Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 5,
"second": 2,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 29
},
"id": "bo02obhd7c",
"name": "issue110-dev"
},
{
"description": "serverless-imagehost-nob Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 5,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 11,
"minute": 14
},
"id": "cc1o38ldtb",
"name": "serverless-imagehost-nob"
},
{
"description": "oort-dev Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 5,
"second": 18,
"microsecond": 0,
"year": 2016,
"day": 20,
"minute": 28
},
"id": "cdvt3njuhk",
"name": "oort-dev"
},
{
"description": "serverless-imagehost-devuh Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 3,
"second": 44,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 6
},
"id": "ezjhledye7",
"name": "serverless-imagehost-devuh"
},
{
"description": "website-production Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 4,
"second": 3,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 7
},
"id": "fhbea4d5o6",
"name": "website-production"
},
{
"description": "helloworld-radmin Zappa",
"createdDate": {
"hour": 7,
"__class__": "datetime",
"month": 2,
"second": 51,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 38
},
"id": "h0ttqz46qc",
"name": "helloworld-radmin"
},
{
"description": "helloworld-dvlp Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 1,
"second": 0,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 49
},
"id": "h7twhyqkie",
"name": "helloworld-dvlp"
},
{
"description": "helloworld-devel Zappa",
"createdDate": {
"hour": 17,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 30
},
"id": "hbj992tfwl",
"name": "helloworld-devel"
},
{
"description": "Spheres-demonstration Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 2,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 16,
"minute": 53
},
"id": "ho43d1vcyb",
"name": "Spheres-demonstration"
},
{
"description": "helloworld-qq Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 1,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 21
},
"id": "hro3nhl7t4",
"name": "helloworld-qq"
},
{
"description": "helloworld-dvlperr Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 36,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 12
},
"id": "i2zrw3wku1",
"name": "helloworld-dvlperr"
},
{
"description": "website-derp Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 4,
"second": 40,
"microsecond": 0,
"year": 2016,
"day": 7,
"minute": 45
},
"id": "i75y1kwi47",
"name": "website-derp"
},
{
"description": "zappa-testerinooo Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 3,
"second": 10,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 11
},
"id": "ijs8po6ul8",
"name": "zappa-testerinooo"
},
{
"description": "zappa-ttt888 Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 6,
"second": 54,
"microsecond": 0,
"year": 2016,
"day": 2,
"minute": 23
},
"id": "iw5z0jpx0d",
"name": "zappa-ttt888"
},
{
"description": "helloworld-delloo Zappa",
"createdDate": {
"hour": 7,
"__class__": "datetime",
"month": 1,
"second": 47,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 38
},
"id": "j3rs1jti9g",
"name": "helloworld-delloo"
},
{
"description": "serverless-imagehost-dever Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 3,
"second": 55,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 6
},
"id": "jr75b74ip8",
"name": "serverless-imagehost-dever"
},
{
"description": "1453976638 Zappa",
"createdDate": {
"hour": 5,
"__class__": "datetime",
"month": 1,
"second": 59,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 23
},
"id": "kwzshzpitk",
"name": "1453976638"
},
{
"description": "1453989570 Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 1,
"second": 32,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 59
},
"id": "lkiug68ek9",
"name": "1453989570"
},
{
"description": "1453845110 Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 1,
"second": 52,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 51
},
"id": "lo9vjezry6",
"name": "1453845110"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 2,
"second": 37,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 0
},
"id": "lphfaxj84g",
"name": "Spheres-dev"
},
{
"description": "flask-test-eventer Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 5,
"second": 26,
"microsecond": 0,
"year": 2016,
"day": 10,
"minute": 0
},
"id": "lsw93ibofa",
"name": "flask-test-eventer"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 2,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 35
},
"id": "lvc59j5puf",
"name": "Spheres-dev"
},
{
"description": "helloworld-qqqqq Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 1,
"second": 34,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 16
},
"id": "lwbaruqt91",
"name": "helloworld-qqqqq"
},
{
"description": "demo-dev Zappa",
"createdDate": {
"hour": 17,
"__class__": "datetime",
"month": 3,
"second": 8,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 17
},
"id": "m8atxlc1j9",
"name": "demo-dev"
},
{
"description": "helloworld-dvlperrrr Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 16,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 31
},
"id": "mco06c7adh",
"name": "helloworld-dvlperrrr"
},
{
"description": "helloworld-rr Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 1,
"second": 6,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 28
},
"id": "mgo7ssfnr8",
"name": "helloworld-rr"
},
{
"description": "zappa-ttt666 Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 6,
"second": 53,
"microsecond": 0,
"year": 2016,
"day": 2,
"minute": 0
},
"id": "mj9gnteqc9",
"name": "zappa-ttt666"
},
{
"description": "helloworld-dvlperrr Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 44,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 21
},
"id": "nsrpfnr93g",
"name": "helloworld-dvlperrr"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 2,
"second": 58,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 37
},
"id": "o48rplzmre",
"name": "Spheres-dev"
},
{
"description": "restful-demo-dev4 Zappa",
"createdDate": {
"hour": 1,
"__class__": "datetime",
"month": 4,
"second": 3,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 19
},
"id": "oo8j6uj6i1",
"name": "restful-demo-dev4"
},
{
"description": "helloworld-badmin Zappa",
"createdDate": {
"hour": 7,
"__class__": "datetime",
"month": 2,
"second": 49,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 59
},
"id": "owo37s7o0l",
"name": "helloworld-badmin"
},
{
"description": "1453987169 Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 19
},
"id": "p22u4b4hn9",
"name": "1453987169"
},
{
"description": "1453847710 Zappa",
"createdDate": {
"hour": 17,
"__class__": "datetime",
"month": 1,
"second": 12,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 35
},
"id": "pzdx6f20o9",
"name": "1453847710"
},
{
"description": "helloworld-develo Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 1,
"second": 53,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 33
},
"id": "qhikml2l0a",
"name": "helloworld-develo"
},
{
"description": "1453992020 Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 1,
"second": 22,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 40
},
"id": "rmlote5cec",
"name": "1453992020"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 2,
"second": 28,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 38
},
"id": "ry7mtnfmo3",
"name": "Spheres-dev"
},
{
"description": "serverless-imagehost-nob2 Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 5,
"second": 53,
"microsecond": 0,
"year": 2016,
"day": 11,
"minute": 54
},
"id": "s6svfqprs6",
"name": "serverless-imagehost-nob2"
},
{
"description": "zappa-tester Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 3,
"second": 59,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 31
},
"id": "sibzbaomqb",
"name": "zappa-tester"
},
{
"description": "helloworld-fadmin Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 2,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 47
},
"id": "swe19z3zr7",
"name": "helloworld-fadmin"
},
{
"description": "django-helloworld-prodope Zappa",
"createdDate": {
"hour": 18,
"__class__": "datetime",
"month": 4,
"second": 43,
"microsecond": 0,
"year": 2016,
"day": 9,
"minute": 46
},
"id": "sx5ifzldel",
"name": "django-helloworld-prodope"
},
{
"description": "zappa-testerinoo Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 3,
"second": 28,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 0
},
"id": "tkfhn7uh1j",
"name": "zappa-testerinoo"
},
{
"description": "1453992953 Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 1,
"second": 56,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 55
},
"id": "tpwx2chyc9",
"name": "1453992953"
},
{
"description": "flask-blog-dev Zappa",
"createdDate": {
"hour": 21,
"__class__": "datetime",
"month": 3,
"second": 20,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 30
},
"id": "u5k6g8qxu4",
"name": "flask-blog-dev"
},
{
"description": "helloworld-poste Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 1,
"second": 1,
"microsecond": 0,
"year": 2016,
"day": 31,
"minute": 6
},
"id": "v3f3yz9ij6",
"name": "helloworld-poste"
},
{
"description": "flask-test-test Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 3,
"second": 35,
"microsecond": 0,
"year": 2016,
"day": 31,
"minute": 46
},
"id": "vna1tr18s7",
"name": "flask-test-test"
},
{
"description": "helloworld-dvlperrrrr Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 41
},
"id": "voekyyz7v7",
"name": "helloworld-dvlperrrrr"
},
{
"description": "zappa-ttt222 Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 3,
"second": 13,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 45
},
"id": "vzxj8vvejc",
"name": "zappa-ttt222"
},
{
"description": "django-helloworld-prodo Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 4,
"second": 18,
"microsecond": 0,
"year": 2016,
"day": 8,
"minute": 48
},
"id": "wx029jbtva",
"name": "django-helloworld-prodo"
},
{
"description": "helloworld-postal Zappa",
"createdDate": {
"hour": 18,
"__class__": "datetime",
"month": 1,
"second": 55,
"microsecond": 0,
"year": 2016,
"day": 31,
"minute": 22
},
"id": "xnozvcrt9f",
"name": "helloworld-postal"
},
{
"description": "zappa-testerino Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 3,
"second": 12,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 44
},
"id": "yxm125wqua",
"name": "zappa-testerino"
},
{
"description": "helloworld-zz Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 1,
"second": 11,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 56
},
"id": "yxu3hk4ss8",
"name": "helloworld-zz"
},
{
"description": "helloworld-p Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 1,
"second": 17,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 58
},
"id": "zdmxiapwh9",
"name": "helloworld-p"
},
{
"description": "serverless-imagehost-demodemo Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 3,
"second": 7,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 10
},
"id": "zhrsy6zhl7",
"name": "serverless-imagehost-demodemo"
}
],
"ResponseMetadata": {
"HTTPStatusCode": 200,
"RequestId": "af6602b8-28f7-11e6-8233-6d2c402681cd"
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_5.json
================================================
{
"status_code": 200,
"data": {
"position": "aWQ9U2xwaGZheGo4NGc%3D",
"ResponseMetadata": {
"HTTPStatusCode": 200,
"RequestId": "2cafad23-6a74-11e6-831b-43c278515a41",
"HTTPHeaders": {
"x-amzn-requestid": "2cafad23-6a74-11e6-831b-43c278515a41",
"date": "Thu, 25 Aug 2016 03:29:47 GMT",
"content-length": "2753",
"content-type": "application/json"
}
},
"items": [
{
"description": "poops2js-dev Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 8,
"second": 32,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 8
},
"id": "1yae9gfwab",
"name": "poops2js-dev"
},
{
"description": "spheres-beta Zappa",
"createdDate": {
"hour": 17,
"__class__": "datetime",
"month": 2,
"second": 45,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 20
},
"id": "2djdovx6f3",
"name": "spheres-beta"
},
{
"description": "helloworld-zeta Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 2,
"second": 9,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 53
},
"id": "2uj5ini1yb",
"name": "helloworld-zeta"
},
{
"description": "baby-flask-devor Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 8,
"second": 42,
"microsecond": 0,
"year": 2016,
"day": 23,
"minute": 56
},
"id": "4sm404ad2j",
"name": "baby-flask-devor"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 2,
"second": 57,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 29
},
"id": "60sck4xxob",
"name": "Spheres-dev"
},
{
"description": "hackathon-starter-dev Zappa",
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 7,
"second": 21,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 46
},
"id": "7s8qhskdc2",
"name": "hackathon-starter-dev"
},
{
"description": "zappa-slack-inviter-prod Zappa",
"createdDate": {
"hour": 10,
"__class__": "datetime",
"month": 8,
"second": 41,
"microsecond": 0,
"year": 2016,
"day": 22,
"minute": 54
},
"id": "9pi3dp8g4f",
"name": "zappa-slack-inviter-prod"
},
{
"description": "issue110-dev Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 5,
"second": 2,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 29
},
"id": "bo02obhd7c",
"name": "issue110-dev"
},
{
"description": "oort-dev Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 5,
"second": 18,
"microsecond": 0,
"year": 2016,
"day": 20,
"minute": 28
},
"id": "cdvt3njuhk",
"name": "oort-dev"
},
{
"description": "baby-pyramid-dev Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 8,
"second": 44,
"microsecond": 0,
"year": 2016,
"day": 23,
"minute": 20
},
"id": "css89s7off",
"name": "baby-pyramid-dev"
},
{
"description": "website-production Zappa",
"createdDate": {
"hour": 10,
"__class__": "datetime",
"month": 4,
"second": 3,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 7
},
"id": "fhbea4d5o6",
"name": "website-production"
},
{
"description": "helloworld-radmin Zappa",
"createdDate": {
"hour": 4,
"__class__": "datetime",
"month": 2,
"second": 51,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 38
},
"id": "h0ttqz46qc",
"name": "helloworld-radmin"
},
{
"description": "helloworld-dvlp Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 1,
"second": 0,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 49
},
"id": "h7twhyqkie",
"name": "helloworld-dvlp"
},
{
"description": "helloworld-devel Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 30
},
"id": "hbj992tfwl",
"name": "helloworld-devel"
},
{
"description": "Spheres-demonstration Zappa",
"createdDate": {
"hour": 10,
"__class__": "datetime",
"month": 2,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 16,
"minute": 53
},
"id": "ho43d1vcyb",
"name": "Spheres-demonstration"
},
{
"description": "helloworld-qq Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 21
},
"id": "hro3nhl7t4",
"name": "helloworld-qq"
},
{
"description": "helloworld-dvlperr Zappa",
"createdDate": {
"hour": 3,
"__class__": "datetime",
"month": 1,
"second": 36,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 12
},
"id": "i2zrw3wku1",
"name": "helloworld-dvlperr"
},
{
"description": "website-derp Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 4,
"second": 40,
"microsecond": 0,
"year": 2016,
"day": 7,
"minute": 45
},
"id": "i75y1kwi47",
"name": "website-derp"
},
{
"description": "zappa-testerinooo Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 3,
"second": 10,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 11
},
"id": "ijs8po6ul8",
"name": "zappa-testerinooo"
},
{
"description": "helloworld-delloo Zappa",
"createdDate": {
"hour": 4,
"__class__": "datetime",
"month": 1,
"second": 47,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 38
},
"id": "j3rs1jti9g",
"name": "helloworld-delloo"
},
{
"description": "serverless-imagehost-dever Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 3,
"second": 55,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 6
},
"id": "jr75b74ip8",
"name": "serverless-imagehost-dever"
},
{
"description": "1453976638 Zappa",
"createdDate": {
"hour": 2,
"__class__": "datetime",
"month": 1,
"second": 59,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 23
},
"id": "kwzshzpitk",
"name": "1453976638"
},
{
"description": "1453989570 Zappa",
"createdDate": {
"hour": 5,
"__class__": "datetime",
"month": 1,
"second": 32,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 59
},
"id": "lkiug68ek9",
"name": "1453989570"
},
{
"description": "1453845110 Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 1,
"second": 52,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 51
},
"id": "lo9vjezry6",
"name": "1453845110"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 2,
"second": 37,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 0
},
"id": "lphfaxj84g",
"name": "Spheres-dev"
}
]
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_6.json
================================================
{
"status_code": 200,
"data": {
"items": [
{
"description": "poops2js-dev Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 8,
"second": 32,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 8
},
"id": "1yae9gfwab",
"name": "poops2js-dev"
},
{
"description": "spheres-beta Zappa",
"createdDate": {
"hour": 17,
"__class__": "datetime",
"month": 2,
"second": 45,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 20
},
"id": "2djdovx6f3",
"name": "spheres-beta"
},
{
"description": "helloworld-zeta Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 2,
"second": 9,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 53
},
"id": "2uj5ini1yb",
"name": "helloworld-zeta"
},
{
"description": "baby-flask-devor Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 8,
"second": 42,
"microsecond": 0,
"year": 2016,
"day": 23,
"minute": 56
},
"id": "4sm404ad2j",
"name": "baby-flask-devor"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 2,
"second": 57,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 29
},
"id": "60sck4xxob",
"name": "Spheres-dev"
},
{
"description": "hackathon-starter-dev Zappa",
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 7,
"second": 21,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 46
},
"id": "7s8qhskdc2",
"name": "hackathon-starter-dev"
},
{
"description": "zappa-slack-inviter-prod Zappa",
"createdDate": {
"hour": 10,
"__class__": "datetime",
"month": 8,
"second": 41,
"microsecond": 0,
"year": 2016,
"day": 22,
"minute": 54
},
"id": "9pi3dp8g4f",
"name": "zappa-slack-inviter-prod"
},
{
"description": "issue110-dev Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 5,
"second": 2,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 29
},
"id": "bo02obhd7c",
"name": "issue110-dev"
},
{
"description": "oort-dev Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 5,
"second": 18,
"microsecond": 0,
"year": 2016,
"day": 20,
"minute": 28
},
"id": "cdvt3njuhk",
"name": "oort-dev"
},
{
"description": "baby-pyramid-dev Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 8,
"second": 44,
"microsecond": 0,
"year": 2016,
"day": 23,
"minute": 20
},
"id": "css89s7off",
"name": "baby-pyramid-dev"
},
{
"description": "website-production Zappa",
"createdDate": {
"hour": 10,
"__class__": "datetime",
"month": 4,
"second": 3,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 7
},
"id": "fhbea4d5o6",
"name": "website-production"
},
{
"description": "helloworld-radmin Zappa",
"createdDate": {
"hour": 4,
"__class__": "datetime",
"month": 2,
"second": 51,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 38
},
"id": "h0ttqz46qc",
"name": "helloworld-radmin"
},
{
"description": "helloworld-dvlp Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 1,
"second": 0,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 49
},
"id": "h7twhyqkie",
"name": "helloworld-dvlp"
},
{
"description": "helloworld-devel Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 30
},
"id": "hbj992tfwl",
"name": "helloworld-devel"
},
{
"description": "Spheres-demonstration Zappa",
"createdDate": {
"hour": 10,
"__class__": "datetime",
"month": 2,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 16,
"minute": 53
},
"id": "ho43d1vcyb",
"name": "Spheres-demonstration"
},
{
"description": "helloworld-qq Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 21
},
"id": "hro3nhl7t4",
"name": "helloworld-qq"
},
{
"description": "helloworld-dvlperr Zappa",
"createdDate": {
"hour": 3,
"__class__": "datetime",
"month": 1,
"second": 36,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 12
},
"id": "i2zrw3wku1",
"name": "helloworld-dvlperr"
},
{
"description": "website-derp Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 4,
"second": 40,
"microsecond": 0,
"year": 2016,
"day": 7,
"minute": 45
},
"id": "i75y1kwi47",
"name": "website-derp"
},
{
"description": "zappa-testerinooo Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 3,
"second": 10,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 11
},
"id": "ijs8po6ul8",
"name": "zappa-testerinooo"
},
{
"description": "helloworld-delloo Zappa",
"createdDate": {
"hour": 4,
"__class__": "datetime",
"month": 1,
"second": 47,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 38
},
"id": "j3rs1jti9g",
"name": "helloworld-delloo"
},
{
"description": "zappa-ttt888 Zappa",
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 8,
"second": 48,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 29
},
"id": "jkib1pg4l1",
"name": "zappa-ttt888"
},
{
"description": "serverless-imagehost-dever Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 3,
"second": 55,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 6
},
"id": "jr75b74ip8",
"name": "serverless-imagehost-dever"
},
{
"description": "1453976638 Zappa",
"createdDate": {
"hour": 2,
"__class__": "datetime",
"month": 1,
"second": 59,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 23
},
"id": "kwzshzpitk",
"name": "1453976638"
},
{
"description": "1453989570 Zappa",
"createdDate": {
"hour": 5,
"__class__": "datetime",
"month": 1,
"second": 32,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 59
},
"id": "lkiug68ek9",
"name": "1453989570"
},
{
"description": "1453845110 Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 1,
"second": 52,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 51
},
"id": "lo9vjezry6",
"name": "1453845110"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 2,
"second": 37,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 0
},
"id": "lphfaxj84g",
"name": "Spheres-dev"
},
{
"description": "flask-test-eventer Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 5,
"second": 26,
"microsecond": 0,
"year": 2016,
"day": 10,
"minute": 0
},
"id": "lsw93ibofa",
"name": "flask-test-eventer"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 2,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 35
},
"id": "lvc59j5puf",
"name": "Spheres-dev"
},
{
"description": "helloworld-qqqqq Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 1,
"second": 34,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 16
},
"id": "lwbaruqt91",
"name": "helloworld-qqqqq"
},
{
"description": "demo-dev Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 3,
"second": 8,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 17
},
"id": "m8atxlc1j9",
"name": "demo-dev"
},
{
"description": "helloworld-dvlperrrr Zappa",
"createdDate": {
"hour": 3,
"__class__": "datetime",
"month": 1,
"second": 16,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 31
},
"id": "mco06c7adh",
"name": "helloworld-dvlperrrr"
},
{
"description": "helloworld-rr Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 1,
"second": 6,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 28
},
"id": "mgo7ssfnr8",
"name": "helloworld-rr"
},
{
"description": "helloworld-dvlperrr Zappa",
"createdDate": {
"hour": 3,
"__class__": "datetime",
"month": 1,
"second": 44,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 21
},
"id": "nsrpfnr93g",
"name": "helloworld-dvlperrr"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 2,
"second": 58,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 37
},
"id": "o48rplzmre",
"name": "Spheres-dev"
},
{
"description": "restful-demo-dev4 Zappa",
"createdDate": {
"hour": 22,
"__class__": "datetime",
"month": 4,
"second": 3,
"microsecond": 0,
"year": 2016,
"day": 4,
"minute": 19
},
"id": "oo8j6uj6i1",
"name": "restful-demo-dev4"
},
{
"description": "helloworld-badmin Zappa",
"createdDate": {
"hour": 4,
"__class__": "datetime",
"month": 2,
"second": 49,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 59
},
"id": "owo37s7o0l",
"name": "helloworld-badmin"
},
{
"description": "1453987169 Zappa",
"createdDate": {
"hour": 5,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 19
},
"id": "p22u4b4hn9",
"name": "1453987169"
},
{
"description": "1453847710 Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 1,
"second": 12,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 35
},
"id": "pzdx6f20o9",
"name": "1453847710"
},
{
"description": "helloworld-develo Zappa",
"createdDate": {
"hour": 5,
"__class__": "datetime",
"month": 1,
"second": 53,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 33
},
"id": "qhikml2l0a",
"name": "helloworld-develo"
},
{
"description": "1453992020 Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 22,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 40
},
"id": "rmlote5cec",
"name": "1453992020"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 2,
"second": 28,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 38
},
"id": "ry7mtnfmo3",
"name": "Spheres-dev"
},
{
"description": "serverless-imagehost-nob2 Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 5,
"second": 53,
"microsecond": 0,
"year": 2016,
"day": 11,
"minute": 54
},
"id": "s6svfqprs6",
"name": "serverless-imagehost-nob2"
},
{
"description": "zappa-tester Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 3,
"second": 59,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 31
},
"id": "sibzbaomqb",
"name": "zappa-tester"
},
{
"description": "helloworld-fadmin Zappa",
"createdDate": {
"hour": 5,
"__class__": "datetime",
"month": 2,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 47
},
"id": "swe19z3zr7",
"name": "helloworld-fadmin"
},
{
"description": "django-helloworld-prodope Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 4,
"second": 43,
"microsecond": 0,
"year": 2016,
"day": 9,
"minute": 46
},
"id": "sx5ifzldel",
"name": "django-helloworld-prodope"
},
{
"description": "zappa-testerinoo Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 3,
"second": 28,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 0
},
"id": "tkfhn7uh1j",
"name": "zappa-testerinoo"
},
{
"description": "flask-blog-dev Zappa",
"createdDate": {
"hour": 18,
"__class__": "datetime",
"month": 3,
"second": 20,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 30
},
"id": "u5k6g8qxu4",
"name": "flask-blog-dev"
},
{
"description": "helloworld-poste Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 1,
"second": 1,
"microsecond": 0,
"year": 2016,
"day": 31,
"minute": 6
},
"id": "v3f3yz9ij6",
"name": "helloworld-poste"
},
{
"description": "flask-test-test Zappa",
"createdDate": {
"hour": 10,
"__class__": "datetime",
"month": 3,
"second": 35,
"microsecond": 0,
"year": 2016,
"day": 31,
"minute": 46
},
"id": "vna1tr18s7",
"name": "flask-test-test"
},
{
"description": "helloworld-dvlperrrrr Zappa",
"createdDate": {
"hour": 3,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 41
},
"id": "voekyyz7v7",
"name": "helloworld-dvlperrrrr"
},
{
"description": "zappa-ttt222 Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 3,
"second": 13,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 45
},
"id": "vzxj8vvejc",
"name": "zappa-ttt222"
},
{
"description": "django-helloworld-prodo Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 4,
"second": 18,
"microsecond": 0,
"year": 2016,
"day": 8,
"minute": 48
},
"id": "wx029jbtva",
"name": "django-helloworld-prodo"
},
{
"description": "helloworld-postal Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 1,
"second": 55,
"microsecond": 0,
"year": 2016,
"day": 31,
"minute": 22
},
"id": "xnozvcrt9f",
"name": "helloworld-postal"
},
{
"description": "zappa-testerino Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 3,
"second": 12,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 44
},
"id": "yxm125wqua",
"name": "zappa-testerino"
},
{
"description": "helloworld-zz Zappa",
"createdDate": {
"hour": 8,
"__class__": "datetime",
"month": 1,
"second": 11,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 56
},
"id": "yxu3hk4ss8",
"name": "helloworld-zz"
},
{
"description": "helloworld-p Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 1,
"second": 17,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 58
},
"id": "zdmxiapwh9",
"name": "helloworld-p"
},
{
"description": "serverless-imagehost-demodemo Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 3,
"second": 7,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 10
},
"id": "zhrsy6zhl7",
"name": "serverless-imagehost-demodemo"
}
],
"ResponseMetadata": {
"HTTPStatusCode": 200,
"RequestId": "659dce17-6a74-11e6-aaec-e994c773c0ae",
"HTTPHeaders": {
"x-amzn-requestid": "659dce17-6a74-11e6-aaec-e994c773c0ae",
"date": "Thu, 25 Aug 2016 03:31:23 GMT",
"content-length": "6217",
"content-type": "application/json"
}
}
}
}
================================================
FILE: tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_7.json
================================================
{
"status_code": 200,
"data": {
"items": [
{
"description": "poops2js-dev Zappa",
"createdDate": {
"hour": 15,
"__class__": "datetime",
"month": 8,
"second": 32,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 8
},
"id": "1yae9gfwab",
"name": "poops2js-dev"
},
{
"description": "spheres-beta Zappa",
"createdDate": {
"hour": 17,
"__class__": "datetime",
"month": 2,
"second": 45,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 20
},
"id": "2djdovx6f3",
"name": "spheres-beta"
},
{
"description": "helloworld-zeta Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 2,
"second": 9,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 53
},
"id": "2uj5ini1yb",
"name": "helloworld-zeta"
},
{
"description": "baby-flask-devor Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 8,
"second": 42,
"microsecond": 0,
"year": 2016,
"day": 23,
"minute": 56
},
"id": "4sm404ad2j",
"name": "baby-flask-devor"
},
{
"description": "Spheres-dev Zappa",
"createdDate": {
"hour": 12,
"__class__": "datetime",
"month": 2,
"second": 57,
"microsecond": 0,
"year": 2016,
"day": 6,
"minute": 29
},
"id": "60sck4xxob",
"name": "Spheres-dev"
},
{
"description": "hackathon-starter-dev Zappa",
"createdDate": {
"hour": 20,
"__class__": "datetime",
"month": 7,
"second": 21,
"microsecond": 0,
"year": 2016,
"day": 26,
"minute": 46
},
"id": "7s8qhskdc2",
"name": "hackathon-starter-dev"
},
{
"description": "zappa-slack-inviter-prod Zappa",
"createdDate": {
"hour": 10,
"__class__": "datetime",
"month": 8,
"second": 41,
"microsecond": 0,
"year": 2016,
"day": 22,
"minute": 54
},
"id": "9pi3dp8g4f",
"name": "zappa-slack-inviter-prod"
},
{
"description": "issue110-dev Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 5,
"second": 2,
"microsecond": 0,
"year": 2016,
"day": 24,
"minute": 29
},
"id": "bo02obhd7c",
"name": "issue110-dev"
},
{
"description": "oort-dev Zappa",
"createdDate": {
"hour": 9,
"__class__": "datetime",
"month": 5,
"second": 18,
"microsecond": 0,
"year": 2016,
"day": 20,
"minute": 28
},
"id": "cdvt3njuhk",
"name": "oort-dev"
},
{
"description": "baby-pyramid-dev Zappa",
"createdDate": {
"hour": 16,
"__class__": "datetime",
"month": 8,
"second": 44,
"microsecond": 0,
"year": 2016,
"day": 23,
"minute": 20
},
"id": "css89s7off",
"name": "baby-pyramid-dev"
},
{
"description": "website-production Zappa",
"createdDate": {
"hour": 10,
"__class__": "datetime",
"month": 4,
"second": 3,
"microsecond": 0,
"year": 2016,
"day": 5,
"minute": 7
},
"id": "fhbea4d5o6",
"name": "website-production"
},
{
"description": "helloworld-radmin Zappa",
"createdDate": {
"hour": 4,
"__class__": "datetime",
"month": 2,
"second": 51,
"microsecond": 0,
"year": 2016,
"day": 1,
"minute": 38
},
"id": "h0ttqz46qc",
"name": "helloworld-radmin"
},
{
"description": "helloworld-dvlp Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 1,
"second": 0,
"microsecond": 0,
"year": 2016,
"day": 29,
"minute": 49
},
"id": "h7twhyqkie",
"name": "helloworld-dvlp"
},
{
"description": "helloworld-devel Zappa",
"createdDate": {
"hour": 14,
"__class__": "datetime",
"month": 1,
"second": 30,
"microsecond": 0,
"year": 2016,
"day": 28,
"minute": 30
},
"id": "hbj992tfwl",
"name": "helloworld-devel"
},
{
"description": "Spheres-demonstration Zappa",
"createdDate": {
"hour": 10,
"__class__": "datetime",
"month": 2,
"second": 25,
"microsecond": 0,
"year": 2016,
"day": 16,
"minute": 53
},
"id": "ho43d1vcyb",
"name": "Spheres-demonstration"
},
{
"description": "helloworld-qq Zappa",
"createdDate": {
"hour": 6,
"__class__": "datetime",
"month": 1,
"second": 38,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 21
},
"id": "hro3nhl7t4",
"name": "helloworld-qq"
},
{
"description": "helloworld-dvlperr Zappa",
"createdDate": {
"hour": 3,
"__class__": "datetime",
"month": 1,
"second": 36,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 12
},
"id": "i2zrw3wku1",
"name": "helloworld-dvlperr"
},
{
"description": "website-derp Zappa",
"createdDate": {
"hour": 11,
"__class__": "datetime",
"month": 4,
"second": 40,
"microsecond": 0,
"year": 2016,
"day": 7,
"minute": 45
},
"id": "i75y1kwi47",
"name": "website-derp"
},
{
"description": "zappa-testerinooo Zappa",
"createdDate": {
"hour": 13,
"__class__": "datetime",
"month": 3,
"second": 10,
"microsecond": 0,
"year": 2016,
"day": 25,
"minute": 11
},
"id": "ijs8po6ul8",
"name": "zappa-testerinooo"
},
{
"description": "helloworld-delloo Zappa",
"createdDate": {
"hour": 4,
"__class__": "datetime",
"month": 1,
"second": 47,
"microsecond": 0,
"year": 2016,
"day": 30,
"minute": 38
},
"id": "j3rs1jti9g",
"name": "helloworld-delloo"
},
{
"description": "zappa-tt
gitextract_xj1w1emc/
├── .github/
│ ├── ISSUE_TEMPLATE.md
│ └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .travis.yml
├── CHANGELOG.md
├── LICENSE
├── MANIFEST.in
├── README.md
├── docs/
│ ├── domain_with_free_ssl_dns.md
│ └── domain_with_free_ssl_http.md
├── example/
│ ├── README.md
│ ├── app.py
│ ├── authmodule.py
│ ├── mymodule.py
│ ├── policy/
│ │ └── deploy.json
│ └── requirements.txt
├── requirements.in
├── requirements.sh
├── requirements.txt
├── setup.py
├── test.sh
├── test_requirements.in
├── test_requirements.txt
├── test_settings.json
├── test_settings.py
├── tests/
│ ├── README.md
│ ├── __init__.py
│ ├── data/
│ │ ├── test1/
│ │ │ └── this_dir_is_not_a_module.txt
│ │ ├── test1.py
│ │ └── test2/
│ │ └── test.py
│ ├── name_scenarios.json
│ ├── placebo/
│ │ ├── TestZappa.test_cli_aws/
│ │ │ ├── apigateway.CreateApiKey_1.json
│ │ │ ├── apigateway.CreateDeployment_1.json
│ │ │ ├── apigateway.CreateDeployment_2.json
│ │ │ ├── apigateway.CreateDeployment_3.json
│ │ │ ├── apigateway.CreateResource_1.json
│ │ │ ├── apigateway.CreateResource_2.json
│ │ │ ├── apigateway.CreateResource_3.json
│ │ │ ├── apigateway.CreateResource_4.json
│ │ │ ├── apigateway.CreateResource_5.json
│ │ │ ├── apigateway.CreateResource_6.json
│ │ │ ├── apigateway.CreateResource_7.json
│ │ │ ├── apigateway.CreateResource_8.json
│ │ │ ├── apigateway.CreateResource_9.json
│ │ │ ├── apigateway.DeleteApiKey_1.json
│ │ │ ├── apigateway.DeleteRestApi_1.json
│ │ │ ├── apigateway.DeleteRestApi_2.json
│ │ │ ├── apigateway.GetApiKeys_1.json
│ │ │ ├── apigateway.GetResources_1.json
│ │ │ ├── apigateway.GetResources_2.json
│ │ │ ├── apigateway.GetResources_3.json
│ │ │ ├── apigateway.GetRestApi_1.json
│ │ │ ├── apigateway.GetRestApi_2.json
│ │ │ ├── apigateway.GetRestApis_1.json
│ │ │ ├── apigateway.GetRestApis_2.json
│ │ │ ├── apigateway.GetRestApis_3.json
│ │ │ ├── apigateway.GetRestApis_4.json
│ │ │ ├── apigateway.GetRestApis_5.json
│ │ │ ├── apigateway.GetRestApis_6.json
│ │ │ ├── apigateway.GetRestApis_7.json
│ │ │ ├── apigateway.GetRestApis_8.json
│ │ │ ├── apigateway.GetRestApis_9.json
│ │ │ ├── apigateway.GetStages_1.json
│ │ │ ├── apigateway.UpdateRestApi_1.json
│ │ │ ├── apigateway.UpdateStage_1.json
│ │ │ ├── apigateway.UpdateStage_2.json
│ │ │ ├── apigateway.UpdateStage_3.json
│ │ │ ├── cloudformation.CreateStack_1.json
│ │ │ ├── cloudformation.DeleteStack_1.json
│ │ │ ├── cloudformation.DescribeStackResource_1.json
│ │ │ ├── cloudformation.DescribeStackResource_2.json
│ │ │ ├── cloudformation.DescribeStackResource_3.json
│ │ │ ├── cloudformation.DescribeStacks_1.json
│ │ │ ├── cloudformation.DescribeStacks_10.json
│ │ │ ├── cloudformation.DescribeStacks_11.json
│ │ │ ├── cloudformation.DescribeStacks_12.json
│ │ │ ├── cloudformation.DescribeStacks_13.json
│ │ │ ├── cloudformation.DescribeStacks_14.json
│ │ │ ├── cloudformation.DescribeStacks_15.json
│ │ │ ├── cloudformation.DescribeStacks_16.json
│ │ │ ├── cloudformation.DescribeStacks_2.json
│ │ │ ├── cloudformation.DescribeStacks_3.json
│ │ │ ├── cloudformation.DescribeStacks_4.json
│ │ │ ├── cloudformation.DescribeStacks_5.json
│ │ │ ├── cloudformation.DescribeStacks_6.json
│ │ │ ├── cloudformation.DescribeStacks_7.json
│ │ │ ├── cloudformation.DescribeStacks_8.json
│ │ │ ├── cloudformation.DescribeStacks_9.json
│ │ │ ├── cloudformation.ListStackResources_1.json
│ │ │ ├── cloudformation.ListStackResources_10.json
│ │ │ ├── cloudformation.ListStackResources_11.json
│ │ │ ├── cloudformation.ListStackResources_12.json
│ │ │ ├── cloudformation.ListStackResources_2.json
│ │ │ ├── cloudformation.ListStackResources_3.json
│ │ │ ├── cloudformation.ListStackResources_4.json
│ │ │ ├── cloudformation.ListStackResources_5.json
│ │ │ ├── cloudformation.ListStackResources_6.json
│ │ │ ├── cloudformation.ListStackResources_7.json
│ │ │ ├── cloudformation.ListStackResources_8.json
│ │ │ ├── cloudformation.ListStackResources_9.json
│ │ │ ├── cloudformation.UpdateStack_1.json
│ │ │ ├── cognito-idp.DescribeUserPool_1.json
│ │ │ ├── cognito-idp.UpdateUserPool_1.json
│ │ │ ├── events.DeleteRule_1.json
│ │ │ ├── events.DeleteRule_2.json
│ │ │ ├── events.DeleteRule_3.json
│ │ │ ├── events.DeleteRule_4.json
│ │ │ ├── events.DeleteRule_5.json
│ │ │ ├── events.DeleteRule_6.json
│ │ │ ├── events.DeleteRule_7.json
│ │ │ ├── events.DeleteRule_8.json
│ │ │ ├── events.DeleteRule_9.json
│ │ │ ├── events.ListRuleNamesByTarget_1.json
│ │ │ ├── events.ListRuleNamesByTarget_2.json
│ │ │ ├── events.ListRuleNamesByTarget_3.json
│ │ │ ├── events.ListRuleNamesByTarget_4.json
│ │ │ ├── events.ListRuleNamesByTarget_5.json
│ │ │ ├── events.ListRuleNamesByTarget_6.json
│ │ │ ├── events.ListRuleNamesByTarget_7.json
│ │ │ ├── events.ListRuleNamesByTarget_8.json
│ │ │ ├── events.ListTargetsByRule_1.json
│ │ │ ├── events.ListTargetsByRule_10.json
│ │ │ ├── events.ListTargetsByRule_11.json
│ │ │ ├── events.ListTargetsByRule_12.json
│ │ │ ├── events.ListTargetsByRule_2.json
│ │ │ ├── events.ListTargetsByRule_3.json
│ │ │ ├── events.ListTargetsByRule_4.json
│ │ │ ├── events.ListTargetsByRule_5.json
│ │ │ ├── events.ListTargetsByRule_6.json
│ │ │ ├── events.ListTargetsByRule_7.json
│ │ │ ├── events.ListTargetsByRule_8.json
│ │ │ ├── events.ListTargetsByRule_9.json
│ │ │ ├── events.PutRule_1.json
│ │ │ ├── events.PutRule_10.json
│ │ │ ├── events.PutRule_11.json
│ │ │ ├── events.PutRule_12.json
│ │ │ ├── events.PutRule_13.json
│ │ │ ├── events.PutRule_14.json
│ │ │ ├── events.PutRule_2.json
│ │ │ ├── events.PutRule_3.json
│ │ │ ├── events.PutRule_4.json
│ │ │ ├── events.PutRule_5.json
│ │ │ ├── events.PutRule_6.json
│ │ │ ├── events.PutRule_7.json
│ │ │ ├── events.PutRule_8.json
│ │ │ ├── events.PutRule_9.json
│ │ │ ├── events.PutTargets_1.json
│ │ │ ├── events.PutTargets_10.json
│ │ │ ├── events.PutTargets_11.json
│ │ │ ├── events.PutTargets_12.json
│ │ │ ├── events.PutTargets_13.json
│ │ │ ├── events.PutTargets_14.json
│ │ │ ├── events.PutTargets_2.json
│ │ │ ├── events.PutTargets_3.json
│ │ │ ├── events.PutTargets_4.json
│ │ │ ├── events.PutTargets_5.json
│ │ │ ├── events.PutTargets_6.json
│ │ │ ├── events.PutTargets_7.json
│ │ │ ├── events.PutTargets_8.json
│ │ │ ├── events.PutTargets_9.json
│ │ │ ├── events.RemoveTargets_1.json
│ │ │ ├── events.RemoveTargets_2.json
│ │ │ ├── events.RemoveTargets_3.json
│ │ │ ├── events.RemoveTargets_4.json
│ │ │ ├── events.RemoveTargets_5.json
│ │ │ ├── events.RemoveTargets_6.json
│ │ │ ├── events.RemoveTargets_7.json
│ │ │ ├── events.RemoveTargets_8.json
│ │ │ ├── events.RemoveTargets_9.json
│ │ │ ├── iam.GetRolePolicy_1.json
│ │ │ ├── iam.GetRolePolicy_10.json
│ │ │ ├── iam.GetRolePolicy_11.json
│ │ │ ├── iam.GetRolePolicy_12.json
│ │ │ ├── iam.GetRolePolicy_2.json
│ │ │ ├── iam.GetRolePolicy_3.json
│ │ │ ├── iam.GetRolePolicy_4.json
│ │ │ ├── iam.GetRolePolicy_5.json
│ │ │ ├── iam.GetRolePolicy_6.json
│ │ │ ├── iam.GetRolePolicy_7.json
│ │ │ ├── iam.GetRolePolicy_8.json
│ │ │ ├── iam.GetRolePolicy_9.json
│ │ │ ├── iam.GetRole_1.json
│ │ │ ├── iam.GetRole_10.json
│ │ │ ├── iam.GetRole_11.json
│ │ │ ├── iam.GetRole_12.json
│ │ │ ├── iam.GetRole_2.json
│ │ │ ├── iam.GetRole_3.json
│ │ │ ├── iam.GetRole_4.json
│ │ │ ├── iam.GetRole_5.json
│ │ │ ├── iam.GetRole_6.json
│ │ │ ├── iam.GetRole_7.json
│ │ │ ├── iam.GetRole_8.json
│ │ │ ├── iam.GetRole_9.json
│ │ │ ├── iam.PutRolePolicy_1.json
│ │ │ ├── lambda.AddPermission_1.json
│ │ │ ├── lambda.AddPermission_10.json
│ │ │ ├── lambda.AddPermission_11.json
│ │ │ ├── lambda.AddPermission_12.json
│ │ │ ├── lambda.AddPermission_13.json
│ │ │ ├── lambda.AddPermission_14.json
│ │ │ ├── lambda.AddPermission_2.json
│ │ │ ├── lambda.AddPermission_3.json
│ │ │ ├── lambda.AddPermission_4.json
│ │ │ ├── lambda.AddPermission_5.json
│ │ │ ├── lambda.AddPermission_6.json
│ │ │ ├── lambda.AddPermission_7.json
│ │ │ ├── lambda.AddPermission_8.json
│ │ │ ├── lambda.AddPermission_9.json
│ │ │ ├── lambda.CreateFunction_1.json
│ │ │ ├── lambda.CreateFunction_2.json
│ │ │ ├── lambda.CreateFunction_3.json
│ │ │ ├── lambda.CreateFunction_4.json
│ │ │ ├── lambda.CreateFunction_5.json
│ │ │ ├── lambda.DeleteFunctionConcurrency_1.json
│ │ │ ├── lambda.DeleteFunction_1.json
│ │ │ ├── lambda.DeleteFunction_2.json
│ │ │ ├── lambda.GetAlias_1.json
│ │ │ ├── lambda.GetFunctionConfiguration_1.json
│ │ │ ├── lambda.GetFunction_1.json
│ │ │ ├── lambda.GetFunction_2.json
│ │ │ ├── lambda.GetFunction_3.json
│ │ │ ├── lambda.GetFunction_4.json
│ │ │ ├── lambda.GetFunction_5.json
│ │ │ ├── lambda.GetFunction_6.json
│ │ │ ├── lambda.GetFunction_7.json
│ │ │ ├── lambda.GetFunction_8.json
│ │ │ ├── lambda.GetPolicy_1.json
│ │ │ ├── lambda.ListVersionsByFunction_1.json
│ │ │ ├── lambda.ListVersionsByFunction_2.json
│ │ │ ├── lambda.ListVersionsByFunction_3.json
│ │ │ ├── lambda.ListVersionsByFunction_4.json
│ │ │ ├── lambda.UpdateAlias_1.json
│ │ │ ├── lambda.UpdateFunctionCode_1.json
│ │ │ ├── lambda.UpdateFunctionCode_2.json
│ │ │ ├── lambda.UpdateFunctionCode_3.json
│ │ │ ├── lambda.UpdateFunctionCode_4.json
│ │ │ ├── lambda.UpdateFunctionCode_5.json
│ │ │ ├── lambda.UpdateFunctionCode_6.json
│ │ │ ├── lambda.UpdateFunctionConfiguration_1.json
│ │ │ ├── logs.DeleteLogGroup_1.json
│ │ │ ├── logs.DeleteLogGroup_2.json
│ │ │ ├── logs.DeleteLogGroup_3.json
│ │ │ ├── logs.DescribeLogStreams_1.json
│ │ │ ├── logs.DescribeLogStreams_2.json
│ │ │ ├── logs.DescribeLogStreams_3.json
│ │ │ ├── logs.DescribeLogStreams_4.json
│ │ │ ├── logs.FilterLogEvents_1.json
│ │ │ ├── logs.FilterLogEvents_2.json
│ │ │ ├── logs.FilterLogEvents_3.json
│ │ │ ├── logs.FilterLogEvents_4.json
│ │ │ ├── s3.CompleteMultipartUpload_1.json
│ │ │ ├── s3.CompleteMultipartUpload_2.json
│ │ │ ├── s3.CompleteMultipartUpload_3.json
│ │ │ ├── s3.CompleteMultipartUpload_4.json
│ │ │ ├── s3.CompleteMultipartUpload_5.json
│ │ │ ├── s3.CompleteMultipartUpload_6.json
│ │ │ ├── s3.CreateBucket_1.json
│ │ │ ├── s3.CreateBucket_10.json
│ │ │ ├── s3.CreateBucket_2.json
│ │ │ ├── s3.CreateBucket_3.json
│ │ │ ├── s3.CreateBucket_4.json
│ │ │ ├── s3.CreateBucket_5.json
│ │ │ ├── s3.CreateBucket_6.json
│ │ │ ├── s3.CreateBucket_7.json
│ │ │ ├── s3.CreateBucket_8.json
│ │ │ ├── s3.CreateBucket_9.json
│ │ │ ├── s3.CreateMultipartUpload_1.json
│ │ │ ├── s3.CreateMultipartUpload_2.json
│ │ │ ├── s3.CreateMultipartUpload_3.json
│ │ │ ├── s3.CreateMultipartUpload_4.json
│ │ │ ├── s3.CreateMultipartUpload_5.json
│ │ │ ├── s3.CreateMultipartUpload_6.json
│ │ │ ├── s3.CreateMultipartUpload_7.json
│ │ │ ├── s3.CreateMultipartUpload_8.json
│ │ │ ├── s3.DeleteObject_1.json
│ │ │ ├── s3.DeleteObject_2.json
│ │ │ ├── s3.DeleteObject_3.json
│ │ │ ├── s3.DeleteObject_4.json
│ │ │ ├── s3.DeleteObject_5.json
│ │ │ ├── s3.DeleteObject_6.json
│ │ │ ├── s3.HeadBucket_1.json
│ │ │ ├── s3.HeadBucket_2.json
│ │ │ ├── s3.HeadBucket_3.json
│ │ │ ├── s3.HeadBucket_4.json
│ │ │ ├── s3.HeadBucket_5.json
│ │ │ ├── s3.HeadBucket_6.json
│ │ │ ├── s3.PutObject_1.json
│ │ │ ├── s3.PutObject_2.json
│ │ │ ├── s3.UploadPart_1.json
│ │ │ ├── s3.UploadPart_10.json
│ │ │ ├── s3.UploadPart_11.json
│ │ │ ├── s3.UploadPart_12.json
│ │ │ ├── s3.UploadPart_13.json
│ │ │ ├── s3.UploadPart_14.json
│ │ │ ├── s3.UploadPart_15.json
│ │ │ ├── s3.UploadPart_16.json
│ │ │ ├── s3.UploadPart_17.json
│ │ │ ├── s3.UploadPart_18.json
│ │ │ ├── s3.UploadPart_19.json
│ │ │ ├── s3.UploadPart_2.json
│ │ │ ├── s3.UploadPart_20.json
│ │ │ ├── s3.UploadPart_21.json
│ │ │ ├── s3.UploadPart_22.json
│ │ │ ├── s3.UploadPart_23.json
│ │ │ ├── s3.UploadPart_24.json
│ │ │ ├── s3.UploadPart_25.json
│ │ │ ├── s3.UploadPart_26.json
│ │ │ ├── s3.UploadPart_27.json
│ │ │ ├── s3.UploadPart_28.json
│ │ │ ├── s3.UploadPart_29.json
│ │ │ ├── s3.UploadPart_3.json
│ │ │ ├── s3.UploadPart_30.json
│ │ │ ├── s3.UploadPart_31.json
│ │ │ ├── s3.UploadPart_32.json
│ │ │ ├── s3.UploadPart_33.json
│ │ │ ├── s3.UploadPart_34.json
│ │ │ ├── s3.UploadPart_35.json
│ │ │ ├── s3.UploadPart_36.json
│ │ │ ├── s3.UploadPart_37.json
│ │ │ ├── s3.UploadPart_38.json
│ │ │ ├── s3.UploadPart_39.json
│ │ │ ├── s3.UploadPart_4.json
│ │ │ ├── s3.UploadPart_40.json
│ │ │ ├── s3.UploadPart_41.json
│ │ │ ├── s3.UploadPart_42.json
│ │ │ ├── s3.UploadPart_43.json
│ │ │ ├── s3.UploadPart_44.json
│ │ │ ├── s3.UploadPart_45.json
│ │ │ ├── s3.UploadPart_46.json
│ │ │ ├── s3.UploadPart_47.json
│ │ │ ├── s3.UploadPart_48.json
│ │ │ ├── s3.UploadPart_5.json
│ │ │ ├── s3.UploadPart_6.json
│ │ │ ├── s3.UploadPart_7.json
│ │ │ ├── s3.UploadPart_8.json
│ │ │ ├── s3.UploadPart_9.json
│ │ │ ├── sns.ListSubscriptionsByTopic_1.json
│ │ │ ├── sns.ListSubscriptionsByTopic_2.json
│ │ │ ├── sns.ListSubscriptionsByTopic_3.json
│ │ │ ├── sns.ListSubscriptionsByTopic_4.json
│ │ │ ├── sns.ListSubscriptionsByTopic_5.json
│ │ │ ├── sns.ListSubscriptionsByTopic_6.json
│ │ │ ├── sns.ListSubscriptionsByTopic_7.json
│ │ │ ├── sns.ListSubscriptionsByTopic_8.json
│ │ │ ├── sns.SetSubscriptionAttributes_1.json
│ │ │ ├── sns.Subscribe_1.json
│ │ │ ├── sns.Subscribe_2.json
│ │ │ ├── sns.Subscribe_3.json
│ │ │ ├── sns.Subscribe_4.json
│ │ │ ├── sns.Subscribe_5.json
│ │ │ ├── sns.Subscribe_6.json
│ │ │ ├── sns.Unsubscribe_1.json
│ │ │ ├── sns.Unsubscribe_2.json
│ │ │ ├── sns.Unsubscribe_3.json
│ │ │ ├── sns.Unsubscribe_4.json
│ │ │ ├── sns.Unsubscribe_5.json
│ │ │ └── sts.GetCallerIdentity_1.json
│ │ ├── TestZappa.test_cli_aws_status/
│ │ │ ├── apigateway.GetApiKeys_1.json
│ │ │ ├── apigateway.GetRestApis_1.json
│ │ │ ├── events.DescribeRule_1.json
│ │ │ ├── events.ListRuleNamesByTarget_1.json
│ │ │ ├── events.ListRules_1.json
│ │ │ ├── lambda.GetFunction_1.json
│ │ │ ├── lambda.ListVersionsByFunction_1.json
│ │ │ ├── monitoring.GetMetricStatistics_1.json
│ │ │ └── monitoring.GetMetricStatistics_2.json
│ │ ├── TestZappa.test_cli_cognito_triggers/
│ │ │ ├── cognito-idp.DescribeUserPool_1.json
│ │ │ ├── cognito-idp.UpdateUserPool_1.json
│ │ │ ├── lambda.AddPermission_1.json
│ │ │ └── sts.GetCallerIdentity_1.json
│ │ ├── TestZappa.test_cognito_trigger/
│ │ │ ├── cognito-idp.DescribeUserPool_1.json
│ │ │ ├── cognito-idp.UpdateUserPool_1.json
│ │ │ ├── lambda.AddPermission_1.json
│ │ │ └── sts.GetCallerIdentity_1.json
│ │ ├── TestZappa.test_cognito_trigger_existing/
│ │ │ ├── cognito-idp.DescribeUserPool_1.json
│ │ │ ├── cognito-idp.UpdateUserPool_1.json
│ │ │ ├── lambda.AddPermission_1.json
│ │ │ └── sts.GetCallerIdentity_1.json
│ │ ├── TestZappa.test_cognito_trigger_existing_UnusedAccountValidityDays/
│ │ │ ├── cognito-idp.DescribeUserPool_1.json
│ │ │ ├── cognito-idp.UpdateUserPool_1.json
│ │ │ ├── lambda.AddPermission_1.json
│ │ │ └── sts.GetCallerIdentity_1.json
│ │ ├── TestZappa.test_copy_on_s3/
│ │ │ ├── s3.AbortMultipartUpload_1.json
│ │ │ ├── s3.CompleteMultipartUpload_1.json
│ │ │ ├── s3.CopyObject_1.json
│ │ │ ├── s3.CreateBucket_1.json
│ │ │ ├── s3.CreateMultipartUpload_1.json
│ │ │ ├── s3.HeadBucket_1.json
│ │ │ ├── s3.HeadObject_1.json
│ │ │ ├── s3.PutObject_1.json
│ │ │ └── s3.UploadPart_1.json
│ │ ├── TestZappa.test_create_iam_roles/
│ │ │ ├── iam.CreateRole_1.json
│ │ │ ├── iam.GetRolePolicy_1.json
│ │ │ ├── iam.GetRolePolicy_2.json
│ │ │ ├── iam.GetRole_1.json
│ │ │ ├── iam.GetRole_2.json
│ │ │ └── iam.PutRolePolicy_1.json
│ │ ├── TestZappa.test_create_lambda_function_local/
│ │ │ ├── lambda.CreateAlias_1.json
│ │ │ ├── lambda.CreateFunction_1.json
│ │ │ ├── lambda.DeleteFunctionConcurrency_1.json
│ │ │ ├── lambda.GetAlias_1.json
│ │ │ ├── lambda.UpdateAlias_1.json
│ │ │ └── lambda.UpdateFunctionCode_1.json
│ │ ├── TestZappa.test_create_lambda_function_s3/
│ │ │ ├── lambda.CreateAlias_1.json
│ │ │ ├── lambda.CreateFunction_1.json
│ │ │ ├── lambda.DeleteFunctionConcurrency_1.json
│ │ │ ├── lambda.GetAlias_1.json
│ │ │ ├── lambda.UpdateAlias_1.json
│ │ │ └── lambda.UpdateFunctionCode_1.json
│ │ ├── TestZappa.test_deploy_api_gateway/
│ │ │ ├── apigateway.CreateDeployment_1.json
│ │ │ ├── apigateway.CreateRestApi_1.json
│ │ │ ├── apigateway.GetResources_1.json
│ │ │ ├── apigateway.GetRestApi_1.json
│ │ │ ├── apigateway.GetRestApis_1.json
│ │ │ ├── apigateway.PutIntegrationResponse_1.json
│ │ │ ├── apigateway.PutIntegration_1.json
│ │ │ ├── apigateway.PutMethodResponse_1.json
│ │ │ ├── apigateway.PutMethod_1.json
│ │ │ └── apigateway.UpdateStage_1.json
│ │ ├── TestZappa.test_fetch_logs/
│ │ │ ├── logs.DescribeLogStreams_1.json
│ │ │ └── logs.FilterLogEvents_1.json
│ │ ├── TestZappa.test_get_api_url/
│ │ │ └── apigateway.GetRestApis_1.json
│ │ ├── TestZappa.test_handler/
│ │ │ └── s3.GetObject_1.json
│ │ ├── TestZappa.test_invoke_lambda_function/
│ │ │ └── lambda.Invoke_1.json
│ │ ├── TestZappa.test_rollback_lambda_function_version/
│ │ │ ├── lambda.GetFunction_1.json
│ │ │ ├── lambda.ListVersionsByFunction_1.json
│ │ │ ├── lambda.ListVersionsByFunction_2.json
│ │ │ └── lambda.UpdateFunctionCode_1.json
│ │ └── TestZappa.test_upload_remove_s3/
│ │ ├── s3.CompleteMultipartUpload_1.json
│ │ ├── s3.CreateBucket_1.json
│ │ ├── s3.CreateMultipartUpload_1.json
│ │ ├── s3.DeleteObject_1.json
│ │ ├── s3.HeadBucket_1.json
│ │ ├── s3.HeadObject_1.json
│ │ ├── s3.PutObject_1.json
│ │ └── s3.UploadPart_1.json
│ ├── test_app.py
│ ├── test_bad_circular_extends_settings.json
│ ├── test_bad_environment_vars.json
│ ├── test_bad_settings.json
│ ├── test_bad_stage_name_settings.json
│ ├── test_bot_exception_handler_settings.py
│ ├── test_bot_handler_being_triggered.py
│ ├── test_event_script_app.py
│ ├── test_event_script_settings.py
│ ├── test_exception_handler_settings.py
│ ├── test_handler.py
│ ├── test_non_ascii_environment_var_key.json
│ ├── test_one_env.json
│ ├── test_settings.toml
│ ├── test_settings.yaml
│ ├── test_settings.yml
│ ├── test_wsgi_script_name_app.py
│ ├── test_wsgi_script_name_settings.py
│ ├── tests.py
│ ├── tests_async.py
│ ├── tests_async_old.py
│ ├── tests_docs.py
│ ├── tests_middleware.py
│ ├── tests_placebo.py
│ └── utils.py
└── zappa/
├── __init__.py
├── async.py
├── asynchronous.py
├── cli.py
├── core.py
├── ext/
│ ├── __init__.py
│ └── django_zappa.py
├── handler.py
├── letsencrypt.py
├── middleware.py
├── policies.py
├── utilities.py
└── wsgi.py
SYMBOL INDEX (407 symbols across 26 files)
FILE: example/app.py
function lambda_handler (line 10) | def lambda_handler(event=None, context=None):
FILE: example/authmodule.py
function lambda_handler (line 13) | def lambda_handler(event, context):
class HttpVerb (line 61) | class HttpVerb:
class AuthPolicy (line 71) | class AuthPolicy:
method __init__ (line 96) | def __init__(self, principal, awsAccountId):
method _addMethod (line 102) | def _addMethod(self, effect, verb, resource, conditions):
method _getEmptyStatement (line 134) | def _getEmptyStatement(self, effect):
method _getStatementForEffect (line 145) | def _getStatementForEffect(self, effect, methods):
method allowAllMethods (line 166) | def allowAllMethods(self):
method denyAllMethods (line 170) | def denyAllMethods(self):
method allowMethod (line 174) | def allowMethod(self, verb, resource):
method denyMethod (line 179) | def denyMethod(self, verb, resource):
method allowMethodWithConditions (line 184) | def allowMethodWithConditions(self, verb, resource, conditions):
method denyMethodWithConditions (line 190) | def denyMethodWithConditions(self, verb, resource, conditions):
method build (line 196) | def build(self):
FILE: example/mymodule.py
function myfunc (line 1) | def myfunc():
function myfunc_with_events (line 5) | def myfunc_with_events(event, context):
FILE: test_settings.py
function prebuild_me (line 31) | def prebuild_me():
function callback (line 35) | def callback(self):
function aws_s3_event (line 39) | def aws_s3_event(event, content):
function aws_sns_event (line 43) | def aws_sns_event(event, content):
function aws_async_sns_event (line 46) | def aws_async_sns_event(arg1, arg2, arg3):
function aws_dynamodb_event (line 50) | def aws_dynamodb_event(event, content):
function aws_kinesis_event (line 54) | def aws_kinesis_event(event, content):
function aws_sqs_event (line 58) | def aws_sqs_event(event, content):
function authorizer_event (line 62) | def authorizer_event(event, content):
function command (line 66) | def command():
FILE: tests/data/test1.py
function greet (line 5) | def greet():
FILE: tests/data/test2/test.py
function get_some_wisdom (line 4) | def get_some_wisdom():
FILE: tests/test_app.py
function hello_world (line 13) | def hello_world(environ, start_response):
function schedule_me (line 26) | def schedule_me():
function async_me (line 30) | def async_me(arg1, **kwargs):
function remote_async_me (line 35) | def remote_async_me(arg1, **kwargs):
function callback (line 39) | def callback(self):
function prebuild_me (line 43) | def prebuild_me():
FILE: tests/test_event_script_app.py
function handler_for_events (line 4) | def handler_for_events(event, context):
FILE: tests/test_handler.py
function no_args (line 8) | def no_args():
function one_arg (line 12) | def one_arg(first):
function two_args (line 16) | def two_args(first, second):
function var_args (line 20) | def var_args(*args):
function var_args_with_one (line 24) | def var_args_with_one(first, *args):
function unsupported (line 28) | def unsupported(first, second, third):
function raises_exception (line 32) | def raises_exception(*args, **kwargs):
function handle_bot_intent (line 36) | def handle_bot_intent(event, context):
class TestZappa (line 43) | class TestZappa(unittest.TestCase):
method setUp (line 45) | def setUp(self):
method tearDown (line 48) | def tearDown(self):
method test_run_function (line 53) | def test_run_function(self):
method test_run_fuction_with_type_hint (line 66) | def test_run_fuction_with_type_hint(self):
method test_wsgi_script_name_on_aws_url (line 72) | def test_wsgi_script_name_on_aws_url(self):
method test_wsgi_script_name_on_domain_url (line 102) | def test_wsgi_script_name_on_domain_url(self):
method test_wsgi_script_name_with_multi_value_header (line 132) | def test_wsgi_script_name_with_multi_value_header(self):
method test_wsgi_script_name_with_multi_value_querystring (line 158) | def test_wsgi_script_name_with_multi_value_querystring(self):
method test_wsgi_script_name_on_test_request (line 189) | def test_wsgi_script_name_on_test_request(self):
method test_exception_handler_on_web_request (line 217) | def test_exception_handler_on_web_request(self):
method test_wsgi_script_on_cognito_event_request (line 245) | def test_wsgi_script_on_cognito_event_request(self):
method test_bot_triggered_event (line 268) | def test_bot_triggered_event(self):
method test_exception_in_bot_triggered_event (line 303) | def test_exception_in_bot_triggered_event(self):
method test_wsgi_script_name_on_alb_event (line 337) | def test_wsgi_script_name_on_alb_event(self):
method test_merge_headers_no_multi_value (line 379) | def test_merge_headers_no_multi_value(self):
method test_merge_headers_combine_values (line 389) | def test_merge_headers_combine_values(self):
method test_merge_headers_no_single_value (line 406) | def test_merge_headers_no_single_value(self):
method test_cloudwatch_subscription_event (line 417) | def test_cloudwatch_subscription_event(self):
FILE: tests/test_wsgi_script_name_app.py
function return_request_url (line 7) | def return_request_url():
FILE: tests/tests.py
function random_string (line 39) | def random_string(length):
class TestZappa (line 43) | class TestZappa(unittest.TestCase):
method setUp (line 44) | def setUp(self):
method tearDown (line 53) | def tearDown(self):
method test_test (line 65) | def test_test(self):
method test_zappa (line 71) | def test_zappa(self):
method test_disable_click_colors (line 75) | def test_disable_click_colors(self):
method test_copy_editable_packages (line 81) | def test_copy_editable_packages(self, mock_remove, mock_find_packages):
method test_create_lambda_package (line 126) | def test_create_lambda_package(self):
method test_get_manylinux_python36 (line 136) | def test_get_manylinux_python36(self):
method test_get_manylinux_python37 (line 149) | def test_get_manylinux_python37(self):
method test_get_manylinux_python38 (line 162) | def test_get_manylinux_python38(self):
method test_getting_installed_packages (line 183) | def test_getting_installed_packages(self, *args):
method test_getting_installed_packages_mixed_case_location (line 196) | def test_getting_installed_packages_mixed_case_location(self, *args):
method test_getting_installed_packages_mixed_case (line 215) | def test_getting_installed_packages_mixed_case(self, *args):
method test_load_credentials (line 229) | def test_load_credentials(self):
method test_create_api_gateway_routes_with_different_auth_methods (line 256) | def test_create_api_gateway_routes_with_different_auth_methods(self):
method test_policy_json (line 352) | def test_policy_json(self):
method test_schedule_events (line 357) | def test_schedule_events(self):
method test_update_aws_env_vars (line 363) | def test_update_aws_env_vars(self):
method test_update_layers (line 384) | def test_update_layers(self):
method test_update_empty_aws_env_hash (line 398) | def test_update_empty_aws_env_hash(self):
method test_logging (line 414) | def test_logging(self):
method test_wsgi_event (line 462) | def test_wsgi_event(self):
method test_wsgi_path_info_unquoted (line 547) | def test_wsgi_path_info_unquoted(self):
method test_wsgi_latin1 (line 560) | def test_wsgi_latin1(self):
method test_wsgi_logging (line 576) | def test_wsgi_logging(self):
method test_wsgi_multipart (line 596) | def test_wsgi_multipart(self):
method test_wsgi_without_body (line 637) | def test_wsgi_without_body(self):
method test_wsgi_from_apigateway_testbutton (line 677) | def test_wsgi_from_apigateway_testbutton(self):
method test_cli_sanity (line 729) | def test_cli_sanity(self):
method test_load_settings (line 733) | def test_load_settings(self):
method test_load_extended_settings (line 739) | def test_load_extended_settings(self):
method test_load_settings__lambda_concurrency_enabled (line 764) | def test_load_settings__lambda_concurrency_enabled(self):
method test_load_settings_yml (line 770) | def test_load_settings_yml(self):
method test_load_settings_yaml (line 782) | def test_load_settings_yaml(self):
method test_load_settings_toml (line 794) | def test_load_settings_toml(self):
method test_settings_extension (line 800) | def test_settings_extension(self):
method test_cli_utility (line 852) | def test_cli_utility(self):
method test_cli_format_invoke_command (line 903) | def test_cli_format_invoke_command(self):
method test_cli_colorize_invoke_command (line 911) | def test_cli_colorize_invoke_command(self):
method test_cli_colorize_whole_words_only (line 919) | def test_cli_colorize_whole_words_only(self):
method test_cli_colorize_invoke_command_bad_string (line 927) | def test_cli_colorize_invoke_command_bad_string(self):
method test_bad_json_catch (line 1080) | def test_bad_json_catch(self):
method test_bad_stage_name_catch (line 1084) | def test_bad_stage_name_catch(self):
method test_bad_environment_vars_catch (line 1088) | def test_bad_environment_vars_catch(self):
method test_domain_name_match (line 1158) | def test_domain_name_match(self):
method test_lets_encrypt_sanity (line 1242) | def test_lets_encrypt_sanity(self):
method test_certify_sanity_checks (line 1304) | def test_certify_sanity_checks(self):
method test_get_domain_respects_route53_setting (line 1443) | def test_get_domain_respects_route53_setting(self, client, template):
method test_get_all_zones_normal_case (line 1486) | def test_get_all_zones_normal_case(self, client):
method test_get_all_zones_two_pages (line 1510) | def test_get_all_zones_two_pages(self, client):
method test_detect_dj (line 1553) | def test_detect_dj(self):
method test_dj_wsgi (line 1557) | def test_dj_wsgi(self):
method test_human_units (line 1638) | def test_human_units(self):
method test_string_to_timestamp (line 1642) | def test_string_to_timestamp(self):
method test_event_name (line 1662) | def test_event_name(self):
method test_hashed_rule_name (line 1673) | def test_hashed_rule_name(self):
method test_detect_dj (line 1687) | def test_detect_dj(self):
method test_detect_flask (line 1691) | def test_detect_flask(self):
method test_shameless (line 1695) | def test_shameless(self):
method test_s3_url_parser (line 1699) | def test_s3_url_parser(self):
method test_remote_env_package (line 1725) | def test_remote_env_package(self):
method test_package_only (line 1749) | def test_package_only(self):
method test_package_output (line 1766) | def test_package_output(self):
method test_package_does_not_load_credentials (line 1781) | def test_package_does_not_load_credentials(self):
method test_flask_logging_bug (line 1800) | def test_flask_logging_bug(self):
method test_slim_handler (line 1826) | def test_slim_handler(self):
method test_validate_name (line 1837) | def test_validate_name(self):
method test_contains_python_files_or_subdirs (line 1850) | def test_contains_python_files_or_subdirs(self):
method test_conflicts_with_a_neighbouring_module (line 1855) | def test_conflicts_with_a_neighbouring_module(self):
method test_settings_py_generation (line 1859) | def test_settings_py_generation(self):
method test_only_ascii_env_var_allowed (line 1880) | def test_only_ascii_env_var_allowed(self):
method test_titlecase_keys (line 1889) | def test_titlecase_keys(self):
method test_is_valid_bucket_name (line 1913) | def test_is_valid_bucket_name(self):
method test_zappa_core_deploy_lambda_alb_missing_cert_arn (line 1940) | def test_zappa_core_deploy_lambda_alb_missing_cert_arn(self):
method test_zappa_core_deploy_lambda_alb (line 1962) | def test_zappa_core_deploy_lambda_alb(self):
method test_zappa_core_undeploy_lambda_alb (line 2098) | def test_zappa_core_undeploy_lambda_alb(self):
method test_set_lambda_concurrency (line 2195) | def test_set_lambda_concurrency(self, client):
method test_update_lambda_concurrency (line 2216) | def test_update_lambda_concurrency(self, client):
method test_delete_lambda_concurrency (line 2240) | def test_delete_lambda_concurrency(self, client):
FILE: tests/tests_async.py
class TestZappa (line 16) | class TestZappa(unittest.TestCase):
method setUp (line 17) | def setUp(self):
method tearDown (line 26) | def tearDown(self):
method test_test (line 38) | def test_test(self):
method test_nofails_classes (line 42) | def test_nofails_classes(self):
method test_nofails_funcs (line 51) | def test_nofails_funcs(self):
method test_sync_call (line 59) | def test_sync_call(self):
method test_async_call_with_defaults (line 63) | def test_async_call_with_defaults(self):
FILE: tests/tests_async_old.py
class TestZappa (line 26) | class TestZappa(unittest.TestCase):
method setUp (line 27) | def setUp(self):
method tearDown (line 36) | def tearDown(self):
method test_test (line 48) | def test_test(self):
method test_nofails_classes (line 52) | def test_nofails_classes(self):
method test_nofails_funcs (line 61) | def test_nofails_funcs(self):
method test_sync_call (line 69) | def test_sync_call(self):
method test_async_call_with_defaults (line 73) | def test_async_call_with_defaults(self):
FILE: tests/tests_docs.py
class TestDocs (line 9) | class TestDocs(unittest.TestCase):
method test_readmetoc (line 11) | def test_readmetoc(self):
FILE: tests/tests_middleware.py
class TestWSGIMockMiddleWare (line 9) | class TestWSGIMockMiddleWare(unittest.TestCase):
method setUp (line 14) | def setUp(self):
method _start_response (line 21) | def _start_response(self, status, headers, exc_info=None):
method test_all_casings (line 25) | def test_all_casings(self):
method test_wsgi_middleware_uglystring (line 41) | def test_wsgi_middleware_uglystring(self):
method test_wsgi_authorizer_handling (line 74) | def test_wsgi_authorizer_handling(self):
method test_wsgi_map_context_headers_handling (line 172) | def test_wsgi_map_context_headers_handling(self):
method test_should_allow_empty_query_params (line 244) | def test_should_allow_empty_query_params(self):
method test_should_handle_multi_value_query_string_params (line 279) | def test_should_handle_multi_value_query_string_params(self):
FILE: tests/tests_placebo.py
function random_string (line 16) | def random_string(length):
class TestZappa (line 20) | class TestZappa(unittest.TestCase):
method setUp (line 21) | def setUp(self):
method tearDown (line 30) | def tearDown(self):
method test_upload_remove_s3 (line 39) | def test_upload_remove_s3(self, session):
method test_copy_on_s3 (line 68) | def test_copy_on_s3(self, session):
method test_create_lambda_function_s3 (line 90) | def test_create_lambda_function_s3(self, session):
method test_create_lambda_function_local (line 113) | def test_create_lambda_function_local(self, session):
method test_rollback_lambda_function_version (line 136) | def test_rollback_lambda_function_version(self, session):
method test_invoke_lambda_function (line 147) | def test_invoke_lambda_function(self, session):
method test_create_iam_roles (line 156) | def test_create_iam_roles(self, session):
method test_get_api_url (line 162) | def test_get_api_url(self, session):
method test_fetch_logs (line 168) | def test_fetch_logs(self, session):
method test_handler (line 179) | def test_handler(self, session):
method test_cli_aws (line 434) | def test_cli_aws(self, session):
method test_cli_aws_status (line 450) | def test_cli_aws_status(self, session):
method test_add_event_source (line 472) | def test_add_event_source(self, session):
method test_cognito_trigger (line 492) | def test_cognito_trigger(self, session):
method test_cognito_trigger_existing (line 497) | def test_cognito_trigger_existing(self, session):
method test_cli_cognito_triggers (line 502) | def test_cli_cognito_triggers(self, session):
method test_cognito_trigger_existing_UnusedAccountValidityDays (line 511) | def test_cognito_trigger_existing_UnusedAccountValidityDays(self, sess...
FILE: tests/utils.py
function placebo_session (line 16) | def placebo_session(function):
function patch_open (line 62) | def patch_open():
FILE: zappa/asynchronous.py
class AsyncException (line 125) | class AsyncException(Exception): # pragma: no cover
class LambdaAsyncResponse (line 130) | class LambdaAsyncResponse:
method __init__ (line 135) | def __init__(self, lambda_function_name=None, aws_region=None, capture...
method send (line 162) | def send(self, task_path, args, kwargs):
method _send (line 176) | def _send(self, message):
class SnsAsyncResponse (line 191) | class SnsAsyncResponse(LambdaAsyncResponse):
method __init__ (line 196) | def __init__(self, lambda_function_name=None, aws_region=None, capture...
method _send (line 242) | def _send(self, message):
function route_lambda_task (line 266) | def route_lambda_task(event, context):
function route_sns_task (line 275) | def route_sns_task(event, context):
function run_message (line 287) | def run_message(message):
function run (line 334) | def run(func, args=[], kwargs={}, service='lambda', capture_response=False,
function task (line 364) | def task(*args, **kwargs):
function task_sns (line 442) | def task_sns(func):
function import_and_get_task (line 453) | def import_and_get_task(task_path):
function get_func_task_path (line 464) | def get_func_task_path(func):
function get_async_response (line 476) | def get_async_response(response_id):
FILE: zappa/cli.py
class ZappaCLI (line 72) | class ZappaCLI:
method __init__ (line 123) | def __init__(self):
method stage_config (line 127) | def stage_config(self):
method stage_config_overrides (line 164) | def stage_config_overrides(self):
method override_stage_config_setting (line 171) | def override_stage_config_setting(self, key, val):
method handle (line 180) | def handle(self, argv=None):
method dispatch_command (line 518) | def dispatch_command(self, command, stage):
method package (line 629) | def package(self, output=None):
method template (line 647) | def template(self, lambda_arn, role_arn, output=None, json=False):
method deploy (line 685) | def deploy(self, source_zip=None):
method update (line 863) | def update(self, source_zip=None, no_upload=False):
method rollback (line 1066) | def rollback(self, revision):
method tail (line 1077) | def tail(self, since, filter_pattern, limit=10000, keep_open=True, col...
method undeploy (line 1111) | def undeploy(self, no_confirm=False, remove_logs=False):
method update_cognito_triggers (line 1150) | def update_cognito_triggers(self):
method schedule (line 1162) | def schedule(self):
method unschedule (line 1234) | def unschedule(self):
method invoke (line 1269) | def invoke(self, function_name, raw_python=False, command=None, no_col...
method format_invoke_command (line 1311) | def format_invoke_command(self, string):
method colorize_invoke_command (line 1330) | def colorize_invoke_command(self, string):
method status (line 1398) | def status(self, return_json=False):
method check_stage_name (line 1530) | def check_stage_name(self, stage_name):
method check_environment (line 1543) | def check_environment(self, environment):
method init (line 1559) | def init(self, settings_file="zappa_settings.json"):
method certify (line 1808) | def certify(self, no_confirm=True, manual=False):
method shell (line 1933) | def shell(self):
method callback (line 1945) | def callback(self, position):
method check_for_update (line 1988) | def check_for_update(self):
method load_settings (line 2005) | def load_settings(self, settings_file=None, session=None):
method get_json_or_yaml_settings (line 2146) | def get_json_or_yaml_settings(self, settings_name="zappa_settings"):
method load_settings_file (line 2174) | def load_settings_file(self, settings_file=None):
method create_package (line 2204) | def create_package(self, output=None):
method remove_local_zip (line 2440) | def remove_local_zip(self):
method remove_uploaded_zip (line 2454) | def remove_uploaded_zip(self):
method on_exit (line 2466) | def on_exit(self):
method print_logs (line 2478) | def print_logs(self, logs, colorize=True, http=False, non_http=False, ...
method is_http_log_entry (line 2513) | def is_http_log_entry(self, string):
method get_project_name (line 2531) | def get_project_name(self):
method colorize_log_entry (line 2534) | def colorize_log_entry(self, string):
method execute_prebuild_script (line 2602) | def execute_prebuild_script(self):
method collision_warning (line 2640) | def collision_warning(self, item):
method deploy_api_gateway (line 2660) | def deploy_api_gateway(self, api_id):
method check_venv (line 2676) | def check_venv(self):
method silence (line 2690) | def silence(self):
method touch_endpoint (line 2698) | def touch_endpoint(self, endpoint_url):
function shamelessly_promote (line 2743) | def shamelessly_promote():
function disable_click_colors (line 2758) | def disable_click_colors():
function handle (line 2771) | def handle(): # pragma: no cover
FILE: zappa/core.py
class Zappa (line 215) | class Zappa:
method __init__ (line 243) | def __init__(self,
method configure_boto_session_method_kwargs (line 333) | def configure_boto_session_method_kwargs(self, service, kw):
method boto_client (line 339) | def boto_client(self, service, *args, **kwargs):
method boto_resource (line 343) | def boto_resource(self, service, *args, **kwargs):
method cache_param (line 347) | def cache_param(self, value):
method copy_editable_packages (line 364) | def copy_editable_packages(self, egg_links, temp_package_path):
method get_deps_list (line 378) | def get_deps_list(self, pkg_name, installed_distros=None):
method create_handler_venv (line 396) | def create_handler_venv(self):
method get_current_venv (line 446) | def get_current_venv():
method create_lambda_zip (line 468) | def create_lambda_zip( self,
method get_installed_packages (line 768) | def get_installed_packages(site_packages, site_packages_64):
method download_url_with_progress (line 790) | def download_url_with_progress(url, stream, disable_progress):
method get_cached_manylinux_wheel (line 806) | def get_cached_manylinux_wheel(self, package_name, package_version, di...
method get_manylinux_wheel_url (line 840) | def get_manylinux_wheel_url(self, package_name, package_version):
method upload_to_s3 (line 891) | def upload_to_s3(self, source_path, bucket_name, disable_progress=False):
method copy_on_s3 (line 951) | def copy_on_s3(self, src_file_name, dst_file_name, bucket_name):
method remove_from_s3 (line 978) | def remove_from_s3(self, file_name, bucket_name):
method create_lambda_function (line 1006) | def create_lambda_function( self,
method update_lambda_function (line 1097) | def update_lambda_function(self, bucket, function_name, s3_key=None, p...
method update_lambda_configuration (line 1170) | def update_lambda_configuration( self,
method invoke_lambda_function (line 1234) | def invoke_lambda_function( self,
method rollback_lambda_function_version (line 1253) | def rollback_lambda_function_version(self, function_name, versions_bac...
method get_lambda_function (line 1280) | def get_lambda_function(self, function_name):
method get_lambda_function_versions (line 1290) | def get_lambda_function_versions(self, function_name):
method delete_lambda_function (line 1303) | def delete_lambda_function(self, function_name):
method deploy_lambda_alb (line 1320) | def deploy_lambda_alb( self,
method undeploy_lambda_alb (line 1439) | def undeploy_lambda_alb(self, lambda_name):
method create_api_gateway_routes (line 1530) | def create_api_gateway_routes( self,
method create_authorizer (line 1623) | def create_authorizer(self, restapi, uri, authorizer):
method create_and_setup_methods (line 1652) | def create_and_setup_methods(
method create_and_setup_cors (line 1696) | def create_and_setup_cors(self, restapi, resource, uri, depth, config):
method deploy_api_gateway (line 1756) | def deploy_api_gateway( self,
method add_binary_support (line 1804) | def add_binary_support(self, api_id, cors=False):
method remove_binary_support (line 1845) | def remove_binary_support(self, api_id, cors=False):
method add_api_compression (line 1884) | def add_api_compression(self, api_id, min_compression_size):
method remove_api_compression (line 1899) | def remove_api_compression(self, api_id):
method get_api_keys (line 1913) | def get_api_keys(self, api_id, stage_name):
method create_api_key (line 1923) | def create_api_key(self, api_id, stage_name):
method remove_api_key (line 1940) | def remove_api_key(self, api_id, stage_name):
method add_api_stage_to_api_key (line 1953) | def add_api_stage_to_api_key(self, api_key, api_id, stage_name):
method get_patch_op (line 1968) | def get_patch_op(self, keypath, value, op='replace'):
method get_rest_apis (line 1977) | def get_rest_apis(self, project_name):
method undeploy_api_gateway (line 1990) | def undeploy_api_gateway(self, lambda_name, domain_name=None, base_pat...
method update_stage_config (line 2021) | def update_stage_config( self,
method update_cognito (line 2045) | def update_cognito(self, lambda_name, user_pool, lambda_configs, lambd...
method delete_stack (line 2088) | def delete_stack(self, name, wait=False):
method create_stack_template (line 2110) | def create_stack_template( self,
method update_stack (line 2154) | def update_stack(self, name, working_bucket, wait=False, update_only=F...
method stack_outputs (line 2251) | def stack_outputs(self, name):
method get_api_url (line 2263) | def get_api_url(self, lambda_name, stage_name):
method get_api_id (line 2273) | def get_api_id(self, lambda_name):
method create_domain_name (line 2296) | def create_domain_name(self,
method update_route53_records (line 2340) | def update_route53_records(self, domain_name, dns_name):
method update_domain_name (line 2391) | def update_domain_name(self,
method update_domain_base_path_mapping (line 2443) | def update_domain_base_path_mapping(self, domain_name, lambda_name, st...
method get_all_zones (line 2472) | def get_all_zones(self):
method get_domain_name (line 2484) | def get_domain_name(self, domain_name, route53=True):
method get_credentials_arn (line 2531) | def get_credentials_arn(self):
method create_iam_roles (line 2540) | def create_iam_roles(self):
method _clear_policy (line 2595) | def _clear_policy(self, lambda_name):
method create_event_permission (line 2624) | def create_event_permission(self, lambda_name, principal, source_arn):
method schedule_events (line 2645) | def schedule_events(self, lambda_arn, lambda_name, events, default=True):
method get_scheduled_event_name (line 2787) | def get_scheduled_event_name(event, function, lambda_name, index=0):
method get_event_name (line 2802) | def get_event_name(lambda_name, name):
method get_hashed_rule_name (line 2810) | def get_hashed_rule_name(event, function, lambda_name):
method delete_rule (line 2819) | def delete_rule(self, rule_name):
method get_event_rule_names_for_lambda (line 2850) | def get_event_rule_names_for_lambda(self, lambda_arn):
method get_event_rules_for_lambda (line 2863) | def get_event_rules_for_lambda(self, lambda_arn):
method unschedule_events (line 2870) | def unschedule_events(self, events, lambda_arn=None, lambda_name=None,...
method create_async_sns_topic (line 2913) | def create_async_sns_topic(self, lambda_name, lambda_arn):
method remove_async_sns_topic (line 2945) | def remove_async_sns_topic(self, lambda_name):
method _set_async_dynamodb_table_ttl (line 2962) | def _set_async_dynamodb_table_ttl(self, table_name):
method create_async_dynamodb_table (line 2972) | def create_async_dynamodb_table(self, table_name, read_capacity, write...
method remove_async_dynamodb_table (line 3012) | def remove_async_dynamodb_table(self, table_name):
method fetch_logs (line 3022) | def fetch_logs(self, lambda_name, filter_pattern='', limit=10000, star...
method remove_log_group (line 3063) | def remove_log_group(self, group_name):
method remove_lambda_function_logs (line 3073) | def remove_lambda_function_logs(self, lambda_function_name):
method remove_api_gateway_logs (line 3079) | def remove_api_gateway_logs(self, project_name):
method get_hosted_zone_id_for_domain (line 3091) | def get_hosted_zone_id_for_domain(self, domain):
method get_best_match_zone (line 3100) | def get_best_match_zone(all_zones, domain):
method set_dns_challenge_txt (line 3113) | def set_dns_challenge_txt(self, zone_id, domain, txt_challenge):
method remove_dns_challenge_txt (line 3125) | def remove_dns_challenge_txt(self, zone_id, domain, txt_challenge):
method get_dns_challenge_change_batch (line 3138) | def get_dns_challenge_change_batch(action, domain, txt_challenge):
method shell (line 3166) | def shell(self):
method load_credentials (line 3173) | def load_credentials(self, boto_session=None, profile_name=None):
method service_from_arn (line 3219) | def service_from_arn(arn):
FILE: zappa/ext/django_zappa.py
function get_django_wsgi (line 8) | def get_django_wsgi(settings_module):
FILE: zappa/handler.py
class LambdaHandler (line 35) | class LambdaHandler:
method __new__ (line 52) | def __new__(cls, settings_name="zappa_settings", session=None):
method __init__ (line 59) | def __init__(self, settings_name="zappa_settings", session=None):
method load_remote_project_archive (line 151) | def load_remote_project_archive(self, project_zip_path):
method load_remote_settings (line 179) | def load_remote_settings(self, remote_bucket, remote_file):
method import_module_and_get_function (line 228) | def import_module_and_get_function(whole_function):
method lambda_handler (line 239) | def lambda_handler(cls, event, context): # pragma: no cover
method _process_exception (line 253) | def _process_exception(cls, exception_handler, event, context, excepti...
method run_function (line 265) | def run_function(app_function, event, context):
method get_function_for_aws_event (line 288) | def get_function_for_aws_event(self, record):
method get_function_from_bot_intent_trigger (line 319) | def get_function_from_bot_intent_trigger(self, event):
method get_function_for_cognito_trigger (line 331) | def get_function_for_cognito_trigger(self, trigger):
method handler (line 338) | def handler(self, event, context):
function lambda_handler (line 608) | def lambda_handler(event, context): # pragma: no cover
function keep_warm_callback (line 612) | def keep_warm_callback(event, context):
FILE: zappa/letsencrypt.py
function get_cert_and_update_domain (line 44) | def get_cert_and_update_domain(
function create_domain_key (line 112) | def create_domain_key():
function create_domain_csr (line 119) | def create_domain_csr(domain):
function create_chained_certificate (line 135) | def create_chained_certificate():
function parse_account_key (line 148) | def parse_account_key():
function parse_csr (line 161) | def parse_csr():
function get_boulder_header (line 187) | def get_boulder_header(key_bytes):
function register_account (line 209) | def register_account():
function get_cert (line 226) | def get_cert(zappa_instance, log=LOGGER, CA=DEFAULT_CA):
function verify_challenge (line 293) | def verify_challenge(uri):
function sign_certificate (line 314) | def sign_certificate():
function encode_certificate (line 339) | def encode_certificate(result):
function _b64 (line 356) | def _b64(b):
function _send_signed_request (line 363) | def _send_signed_request(url, payload):
function gettempdir (line 404) | def gettempdir():
function cleanup (line 417) | def cleanup():
FILE: zappa/middleware.py
function all_casings (line 4) | def all_casings(input_string):
class ZappaWSGIMiddleware (line 24) | class ZappaWSGIMiddleware:
method __init__ (line 30) | def __init__(self, application):
method __call__ (line 33) | def __call__(self, environ, start_response):
FILE: zappa/utilities.py
function copytree (line 25) | def copytree(src, dst, metadata=True, symlinks=False, ignore=None):
function parse_s3_url (line 71) | def parse_s3_url(url):
function human_size (line 85) | def human_size(num, suffix='B'):
function string_to_timestamp (line 95) | def string_to_timestamp(timestring):
function detect_django_settings (line 121) | def detect_django_settings():
function detect_flask_apps (line 140) | def detect_flask_apps():
function get_venv_from_python_version (line 177) | def get_venv_from_python_version():
function get_runtime_from_python_version (line 180) | def get_runtime_from_python_version():
function get_topic_name (line 197) | def get_topic_name(lambda_name):
function get_event_source (line 205) | def get_event_source(event_source, lambda_arn, target_function, boto_ses...
function add_event_source (line 405) | def add_event_source(event_source, lambda_arn, target_function, boto_ses...
function remove_event_source (line 421) | def remove_event_source(event_source, lambda_arn, target_function, boto_...
function get_event_source_status (line 436) | def get_event_source_status(event_source, lambda_arn, target_function, b...
function check_new_version_available (line 448) | def check_new_version_available(this_version):
class InvalidAwsLambdaName (line 464) | class InvalidAwsLambdaName(Exception):
function validate_name (line 469) | def validate_name(name, maxlen=80):
function contains_python_files_or_subdirs (line 499) | def contains_python_files_or_subdirs(folder):
function conflicts_with_a_neighbouring_module (line 515) | def conflicts_with_a_neighbouring_module(directory_path):
function titlecase_keys (line 526) | def titlecase_keys(d):
function is_valid_bucket_name (line 534) | def is_valid_bucket_name(name):
function merge_headers (line 570) | def merge_headers(event):
FILE: zappa/wsgi.py
function create_wsgi_request (line 22) | def create_wsgi_request(event_info,
function common_log (line 163) | def common_log(environ, response, response_time=None):
function get_wsgi_string (line 192) | def get_wsgi_string(string, encoding='utf-8'):
Condensed preview — 474 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,584K chars).
[
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 954,
"preview": "<!--- Provide a general summary of the issue in the Title above -->\n## Context\n<!--- Provide a more detailed introductio"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1249,
"preview": "<!--\n\nBefore you submit this PR, please make sure that you meet these criteria:\n\n* Did you read the [contributing guide]"
},
{
"path": ".gitignore",
"chars": 1186,
"preview": "*~\n*.zip\n\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution"
},
{
"path": ".travis.yml",
"chars": 1122,
"preview": "language: python\npython:\n - \"3.6\"\n - \"3.7\"\n - \"3.8\"\ndist: xenial\n# command to install dependencies\ncache:\n - pip\nins"
},
{
"path": "CHANGELOG.md",
"chars": 15369,
"preview": "# Zappa Changelog\n\n## 0.52.0\n* Remove dateutil version restriction\n* Fix failed downloads of wheel packages with non-alp"
},
{
"path": "LICENSE",
"chars": 1077,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 Rich Jones\n\nPermission is hereby granted, free of charge, to any person obtain"
},
{
"path": "MANIFEST.in",
"chars": 131,
"preview": "include README.md LICENSE requirements.txt test_requirements.txt requirements.in test_requirements.in\nrecursive-include "
},
{
"path": "README.md",
"chars": 184,
"preview": "Project moved to https://github.com/zappa/Zappa. Versions after 0.52.0 are published from there. Thank you Rich Jones fo"
},
{
"path": "docs/domain_with_free_ssl_dns.md",
"chars": 3518,
"preview": "# Using Let's Encrypt with Zappa\n\nIf you want to deploy a Zappa application using a domain or a subdomain, you'll need a"
},
{
"path": "docs/domain_with_free_ssl_http.md",
"chars": 3642,
"preview": "# Using Let's Encrypt with Zappa (HTTP Validation)\n\n## IMPORTANT!: Zappa now supports DNS-based validation out of the bo"
},
{
"path": "example/README.md",
"chars": 2014,
"preview": "# Zappa Example\n\nThis will deploy a simple Flask app\n\n## Setup\n # configure your AWS keys\n $ aws configure\n\n## Dep"
},
{
"path": "example/app.py",
"chars": 376,
"preview": "import logging\nfrom flask import Flask\n\napp = Flask(__name__)\nlogging.basicConfig()\nlogger = logging.getLogger(__name__)"
},
{
"path": "example/authmodule.py",
"chars": 9325,
"preview": "\"\"\"\nCopyright 2015-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.\nLicensed under the Apache License, Vers"
},
{
"path": "example/mymodule.py",
"chars": 299,
"preview": "def myfunc():\n print('Running my function in a schedule!')\n\n\ndef myfunc_with_events(event, context):\n print('Event"
},
{
"path": "example/policy/deploy.json",
"chars": 4400,
"preview": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Sid\": \"RoleManager\",\n \"Effect\": \"All"
},
{
"path": "example/requirements.txt",
"chars": 26,
"preview": "Flask>=0.12\nzappa>=0.17.6\n"
},
{
"path": "requirements.in",
"chars": 304,
"preview": "argcomplete\nboto3\ndurationpy\nhjson\njmespath\nkappa==0.6.0\npip>=9.0.1\npython-dateutil\npython-slugify\nPyYAML\nfuture\n# previ"
},
{
"path": "requirements.sh",
"chars": 253,
"preview": "#! /bin/bash\n\nset -e\n\nARGS=\"\"\nif [ \"$1\" == \"--upgrade\" ]; then\n ARGS=\"-U\"\nfi\n\npip-compile ${ARGS} -o test_requirement"
},
{
"path": "requirements.txt",
"chars": 1949,
"preview": "#\n# This file is autogenerated by pip-compile\n# To update, run:\n#\n# pip-compile --output-file=requirements.txt requir"
},
{
"path": "setup.py",
"chars": 1673,
"preview": "import os\nimport sys\nfrom setuptools import setup\nfrom io import open\nfrom zappa import __version__\n\nwith open('README.m"
},
{
"path": "test.sh",
"chars": 147,
"preview": "#! /bin/bash\nnosetests --with-coverage --cover-package=zappa\n\n# For a specific test:\n# nosetests tests.tests:TestZappa.t"
},
{
"path": "test_requirements.in",
"chars": 60,
"preview": "coveralls\nDjango\nflake8\nFlask\nmock\nnose\nnose-timer\nplacebo\n\n"
},
{
"path": "test_requirements.txt",
"chars": 2934,
"preview": "#\n# This file is autogenerated by pip-compile\n# To update, run:\n#\n# pip-compile --output-file=test_requirements.txt r"
},
{
"path": "test_settings.json",
"chars": 3609,
"preview": "{\n \"ttt888\": {\n \"touch\": false,\n \"s3_bucket\": \"lmbda\",\n \"app_function\": \"tests.test_app.hello_world"
},
{
"path": "test_settings.py",
"chars": 1326,
"preview": "APP_MODULE = 'tests.test_app'\nAPP_FUNCTION = 'hello_world'\nDJANGO_SETTINGS = None\nDEBUG = 'True'\nLOG_LEVEL = 'DEBUG'\nSCR"
},
{
"path": "tests/README.md",
"chars": 515,
"preview": "# Zappa Test Notes\n\nLook here!: https://github.com/garnaat/placebo#usage-as-a-decorator\n\nAlso useful - OSX sed replace e"
},
{
"path": "tests/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "tests/data/test1/this_dir_is_not_a_module.txt",
"chars": 257,
"preview": "# test1 is a directory without any .py files in it, so a __init__.py file should NOT be created in it\n\nInformation is no"
},
{
"path": "tests/data/test1.py",
"chars": 135,
"preview": "\n# this is a module\n\n\ndef greet():\n print('There is more stupidity than hydrogen in the universe, and it has a longer"
},
{
"path": "tests/data/test2/test.py",
"chars": 148,
"preview": "\n# this is a module, so test2 should get an __init__.py\n\ndef get_some_wisdom():\n return 'Art is making something out "
},
{
"path": "tests/name_scenarios.json",
"chars": 1061,
"preview": "[\n {\n \"id\": \"integer\",\n \"value\": 12,\n \"is_valid\": false\n },\n {\n \"id\": \"float\",\n \"value\": 3.1415,\n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateApiKey_1.json",
"chars": 1116,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"name\": \"test\", \n \"ResponseMetadata\": {\n \"HTTPStatusC"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateDeployment_1.json",
"chars": 471,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"id\": \"cahz60\", \n \"ResponseMetadata\": {\n \"HTTPStatusC"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateDeployment_2.json",
"chars": 472,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"id\": \"szdwm0\", \n \"ResponseMetadata\": {\n \"HTTPStatusC"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateDeployment_3.json",
"chars": 745,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"id\": \"43p5hj\", \n \"ResponseMetadata\": {\n \"HTTPStatusC"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_1.json",
"chars": 322,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"path\": \"/{parameter_1}\", \n \"pathPart\": \"{parameter_1}\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_2.json",
"chars": 332,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"path\": \"/{parameter_1}/{parameter_2}\", \n \"pathPart\": \"{paramete"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_3.json",
"chars": 346,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"path\": \"/{parameter_1}/{parameter_2}/{parameter_3}\", \n \"pathPar"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_4.json",
"chars": 360,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"path\": \"/{parameter_1}/{parameter_2}/{parameter_3}/{parameter_4}\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_5.json",
"chars": 374,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"path\": \"/{parameter_1}/{parameter_2}/{parameter_3}/{parameter_4}/{para"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_6.json",
"chars": 388,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"path\": \"/{parameter_1}/{parameter_2}/{parameter_3}/{parameter_4}/{para"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_7.json",
"chars": 402,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"path\": \"/{parameter_1}/{parameter_2}/{parameter_3}/{parameter_4}/{para"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_8.json",
"chars": 322,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"path\": \"/{parameter_1}\", \n \"pathPart\": \"{parameter_1}\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.CreateResource_9.json",
"chars": 594,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"path\": \"/{parameter_1}\", \n \"pathPart\": \"{parameter_1}\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.DeleteApiKey_1.json",
"chars": 163,
"preview": "{\n \"status_code\": 204,\n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 204,\n \"RequestId\": \"db1a1c1c0"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.DeleteRestApi_1.json",
"chars": 189,
"preview": "{\n \"status_code\": 202, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 202, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.DeleteRestApi_2.json",
"chars": 460,
"preview": "{\n \"status_code\": 202, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 202, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetApiKeys_1.json",
"chars": 131,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"items\": [\n {\n \"id\": \"randomid\",\n \"name\": \"iw5z0jpx0d\"\n }\n"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetResources_1.json",
"chars": 313,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"items\": [\n {\n \"path\": \"/\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetResources_2.json",
"chars": 313,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"items\": [\n {\n \"path\": \"/\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetResources_3.json",
"chars": 585,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"items\": [\n {\n \"path\": \"/\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApi_1.json",
"chars": 981,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"description\": \"Created automatically by Zappa.\", \n \"ResponseMet"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApi_2.json",
"chars": 921,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"id\": \"9q10y8x8j9\", \n \"name\": \"image-fly-test5\", \n \"descr"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_1.json",
"chars": 12936,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"position\": \"aWQ9U2xraXVnNjhlazk%3D\", \n \"ResponseMetadata\": {\n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_2.json",
"chars": 12936,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"position\": \"aWQ9U2xraXVnNjhlazk%3D\", \n \"ResponseMetadata\": {\n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_3.json",
"chars": 12929,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"position\": \"aWQ9U2xwaGZheGo4NGc%3D\", \n \"ResponseMetadata\": {\n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_4.json",
"chars": 30051,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"items\": [\n {\n \"description\": \"serverless-ima"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_5.json",
"chars": 13147,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"position\": \"aWQ9U2xwaGZheGo4NGc%3D\", \n \"ResponseMetadata\": {\n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_6.json",
"chars": 29276,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"items\": [\n {\n \"description\": \"poops2js-dev Z"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_7.json",
"chars": 29276,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"items\": [\n {\n \"description\": \"poops2js-dev Z"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_8.json",
"chars": 29276,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"items\": [\n {\n \"description\": \"poops2js-dev Z"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetRestApis_9.json",
"chars": 29276,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"items\": [\n {\n \"description\": \"poops2js-dev Z"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.GetStages_1.json",
"chars": 2154,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"item\": [\n {\n \"stageName\": \"ttt888\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.UpdateRestApi_1.json",
"chars": 921,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"id\": \"9q10y8x8j9\", \n \"name\": \"image-fly-test5\", \n \"descr"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.UpdateStage_1.json",
"chars": 778,
"preview": "{\n \"status_code\": 201,\n \"data\": {\n \"deploymentId\" : \"aioOASIHD1h\",\n \"stageName\" : \"ttt888\",\n \"description\" : "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.UpdateStage_2.json",
"chars": 1778,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"stageName\": \"ttt888\", \n \"ResponseMetadata\": {\n \"HTTP"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/apigateway.UpdateStage_3.json",
"chars": 1778,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"stageName\": \"ttt888\", \n \"ResponseMetadata\": {\n \"HTTP"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.CreateStack_1.json",
"chars": 611,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"StackId\": \"arn:aws:cloudformation:us-east-1:123456789123:stack/zappa-t"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DeleteStack_1.json",
"chars": 486,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStackResource_1.json",
"chars": 1241,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"StackResourceDetail\": {\n \"StackId\": \"arn:aws:cloudformation"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStackResource_2.json",
"chars": 1241,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"StackResourceDetail\": {\n \"StackId\": \"arn:aws:cloudformation"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStackResource_3.json",
"chars": 1241,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"StackResourceDetail\": {\n \"StackId\": \"arn:aws:cloudformation"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_1.json",
"chars": 695,
"preview": "{\n \"status_code\": 400, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_10.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_11.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_12.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_13.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_14.json",
"chars": 4767,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_15.json",
"chars": 4767,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_16.json",
"chars": 596,
"preview": "{\n \"status_code\": 400, \n \"data\": {\n \"Error\": {\"Code\": \"ValidationError\",\n \"Message\": \"Stack "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_2.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_3.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_4.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_5.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_6.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_7.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_8.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.DescribeStacks_9.json",
"chars": 4770,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Stacks\": [\n {\n \"StackId\": \"arn:aws:cloudform"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_1.json",
"chars": 525,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_10.json",
"chars": 10587,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_11.json",
"chars": 10512,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_12.json",
"chars": 10289,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_2.json",
"chars": 1124,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_3.json",
"chars": 4713,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_4.json",
"chars": 5041,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_5.json",
"chars": 10287,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_6.json",
"chars": 10287,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_7.json",
"chars": 10896,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_8.json",
"chars": 11036,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.ListStackResources_9.json",
"chars": 10736,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cloudformation.UpdateStack_1.json",
"chars": 685,
"preview": "{\n \"status_code\": 400, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cognito-idp.DescribeUserPool_1.json",
"chars": 10242,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"UserPool\": {\n \"Id\": \"us-east-1_9jUv74DH8\",\n \"Name"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/cognito-idp.UpdateUserPool_1.json",
"chars": 539,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"ResponseMetadata\": {\n \"RequestId\": \"adc3afdf-d365-11e7-b51f-"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.DeleteRule_1.json",
"chars": 189,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 200, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.DeleteRule_2.json",
"chars": 189,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 200, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.DeleteRule_3.json",
"chars": 189,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 200, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.DeleteRule_4.json",
"chars": 470,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 200, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.DeleteRule_5.json",
"chars": 470,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 200, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.DeleteRule_6.json",
"chars": 470,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 200, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.DeleteRule_7.json",
"chars": 470,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 200, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.DeleteRule_8.json",
"chars": 470,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 200, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.DeleteRule_9.json",
"chars": 470,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 200, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListRuleNamesByTarget_1.json",
"chars": 263,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"RuleNames\": [\n \"zappa-keep-warm-zappa-ttt666\"\n ],\n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListRuleNamesByTarget_2.json",
"chars": 263,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"RuleNames\": [\n \"zappa-keep-warm-zappa-ttt888\"\n ],\n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListRuleNamesByTarget_3.json",
"chars": 263,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"RuleNames\": [\n \"zappa-keep-warm-zappa-ttt888\"\n ],\n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListRuleNamesByTarget_4.json",
"chars": 211,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"RuleNames\": [],\n \"ResponseMetadata\": {\n \"HTTPStatusCo"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListRuleNamesByTarget_5.json",
"chars": 345,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"RuleNames\": [\n \"zappa-ttt888-tests.test_app.schedule_me\",\n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListRuleNamesByTarget_6.json",
"chars": 345,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"RuleNames\": [\n \"zappa-ttt888-tests.test_app.schedule_me\",\n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListRuleNamesByTarget_7.json",
"chars": 345,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"RuleNames\": [\n \"zappa-ttt888-tests.test_app.schedule_me\",\n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListRuleNamesByTarget_8.json",
"chars": 211,
"preview": "{\n \"status_code\": 200,\n \"data\": {\n \"RuleNames\": [],\n \"ResponseMetadata\": {\n \"HTTPStatusCo"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_1.json",
"chars": 345,
"preview": "{\n \"status_code\": 400, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 400, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_10.json",
"chars": 815,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Targets\": [\n {\n \"Id\": \"Id091815528307\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_11.json",
"chars": 659,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Targets\": [\n {\n \"Id\": \"Id854580722537\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_12.json",
"chars": 971,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Targets\": [\n {\n \"Id\": \"Id006403247915\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_2.json",
"chars": 366,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Targets\": [\n {\n \"Id\": \"5010\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_3.json",
"chars": 345,
"preview": "{\n \"status_code\": 400, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 400, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_4.json",
"chars": 345,
"preview": "{\n \"status_code\": 400, \n \"data\": {\n \"ResponseMetadata\": {\n \"HTTPStatusCode\": 400, \n \""
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_5.json",
"chars": 366,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Targets\": [\n {\n \"Id\": \"5016\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_6.json",
"chars": 368,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Targets\": [\n {\n \"Id\": \"5124\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_7.json",
"chars": 659,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Targets\": [\n {\n \"Id\": \"Id756017120335\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_8.json",
"chars": 659,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Targets\": [\n {\n \"Id\": \"Id249251389162\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.ListTargetsByRule_9.json",
"chars": 659,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Targets\": [\n {\n \"Id\": \"Id656622160450\", \n "
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_1.json",
"chars": 284,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-keep-warm-"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_10.json",
"chars": 594,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-ttt888-zap"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_11.json",
"chars": 577,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-ttt888-tes"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_12.json",
"chars": 594,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-ttt888-zap"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_13.json",
"chars": 594,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-ttt888-zap"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_14.json",
"chars": 594,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-ttt888-zap"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_2.json",
"chars": 284,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-keep-warm-"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_3.json",
"chars": 284,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-keep-warm-"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_4.json",
"chars": 284,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-keep-warm-"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_5.json",
"chars": 284,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-keep-warm-"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_6.json",
"chars": 577,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-ttt888-tes"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_7.json",
"chars": 594,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-ttt888-zap"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_8.json",
"chars": 577,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-ttt888-tes"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutRule_9.json",
"chars": 594,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RuleArn\": \"arn:aws:events:us-east-1:724336686645:rule/zappa-ttt888-zap"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_1.json",
"chars": 251,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_10.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_11.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_12.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_13.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_14.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_2.json",
"chars": 251,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_3.json",
"chars": 251,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_4.json",
"chars": 251,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_5.json",
"chars": 251,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_6.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_7.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_8.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.PutTargets_9.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.RemoveTargets_1.json",
"chars": 251,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.RemoveTargets_2.json",
"chars": 251,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.RemoveTargets_3.json",
"chars": 251,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.RemoveTargets_4.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.RemoveTargets_5.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.RemoveTargets_6.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.RemoveTargets_7.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.RemoveTargets_8.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/events.RemoveTargets_9.json",
"chars": 533,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"FailedEntries\": [], \n \"ResponseMetadata\": {\n \"HTTPSt"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_1.json",
"chars": 5564,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0D%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_10.json",
"chars": 5420,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_11.json",
"chars": 5686,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_12.json",
"chars": 5686,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_2.json",
"chars": 5420,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_3.json",
"chars": 5420,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_4.json",
"chars": 5420,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_5.json",
"chars": 5420,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_6.json",
"chars": 5420,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_7.json",
"chars": 5420,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_8.json",
"chars": 5420,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRolePolicy_9.json",
"chars": 5420,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"RoleName\": \"ZappaLambdaExecution\", \n \"PolicyDocument\": \"%7B%0A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_1.json",
"chars": 1053,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_10.json",
"chars": 1053,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_11.json",
"chars": 1318,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_12.json",
"chars": 1318,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_2.json",
"chars": 1053,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_3.json",
"chars": 1053,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_4.json",
"chars": 1053,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_5.json",
"chars": 1053,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_6.json",
"chars": 1053,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_7.json",
"chars": 1053,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_8.json",
"chars": 1053,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.GetRole_9.json",
"chars": 1053,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"Role\": {\n \"AssumeRolePolicyDocument\": \"%7B%22Version%22%3A%"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/iam.PutRolePolicy_1.json",
"chars": 486,
"preview": "{\n \"status_code\": 200, \n \"data\": {\n \"ResponseMetadata\": {\n \"RetryAttempts\": 0, \n \"HTT"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/lambda.AddPermission_1.json",
"chars": 888,
"preview": "{\n \"status_code\": 201,\n \"data\": {\n \"ResponseMetadata\": {\n \"RequestId\": \"ae983eab-d365-11e7-ba13-"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/lambda.AddPermission_10.json",
"chars": 896,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"Statement\": \"{\\\"Condition\\\":{\\\"ArnLike\\\":{\\\"AWS:SourceArn\\\":\\\"arn:aws:"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/lambda.AddPermission_11.json",
"chars": 880,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"Statement\": \"{\\\"Condition\\\":{\\\"ArnLike\\\":{\\\"AWS:SourceArn\\\":\\\"arn:aws:"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/lambda.AddPermission_12.json",
"chars": 896,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"Statement\": \"{\\\"Condition\\\":{\\\"ArnLike\\\":{\\\"AWS:SourceArn\\\":\\\"arn:aws:"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/lambda.AddPermission_13.json",
"chars": 896,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"Statement\": \"{\\\"Condition\\\":{\\\"ArnLike\\\":{\\\"AWS:SourceArn\\\":\\\"arn:aws:"
},
{
"path": "tests/placebo/TestZappa.test_cli_aws/lambda.AddPermission_14.json",
"chars": 896,
"preview": "{\n \"status_code\": 201, \n \"data\": {\n \"Statement\": \"{\\\"Condition\\\":{\\\"ArnLike\\\":{\\\"AWS:SourceArn\\\":\\\"arn:aws:"
}
]
// ... and 274 more files (download for full content)
About this extraction
This page contains the full source code of the Miserlou/Zappa GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 474 files (1.4 MB), approximately 406.5k tokens, and a symbol index with 407 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.