prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Add 'Kind' property to AWS::AppSync::Resolver
  https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-kind
  
  The Kind property is required when using the new PipelineConfig feature for AppSync.
  
  There are only two allowable values, PIPELINE or UNIT. The property is not required if using the standard resolvers.
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `troposphere/appsync.py`
  Content:
  ```
  1 # Copyright (c) 2012-2017, Mark Peek <mark@peek.org>
  2 # All rights reserved.
  3 #
  4 # See LICENSE file for full license.
  5 
  6 from . import AWSObject, AWSProperty
  7 from .validators import boolean, integer
  8 
  9 
  10 class ApiKey(AWSObject):
  11     resource_type = "AWS::AppSync::ApiKey"
  12 
  13     props = {
  14         'ApiId': (basestring, True),
  15         'Description': (basestring, False),
  16         'Expires': (integer, False),
  17     }
  18 
  19 
  20 class DynamoDBConfig(AWSProperty):
  21     props = {
  22         'AwsRegion': (basestring, True),
  23         'TableName': (basestring, True),
  24         'UseCallerCredentials': (boolean, False),
  25     }
  26 
  27 
  28 class ElasticsearchConfig(AWSProperty):
  29     props = {
  30         'AwsRegion': (basestring, True),
  31         'Endpoint': (basestring, True),
  32     }
  33 
  34 
  35 class AwsIamConfig(AWSProperty):
  36     props = {
  37         'SigningRegion': (basestring, False),
  38         'SigningServiceName': (basestring, False),
  39     }
  40 
  41 
  42 class AuthorizationConfig(AWSProperty):
  43     props = {
  44         'AuthorizationType': (basestring, True),
  45         'AwsIamConfig': (AwsIamConfig, False),
  46     }
  47 
  48 
  49 class HttpConfig(AWSProperty):
  50     props = {
  51         'AuthorizationConfig': (AuthorizationConfig, False),
  52         'Endpoint': (basestring, True),
  53     }
  54 
  55 
  56 class LambdaConfig(AWSProperty):
  57     props = {
  58         'LambdaFunctionArn': (basestring, True),
  59     }
  60 
  61 
  62 class RdsHttpEndpointConfig(AWSProperty):
  63     props = {
  64         'AwsRegion': (basestring, False),
  65         'DbClusterIdentifier': (basestring, False),
  66         'DatabaseName': (basestring, False),
  67         'Schema': (basestring, False),
  68         'AwsSecretStoreArn': (basestring, False),
  69     }
  70 
  71 
  72 class RelationalDatabaseConfig(AWSProperty):
  73     props = {
  74         'RelationalDatasourceType': (basestring, False),
  75         'RdsHttpEndpointConfig': (RdsHttpEndpointConfig, False),
  76     }
  77 
  78 
  79 class DataSource(AWSObject):
  80     resource_type = "AWS::AppSync::DataSource"
  81 
  82     props = {
  83         'ApiId': (basestring, True),
  84         'Description': (basestring, False),
  85         'DynamoDBConfig': (DynamoDBConfig, False),
  86         'ElasticsearchConfig': (ElasticsearchConfig, False),
  87         'HttpConfig': (HttpConfig, False),
  88         'LambdaConfig': (LambdaConfig, False),
  89         'Name': (basestring, True),
  90         'ServiceRoleArn': (basestring, False),
  91         'Type': (basestring, True),
  92         'RelationalDatabaseConfig': (RelationalDatabaseConfig, False),
  93     }
  94 
  95 
  96 class LogConfig(AWSProperty):
  97     props = {
  98         'CloudWatchLogsRoleArn': (basestring, False),
  99         'FieldLogLevel': (basestring, False),
  100     }
  101 
  102 
  103 class OpenIDConnectConfig(AWSProperty):
  104     props = {
  105         'AuthTTL': (float, False),
  106         'ClientId': (basestring, False),
  107         'IatTTL': (float, False),
  108         'Issuer': (basestring, True),
  109     }
  110 
  111 
  112 class UserPoolConfig(AWSProperty):
  113     props = {
  114         'AppIdClientRegex': (basestring, False),
  115         'AwsRegion': (basestring, False),
  116         'DefaultAction': (basestring, False),
  117         'UserPoolId': (basestring, False),
  118     }
  119 
  120 
  121 class GraphQLApi(AWSObject):
  122     resource_type = "AWS::AppSync::GraphQLApi"
  123 
  124     props = {
  125         'AuthenticationType': (basestring, True),
  126         'LogConfig': (LogConfig, False),
  127         'Name': (basestring, True),
  128         'OpenIDConnectConfig': (OpenIDConnectConfig, False),
  129         'UserPoolConfig': (UserPoolConfig, False),
  130     }
  131 
  132 
  133 class GraphQLSchema(AWSObject):
  134     resource_type = "AWS::AppSync::GraphQLSchema"
  135 
  136     props = {
  137         'ApiId': (basestring, True),
  138         'Definition': (basestring, False),
  139         'DefinitionS3Location': (basestring, False),
  140     }
  141 
  142 
  143 class PipelineConfig(AWSProperty):
  144     props = {
  145         'Functions': ([basestring], False),
  146     }
  147 
  148 
  149 class Resolver(AWSObject):
  150     resource_type = "AWS::AppSync::Resolver"
  151 
  152     props = {
  153         'ApiId': (basestring, True),
  154         'DataSourceName': (basestring, True),
  155         'FieldName': (basestring, True),
  156         'PipelineConfig': (PipelineConfig, False),
  157         'RequestMappingTemplate': (basestring, False),
  158         'RequestMappingTemplateS3Location': (basestring, False),
  159         'ResponseMappingTemplate': (basestring, False),
  160         'ResponseMappingTemplateS3Location': (basestring, False),
  161         'TypeName': (basestring, True),
  162     }
  163 
  164 
  165 class FunctionConfiguration(AWSObject):
  166     resource_type = "AWS::AppSync::FunctionConfiguration"
  167 
  168     props = {
  169         'ApiId': (basestring, True),
  170         'Name': (basestring, False),
  171         'Description': (basestring, False),
  172         'DataSourceName': (basestring, False),
  173         'FunctionVersion': (basestring, False),
  174         'RequestMappingTemplate': (basestring, False),
  175         'RequestMappingTemplateS3Location': (basestring, False),
  176         'ResponseMappingTemplate': (basestring, False),
  177         'ResponseMappingTemplateS3Location': (basestring, False),
  178     }
  179
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/troposphere/appsync.py b/troposphere/appsync.py
  --- a/troposphere/appsync.py
  +++ b/troposphere/appsync.py
  @@ -7,6 +7,13 @@
   from .validators import boolean, integer
   
   
  +def resolver_kind_validator(x):
  +    valid_types = ["UNIT", "PIPELINE"]
  +    if x not in valid_types:
  +        raise ValueError("Kind must be one of: %s" % ", ".join(valid_types))
  +    return x
  +
  +
   class ApiKey(AWSObject):
       resource_type = "AWS::AppSync::ApiKey"
   
  @@ -153,6 +160,7 @@
           'ApiId': (basestring, True),
           'DataSourceName': (basestring, True),
           'FieldName': (basestring, True),
  +        'Kind': (resolver_kind_validator, False),
           'PipelineConfig': (PipelineConfig, False),
           'RequestMappingTemplate': (basestring, False),
           'RequestMappingTemplateS3Location': (basestring, False),
  
verification_info: {"golden_diff": "diff --git a/troposphere/appsync.py b/troposphere/appsync.py\n--- a/troposphere/appsync.py\n+++ b/troposphere/appsync.py\n@@ -7,6 +7,13 @@\n from .validators import boolean, integer\n \n \n+def resolver_kind_validator(x):\n+    valid_types = [\"UNIT\", \"PIPELINE\"]\n+    if x not in valid_types:\n+        raise ValueError(\"Kind must be one of: %s\" % \", \".join(valid_types))\n+    return x\n+\n+\n class ApiKey(AWSObject):\n     resource_type = \"AWS::AppSync::ApiKey\"\n \n@@ -153,6 +160,7 @@\n         'ApiId': (basestring, True),\n         'DataSourceName': (basestring, True),\n         'FieldName': (basestring, True),\n+        'Kind': (resolver_kind_validator, False),\n         'PipelineConfig': (PipelineConfig, False),\n         'RequestMappingTemplate': (basestring, False),\n         'RequestMappingTemplateS3Location': (basestring, False),\n", "issue": "Add 'Kind' property to AWS::AppSync::Resolver\nhttps://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html#cfn-appsync-resolver-kind\r\n\r\nThe Kind property is required when using the new PipelineConfig feature for AppSync.\r\n\r\nThere are only two allowable values, PIPELINE or UNIT. The property is not required if using the standard resolvers.\n", "before_files": [{"content": "# Copyright (c) 2012-2017, Mark Peek <mark@peek.org>\n# All rights reserved.\n#\n# See LICENSE file for full license.\n\nfrom . import AWSObject, AWSProperty\nfrom .validators import boolean, integer\n\n\nclass ApiKey(AWSObject):\n    resource_type = \"AWS::AppSync::ApiKey\"\n\n    props = {\n        'ApiId': (basestring, True),\n        'Description': (basestring, False),\n        'Expires': (integer, False),\n    }\n\n\nclass DynamoDBConfig(AWSProperty):\n    props = {\n        'AwsRegion': (basestring, True),\n        'TableName': (basestring, True),\n        'UseCallerCredentials': (boolean, False),\n    }\n\n\nclass ElasticsearchConfig(AWSProperty):\n    props = {\n        'AwsRegion': (basestring, True),\n        'Endpoint': (basestring, True),\n    }\n\n\nclass AwsIamConfig(AWSProperty):\n    props = {\n        'SigningRegion': (basestring, False),\n        'SigningServiceName': (basestring, False),\n    }\n\n\nclass AuthorizationConfig(AWSProperty):\n    props = {\n        'AuthorizationType': (basestring, True),\n        'AwsIamConfig': (AwsIamConfig, False),\n    }\n\n\nclass HttpConfig(AWSProperty):\n    props = {\n        'AuthorizationConfig': (AuthorizationConfig, False),\n        'Endpoint': (basestring, True),\n    }\n\n\nclass LambdaConfig(AWSProperty):\n    props = {\n        'LambdaFunctionArn': (basestring, True),\n    }\n\n\nclass RdsHttpEndpointConfig(AWSProperty):\n    props = {\n        'AwsRegion': (basestring, False),\n        'DbClusterIdentifier': (basestring, False),\n        'DatabaseName': (basestring, False),\n        'Schema': (basestring, False),\n        'AwsSecretStoreArn': (basestring, False),\n    }\n\n\nclass RelationalDatabaseConfig(AWSProperty):\n    props = {\n        'RelationalDatasourceType': (basestring, False),\n        'RdsHttpEndpointConfig': (RdsHttpEndpointConfig, False),\n    }\n\n\nclass DataSource(AWSObject):\n    resource_type = \"AWS::AppSync::DataSource\"\n\n    props = {\n        'ApiId': (basestring, True),\n        'Description': (basestring, False),\n        'DynamoDBConfig': (DynamoDBConfig, False),\n        'ElasticsearchConfig': (ElasticsearchConfig, False),\n        'HttpConfig': (HttpConfig, False),\n        'LambdaConfig': (LambdaConfig, False),\n        'Name': (basestring, True),\n        'ServiceRoleArn': (basestring, False),\n        'Type': (basestring, True),\n        'RelationalDatabaseConfig': (RelationalDatabaseConfig, False),\n    }\n\n\nclass LogConfig(AWSProperty):\n    props = {\n        'CloudWatchLogsRoleArn': (basestring, False),\n        'FieldLogLevel': (basestring, False),\n    }\n\n\nclass OpenIDConnectConfig(AWSProperty):\n    props = {\n        'AuthTTL': (float, False),\n        'ClientId': (basestring, False),\n        'IatTTL': (float, False),\n        'Issuer': (basestring, True),\n    }\n\n\nclass UserPoolConfig(AWSProperty):\n    props = {\n        'AppIdClientRegex': (basestring, False),\n        'AwsRegion': (basestring, False),\n        'DefaultAction': (basestring, False),\n        'UserPoolId': (basestring, False),\n    }\n\n\nclass GraphQLApi(AWSObject):\n    resource_type = \"AWS::AppSync::GraphQLApi\"\n\n    props = {\n        'AuthenticationType': (basestring, True),\n        'LogConfig': (LogConfig, False),\n        'Name': (basestring, True),\n        'OpenIDConnectConfig': (OpenIDConnectConfig, False),\n        'UserPoolConfig': (UserPoolConfig, False),\n    }\n\n\nclass GraphQLSchema(AWSObject):\n    resource_type = \"AWS::AppSync::GraphQLSchema\"\n\n    props = {\n        'ApiId': (basestring, True),\n        'Definition': (basestring, False),\n        'DefinitionS3Location': (basestring, False),\n    }\n\n\nclass PipelineConfig(AWSProperty):\n    props = {\n        'Functions': ([basestring], False),\n    }\n\n\nclass Resolver(AWSObject):\n    resource_type = \"AWS::AppSync::Resolver\"\n\n    props = {\n        'ApiId': (basestring, True),\n        'DataSourceName': (basestring, True),\n        'FieldName': (basestring, True),\n        'PipelineConfig': (PipelineConfig, False),\n        'RequestMappingTemplate': (basestring, False),\n        'RequestMappingTemplateS3Location': (basestring, False),\n        'ResponseMappingTemplate': (basestring, False),\n        'ResponseMappingTemplateS3Location': (basestring, False),\n        'TypeName': (basestring, True),\n    }\n\n\nclass FunctionConfiguration(AWSObject):\n    resource_type = \"AWS::AppSync::FunctionConfiguration\"\n\n    props = {\n        'ApiId': (basestring, True),\n        'Name': (basestring, False),\n        'Description': (basestring, False),\n        'DataSourceName': (basestring, False),\n        'FunctionVersion': (basestring, False),\n        'RequestMappingTemplate': (basestring, False),\n        'RequestMappingTemplateS3Location': (basestring, False),\n        'ResponseMappingTemplate': (basestring, False),\n        'ResponseMappingTemplateS3Location': (basestring, False),\n    }\n", "path": "troposphere/appsync.py"}], "after_files": [{"content": "# Copyright (c) 2012-2017, Mark Peek <mark@peek.org>\n# All rights reserved.\n#\n# See LICENSE file for full license.\n\nfrom . import AWSObject, AWSProperty\nfrom .validators import boolean, integer\n\n\ndef resolver_kind_validator(x):\n    valid_types = [\"UNIT\", \"PIPELINE\"]\n    if x not in valid_types:\n        raise ValueError(\"Kind must be one of: %s\" % \", \".join(valid_types))\n    return x\n\n\nclass ApiKey(AWSObject):\n    resource_type = \"AWS::AppSync::ApiKey\"\n\n    props = {\n        'ApiId': (basestring, True),\n        'Description': (basestring, False),\n        'Expires': (integer, False),\n    }\n\n\nclass DynamoDBConfig(AWSProperty):\n    props = {\n        'AwsRegion': (basestring, True),\n        'TableName': (basestring, True),\n        'UseCallerCredentials': (boolean, False),\n    }\n\n\nclass ElasticsearchConfig(AWSProperty):\n    props = {\n        'AwsRegion': (basestring, True),\n        'Endpoint': (basestring, True),\n    }\n\n\nclass AwsIamConfig(AWSProperty):\n    props = {\n        'SigningRegion': (basestring, False),\n        'SigningServiceName': (basestring, False),\n    }\n\n\nclass AuthorizationConfig(AWSProperty):\n    props = {\n        'AuthorizationType': (basestring, True),\n        'AwsIamConfig': (AwsIamConfig, False),\n    }\n\n\nclass HttpConfig(AWSProperty):\n    props = {\n        'AuthorizationConfig': (AuthorizationConfig, False),\n        'Endpoint': (basestring, True),\n    }\n\n\nclass LambdaConfig(AWSProperty):\n    props = {\n        'LambdaFunctionArn': (basestring, True),\n    }\n\n\nclass RdsHttpEndpointConfig(AWSProperty):\n    props = {\n        'AwsRegion': (basestring, False),\n        'DbClusterIdentifier': (basestring, False),\n        'DatabaseName': (basestring, False),\n        'Schema': (basestring, False),\n        'AwsSecretStoreArn': (basestring, False),\n    }\n\n\nclass RelationalDatabaseConfig(AWSProperty):\n    props = {\n        'RelationalDatasourceType': (basestring, False),\n        'RdsHttpEndpointConfig': (RdsHttpEndpointConfig, False),\n    }\n\n\nclass DataSource(AWSObject):\n    resource_type = \"AWS::AppSync::DataSource\"\n\n    props = {\n        'ApiId': (basestring, True),\n        'Description': (basestring, False),\n        'DynamoDBConfig': (DynamoDBConfig, False),\n        'ElasticsearchConfig': (ElasticsearchConfig, False),\n        'HttpConfig': (HttpConfig, False),\n        'LambdaConfig': (LambdaConfig, False),\n        'Name': (basestring, True),\n        'ServiceRoleArn': (basestring, False),\n        'Type': (basestring, True),\n        'RelationalDatabaseConfig': (RelationalDatabaseConfig, False),\n    }\n\n\nclass LogConfig(AWSProperty):\n    props = {\n        'CloudWatchLogsRoleArn': (basestring, False),\n        'FieldLogLevel': (basestring, False),\n    }\n\n\nclass OpenIDConnectConfig(AWSProperty):\n    props = {\n        'AuthTTL': (float, False),\n        'ClientId': (basestring, False),\n        'IatTTL': (float, False),\n        'Issuer': (basestring, True),\n    }\n\n\nclass UserPoolConfig(AWSProperty):\n    props = {\n        'AppIdClientRegex': (basestring, False),\n        'AwsRegion': (basestring, False),\n        'DefaultAction': (basestring, False),\n        'UserPoolId': (basestring, False),\n    }\n\n\nclass GraphQLApi(AWSObject):\n    resource_type = \"AWS::AppSync::GraphQLApi\"\n\n    props = {\n        'AuthenticationType': (basestring, True),\n        'LogConfig': (LogConfig, False),\n        'Name': (basestring, True),\n        'OpenIDConnectConfig': (OpenIDConnectConfig, False),\n        'UserPoolConfig': (UserPoolConfig, False),\n    }\n\n\nclass GraphQLSchema(AWSObject):\n    resource_type = \"AWS::AppSync::GraphQLSchema\"\n\n    props = {\n        'ApiId': (basestring, True),\n        'Definition': (basestring, False),\n        'DefinitionS3Location': (basestring, False),\n    }\n\n\nclass PipelineConfig(AWSProperty):\n    props = {\n        'Functions': ([basestring], False),\n    }\n\n\nclass Resolver(AWSObject):\n    resource_type = \"AWS::AppSync::Resolver\"\n\n    props = {\n        'ApiId': (basestring, True),\n        'DataSourceName': (basestring, True),\n        'FieldName': (basestring, True),\n        'Kind': (resolver_kind_validator, False),\n        'PipelineConfig': (PipelineConfig, False),\n        'RequestMappingTemplate': (basestring, False),\n        'RequestMappingTemplateS3Location': (basestring, False),\n        'ResponseMappingTemplate': (basestring, False),\n        'ResponseMappingTemplateS3Location': (basestring, False),\n        'TypeName': (basestring, True),\n    }\n\n\nclass FunctionConfiguration(AWSObject):\n    resource_type = \"AWS::AppSync::FunctionConfiguration\"\n\n    props = {\n        'ApiId': (basestring, True),\n        'Name': (basestring, False),\n        'Description': (basestring, False),\n        'DataSourceName': (basestring, False),\n        'FunctionVersion': (basestring, False),\n        'RequestMappingTemplate': (basestring, False),\n        'RequestMappingTemplateS3Location': (basestring, False),\n        'ResponseMappingTemplate': (basestring, False),\n        'ResponseMappingTemplateS3Location': (basestring, False),\n    }\n", "path": "troposphere/appsync.py"}]}