Ejemplo n.º 1
0
	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")
Ejemplo n.º 2
0
	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
Ejemplo n.º 3
0
	def write(fName, pCollection):
		Log.trace(__class__, "write()")
		try:
			file = open(fName, 'w')
			SEP = ","
			EMB = "\""
			# write headerNames first
			sep = ""
			for col in pCollection.getHeaderNames():
				file.write(sep + EMB + col + EMB)
				if(sep != SEP):
					sep = SEP
			file.write("\n")
			# write persons
			for person in pCollection.getPersons():
				sep = ""
				for col in pCollection.getHeaderNames():
					file.write(sep + EMB + person.getAttribute(col) + EMB)
					if(sep != SEP):
						sep = SEP
				file.write("\n")
				
			file.close()
			return True
		except IOError:
			Log.error(__class__, "IOError with file > " + fName)
Ejemplo n.º 4
0
	def merge(pcLeft, pcRight):
		# shared attributes are merged twice! :(
		Log.trace(__class__, "merge() called")
		pcMerge = PersonCollection()
		Merge._merge(pcMerge, pcLeft, pcRight)
		Merge._merge(pcMerge, pcRight, pcMerge)
		Log.trace(__class__, "merge() finished")
		return pcMerge
Ejemplo n.º 5
0
	def write(fName, pCollection):
		Log.trace(__class__, "write()")
		try:
			# write persons
			for person in pCollection.getPersons():
				fName = person.getAttribute(Person.NAME_DISPLAY) + VCARD.SUFFIX
				file = open(fName, 'w')
				file.write("BEGIN:VCARD\nVERSION:2.1\n")
		
				file.write("N:" + person.getAttribute(Person.NAME) + ";" +  person.getAttribute(Person.NAME_FIRST) + '\n')
				file.write("FN:" + person.getAttribute(Person.NAME_DISPLAY) + '\n')
				file.write("TEL;CELL;VOICE:" + person.getAttribute(Person.MOBILEPHONE) + '\n')
				file.write("TEL;HOME;VOICE:" + person.getAttribute(Person.TELEPHONE) + '\n')
				file.write("EMAIL;PREF;INTERNET:" + person.getAttribute(Person.EMAIL_PRIVATE) + '\n')
				# file.write("BDAY:" + person.getAttribute(Person.BIRTHDAY) + '\n')
		
				file.write("END:VCARD")
				file.close()
				return True
		except IOError:
			Log.error(self.__class__, "IOError with file > " + file)
Ejemplo n.º 6
0
	def read(fName):
		Log.trace(__class__, "read()")
		Log.error(__class__, "Not yet implemented!")
		return None