I've created a Python add-in button that helps speed up my coworkers workflow by copying one feature class attribute to another. It uses the arcpy.UpdateCursor function to update a row in the target feature class. As it exists now, this button script can be run regardless of the editing mode. Obviously when its run in an edit session, the user can choose to stop editing and not save changes, but this is not the case when the script runs outside of an edit session.
How can I add a check to the script that will stop the script from running if ArcMap is not currently in an edit session?
This concerns ArcMap 10 & 10.1
I also want to check with other ArcMap users to verify that updates to tables is not normally allowed without being in an edit session.
So how is this script running outside of an edit session?
This script also brings up another question about the seemingly serendipitous selection order ArcMap performs that just happens to work for me when I update the 2nd feature class table from a list, but that's for another day.
Here's the script as it works now (without any 10.1 editor implementation):
How to add a check to ensure the user is in an edit session?
def onClick(self): #Reference mxd mxd = arcpy.mapping.MapDocument("CURRENT") #Reference the main Data frame mm = arcpy.mapping.ListDataFrames(mxd, "MainMap") #Reference the Water System Valve feature class waterValves = arcpy.mapping.ListLayers(mxd, "Water System Valve", mm) #Reference the fire hydrant feature class fireHydrants = arcpy.mapping.ListLayers(mxd, "Water Hydrant", mm) #Use the extent of the main DF to select all valves in the current view dfAsFeature = arcpy.Polygon(arcpy.Array([mm.extent.lowerLeft, mm.extent.lowerRight, mm.extent.upperRight, mm.extent.upperLeft]), mm.spatialReference) arcpy.SelectLayerByLocation_management(waterValves, "WITHIN", dfAsFeature,"", "NEW_SELECTION") arcpy.SelectLayerByAttribute_management(waterValves, "SUBSET_SELECTION", "LOCATIONID IS NULL") fields = ["LOCATIONID"] row, rows = None, None rows = arcpy.UpdateCursor(waterValves,fields) row = rows.next() valveList =  append = valveList.append #Loop through the valves table to update LocationID while row: builder = str(row.QSNO)+"-"+ str(row.VALVESEQNO) row.setValue("LOCATIONID", builder) append(builder) rows.updateRow(row) row = rows.next() del row, rows #New selection for fire hydrants arcpy.SelectLayerByLocation_management(fireHydrants, "WITHIN", dfAsFeature,"", "NEW_SELECTION") arcpy.SelectLayerByAttribute_management(fireHydrants, "SUBSET_SELECTION", "LOCATIONID IS NULL") row, rows = None, None rows = arcpy.UpdateCursor(fireHydrants,fields) row = rows.next() #Loop through fire hydrant table to update LocationID while row: for locID in valveList: construct = str(locID) + "-FH" #print construct row.setValue("LOCATIONID", construct) rows.updateRow(row) row = rows.next() del row, rows, valveList, mxd