Ejemplo n.º 1
0
def compareTables(base_table, test_table, workspace):
    # Set local variables
    sort_field = "OBJECTID"
    compare_type = "SCHEMA_ONLY"
    ignore_option = ""
    attribute_tolerance = ""
    omit_field = ""
    continue_compare = "CONTINUE_COMPARE"
    compare_file = workspace + "_py/schema_issues.txt"

    # Process: FeatureCompare
    compare_result = arcpy.TableCompare_management(
        base_table, test_table, sort_field, compare_type, ignore_option,
        attribute_tolerance, omit_field, continue_compare, compare_file)
    logger.info(
        'outputed text file of the schema differences to the following location: %s',
        compare_file)
Ejemplo n.º 2
0
 def test_emptyTableText(self):
     makeEmptyADSTable('UnitTestEmptyTable', outputWorkspace)
     arcpy.TableCompare_management(os.path.join(
         outputWorkspace, 'UnitTestEmptyTable'), emptyTablePath)
     self.assertIn(emptyTableText, arcpy.GetMessages())
Ejemplo n.º 3
0
for k in bseTclst:
    try:
        # Set local variables
        base_table = str(os.path.join(bseGdb, k))
        test_table = str(os.path.join(tgtGdb, k))
        #print base_table + " <> " +test_table
        sort_field = sortField
        compare_type = "ALL"
        ignore_option = "IGNORE_EXTENSION_PROPERTIES"
        attribute_tolerance = "#"
        omit_field = "#"
        continue_compare = "CONTINUE_COMPARE"

        # Process: FeatureCompare
        compare_result = arcpy.TableCompare_management(
            base_table, test_table, sort_field, compare_type, ignore_option,
            attribute_tolerance, omit_field, continue_compare, compare_file)
        fn.write("\n---------------\n")
        fn.write("For Table name :" + base_table + "\n")
        fn.write("\n---------------\n")
        fn.write(arcpy.GetMessages())
        fn.write("\n---------------\n")
        f = open(compare_file)
        f1 = open(outCsv, 'a')
        for x in f.readlines():
            ss = str(x)
            checker1 = None
            if ',Different,' in ss:
                checker1 = True
            if 'Feature Types Are Different' in ss:
                checker1 = True
Ejemplo n.º 4
0
def compare_data(data):
    """TODO: add description"""
    max_severity = 0
    data_paths = [d['FILE PATH'] for d in data if os.path.exists(d['FILE PATH'])]
    if len(data_paths) == 1:
        return 1
    elif len(data_paths) == 0:
        return 1

    common_file_exts = ['.xyz', '.grd', '.txt', '.tab', '.ecw', '.lyr']
    common_raster_exts = ['.tif', '.jpg', '.img', '.png']
    common_gis_exts = ['.shp']
    common_cad_exts = ['.dxf']
    common_fds_exts = ['.sdc']
    common_workspace_exts = ['.gdb', '.mdb']

    ext = os.path.splitext(data_paths[0])[1].lower()
    if ext in common_file_exts:
        data_type = 'file'
    elif ext in common_raster_exts:
        data_type = 'rasterdataset'
    elif ext in common_gis_exts:
        data_type = 'shapefile'
    elif ext in common_cad_exts:
        data_type = 'caddrawingdataset'
    elif ext in common_workspace_exts:
        data_type = 'workspace'
    elif ext in common_fds_exts:
        data_type = 'featuredataset'
    elif ext in ['.mxd']:
        data_type = 'mapdocument'
    else:
        # Determine type of data
        data_type = arcpy.Describe(data_paths[0]).dataType

    # Create combinations of items
    combs = {}
    combs[data_paths[0]] = data_paths[1:]

    for item in combs.values()[0]:
        try:
            if data_type.lower() == 'shapefile':
                sort_field = get_sort_field([item, data_paths[0]])
                if sort_field:
                    result = arcpy.FeatureCompare_management(item, data_paths[0], sort_field, continue_compare=False)
                    max_severity = result.maxSeverity
                    if max_severity > 0:
                        break
            elif data_type.lower() == 'rasterdataset':
                # result = arcpy.RasterCompare_management(item, data_paths[0], continue_compare=False)
                # max_severity = result.maxSeverity
                max_serverity = raster_compare(item, data_paths[0])
                if max_severity > 0:
                    break
            elif data_type.lower() in ('arcinfotable', 'dbasetable'):
                sort_field = get_sort_field([item, data_paths[0]])
                if sort_field:
                    result = arcpy.TableCompare_management(item, data_paths[0], sort_field, continue_compare=False)
                    max_severity = result.maxSeverity
                    if max_severity > 0:
                        break
            elif data_type.lower() in ('file', 'textfile', 'prjfile', 'toolbox', 'layer'):
                if is_ascii(item):
                    result = arcpy.FileCompare_management(item, data_paths[0], "ASCII", False)
                    max_severity = result.maxSeverity
                    if max_severity > 0:
                        break
                else:
                    result = arcpy.FileCompare_management(item, data_paths[0], "BINARY", False)
                    max_severity = result.maxSeverity
                    if max_severity > 0:
                        break

            elif data_type.lower() == 'mapdocument':
                mxdA = arcpy.mapping.MapDocument(data_paths[0])
                data_framesA = arcpy.mapping.ListDataFrames(mxdA)
                mxdB = arcpy.mapping.MapDocument(item)
                data_framesB = arcpy.mapping.ListDataFrames(mxdB)

                # Compare dataframes
                if not sorted([dfA.name for dfA in data_framesA]) == sorted([dfB for dfB in data_framesB]):
                    max_severity = 1
                    break
                else:
                    # Compare layers in each dataframe
                    layersA = []
                    layersB = []
                    for dframe in data_framesA:
                        lyrs = arcpy.mapping.ListLayers(mxdA, data_frame=dframe)
                        if lyrs:
                            for lA in lyrs:
                                layersA.append(lA.name)
                    for dframe in data_framesB:
                        lyrs = arcpy.mapping.ListLayers(mxdB, data_frame=dframe)
                        if lyrs:
                            for lB in lyrs:
                                layersB.append(lB.name)
                    if not sorted(layersA) == sorted(layersB):
                        max_severity = 1
                        break

            elif data_type.lower() == 'workspace':
                max_severity = compare_geodatabases([data_paths[0], item])
                if max_severity > 0:
                    break

            elif data_type.lower() in ('featuredataset', 'caddrawingdataset'):
                arcpy.env.workspace = data_paths[0]
                fcsA = sorted([fc.lower() for fc in arcpy.ListFeatureClasses()])
                arcpy.env.workspace = item
                fcsB = sorted([fc.lower() for fc in arcpy.ListFeatureClasses()])
                if not len(fcsA) == len(fcsB):
                    max_severity = 1
                    break
                else:
                    for i, fc in enumerate(fcsA):
                        sort_field = get_sort_field([os.path.join(data_paths[0], fc), os.path.join(item, fcsB[i])])
                        if sort_field:
                            result = arcpy.FeatureCompare_management(os.path.join(data_paths[0], fc), os.path.join(item, fcsB[i]), sort_field, continue_compare=False)
                            max_severity = result.maxSeverity
                            if max_severity > 0:
                                break
        except arcpy.ExecuteError:
            status_writer.send_status(arcpy.GetMessages())
            max_severity = 0
            break
    return max_severity