Changeset 4170


Ignore:
Timestamp:
Apr 11, 2017, 10:03:19 AM (2 years ago)
Author:
Juanma
Message:

Concat sql files on a single file

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lliurex-abies2pmb/trunk/fuentes/lliurex-abies2pmb-core.install/abies2pmb.py

    r4169 r4170  
    77# -*- coding: utf-8 -*-
    88class abiesToPmb():
    9         def __init__(self,mdbFile):
    10                 self.dbg=0
     9        def __init__(self,mdbFile,sqlFile):
     10                self.dbg=1
    1111               
    1212                #Dict with relations between pmb and abies
     
    2424                self.pmb_abies["notices_tmp"]=["Fondos_all"]
    2525
     26#Dict with forced column data type
     27                self.formatPmbColumns={}
     28                self.formatPmbColumns['indexint']={1:'string'}
     29
    2630                #Blacklist pmb_abies tables.
    2731                self.blacklist=['notices_tmp']
     
    7478                self.formatTables['Fondos_all']={'index 1':'from Fondos_CDUs.1 on 0=0'}
    7579
     80
    7681                #Dict with errors
    7782                self.error={}
     
    8489                self.tmpInc=0
    8590
    86                 #Mdb file
     91                #Work files
    8792                self.mdb=mdbFile
     93                self.sql=sqlFile
     94                self.sqlFiles=[]
    8895        #def _init
    8996
     
    93100        #def _debug
    94101
    95         def _error(self,e,index=None):
    96                 if index:
    97                         if index in self.error.keys():
    98                                 self.error[index].append(e)
    99                         else:
    100                                 self.error[index]=e
    101                 else:
    102                         if 'ERR' in self.error.keys():
    103                                 self.error['ERR'].append(e)
    104                         else:
    105                                 self.error['ERR']=e
     102        def _error(self,code,index=None):
     103                #Error Codes
     104                #10 -> Table not found
     105                #11 -> Error ocurred while importing mdb file
     106                #12 -> Error exporting mdb to csv
     107                #13 -> Error generating sql file
     108                #14 -> Error concatenating sql files
     109                #15 -> No source table for virtual table
     110                #16 -> Couldn't fetch data from table
     111                self.error['status']=False
     112                self.error['code']=code
     113#               if index:
     114#                       if index in self.error.keys():
     115#                               self.error[index].append(e)
     116#                       else:
     117#                               self.error[index]=e
     118#               else:
     119#                       if 'ERR' in self.error.keys():
     120#                               self.error['ERR'].append(e)
     121#                       else:
     122#                               self.error['ERR']=e
    106123        #def _error
    107124
     
    112129                returnValue=False
    113130                if self.exportMdb():
     131                        self.sqlFiles=[]
    114132                        for abiesTable in self.executionOrder:
    115133                                self.tmpInc=0
     
    118136                                pmbTable=self._getTableEquivalence(abiesTable)
    119137                                self._generateSql(pmbTable,abiesTable)
     138                        if not self.error:
     139                                self._debug("Concatenating sql files in an unique file")
     140                                self._concatFiles()
     141                        else:
     142                                self._debug("Errors ocurred")
     143                                self._debug(self.error)
    120144                        returnValue=True
    121145                        self._debug("Files generated for tables "+str(self.executionOrder))
     146                else:
     147                        self._error(11)
     148
     149                self._debug("ErrorDict:")
     150                self._debug(self.error)
    122151                return returnValue
    123152        #def beginMigration
     
    141170                                        returnValue=True
    142171                        except Exception as e:
    143                                 self._error(e)
     172                                self._error(12)
    144173                                returnValue=False
    145174                return returnValue
     
    154183                transformDict=self._checkTransformField(abiesTable)
    155184                origData=self.tableValuesDict[abiesTable]
     185                sqlFile=self.workDir+destTable+".sql"
    156186                fileName=destTable+".sql"
    157                 if destTable not in self.blacklist:
    158                         f=open (fileName,'w')
    159                 for line in origData:
    160                         strInsertValues=''
    161                         for index in self.pmb_tables[destTable]:
    162                                 if index!='':
    163                                         if transformDict:
    164                                                 if index in transformDict.keys():
    165                                                         strTransform=transformDict[index]
    166 #                                                       self._debug("Transforming value "+str(line[index])+" index "+str(index)+" with "+strTransform)
    167                                                         line[index]=eval(strTransform)
    168                                         tmp=str(line[index]).strip("\n")
    169                                         #Clean tmp field
    170                                         tmp=tmp.replace('"',' ')
    171                                         try:
    172                                                 int(tmp)
    173                                         except:
    174                                                 tmp=tmp.lstrip(' ')
    175                                                 tmp=tmp.rstrip(' ')
    176                                                 tmp='"'+tmp+'"'
    177                                                 pass
    178                                 else:
    179                                         tmp='""'
    180                                 strInsertValues=strInsertValues+tmp+','
    181                         strInsertValues=strInsertValues[:-1]
     187                try:
    182188                        if destTable not in self.blacklist:
    183                                 f.write("Insert into "+destTable+" values ("+strInsertValues+");\n")
    184                 if destTable not in self.blacklist:
     189                                f=open (sqlFile,'w')
     190                                for line in origData:
     191                                        strInsertValues=''
     192                                        for index in self.pmb_tables[destTable]:
     193                                                if index!='':
     194                                                        if transformDict:
     195                                                                if index in transformDict.keys():
     196                                                                        strTransform=transformDict[index]
     197#               #                                                       self._debug("Transforming value "+str(line[index])+" index "+str(index)+" with "+strTransform)
     198                                                                        line[index]=eval(strTransform)
     199                                                        tmp=str(line[index]).strip("\n")
     200                                                        #Clean tmp field
     201                                                        tmp=tmp.replace('"',' ')
     202                                                        chkFormat=True
     203                                                        if (destTable in self.formatPmbColumns):
     204                                                                if index in self.formatPmbColumns[destTable]:
     205                                                                        chkFormat=False
     206                                                                        if self.formatPmbColumns[destTable][index]=='string':
     207                                                                                tmp=str(tmp)
     208                                                                                tmp=tmp.lstrip(' ')
     209                                                                                tmp=tmp.rstrip(' ')
     210                                                                                tmp='"'+tmp+'"'
     211                                                                        elif self.formatPmbColumns[destTable][index]=='int':
     212                                                                                tmp=int(tmp)
     213
     214                                                        if chkFormat:
     215                                                                try:
     216                                                                        int(tmp)
     217                                                                except:
     218                                                                        tmp=tmp.lstrip(' ')
     219                                                                        tmp=tmp.rstrip(' ')
     220                                                                        tmp='"'+tmp+'"'
     221                                                                        pass
     222                                                else:
     223                                                        tmp='""'
     224                                                strInsertValues=strInsertValues+tmp+','
     225                                        strInsertValues=strInsertValues[:-1]
     226                                        if destTable not in self.blacklist:
     227                                                f.write("Insert into "+destTable+" values ("+strInsertValues+");\n")
     228                                if destTable not in self.blacklist:
     229                                        f.close()
     230                                        self.sqlFiles.append(sqlFile)
     231                except Exception as e:
     232                        self._error(13)
     233
     234        #def _generateSql
     235
     236        ###
     237        #Concats all the generated files
     238        ###
     239        def _concatFiles(self):
     240                self._debug("Generating "+self.sql)
     241                self._debug("Files list:")
     242                self._debug(self.sqlFiles)
     243                try:
     244                        f=open(self.sql,'w')
     245                        for sqlFile in self.sqlFiles:
     246                                self._debug("Opening "+sqlFile)
     247                                a=open(sqlFile,'r')
     248                                aContent=a.readlines()
     249                                a.close()
     250                                f.writelines(aContent)
    185251                        f.close()
    186         #def _generateSql
     252                except Exception as e:
     253                        self._error(14)
     254                       
     255        #def _concatFile
     256
    187257
    188258        ###
     
    204274                                returnValue=True
    205275                        except Exception as e:
    206                                 self._error(e)
     276                                self._error(10)
    207277                else: #Check in virtual dict
    208278                        if tableName in self.virtual_tables.keys():
     
    210280                                returnValue=True
    211281                        else:
    212                                 self._error("Table not found",tableName)
     282                                self._error(10)
    213283
    214284                self.tableValuesDict[tableName]=data
     
    258328                                        index=index+1
    259329                else:
    260                         self._error("No source table for virtual table",tableName)
     330                        self._error(15)
    261331                return(data)
    262332
     
    390460                                        data.append(array[index])
    391461                        except Exception as e:
    392                                 self._error(e)
     462                                self._error(16)
    393463                else:
    394                         self._error("Couldn't fetch data from table",fileName)
     464                        self._error(16)
    395465                return(data)
    396466
     
    484554### MAIN PROGRAM ###
    485555
    486 migration=abiesToPmb(sys.argv[1])
     556migration=abiesToPmb(sys.argv[1],sys.argv[2])
    487557result=migration.beginMigration()
    488558print(result)
Note: See TracChangeset for help on using the changeset viewer.