Repository: cloudtools/troposphere

Issue:
AppFlow is missing features, should be updated to latest
I submitted a pull request to address this. #1985 


Discussion:

Resolving patch:
diff --git a/troposphere/appflow.py b/troposphere/appflow.py
--- a/troposphere/appflow.py
+++ b/troposphere/appflow.py
@@ -1,16 +1,16 @@
-# Copyright (c) 2012-2020, Mark Peek <mark@peek.org>
+# Copyright (c) 2012-2021, Mark Peek <mark@peek.org>
 # All rights reserved.
 #
 # See LICENSE file for full license.
 #
 # *** Do not modify - this file is autogenerated ***
-# Resource specification version: 18.6.0
+# Resource specification version: 51.0.0
 
 
 from troposphere import Tags
 
 from . import AWSObject, AWSProperty
-from .validators import boolean, double
+from .validators import boolean, double, integer
 
 
 class AmplitudeConnectorProfileCredentials(AWSProperty):
@@ -75,9 +75,17 @@ class RedshiftConnectorProfileCredentials(AWSProperty):
     }
 
 
+class SAPODataConnectorProfileCredentials(AWSProperty):
+    props = {
+        "BasicAuthCredentials": (dict, False),
+        "OAuthCredentials": (dict, False),
+    }
+
+
 class SalesforceConnectorProfileCredentials(AWSProperty):
     props = {
         "AccessToken": (str, False),
+        "ClientCredentialsArn": (str, False),
         "ConnectorOAuthRequest": (ConnectorOAuthRequest, False),
         "RefreshToken": (str, False),
     }
@@ -143,6 +151,7 @@ class ConnectorProfileCredentials(AWSProperty):
         "InforNexus": (InforNexusConnectorProfileCredentials, False),
         "Marketo": (MarketoConnectorProfileCredentials, False),
         "Redshift": (RedshiftConnectorProfileCredentials, False),
+        "SAPOData": (SAPODataConnectorProfileCredentials, False),
         "Salesforce": (SalesforceConnectorProfileCredentials, False),
         "ServiceNow": (ServiceNowConnectorProfileCredentials, False),
         "Singular": (SingularConnectorProfileCredentials, False),
@@ -187,6 +196,26 @@ class RedshiftConnectorProfileProperties(AWSProperty):
     }
 
 
+class OAuthProperties(AWSProperty):
+    props = {
+        "AuthCodeUrl": (str, False),
+        "OAuthScopes": ([str], False),
+        "TokenUrl": (str, False),
+    }
+
+
+class SAPODataConnectorProfileProperties(AWSProperty):
+    props = {
+        "ApplicationHostUrl": (str, False),
+        "ApplicationServicePath": (str, False),
+        "ClientNumber": (str, False),
+        "LogonLanguage": (str, False),
+        "OAuthProperties": (OAuthProperties, False),
+        "PortNumber": (integer, False),
+        "PrivateLinkServiceName": (str, False),
+    }
+
+
 class SalesforceConnectorProfileProperties(AWSProperty):
     props = {
         "InstanceUrl": (str, False),
@@ -237,6 +266,7 @@ class ConnectorProfileProperties(AWSProperty):
         "InforNexus": (InforNexusConnectorProfileProperties, False),
         "Marketo": (MarketoConnectorProfileProperties, False),
         "Redshift": (RedshiftConnectorProfileProperties, False),
+        "SAPOData": (SAPODataConnectorProfileProperties, False),
         "Salesforce": (SalesforceConnectorProfileProperties, False),
         "ServiceNow": (ServiceNowConnectorProfileProperties, False),
         "Slack": (SlackConnectorProfileProperties, False),
@@ -280,6 +310,12 @@ class EventBridgeDestinationProperties(AWSProperty):
     }
 
 
+class LookoutMetricsDestinationProperties(AWSProperty):
+    props = {
+        "Object": (str, False),
+    }
+
+
 class RedshiftDestinationProperties(AWSProperty):
     props = {
         "BucketPrefix": (str, False),
@@ -321,7 +357,9 @@ class S3DestinationProperties(AWSProperty):
 class SalesforceDestinationProperties(AWSProperty):
     props = {
         "ErrorHandlingConfig": (ErrorHandlingConfig, False),
+        "IdFieldNames": ([str], False),
         "Object": (str, True),
+        "WriteOperationType": (str, False),
     }
 
 
@@ -334,13 +372,41 @@ class SnowflakeDestinationProperties(AWSProperty):
     }
 
 
