Delete Nested Families From Families in Project and Reload

Maybe my initial post was a bit too much. Here is a simplified version of my question and the issue I am currently having.

Current image of graph after run:

The error says that I have an open transaction, but I have it closed in teach node I think.

Here is the code for the three python nodes:

  1. All Elements of Category in Doc

based on node by Julien Benoit @jbenoit44

import System
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference('DSCoreNodes')
import DSCore
from DSCore import *
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument

cats = IN[1]
if not isinstance(cats, list): cats = [cats]
docs = IN[0]
if not isinstance(docs, list): docs = [docs]

elemlist = []
for doc in docs:
TransactionManager.Instance.EnsureInTransaction(doc)
try:
for item in cats:
collector = FilteredElementCollector(doc)
collector.OfClass(FamilySymbol)
bic = System.Enum.ToObject(BuiltInCategory, item.Id)
elemlist.append(collector.OfCategory(bic).ToElements())
except:
log = 'Error'
TransactionManager.Instance.ForceCloseTransaction()

OUT = elemlist
  1. Delete Elements in Family

Based on DanEDU

 import clr
    clr.AddReference('RevitAPI')
    clr.AddReference('RevitServices')

# Revit and Dynamo modules
from Autodesk.Revit.DB import FamilyManager
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

docs = IN[0]
elems = UnwrapElement(IN[1])

if docs == 'Current.Document':
docs = DocumentManager.Instance.CurrentDBDocument

# make a list
if not isinstance(docs, list):
docs = [docs]
#if not isinstance(elems, list):
# elems = [elems]

logs = []
#Do the work
for i in range(0,len(docs)):
log = []
TransactionManager.Instance.EnsureInTransaction(docs[i])
for j in range(len(elems[i])):
try:
log.append(elems[i][j])
#docs[i].Delete(elems[i][j].Id)
except:
log.append('No')
pass
TransactionManager.Instance.ForceCloseTransaction()
logs.append(log)
OUT = docs, logs
  1. Load Family

Based on DanEDU

import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitServices')

# Revit and Dynamo modules
from Autodesk.Revit.DB import Document, FamilySource, IFamilyLoadOptions
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

# input assigned the IN variable
fam_docs = IN[0] # document list

# wrap input inside a list (if not a list)
if not isinstance(fam_docs, list):
fam_docs = [fam_docs]

# ensure loaded families can overwrite existing families.
class FamilyOption(IFamilyLoadOptions):
def OnFamilyFound(self, familyInUse, overwriteParameterValues):
overwriteParameterValues = True
return True

def OnSharedFamilyFound(
self, sharedFamily, familyInUse, source, overwriteParameterValues):
source = FamilySource.Family
overwriteParameterValues = True
return True

# core data processing
for fam_doc in fam_docs:
fam_doc.LoadFamily(doc, FamilyOption())

# output assigned the OUT variable
OUT = fam_docs