ImportSAT using Python

@jacob.small , I tried with IFailuresPreprocessor, but it didn’t resolved the warning as well the files are created twice in the output folder. Also I went through the Failure classes in RevitAPI.doc but couldn’t find this warning in any of the classes.
Hence went with “LostAcisObjectsOnImport” which is similar to the error

############################################################
########## configure the Dynam python environment ##########
############################################################
import clr, os # import the CLR (Common language Runtime) and OS modules
clr.AddReference('RevitAPI') #add the Revit API library to the CLR 
from Autodesk.Revit.DB import FilteredElementCollector, ImportPlacement, ImportUnit, SATImportOptions, SaveAsOptions, Transaction, View #import the reelevant sectiosn of the Revit API
clr.AddReference('RevitServices') #add the Revit services library to the CLR 
from RevitServices.Persistence import DocumentManager #import the document manager 
from RevitServices.Transactions import TransactionManager #import the transaciton manager
from Autodesk.Revit.DB import Transaction, IFailuresPreprocessor, BuiltInFailures, UV
from System.Collections.Generic import List

############################################################
################# get the active applicton #################
############################################################
app = DocumentManager.Instance.CurrentUIApplication.Application #gets the application 

############################################################
############ inputs from the Dynamo environment ############
############################################################
satDir = IN[0] #the directory with the SAT files
rfaDir = IN[1] #the directory for the RFA files
famTemplatePath = IN[2] #the template path to use

############################################################
################## get the sat file paths ##################
############################################################
satPaths = [ "{0}\{1}".format(satDir,f) for f in os.listdir(satDir) if ".sat" in f ]

############################################################
########## create and configure the SaveAsOptions ##########
############################################################
saveOptions = SaveAsOptions() #start a new save as options object
saveOptions.OverwriteExistingFile = True #overwrite any existing file
saveOptions.Compact = True #compact the file
saveOptions.MaximumBackups = 1 #set the number of backups to 1 - you're making a new file so really this could be zero, but that's not an allowed value

############################################################
######## create and configure  the SATImportOptions ########
############################################################
satOpt = SATImportOptions() #start a new sat import options object
satOpt.Placement = ImportPlacement.Origin #set the import placement to the origin
satOpt.Unit = ImportUnit.Foot #set the import unit to feet 
############################################################
	# NOTE: you might want to not always use feet, but 
	# instead pull the units from the SAT itself and find 
	# the assocaited value for the import unit. Look into 
	# the SAT file format  and ImportUnit class of the 
	# Revit API for information on how to do so.
############################################################

############################################################
############# setup the OUT variable as a list #############
############################################################
results = [] #an empty list for now 

class SATWarningSwallower(IFailuresPreprocessor):
    def PreprocessFailures(self, failuresAccessor):
        fail_list = List[FailureMessageAccessor]()
        fail_acc_list = failuresAccessor.GetFailureMessages()
        for failure in fail_acc_list:
            failure_id = failure.GetFailureDefinitionId()
            failure_type = BuiltInFailures.ImportFailures.LostAcisObjectsOnImport.Guid
            if failure_id == failure_type:
                failuresAccessor.DeleteWarning(failure)
        return FailureProcessingResult.Continue

############################################################
###### iterate the sat files to generate new families ######
############################################################
for satPath in satPaths: #for every SAT path in the list of sat paths
	# Get the rfa path, and start a new family document 
	rfaPath = satPath[:-4].replace(satDir,rfaDir)+".rfa" #take the SAT path and replace the directory with the RFA directory, and the .sat extention with the .rfa extension
	doc = app.NewFamilyDocument(famTemplatePath) #start a new document from the family template path
	#start a new transaction in the family document
	transaction = Transaction(doc,"import sat") #build a new transaction
	transaction.Start() #start the transaction 
	#get the first 3d view we can find as we'll need a view to run the import in
	view_fec = FilteredElementCollector(doc).OfClass(View) #get all views in the file
	view1 = [v for v in view_fec if str(v.ViewType) == 'ThreeD' and not v.IsTemplate] #for each view in the collector, filter out any which are not a ThreeD type or are a template
	#if a 3d view was found perform the following
	if len(view1) >0:
		view1 = view1[0] #set view1 to the first view found
		#import the SAT and commit the change
		satImport = doc.Import(satPath,satOpt, view1) # import the SAT geometry
		transaction.Commit() #commit the transaction
		failOpt = transaction.GetFailureHandlingOptions()
		failOpt.SetFailuresPreprocessor(SATWarningSwallower())
		transaction.SetFailureHandlingOptions(failOpt)
		#save the family and close it 
		doc.SaveAs(rfaPath, saveOptions) #save the familyw tih the previously defined options 
		doc.Close(False) #close the family document
		results.append(rfaPath) #append the rfa extension to the results list
	#otherwise
	else:
		results.append("No 3d view was found. Please pick a new family template.") #append a message to the results list

############################################################
####### return the results to the Dynamo environment #######
############################################################
OUT = results #set the OUT varaible to the results list