Changeset 1971


Ignore:
Timestamp:
08/01/07 19:13:41 (13 years ago)
Author:
selatham
Message:

Changes for getting id for filename from inside Discovery record.

Location:
TI01-discovery/trunk/ingestAutomation/OAIBatch
Files:
5 edited

Legend:

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

    r1954 r1971  
    1111 
    1212def 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] 
     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] 
    1818 
    1919def id_exists(Mid): 
    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 
     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 
    3030 
    3131 
    3232def do_insert(Mid,west,south,east,north,startdate,enddate): 
    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() 
     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() 
    4141 
    4242def do_update(Mid,west,south,east,north,startdate,enddate): 
    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() 
     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() 
    5151 
    5252def main(indir): 
     
    6262    filenames = os.listdir(indir) 
    6363    for filename in filenames: 
    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 
     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 
     77            try: 
     78                bbox_list=listify(dgMeta.dgMetadataRecord.dgDataEntity.dgDataSummary.dgDataCoverage.dgSpatialCoverage.BoundingBox) 
     79            except: 
     80                print "INFO: XML moles document %s does not contain a bounding box." %full_filename 
     81                no_bbox=True 
     82            try: 
     83                dates=dgMeta.dgMetadataRecord.dgDataEntity.dgDataSummary.dgDataCoverage.dgTemporalCoverage.DateRange 
     84                print dates 
     85            except: 
     86                print "INFO: XML moles document %s does not contain temporal info." %full_filename 
     87                no_dates=True 
    7788 
    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 
     89            if no_bbox and no_dates: 
     90                print "INFO: XML moles document %s does not contain any spatiotemporal info." %full_filename 
     91                continue 
    8392 
    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 
     93            if no_bbox: 
     94                pass 
     95            else: 
     96                # for bbox in bbox_list: 
     97                #parse the coordinates somewhat - only use the first bounding box. 
     98                print bbox_list 
     99                bbox=bbox_list[0] 
     100                print bbox 
     101                #west 
     102                west = bbox.LimitWest.strip() 
     103                if west.endswith('E'): 
     104                    west=bbox.LimitWest.split('E')[0] 
     105                elif west.endswith('W'): 
     106                    if west.startswith('-'): 
     107                        west = bbox.LimitWest.split('W')[0] 
     108                    else: 
     109                        west = "-" +bbox.LimitWest.split('W')[0] 
     110                try: 
     111                    float(west) 
     112                except: 
     113                    print "ERROR:  Will not process File %s. Contains incorrect West bounding box limit." %full_filename 
     114                    continue 
     115                #print "West = %s" %west 
     116                #east 
     117                east = bbox.LimitEast.strip() 
     118                if east.endswith('E'): 
     119                    east=bbox.LimitEast.split('E')[0] 
     120                elif east.endswith('W'): 
     121                    if east.startswith('-'): 
     122                        east = bbox.LimitEast.split('W')[0] 
     123                    else: 
     124                        east = "-" +bbox.LimitEast.split('W')[0] 
     125                try: 
     126                    float(east) 
     127                except: 
     128                    print "ERROR:  Will not process File %s. Contains incorrect East bounding box limit." %full_filename 
     129                    continue 
     130                #print "East = %s" %east 
     131                #north 
     132                north = bbox.LimitNorth.strip() 
     133                if north.endswith('N'): 
     134                    north=bbox.LimitNorth.split('N')[0] 
     135                elif north.endswith('S'): 
     136                    if north.startswith('-'): 
     137                        north = bbox.LimitNorth.split('S')[0] 
     138                    else: 
     139                        north = "-" +bbox.LimitNorth.split('S')[0] 
     140                try: 
     141                    float(north) 
     142                except: 
     143                    print "ERROR: Will not process File %s. Contains incorrect North bounding box limit." %full_filename 
     144                    continue 
     145                #print "North = %s" %north 
     146                #south 
     147                south = bbox.LimitSouth.strip() 
     148                if south.endswith('N'): 
     149                    south=bbox.LimitSouth.split('N')[0] 
     150                elif south.endswith('S'): 
     151                    if south.startswith('-'): 
     152                        south = bbox.LimitSouth.split('S')[0] 
     153                    else: 
     154                        south = "-" +bbox.LimitSouth.split('S')[0] 
     155                try: 
     156                    float(south) 
     157                except: 
     158                    print "ERROR: Will not process File %s. Contains incorrect North bounding box limit." %full_filename 
     159                    continue 
     160                #print "North = %s" %south 
    90161 
    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 
    171                 else: 
    172                         print "WARNING: File %s appears not to be XML. Will not be processed." %filename 
     162            if id_exists( Mid ): 
     163                print "INFO: doc %s exists, updating\n" %Mid 
     164                do_update( Mid, west, south, east, north, dates.DateRangeStart, dates.DateRangeEnd ) 
     165            else: 
     166                print "INFO: doc %s does not exist, inserting new record\n" %Mid 
     167                do_insert( Mid, west, south, east, north, dates.DateRangeStart, dates.DateRangeEnd ) 
     168            numfilesproc += 1 
     169        else: 
     170            print "WARNING: File %s appears not to be XML. Will not be processed." %filename 
    173171 
    174172    print 'INFO: SpaceTimeIngestFromMOLES.py ran to end. files processed= %s' %(numfilesproc) 
  • TI01-discovery/trunk/ingestAutomation/OAIBatch/bodc_config.properties

    r1889 r1971  
    1515#Define the data providers namespace 
    1616namespace bodc.nerc.ac.uk 
     17#Say whether this is a full NDG data Provider who uses NDG identifiers etc. 
     18NDG_dataProvider 
  • TI01-discovery/trunk/ingestAutomation/OAIBatch/neodc_config.properties

    r1889 r1971  
    1515#Define the data providers namespace 
    1616namespace neodc.nerc.ac.uk 
     17#Say whether this is a full NDG data Provider who uses NDG identifiers etc. 
     18NDG_dataProvider 
  • TI01-discovery/trunk/ingestAutomation/OAIBatch/nocs_config.properties

    r1889 r1971  
    1515#Define the data providers namespace 
    1616namespace noc.soton.ac.uk 
     17# 
  • TI01-discovery/trunk/ingestAutomation/OAIBatch/oai_ingest.py

    r1898 r1971  
    3636datacentre_format = "" 
    3737datacentre_namespace = "" 
     38NDG_dataProvider = False 
    3839 
    3940if (len(sys.argv) < 2): 
     
    7071    if words[0] == 'namespace': 
    7172        datacentre_namespace = words[1] 
     73    if words[0] == 'NDG_dataProvider': 
     74        NDG_dataProvider = True 
     75 
    7276datacentre_config_file.close() 
    7377 
     
    143147 
    144148 
    145 #Execute the script which processes/renames the files (changed 24/11/06 to simply create a re-named file in the outdir) 
     149#Execute the script which processes/renames the files (changed 08/01/07 to get id from inside file) 
    146150indir="/usr/local/WSClients/OAIBatch/data/" + datacentre +"/oai/originals" 
    147151outdir="/usr/local/WSClients/OAIBatch/data/" + datacentre +"/discovery" 
     
    151155        if filename.find('.xml') != -1: 
    152156                original_filename = indir + "/" + filename 
    153                 #print "Creating renamed file : " 
    154                 new_filename = outdir + "/" +datacentre_namespace+ "__" +filename.split('%3A')[-1] 
    155                 #print "original file = %s, newfile = %s" %(original_filename, new_filename) 
     157                if datacentre_format == "DIF": 
     158                    from DIF import DIF 
     159                    from ETxmlView import loadET 
     160                    xml=file(original_filename).read() 
     161                    y=loadET(xml) 
     162                    d=DIF(xml) 
     163                    print d.entryID 
     164                    if NDG_dataProvider: 
     165                        new_filename = outdir + "/"+d.entryID.replace(":","__")+".xml" 
     166                    else: 
     167                        new_filename = outdir + "/" +datacentre_namespace+ "__"+datacentre_format+ "__"+d.entryID+".xml" 
     168                else: 
     169                    sys.exit("Doesn't handle anything else but DIF here.") 
     170                #new_filename = outdir + "/" +datacentre_namespace+ "__"+datacentre_format+ "__"+filename.split('%3A')[-1] 
     171                print "original file = %s, newfile = %s" %(original_filename, new_filename) 
    156172                commandline = "cp "+original_filename+ " " +new_filename 
    157173                #print "Executing : " + commandline 
    158                 status = os.system(commandline) 
    159                 if status !=0: 
    160                         sys.exit("Failed at re-naming file stage") 
    161                 #oaiClean.oaiClean(indir,outdir,filename,wrapFlag) 
     174                status = os.system(commandline) 
     175                if status !=0: 
     176                    sys.exit("Failed at re-naming file stage") 
    162177                numfilesproc += 1 
    163178        else: 
     
    170185if status !=0: 
    171186    sys.exit("Failed at ingesting into exist db. Datacentre =  %s. Status = %s" %(datacentre,status)) 
     187 
     188#are there any old records hanging around.If so, copy away 
     189outdir = "./DIF2MOLES" 
     190try: 
     191    os.stat(outdir) 
     192except: 
     193    print "No old moles records hanging around" 
     194else: 
     195    commandline = "ls -1 ./DIF2MOLES | xargs -i rm ./DIF2MOLES/{\}" 
     196    print "Executing : " + commandline 
     197    status = os.system(commandline) 
     198    if status !=0: 
     199        sys.exit("Failed at clearing out DIF2MOLES area.") 
     200    commandline = "rmdir ./DIF2MOLES" 
     201    print "Executing : " + commandline 
     202    status = os.system(commandline) 
     203    if status !=0: 
     204        sys.exit("Failed at removing DIF2MOLES directory.") 
    172205 
    173206# Then run the minimum moles creator  which will run over all records in the supplied collection 
     
    179212    print "ERROR: couldn't create the minimum moles records" 
    180213    sys.exit 
    181 #are there any records 
    182 outdir = "./DIF2MOLES" 
     214#There should be some records now 
    183215try: 
    184216    os.stat(outdir) 
    185217except: 
    186     print "ERROR: couldn't create the minimum moles records for %s" %datacentre 
     218    print "ERROR: couldn't create any minimum moles records for %s" %datacentre 
    187219    sys.exit() 
    188220 
Note: See TracChangeset for help on using the changeset viewer.