ConnectAndCouple method is not working

i have created a script to place and connect a fabrication part over another fabrication. script throwing an error message as can see in the image. My script is also below. anybody can help me to identify the error in the script?


duct offset.dyn (54.1 KB)

# Enable Python support and load DesignScript library
import clr
import sys
sys.path.append('C:\Program Files (x86)\IronPython 2.7\Lib')
import System
from System import Array
from System.Collections.Generic import *
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager 
from RevitServices.Transactions import TransactionManager 

clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")

import math
import Autodesk 
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
from Autodesk.Revit.DB import FabricationService
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication 
app = uiapp.Application 
uidoc = uiapp.ActiveUIDocument
levelid = doc.ActiveView.GenLevel.Id


servicebutton = IN[0]
length = IN[1]
host = UnwrapElement(IN[2])

TransactionManager.Instance.EnsureInTransaction(doc)
fabricationpart = FabricationPart.Create(doc, servicebutton, 0 , levelid)
TransactionManager.Instance.TransactionTaskDone()

def dtor(value):
	r = UnitUtils.Convert(value, DisplayUnitType.DUT_DEGREES_AND_MINUTES, DisplayUnitType.DUT_RADIANS)
	return r

def GetPrimaryConnector(el):
	cm = el.ConnectorManager
	for i in cm.Connectors:
		info = i.GetMEPConnectorInfo()
		if (info.IsPrimary):
			return i
			
def GetSecondaryConnector(el):
	cm = el.ConnectorManager
	for i in cm.Connectors:
		info = i.GetMEPConnectorInfo()
		if (info.IsSecondary):
			return i			


lengthoption = fabricationpart.LookupParameter("Length Option")
lengthoption.Set("Value")
lengthParam = fabricationpart.LookupParameter("Length")
lengthParam.Set(length)
doc.Regenerate()

pc = GetPrimaryConnector(fabricationpart)
sc = GetSecondaryConnector(fabricationpart)

host_pc = GetPrimaryConnector(host)
host_sc = GetSecondaryConnector(host)

if host_sc.Shape == ConnectorProfileType.Rectangular:
	pc.Height = host_sc.Height
	pc.Width = host_sc.Width

else:
	pass
doc.Regenerate()	
FabricationPart.AlignPartByConnectors(doc, pc, host_sc, dtor(0))
doc.Regenerate()
FabricationPart.ConnectAndCouple(doc, sc, host_sc)
doc.Regenerate()

OUT = 0