def read(fName): Log.trace(__class__, "read()") pCollection = PersonCollection() try: file = open(fName, 'r') isHeader = True #SEP = ',*' SEP = "[\,,\s]*" EMB = "\"" regEx = re.compile(EMB + '([^' + EMB + ']*)' + EMB + SEP) for line in file: i = 0 person = Person() for col in regEx.findall(line): if(isHeader): pCollection.addHeader(col) #self._headerNames.append(col) else: person.setAttribute(pCollection.getHeaderNames()[i], col) i += 1 if(isHeader): isHeader = False else: pCollection.addPerson(person) file.close() return pCollection except IOError: Log.error(__class__, "IOError with file > " + fName) return None
def _merge(pcMerge, pcMaster, pcSlave): Log.trace(__class__, "_merge() called") # add headerNames in pcNew for kMaster in pcMaster.getHeaderNames(): pcMerge.addHeader(kMaster) # Merge attributes of pcMaster to pcNew for pMaster in pcMaster.getPersons(): pMerge = Merge.getPerson(pcMerge, pMaster) if(pMerge == None): pMerge = Person() pcMerge.addPerson(pMerge) pSlave = Merge.getPerson(pcSlave, pMaster) if(pSlave == None): # do copy of pMaster pSlave = Person() for kMaster in pcMaster.getHeaderNames(): aMaster = pMaster.getAttribute(kMaster) aSlave = pSlave.getAttribute(kMaster) aMerge = Person.ATTR_NOT_AVAILABLE # Attribute is empty if((aMaster != "" or aMaster != Person.ATTR_NOT_AVAILABLE) and (aSlave == "" or aSlave == Person.ATTR_NOT_AVAILABLE)): aMerge = aMaster elif((aSlave != "" or aSlave != Person.ATTR_NOT_AVAILABLE) and (aMaster == "" or aMaster == Person.ATTR_NOT_AVAILABLE)): aMerge = aSlave # Attributes are not empty elif(aMaster == aSlave): aMerge = aMaster else: Log.warn(__class__, "merge conflict:\nMaster=" + aMaster + "\n Slave=" + aSlave) pMerge.setAttribute(kMaster, aMerge) Log.trace(__class__, "_merge() finished")
def doMapping(self, pcSrc): pcDest = PersonCollection() # add headerNames to destination personCollection for kDest in self._mapping.values(): pcDest.addHeader(kDest) # add srcPersons to destPersons with new headerNames for pSrc in pcSrc.getPersons(): pDest = Person() for kSrc, kDest in self._mapping.items(): attr = pSrc.getAttribute(kSrc) if((attr == Person.ATTR_NOT_AVAILABLE or attr == "") and self._defaultValues[kDest] != ""): attr = self._defaultValues[kDest] pDest.setAttribute(kDest, attr) pcDest.addPerson(pDest) return pcDest