1 # -*- coding: utf-8 -*-
2 #===============================================================================
7 #==============================
9 # needs python-textutils for csv
12 from . import _, debug, normalizePhoneNumber #@UnresolvedImport
21 def normalizePhoneNumber(intNo):
22 found = re.match('^\+49(.*)', intNo)
24 intNo = '0' + found.group(1)
25 found = re.match('^\+(.*)', intNo)
27 intNo = '00' + found.group(1)
28 intNo = intNo.replace('(', '').replace(')', '').replace(' ', '').replace('/', '').replace('-', '')
29 found = re.match('^49(.*)', intNo) # this is most probably an error
31 intNo = '0' + found.group(1)
32 found = re.match('.*?([0-9]+)', intNo)
39 print number + '#' + name
43 # 31: Telefon geschäftlich
49 # 8: Straße geschäftlich
50 # 11: Ort geschäftlich
51 # 13: Postleitzahl geschäftlich
52 # 14: Land/Region geschäftlich
55 # 20: Postleitzahl privat
56 # 21: Land/Region privat
59 def findNumber(number, filename):
62 addrs = csv.reader(file, delimiter=',', quotechar='"')
63 addrs.next() # skip header
65 row = map(lambda w: w.decode('cp1252').encode('utf-8'), row)
70 try: # this is just to catch wrong lines
71 if row[31] or (row[37] and number == normalizePhoneNumber(row[37])) or (row[40] and number == normalizePhoneNumber(row[40])): # Telefon geschäftlich
72 no = normalizePhoneNumber(row[31])
73 # debug("[FritzOutlookCSV] findNumber compare (business) %s with %s for %s" %(no,number,name))
74 if no == number or (row[37] and number == normalizePhoneNumber(row[37])) or (row[40] and number == normalizePhoneNumber(row[40])):
75 if row[3]: name = row[3] # Nachname
78 name = row[1] + ' ' + name # Vorname
89 if not nameB: continue
90 nameB = (nameB + ' (' + _('work') + ')')
91 if row[11]: # Ort geschäftlich
93 if row[13]: addressB = row[13] + ' ' + addressB# Postleitzahl geschäftlich
94 if row[14]: addressB = addressB + ', ' + row[14] # Land/Region geschäftlich
95 if row[8]: addressB = row[8] + ', ' + addressB# Strae gesch¦ftlich
96 nameB = (nameB + ', ' + addressB).replace('\n', ', ').replace('\r', '').replace('#', '')
99 debug("[FritzCallPhonebook] findNumber result: " + no + ' ' + nameB)
104 no = normalizePhoneNumber(row[i])
105 # debug("[FritzOutlookCSV] findNumber compare (home,mobile) %s with %s for %s" %(no,number,name))
107 if row[3]: name = row[3] # Nachname
110 name = row[1] + ' ' + name # Vorname
113 if i == 40: # Mobiltelefon
114 nameHM = name + ' (' + _('mobile') + ')'
116 nameHM = name + ' (' + _('home') + ')'
117 if row[18]: # Ort privat
119 if row[20]: address = row[20] + ' ' + address # Postleitzahl privat
120 if row[21]: address = address + ', ' + row[21] # Land/Region privat
121 if row[15]: address = row[15] + ', ' + address # Straße privat
122 if not address: address = addressB
123 if address: nameHM = nameHM + ', ' + address
124 nameHM = nameHM.replace('\n', ', ').replace('\r', '').replace('#', '')
126 debug("[FritzCallPhonebook] findNumber result: " + no + ' ' + nameHM)
133 def readNumbers(filename, outFun):
134 file = open(filename, "rb")
136 addrs = csv.reader(file, delimiter=',', quotechar='"')
137 addrs.next() # skip header
139 row = map(lambda w: w.decode('cp1252'), row)
145 if row[31] or row[37] or row[40]:
146 if row[3]: name = row[3] # Nachname
149 name = row[1] + ' ' + name # Vorname
160 if not nameB: continue
161 nameB = (nameB + ' (' + _('work') + ')')
162 if row[11]: # Ort gesch¦ftlich
164 if row[13]: addressB = row[13] + ' ' + addressB# Postleitzahl gesch¦ftlich
165 if row[14]: addressB = addressB + ', ' + row[14] # Land/Region gesch¦ftlich
166 if row[8]: addressB = row[8] + ', ' + addressB# Stra?e gesch?ftlich
167 nameB = (nameB + ', ' + addressB).replace('\n', ', ').replace('\r', '').replace('#', '')
169 number = normalizePhoneNumber(row[31])
170 outFun(number, nameB)
174 number = normalizePhoneNumber(row[i])
176 if row[3]: nameHM = row[3] # Nachname
179 nameHM = row[1] + ' ' + nameHM # Vorname
182 if i == 40: # Mobiltelefon
183 nameHM = nameHM + ' (' + _('mobile') + ')'
185 nameHM = nameHM + ' (' + _('home') + ')'
186 if row[18]: # Ort privat
188 if row[20]: address = row[20] + ' ' + address # Postleitzahl privat
189 if row[21]: address = address + ', ' + row[21] # Land/Region privat
190 if row[15]: address = row[15] + ', ' + address # Strae privat
191 if not address: address = addressB
192 if address: nameHM = nameHM + ', ' + address
193 nameHM = nameHM.replace('\n', ', ').replace('\r', '').replace('#', '')
194 outFun(number, nameHM)
200 if __name__ == '__main__':
202 cwd = os.path.dirname(sys.argv[0])
203 if (len(sys.argv) == 1):
204 readNumbers("Kontakte.csv", out)
205 elif (len(sys.argv) == 2):
207 findNumber(sys.argv[1], "Kontakte.csv")