+class UpsolverS3OutputFormatConfig(AWSProperty):
+    props = {
+        "AggregationConfig": (AggregationConfig, False),
+        "FileType": (str, False),
+        "PrefixConfig": (PrefixConfig, True),
+    }
+
+
+class UpsolverDestinationProperties(AWSProperty):
+    props = {
+        "BucketName": (str, True),
+        "BucketPrefix": (str, False),
+        "S3OutputFormatConfig": (UpsolverS3OutputFormatConfig, True),
+    }
+
+
+class ZendeskDestinationProperties(AWSProperty):
+    props = {
+        "ErrorHandlingConfig": (ErrorHandlingConfig, False),
+        "IdFieldNames": ([str], False),
+        "Object": (str, True),
+        "WriteOperationType": (str, False),
+    }
+
+
 class DestinationConnectorProperties(AWSProperty):
     props = {
         "EventBridge": (EventBridgeDestinationProperties, False),
+        "LookoutMetrics": (LookoutMetricsDestinationProperties, False),
         "Redshift": (RedshiftDestinationProperties, False),
         "S3": (S3DestinationProperties, False),
         "Salesforce": (SalesforceDestinationProperties, False),
         "Snowflake": (SnowflakeDestinationProperties, False),
+        "Upsolver": (UpsolverDestinationProperties, False),
+        "Zendesk": (ZendeskDestinationProperties, False),
     }
 
 
@@ -352,6 +418,12 @@ class DestinationFlowConfig(AWSProperty):
     }
 
 
+class IncrementalPullConfig(AWSProperty):
+    props = {
+        "DatetimeTypeFieldName": (str, False),
+    }
+
+
 class AmplitudeSourceProperties(AWSProperty):
     props = {
         "Object": (str, True),
@@ -388,10 +460,23 @@ class MarketoSourceProperties(AWSProperty):
     }
 
 
+class S3InputFormatConfig(AWSProperty):
+    props = {
+        "S3InputFileType": (str, False),
+    }
+
+
 class S3SourceProperties(AWSProperty):
     props = {
         "BucketName": (str, True),
         "BucketPrefix": (str, True),
+        "S3InputFormatConfig": (S3InputFormatConfig, False),
+    }
+
+
+class SAPODataSourceProperties(AWSProperty):
+    props = {
+        "ObjectPath": (str, True),
     }
 
 
@@ -429,6 +514,10 @@ class TrendmicroSourceProperties(AWSProperty):
 
 class VeevaSourceProperties(AWSProperty):
     props = {
+        "DocumentType": (str, False),
+        "IncludeAllVersions": (boolean, False),
+        "IncludeRenditions": (boolean, False),
+        "IncludeSourceFiles": (boolean, False),
         "Object": (str, True),
     }
 
@@ -448,6 +537,7 @@ class SourceConnectorProperties(AWSProperty):
         "InforNexus": (InforNexusSourceProperties, False),
         "Marketo": (MarketoSourceProperties, False),
         "S3": (S3SourceProperties, False),
+        "SAPOData": (SAPODataSourceProperties, False),
         "Salesforce": (SalesforceSourceProperties, False),
         "ServiceNow": (ServiceNowSourceProperties, False),
         "Singular": (SingularSourceProperties, False),
@@ -462,6 +552,7 @@ class SourceFlowConfig(AWSProperty):
     props = {
         "ConnectorProfileName": (str, False),
         "ConnectorType": (str, True),
+        "IncrementalPullConfig": (IncrementalPullConfig, False),
         "SourceConnectorProperties": (SourceConnectorProperties, True),
     }
 
@@ -475,6 +566,7 @@ class ConnectorOperator(AWSProperty):
         "InforNexus": (str, False),
         "Marketo": (str, False),
         "S3": (str, False),
+        "SAPOData": (str, False),
         "Salesforce": (str, False),
         "ServiceNow": (str, False),
         "Singular": (str, False),
@@ -507,6 +599,7 @@ class ScheduledTriggerProperties(AWSProperty):
         "DataPullMode": (str, False),
         "ScheduleEndTime": (double, False),
         "ScheduleExpression": (str, True),
+        "ScheduleOffset": (double, False),
         "ScheduleStartTime": (double, False),
         "TimeZone": (str, False),
     }
diff --git a/troposphere/ecs.py b/troposphere/ecs.py
--- a/troposphere/ecs.py
+++ b/troposphere/ecs.py
@@ -7,8 +7,8 @@
     integer,
     integer_range,
     network_port,
-    positive_integer,
     one_of,
+    positive_integer,
 )
 
 LAUNCH_TYPE_EC2 = "EC2"
diff --git a/troposphere/networkfirewall.py b/troposphere/networkfirewall.py
--- a/troposphere/networkfirewall.py
+++ b/troposphere/networkfirewall.py
@@ -124,9 +124,7 @@ class LogDestinationConfig(AWSProperty):
 
 class LoggingConfigurationProperty(AWSProperty):
 
-    props = {
-        "LogDestinationConfigs": ([LogDestinationConfig], True)
-    }
+    props = {"LogDestinationConfigs": ([LogDestinationConfig], True)}
 
 
 class LoggingConfiguration(AWSObject):


Test patch: