source: TI01-discovery/trunk/ingestAutomation/OAIBatch/SpaceTimeIngestFromMOLES.py @ 1797

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI01-discovery/trunk/ingestAutomation/OAIBatch/SpaceTimeIngestFromMOLES.py@1797
Revision 1797, 4.5 KB checked in by selatham, 14 years ago (diff)

Do a bit of lat/lon parsing. Actually ingests now

Line 
1#!/usr/bin/env python
2import cElementTree
3import molesReadWrite as MRW
4import sys
5import db_funcs
6import os
7
8#connect to db (in separate db functions module)
9connection = db_funcs.db_connect()
10
11def id_exists(Mid):
12        sql = "select id from spatiotemp where id = '"+Mid+"';"
13        cursor = connection.cursor()
14        cursor.execute(sql)
15        if len(cursor.fetchall()) <1:
16            return False
17        else:
18            return True
19
20
21def do_insert(Mid,west,south,east,north,startdate,enddate):
22        sql = "INSERT INTO spatiotemp (id, coordinates, startdate, enddate) VALUES ( '"+Mid+ "', sbox'(("+west+"d , "+south+"d), ("+east+"d , "+north+"d))', '"+startdate+"', '"+enddate+"');"
23        print sql
24        cursor = connection.cursor()
25        cursor.execute(sql)
26        connection.commit()
27
28def do_update(Mid,west,south,east,north,startdate,enddate):
29        sql = "UPDATE spatiotemp SET coordinates = sbox'(("+west+"d , "+south+"d), ("+east+"d , "+north+"d))', startdate='"+startdate+"', enddate= '"+enddate+"' WHERE id='"+Mid+"';"
30        print sql
31        cursor = connection.cursor()
32        cursor.execute(sql)     
33        connection.commit()
34
35def main(indir):
36    if indir == "":
37        sys.exit("Usage: argument 1 = full path of directory where MOLES records reside")
38    else:
39        print "INFO: moles records are in %s" %indir
40    numfilesproc = 0
41
42    filenames = os.listdir(indir)
43    for filename in filenames:
44            if filename.find('.xml') != -1:
45                full_filename = indir + "/" + filename
46                dgMeta=MRW.dgMetadata()
47                dgMeta.fromXML(cElementTree.ElementTree(file=full_filename).getroot())
48                bbox=dgMeta.dgMetadataRecord.dgDataEntity.dgDataSummary.dgDataCoverage.dgSpatialCoverage.BoundingBox
49                dates=dgMeta.dgMetadataRecord.dgDataEntity.dgDataSummary.dgDataCoverage.dgTemporalCoverage.DateRange
50                coverage= [dates.DateRangeEnd, dates.DateRangeStart, bbox.LimitNorth, bbox.LimitSouth,bbox.LimitEast, bbox.LimitWest]
51                #Mid = dgMeta.dgMetadataRecord.dgMetadataID.repositoryIdentifier+"__"+dgMeta.dgMetadataRecord.dgMetadataID.localIdentifier
52                Mid = filename
53                print coverage, Mid
54                #parse the coordinates somewhat
55                #west
56                west = bbox.LimitWest.strip()
57                if west.endswith('E'):
58                    west=bbox.LimitWest.split('E')[0]
59                elif west.endswith('W'):
60                    if west.startswith('-'):
61                        west = bbox.LimitWest.split('W')[0]
62                    else:
63                        west = "-" +bbox.LimitWest.split('W')[0]
64                try:
65                    float(west)
66                except:
67                    print "Error: Will not process File %s. Contains incorrect West bounding box limit." %full_filename
68                    continue
69                print "West = %s" %west
70                #east
71                east = bbox.LimitEast.strip()
72                if east.endswith('E'):
73                    east=bbox.LimitEast.split('E')[0]
74                elif east.endswith('W'):
75                    if east.startswith('-'):
76                        east = bbox.LimitEast.split('W')[0]
77                    else:
78                        east = "-" +bbox.LimitEast.split('W')[0]
79                try:
80                    float(east)
81                except:
82                    print "Error: Will not process File %s. Contains incorrect East bounding box limit." %full_filename
83                    continue
84                print "East = %s" %east
85                #north
86                north = bbox.LimitNorth.strip()
87                if north.endswith('N'):
88                    north=bbox.LimitNorth.split('N')[0]
89                elif north.endswith('S'):
90                    if north.startswith('-'):
91                        north = bbox.LimitNorth.split('S')[0]
92                    else:
93                        north = "-" +bbox.LimitNorth.split('S')[0]
94                try:
95                    float(north)
96                except:
97                    print "Error: Will not process File %s. Contains incorrect North bounding box limit." %full_filename
98                    continue
99                print "North = %s" %north
100                #south
101                south = bbox.LimitSouth.strip()
102                if south.endswith('N'):
103                    south=bbox.LimitSouth.split('N')[0]
104                elif south.endswith('S'):
105                    if south.startswith('-'):
106                        south = bbox.LimitSouth.split('S')[0]
107                    else:
108                        south = "-" +bbox.LimitSouth.split('S')[0]
109                try:
110                    float(south)
111                except:
112                    print "Error: Will not process File %s. Contains incorrect North bounding box limit." %full_filename
113                    continue
114                print "North = %s" %south
115
116                if id_exists( Mid ):
117                        print "doc %s exists, updating\n" %Mid
118                        do_update( Mid, west, south, east, north, dates.DateRangeStart, dates.DateRangeEnd )
119                else:
120                        print "doc %s does not exist, inserting new record\n" %Mid
121                        do_insert( Mid, west, south, east, north, dates.DateRangeStart, dates.DateRangeEnd )
122
123                numfilesproc += 1
124
125
126    print 'SpaceTimeIngestFromMOLES.py ran to end. files processed= %s' %(numfilesproc)
127
128if __name__=='__main__':
129    indir=sys.argv[1]
130    main(indir)
Note: See TracBrowser for help on using the repository browser.