@@ -533,7 +533,8 @@ def create_data_extension(self, name, columns, customer_key=None, category_id=No
533
533
534
534
return self .get_client ().CreateDataExtensions ([data_extension ])
535
535
536
- def copy_data_extension (self , source_customer_key , new_name , new_customer_key = None , new_category_id = None , keep_template = True , keep_retention_policy = True ):
536
+ def copy_data_extension (self , source_customer_key , new_name , new_customer_key = None , new_category_id = None ,
537
+ keep_template = True , keep_retention_policy = True , keep_sendable = True ):
537
538
source_data_extension = self .get_objects (ObjectType .DATA_EXTENSION ,
538
539
simple_filter ("CustomerKey" , Operator .EQUALS , source_customer_key ),
539
540
property_list = ['CustomerKey' , 'Name' , 'Description' , 'IsSendable' ,
@@ -545,16 +546,20 @@ def copy_data_extension(self, source_customer_key, new_name, new_customer_key=No
545
546
'DeleteAtEndOfRetentionPeriod' ,
546
547
'RetainUntil' , 'DataRetentionPeriod' ])
547
548
549
+ if source_data_extension .status and source_data_extension .results :
550
+ source_data_extension = source_data_extension .results [0 ]
551
+ else :
552
+ raise self .ETApiError ("The Data Extension wasn't found with the given CustomerKey." )
553
+
548
554
source_columns = self .get_data_extension_columns (source_customer_key )
549
555
new_columns = []
550
- for source_column in source_columns :
556
+ for source_column in sorted ( source_columns . results , key = lambda i : i . Ordinal ) :
551
557
new_column = {
552
558
'DefaultValue' : source_column .DefaultValue ,
553
559
'FieldType' : source_column .FieldType ,
554
560
'IsPrimaryKey' : source_column .IsPrimaryKey ,
555
561
'IsRequired' : source_column .IsRequired ,
556
562
'Name' : source_column .Name ,
557
- 'Ordinal' : source_column .Ordinal ,
558
563
'StorageType' : source_column .StorageType
559
564
}
560
565
if "MaxLength" in source_column :
@@ -566,9 +571,7 @@ def copy_data_extension(self, source_customer_key, new_name, new_customer_key=No
566
571
data_extension = {
567
572
'Name' : new_name ,
568
573
'columns' : new_columns ,
569
- 'Description' : source_data_extension .Description ,
570
- 'IsSendable' : source_data_extension .IsSendable ,
571
- 'IsTestable' : source_data_extension .IsTestable
574
+ 'Description' : source_data_extension .Description
572
575
}
573
576
574
577
if new_customer_key :
@@ -577,12 +580,22 @@ def copy_data_extension(self, source_customer_key, new_name, new_customer_key=No
577
580
if new_category_id :
578
581
data_extension ['CategoryID' ] = new_category_id
579
582
580
- if "SendableDataExtensionField" in source_data_extension and "SendableSubscriberField" in source_data_extension :
583
+ if keep_sendable and "SendableDataExtensionField" in source_data_extension and "SendableSubscriberField" in source_data_extension :
584
+ data_extension ['IsSendable' ] = source_data_extension .IsSendable
585
+ data_extension ['IsTestable' ] = source_data_extension .IsTestable
586
+
587
+ if "Subscriber" in source_data_extension .SendableSubscriberField .Name :
588
+ sendable_subscriber_field_name = "Subscriber Key"
589
+ elif "Email" in source_data_extension .SendableSubscriberField .Name :
590
+ sendable_subscriber_field_name = "Email Address"
591
+ else :
592
+ raise self .ETApiError ("The Sendable Subscriber Field is invalid." )
593
+
581
594
data_extension ['SendableDataExtensionField' ] = {
582
595
"Name" : source_data_extension .SendableDataExtensionField .Name
583
596
}
584
597
data_extension ['SendableSubscriberField' ] = {
585
- "Name" : source_data_extension . SendableSubscriberField . Name
598
+ "Name" : sendable_subscriber_field_name
586
599
}
587
600
588
601
if keep_template and "Template" in source_data_extension :
@@ -601,7 +614,8 @@ def copy_data_extension(self, source_customer_key, new_name, new_customer_key=No
601
614
and "DataRetentionPeriodUnitOfMeasure" in source_data_extension :
602
615
data_extension ['DataRetentionPeriod' ] = source_data_extension .DataRetentionPeriod
603
616
data_extension ['DataRetentionPeriodLength' ] = source_data_extension .DataRetentionPeriodLength
604
- data_extension ['DataRetentionPeriodUnitOfMeasure' ] = source_data_extension .DataRetentionPeriodUnitOfMeasure
617
+ data_extension [
618
+ 'DataRetentionPeriodUnitOfMeasure' ] = source_data_extension .DataRetentionPeriodUnitOfMeasure
605
619
606
620
return self .get_client ().CreateDataExtensions ([data_extension ])
607
621
0 commit comments