Ok, after hours trying to figure out what's going on with the "findAndReplaceWorkspacePath" I'm just giving up and reaching out for help. So far, I am thinking that this method provides completely unexpected/unstable/unreliable results. But before I get to far with my frustrations, I need somebody to review this code and let me know what I am doing wrong. The problem is that the workspace path of the layer files don't get re-pointed to the new SDE connection file, whether I use validate = True or False. When set to True the script crashes miserably, even though the connection file/parameters is valid, so it this example I set it to False, which you would expect to work, but it does not! This scripts loops through a root folder, recursively finds all the ".lyr" file under the root and re-points the workspacePath location. It can be executed in PythonWin/Idle or the ArcMap Python window, the results are the same i.e. unexpected/unstable/unreliable i.e. the layers don't get re-pointed.
import arcpy, sys, os, traceback, time, sys, random, string root = r"D:\eaub490\repath_layers\DNR Map Layers\Forest Management" for path, folders, fileList in os.walk(root): print "*************\nFolder: " + path + "\n*************" for f in fileList: print f if f.endswith(".lyr"): lyr = arcpy.mapping.Layer(path + "\\" + f) if lyr.isGroupLayer == False: if lyr.supports("WORKSPACEPATH"): if ".sde" in lyr.workspacePath: workPath = lyr.workspacePath print " * Old:", workPath if lyr.isFeatureLayer: workPathNew = r"D:\eaub490\repath_layers\sde_connections_read\ropa_v10.sde" # this is a valid connection file lyr.findAndReplaceWorkspacePath("", workPathNew, False) # when validate = True then it becomes extremely unstable and unpredictable else: workPathNew = r"D:\eaub490\repath_layers\sde_connections_read\raster_v10.sde" lyr.findAndReplaceWorkspacePath("", workPathNew, False) lyr.visible = False # turn the visibility off lyr.save() # save to v.10 if lyr.workspacePath <> workPathNew: # check because the findAndReplaceWorkspacePath does not always works print " * Dang! the findAndReplaceWorkspacePath does not work:", lyr.workspacePath else: print " * New:", lyr.workspacePath else: print " * Not a SDE layer" else: print " * Workspacepath not supported" else: print " * Group layer, cannot be re-pathed" # as far as I know else: print " * Not a layer file" print "\nEnd of program\n"