Changeset 1954 for TI01-discovery/trunk


Ignore:
Timestamp:
04/01/07 18:47:10 (13 years ago)
Author:
selatham
Message:

cope with multiple bounding boxes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/trunk/ingestAutomation/OAIBatch/SpaceTimeIngestFromMOLES.py

    r1949 r1954  
    1010connection = db_funcs.db_connect() 
    1111 
     12def listify(item): 
     13                ''' listify checks if an item is a list, if it isn't it puts it inside a list and returns it. Always returns a list object.''' 
     14                if type(item) is list: 
     15                        return item 
     16                else: 
     17                        return [item] 
     18 
    1219def id_exists(Mid): 
    13         sql = "select id from spatiotemp where id = '"+Mid+"';" 
    14         cursor = connection.cursor() 
    15         try: 
    16             cursor.execute(sql) 
    17         except: 
    18             print "Error: database error %s %s" %(sys.exc_type, sys.exc_value) 
    19         if len(cursor.fetchall()) <1: 
    20             return False 
    21         else: 
    22             return True 
     20                sql = "select id from spatiotemp where id = '"+Mid+"';" 
     21                cursor = connection.cursor() 
     22                try: 
     23                        cursor.execute(sql) 
     24                except: 
     25                        print "Error: database error %s %s" %(sys.exc_type, sys.exc_value) 
     26                if len(cursor.fetchall()) <1: 
     27                        return False 
     28                else: 
     29                        return True 
    2330 
    2431 
    2532def do_insert(Mid,west,south,east,north,startdate,enddate): 
    26         sql = "INSERT INTO spatiotemp (id, coordinates, startdate, enddate) VALUES ( '"+Mid+ "', sbox'(("+west+"d , "+south+"d), ("+east+"d , "+north+"d))', '"+startdate+"', '"+enddate+"');" 
    27         print sql 
    28         cursor = connection.cursor() 
    29         try: 
    30             cursor.execute(sql) 
    31         except: 
    32             print "Error: database error %s %s" %(sys.exc_type, sys.exc_value) 
    33         connection.commit() 
     33                sql = "INSERT INTO spatiotemp (id, coordinates, startdate, enddate) VALUES ( '"+Mid+ "', sbox'(("+west+"d , "+south+"d), ("+east+"d , "+north+"d))', '"+startdate+"', '"+enddate+"');" 
     34                print sql 
     35                cursor = connection.cursor() 
     36                try: 
     37                        cursor.execute(sql) 
     38                except: 
     39                        print "Error: database error %s %s" %(sys.exc_type, sys.exc_value) 
     40                        connection.commit() 
    3441 
    3542def do_update(Mid,west,south,east,north,startdate,enddate): 
    36         sql = "UPDATE spatiotemp SET coordinates = sbox'(("+west+"d , "+south+"d), ("+east+"d , "+north+"d))', startdate='"+startdate+"', enddate= '"+enddate+"', update_time= now() WHERE id='"+Mid+"';" 
    37         print sql 
    38         cursor = connection.cursor() 
    39         try: 
    40             cursor.execute(sql) 
    41         except: 
    42             print "Error: database error %s %s" %(sys.exc_type, sys.exc_value) 
    43         connection.commit() 
     43                sql = "UPDATE spatiotemp SET coordinates = sbox'(("+west+"d , "+south+"d), ("+east+"d , "+north+"d))', startdate='"+startdate+"', enddate= '"+enddate+"', update_time= now() WHERE id='"+Mid+"';" 
     44                print sql 
     45                cursor = connection.cursor() 
     46                try: 
     47                        cursor.execute(sql) 
     48                except: 
     49                        print "Error: database error %s %s" %(sys.exc_type, sys.exc_value) 
     50                        connection.commit() 
    4451 
    4552def main(indir): 
     
    5562    filenames = os.listdir(indir) 
    5663    for filename in filenames: 
    57             if filename.find('.xml') != -1: 
    58                 full_filename = indir + "/" + filename 
    59                 #print full_filename 
    60                 no_bbox = False 
    61                 no_dates = False 
    62                 dgMeta=MRW.dgMetadata() 
    63                 try: 
    64                     dgMeta.fromXML(cElementTree.ElementTree(file=full_filename).getroot()) 
    65                 except: 
    66                     print "WARNING: Cannot parse the XML moles document %s. Will not process" %full_filename 
    67                     continue 
    68                 try: 
    69                     bbox=dgMeta.dgMetadataRecord.dgDataEntity.dgDataSummary.dgDataCoverage.dgSpatialCoverage.BoundingBox 
    70                     print bbox 
    71                     if type(bbox) == tuple: 
    72                         bbox==string(bbox[0]) 
    73                 except: 
    74                     print "INFO: XML moles document %s does not contain a bounding box." %full_filename 
    75                     no_bbox=True 
    76                 try: 
    77                     dates=dgMeta.dgMetadataRecord.dgDataEntity.dgDataSummary.dgDataCoverage.dgTemporalCoverage.DateRange 
    78                     print dates 
    79                 except: 
    80                     print "INFO: XML moles document %s does not contain temporal info." %full_filename 
    81                     no_dates=True 
     64                Mid = filename 
     65                print Mid 
     66                if filename.find('.xml') != -1: 
     67                        full_filename = indir + "/" + filename 
     68                        #print full_filename 
     69                        no_bbox = False 
     70                        no_dates = False 
     71                        dgMeta=MRW.dgMetadata() 
     72                        try: 
     73                                dgMeta.fromXML(cElementTree.ElementTree(file=full_filename).getroot()) 
     74                        except: 
     75                                print "WARNING: Cannot parse the XML moles document %s. Will not process" %full_filename 
     76                                continue 
    8277 
    83                 if no_bbox and no_dates: 
    84                     print "INFO: XML moles document %s does not contain any spatiotemporal info." %full_filename 
    85                     continue 
    86                 #coverage= [dates.DateRangeEnd, dates.DateRangeStart, bbox.LimitNorth, bbox.LimitSouth,bbox.LimitEast, bbox.LimitWest] 
    87                 #Mid = dgMeta.dgMetadataRecord.dgMetadataID.repositoryIdentifier+"__"+dgMeta.dgMetadataRecord.dgMetadataID.localIdentifier 
    88                 Mid = filename 
    89                 print Mid 
    90                 #parse the coordinates somewhat 
    91                 #west 
    92                 west = bbox.LimitWest.strip() 
    93                 if west.endswith('E'): 
    94                     west=bbox.LimitWest.split('E')[0] 
    95                 elif west.endswith('W'): 
    96                     if west.startswith('-'): 
    97                         west = bbox.LimitWest.split('W')[0] 
    98                     else: 
    99                         west = "-" +bbox.LimitWest.split('W')[0] 
    100                 try: 
    101                     float(west) 
    102                 except: 
    103                     print "ERROR:  Will not process File %s. Contains incorrect West bounding box limit." %full_filename 
    104                     continue 
    105                 #print "West = %s" %west 
    106                 #east 
    107                 east = bbox.LimitEast.strip() 
    108                 if east.endswith('E'): 
    109                     east=bbox.LimitEast.split('E')[0] 
    110                 elif east.endswith('W'): 
    111                     if east.startswith('-'): 
    112                         east = bbox.LimitEast.split('W')[0] 
    113                     else: 
    114                         east = "-" +bbox.LimitEast.split('W')[0] 
    115                 try: 
    116                     float(east) 
    117                 except: 
    118                     print "ERROR:  Will not process File %s. Contains incorrect East bounding box limit." %full_filename 
    119                     continue 
    120                 #print "East = %s" %east 
    121                 #north 
    122                 north = bbox.LimitNorth.strip() 
    123                 if north.endswith('N'): 
    124                     north=bbox.LimitNorth.split('N')[0] 
    125                 elif north.endswith('S'): 
    126                     if north.startswith('-'): 
    127                         north = bbox.LimitNorth.split('S')[0] 
    128                     else: 
    129                         north = "-" +bbox.LimitNorth.split('S')[0] 
    130                 try: 
    131                     float(north) 
    132                 except: 
    133                     print "ERROR: Will not process File %s. Contains incorrect North bounding box limit." %full_filename 
    134                     continue 
    135                 #print "North = %s" %north 
    136                 #south 
    137                 south = bbox.LimitSouth.strip() 
    138                 if south.endswith('N'): 
    139                     south=bbox.LimitSouth.split('N')[0] 
    140                 elif south.endswith('S'): 
    141                     if south.startswith('-'): 
    142                         south = bbox.LimitSouth.split('S')[0] 
    143                     else: 
    144                         south = "-" +bbox.LimitSouth.split('S')[0] 
    145                 try: 
    146                     float(south) 
    147                 except: 
    148                     print "ERROR: Will not process File %s. Contains incorrect North bounding box limit." %full_filename 
    149                     continue 
    150                 #print "North = %s" %south 
     78                        try: 
     79                                bbox_list=listify(dgMeta.dgMetadataRecord.dgDataEntity.dgDataSummary.dgDataCoverage.dgSpatialCoverage.BoundingBox) 
     80                        except: 
     81                                print "INFO: XML moles document %s does not contain a bounding box." %full_filename 
     82                                no_bbox=True 
    15183 
    152                 if id_exists( Mid ): 
    153                     print "INFO: doc %s exists, updating\n" %Mid 
    154                     do_update( Mid, west, south, east, north, dates.DateRangeStart, dates.DateRangeEnd ) 
     84                        try: 
     85                                dates=dgMeta.dgMetadataRecord.dgDataEntity.dgDataSummary.dgDataCoverage.dgTemporalCoverage.DateRange 
     86                                print dates 
     87                        except: 
     88                                print "INFO: XML moles document %s does not contain temporal info." %full_filename 
     89                                no_dates=True 
     90 
     91                        if no_bbox and no_dates: 
     92                                print "INFO: XML moles document %s does not contain any spatiotemporal info." %full_filename 
     93                                continue 
     94 
     95                        if no_bbox: 
     96                                pass 
     97                        else: 
     98                                # for bbox in bbox_list: 
     99                                #parse the coordinates somewhat - only use the first bounding box. 
     100                                print bbox_list 
     101                                bbox=bbox_list[0] 
     102                                print bbox 
     103                                #west 
     104                                west = bbox.LimitWest.strip() 
     105                                if west.endswith('E'): 
     106                                        west=bbox.LimitWest.split('E')[0] 
     107                                elif west.endswith('W'): 
     108                                        if west.startswith('-'): 
     109                                                west = bbox.LimitWest.split('W')[0] 
     110                                        else: 
     111                                                west = "-" +bbox.LimitWest.split('W')[0] 
     112                                try: 
     113                                        float(west) 
     114                                except: 
     115                                        print "ERROR:  Will not process File %s. Contains incorrect West bounding box limit." %full_filename 
     116                                        continue 
     117                                #print "West = %s" %west 
     118                                #east 
     119                                east = bbox.LimitEast.strip() 
     120                                if east.endswith('E'): 
     121                                        east=bbox.LimitEast.split('E')[0] 
     122                                elif east.endswith('W'): 
     123                                        if east.startswith('-'): 
     124                                                east = bbox.LimitEast.split('W')[0] 
     125                                        else: 
     126                                                east = "-" +bbox.LimitEast.split('W')[0] 
     127                                try: 
     128                                        float(east) 
     129                                except: 
     130                                        print "ERROR:  Will not process File %s. Contains incorrect East bounding box limit." %full_filename 
     131                                        continue 
     132                                #print "East = %s" %east 
     133                                #north 
     134                                north = bbox.LimitNorth.strip() 
     135                                if north.endswith('N'): 
     136                                        north=bbox.LimitNorth.split('N')[0] 
     137                                elif north.endswith('S'): 
     138                                        if north.startswith('-'): 
     139                                                north = bbox.LimitNorth.split('S')[0] 
     140                                        else: 
     141                                                north = "-" +bbox.LimitNorth.split('S')[0] 
     142                                try: 
     143                                        float(north) 
     144                                except: 
     145                                        print "ERROR: Will not process File %s. Contains incorrect North bounding box limit." %full_filename 
     146                                        continue 
     147                                #print "North = %s" %north 
     148                                #south 
     149                                south = bbox.LimitSouth.strip() 
     150                                if south.endswith('N'): 
     151                                        south=bbox.LimitSouth.split('N')[0] 
     152                                elif south.endswith('S'): 
     153                                        if south.startswith('-'): 
     154                                                south = bbox.LimitSouth.split('S')[0] 
     155                                        else: 
     156                                                south = "-" +bbox.LimitSouth.split('S')[0] 
     157                                try: 
     158                                        float(south) 
     159                                except: 
     160                                        print "ERROR: Will not process File %s. Contains incorrect North bounding box limit." %full_filename 
     161                                        continue 
     162                                #print "North = %s" %south 
     163 
     164                        if id_exists( Mid ): 
     165                                print "INFO: doc %s exists, updating\n" %Mid 
     166                                do_update( Mid, west, south, east, north, dates.DateRangeStart, dates.DateRangeEnd ) 
     167                        else: 
     168                                print "INFO: doc %s does not exist, inserting new record\n" %Mid 
     169                                do_insert( Mid, west, south, east, north, dates.DateRangeStart, dates.DateRangeEnd ) 
     170                        numfilesproc += 1 
    155171                else: 
    156                     print "INFO: doc %s does not exist, inserting new record\n" %Mid 
    157                     do_insert( Mid, west, south, east, north, dates.DateRangeStart, dates.DateRangeEnd ) 
    158  
    159                 numfilesproc += 1 
    160  
    161             else: 
    162                 print "WARNING: File %s appears not to be XML. Will not be processed." %filename 
     172                        print "WARNING: File %s appears not to be XML. Will not be processed." %filename 
    163173 
    164174    print 'INFO: SpaceTimeIngestFromMOLES.py ran to end. files processed= %s' %(numfilesproc) 
Note: See TracChangeset for help on using the changeset viewer.