source: TI01-discovery/branches/ingestion-MEDIN/ingestAutomation-upgrade/OAIBatch/AbstractFormatIngester_original.py @ 6364

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI01-discovery/branches/ingestion-MEDIN/ingestAutomation-upgrade/OAIBatch/AbstractFormatIngester_original.py@6364
Revision 6364, 4.9 KB checked in by sdonegan, 11 years ago (diff)

sync dirs

Line 
1import os, sys, string, getopt, logging, re, pkg_resources
2from time import strftime
3from SchemaNameSpace import SchemaNameSpace
4from ndg.common.src.lib.ndgresources import ndgResources
5import ndg.common.src.lib.fileutilities as FileUtilities
6from ndg.common.src.clients.reldb.postgres.postgresclient import PostgresClient as pgc
7
8#NOTE: in MEDIN multiformat upgrade have lumped original postgres classes together
9from PostgresDAO import PostgresDAO as PostgresDAO
10from PostgresRecord import PostgresRecord as PostgresRecord
11
12from Utilities import idget
13from Utilities import DatasetBasicParameters_Original
14from Utilities import ndgRedirectTransform,redirectUrlChanger
15from DeleteRecord import DeleteRecord
16import datetime,time
17from ndg.common.src.models.ndgObject import ndgObject
18from ndg.common.src.lib.ndgresources import ndgResources
19
20
21from ExtractISO import ExtractISO
22
23'''Class to hold methods for updating different formats and format versions into the Discovery database'''
24
25
26class AbstractFormatIngesterOriginal:
27       
28       
29        def __init__(self):
30               
31                '''
32               
33                ************************************************************
34                ******************* Format DIF & MDIP **********************
35                ************************************************************
36               
37                Add a file to the postgres DB - extracting and storing all the required
38                data in the process
39                @param filename: full path of file to add to postgres DB
40                '''
41               
42                logging.info("----------------- Setting up ingest data model ------------------------")
43               
44               
45               
46        def ingest(self,filename,datacentre_format,datacentre_groups
47                                ,datacentre_ns,xq,pgc,inputFileOrigFinal, ingestMonitor, NDG_dataProvider,stubIsoFile=None):
48               
49                self._datacentre_format = datacentre_format
50                self._datacentre_groups = datacentre_groups
51                self._datacentre_namespace = datacentre_ns
52                self._xq = xq
53                self.pgc = pgc
54                self.inputFileOrigFinal = inputFileOrigFinal
55                self._stubIsoFile = stubIsoFile
56               
57                self.thisIngestMonitor = ingestMonitor
58                               
59                self._NDG_dataProvider = NDG_dataProvider
60               
61               
62                #self.n
63               
64                logging.info("Adding file, " + filename + ", to postgres DB")
65               
66                numSlash = len(filename.split('/'))
67               
68                shortFilename = filename.split('/')[numSlash - 1]
69               
70                self.recordAttemptToIngestDiscoveryID = ""     
71                error_messages = ""                     
72               
73                # first of all create a PostgresRecord - this object represents all the data required
74                # for a DB entry
75                dao = None
76               
77                #set up iso xml object - format indicatees the ISO profile (including dif2iso conversions)                                             
78                self.isoDataModel = ExtractISO(self._stubIsoFile,'dif2stubIso')
79               
80                if self.isoDataModel.createISOdataStructure() is True:
81                        logging.info("ISO extractor worked fine!")
82                       
83                       
84                elif self.isoDataModel.createISOdataStructure() is True:
85                        logging.error ("Something wrong with ISO extractor... (ExtractISO returned False: xml access problem?)")
86                       
87                        sys.exit() # TODO fix these
88                else:
89                        logging.error( "Something SERIOUSELY wrong with extractor (couldnt get at ExtractISO class)")
90                       
91                        sys.exit()
92                       
93               
94                try:
95                        #In new ingest system all vals parsed from iso xml are returned as either lists of dictionaries
96                       
97                        #record whats attempting to be ingested                 
98                        record = PostgresRecord(filename, self._NDG_dataProvider,self._datacentre_groups, self._datacentre_namespace,self.isoDataModel,self._xq, self._datacentre_format)
99                       
100                       
101                        # Now create the data access object to interface to the DB
102                        dao = PostgresDAO(record, self.isoDataModel, pgClient = self.pgc)
103                       
104                       
105                        # Finally, write the new record
106                        # 0 if failed, 1 if update, 2 if create
107                        returnCode = dao.createOrUpdateRecord() 
108                       
109                        import pdb
110                        pdb.set_trace()
111                       
112                        sys.exit()
113                       
114                        if returnCode == 2:
115                                #self._no_files_ingested += 1
116                                self.thisIngestMonitor.incrementIngestFile()
117                        elif returnCode == 1:
118                                #self._no_files_changed += 1
119                                self.thisIngestMonitor.incrementChangeFile()
120                        #if 0 nothing incremented
121                       
122                       
123                except:
124                       
125                        #if error encountered, add to failure lisr
126                        logging.error("Could not update: " + filename)                 
127                        originalRecordFilename = self.inputFileOrigFinal[shortFilename]
128                       
129                        #self.updateFailList.append(originalRecordFilename)
130                        self.thisIngestMonitor.appendFailList(originalRecordFilename)
131                       
132                        logging.error("Exception thrown - detail: ")
133                        errors = sys.exc_info()
134                        logging.error(errors)
135                       
136                        #error_messages += "%s\n" %str(errors[1])                       
137                        self.thisIngestMonitor.addToErrorMessage(str(errors[1]))
138                       
139                        if dao:
140                                logging.info("Removing record and its associated info from DB")
141                                logging.info("- to allow clean ingestion on rerun")
142                                try:
143                                        dao.deleteOriginalRecord()
144                                except:
145                                        logging.error("Problem encountered when removing record: ")
146                                        logging.error(sys.exc_info())
147                                        logging.error("NB, this record will need to be cleared manually from DB to ensure all relevant data is ingested")
148
149                        #no_problem_files += 1
150                       
151                        self.thisIngestMonitor.incrementProblemFile()
152                       
153                        logging.info("Continue processing other files")
154                       
155                return self.recordAttemptToIngestDiscoveryID
156       
157       
Note: See TracBrowser for help on using the repository browser.