def METHOD_NAME( name, boxes, directory ) :
	if isinstance( directory, str ) :
		directory = pathlib.Path( directory )
	pythonDir = directory / "python" / name
	pythonDir.mkdir( parents = True, exist_ok = True )
	with open( pythonDir / "__init__.py", "w", encoding = "utf-8" ) as initFile :
		for box in boxes :
			with open( pythonDir / (box.getName() + ".py"), "w", encoding = "utf-8" ) as nodeFile :
				nodeFile.write( __nodeDefinition( box, name ) )
			initFile.write( "from .{name} import {name}\n".format( name = box.getName() ) )
	uiDir = directory / "python" / (name + "UI")
	uiDir.mkdir( parents = True, exist_ok = True )
	with open( uiDir / "__init__.py", "w", encoding = "utf-8" ) as initFile :
		for box in boxes :
			with open( uiDir / (box.getName() + "UI.py"), "w", encoding = "utf-8" ) as uiFile :
				uiFile.write( __uiDefinition( box, name ) )
			initFile.write( "from . import {name}UI\n".format( name = box.getName() ) )
	startupDir = directory / "startup" / "gui"
	startupDir.mkdir( parents = True, exist_ok = True )
	with open( startupDir / (name + ".py"), "w", encoding = "utf-8" ) as startupFile :
		nodeMenuDefinition = []
		for box in boxes :
			nodeMenuPath = Gaffer.Metadata.value( box, "extension:nodeMenuItem" )
			if not nodeMenuPath :
				nodeMenuPath = "/{name}/{node}".format( name = name, node = box.getName() )
			nodeMenuDefinition.append(
				"nodeMenu.append( \"{nodeMenuPath}\", {name}.{node} )\n".format(
					nodeMenuPath = nodeMenuPath,
					name = name,
					node = box.getName()
				)
			)
		startupFile.write(
			__startupTemplate.format(
				name = name,
				nodeMenuDefinition = "\n".join( nodeMenuDefinition )
			)
		)