As I posted yesterday, an ICE compound with no category and no task will not show up in the Preset Manager. Here’s a Python script that checks .xsicompound files and reports any that are missing both the category and tasks attributes.
I use ElementTree to parse the .xsicompound XML, and get the category and tasks attributes from the xsi_file element, which looks something like this:
<xsi_file type="CompoundNode" name="abScatter" author="Andreas Bystrom" url="http://www.wurp.net" formatversion="1.4" compoundversion="1.0" constructionmode="Modeling" backgroundcolor="7765887">
Here’s the script.
from siutils import si # Application from siutils import sidict # Dictionary from siutils import sisel # Selection from siutils import siuitk # XSIUIToolkit from siutils import siut # XSIUtils from siutils import log # LogMessage from siutils import disp # win32com.client.Dispatch from siutils import C # win32com.client.constants from xml.etree import ElementTree as ET import os, fnmatch # # Generator function for finding files # def find_files(directory, pattern): for root, dirs, files in os.walk(directory): for basename in files: if fnmatch.fnmatch(basename, pattern): filename = os.path.join(root, basename) yield filename # # Check .xsicompound file for category and tasks attributes # def check_xsicompound( f ): try: tree = ET.parse( f ) except Exception, inst: print "Unexpected error opening %s: %s" % (f, inst) # Get the xsi_file element xsi_file = tree.getroot() # name = xsi_file.attrib['name'] # Check the category and task elements cat = False tasks = False if 'category' in xsi_file.attrib and xsi_file.attrib['category'] != '': cat = True if 'tasks' in xsi_file.attrib and xsi_file.attrib['tasks'] != '': tasks = True # return False if both are blank return cat or tasks # # # # list of compounds with no category and no tasks compounds = [] # check all compounds in all workgroups for wg in si.Workgroups: d = siut.BuildPath( wg, "Data", "Compounds" ); for filename in find_files(d, '*.xsicompound'): b = check_xsicompound( filename ) if not b: compounds.append( filename ) log( "%d compounds found with no category and no tasks:" % (len(compounds)) ) for f in compounds: log( f )