"""
ArcGIS script to delete empty feature classes from an existing
geodatabase. Will work for geodatabases with or without feature
datasets: empty feature datasets will also be removed. Can be used on
local (file) geodatabases or on ArcSDE connections. Writes a text log of
removed feature classes to working directory. Empty feature classes that
ArcGIS is unable to delete will be reported & skipped: any unremovable
feature classes must be removed manually.
"""

import arcpy
import os
import sys
from arc_messaging import message as msg

def delete_it(lyr, deleted):
    try:
        count_result = arcpy.GetCount_management(lyr)
        rownum = int(count_result.getOutput(0))
            # int() necessary because count_result returns a string
    except arcpy.ExecuteError as e:
        msg(e)
        pass
    if rownum == 0:
        arcpy.Delete_management(lyr)
        deleted.append("{0}\n".format(lyr))
        msg("Deleted: {0}".format(lyr))

if __name__ == "__main__":
    gdb = sys.argv[1]
    working_dir = os.path.split(gdb)[0]
    log = os.path.join(working_dir, "deleted_empties.txt")
    deleted = []
    arcpy.env.workspace = gdb

    msg("***Beginning processing for {0}***".format(gdb))

    datasets = arcpy.ListDatasets()
    root_tables = arcpy.ListTables()
    root_fcs = arcpy.ListFeatureClasses()

    for ds in datasets:
        for fc in arcpy.ListFeatureClasses(feature_dataset = ds):
            delete_it(fc, deleted)

    for fc in root_fcs:
        delete_it(fc, deleted)

    for tab in root_tables:
        delete_it(tab, deleted)

    with open(log, "a") as log:
        log.write("DELETED: \n")
        for d in deleted:
            log.write(d)
