1 # -*- coding: utf-8 -*-
2 #===============================================================================
7 #==============================
9 # needs python-ldap for ldif
14 from . import _, debug, normalizePhoneNumber #@UnresolvedImport
22 def normalizePhoneNumber(intNo):
23 found = re.match('^\+49(.*)', intNo)
25 intNo = '0' + found.group(1)
26 found = re.match('^\+(.*)', intNo)
28 intNo = '00' + found.group(1)
29 intNo = intNo.replace('(', '').replace(')', '').replace(' ', '').replace('/', '').replace('-', '')
30 found = re.match('^49(.*)', intNo) # this is most probably an error
32 intNo = '0' + found.group(1)
33 found = re.match('.*?([0-9]+)', intNo)
40 print number + '#' + name
42 class findNumber(ldif.LDIFParser):
43 def __init__(self, number, input, outFun):
44 ldif.LDIFParser.__init__(self, input)
50 # this is to exit the parse loop
53 def handle(self, dn, entry):
54 # debug("[FritzCallPhonebook] LDIF handle: " + dn)
55 found = re.match('.*cn=(.*),', str(dn))
63 if entry.has_key('telephoneNumber') or (entry.has_key('homePhone') and self.number == normalizePhoneNumber(entry['homePhone'][0])) or (entry.has_key('mobile') and self.number == normalizePhoneNumber(entry['mobile'][0])):
64 # debug("[FritzCallPhonebook] LDIF get address")
65 if entry.has_key('telephoneNumber'):
66 no = normalizePhoneNumber(entry['telephoneNumber'][0])
69 if self.number == no or (entry.has_key('homePhone') and self.number == normalizePhoneNumber(entry['homePhone'][0])) or (entry.has_key('mobile') and self.number == normalizePhoneNumber(entry['mobile'][0])):
70 nameB = (name + ' (' + _('business') + ')') if name else ""
71 if entry.has_key('company'):
72 nameB = (nameB + ', ' + entry['company'][0]) if nameB else entry['company'][0]
73 if entry.has_key('l'):
74 addressB = entry['l'][0]
75 if entry.has_key('postalCode'):
76 addressB = entry['postalCode'][0] + ' ' + addressB
77 if entry.has_key('c'):
78 addressB = addressB + ', ' + entry['c'][0]
79 if entry.has_key('street'):
80 addressB = entry['street'][0] + ', ' + addressB
81 # debug("[FritzCallPhonebook] LDIF address: " + addressB)
83 result = nameB + ', ' + addressB.replace('\n', ', ').replace('\r', '').replace('#', '')
84 debug("[FritzCallPhonebook] LDIF result: " + result)
85 self.outFun(no, result)
86 self._input_file.close()
90 result = nameB.replace('\n', ', ').replace('\r', '').replace('#', '')
91 debug("[FritzCallPhonebook] LDIF result: " + result)
92 self.outFun(no, result)
93 self._input_file.close()
95 for i in ['homePhone','mobile']:
97 no = normalizePhoneNumber(entry[i][0])
100 name = name + ' (' + _('mobile') + ')'
102 name = name + ' (' + _('home') + ')'
103 if entry.has_key('mozillaHomeLocalityName'):
104 address = entry['mozillaHomeLocalityName'][0]
105 if entry.has_key('mozillaHomePostalCode'):
106 address = entry['mozillaHomePostalCode'][0] + ' ' + address
107 if entry.has_key('mozillaHomeCountryName'):
108 address = address + ', ' + entry['mozillaHomeCountryName'][0]
109 debug("[FritzCallPhonebook] LDIF home address: " + addressB)
110 result = name + ', ' + address.replace('\n', ', ').replace('\r', '').replace('#', '')
111 debug("[FritzCallPhonebook] LDIF result: " + result)
112 self.outFun(no, result)
113 self._input_file.close()
117 name = name + ', ' + addressB.replace('\n', ', ').replace('\r', '').replace('#', '')
118 debug("[FritzCallPhonebook] LDIF result: " + name)
119 self.outFun(no, name)
120 self._input_file.close()
123 class readNumbers(ldif.LDIFParser):
124 def __init__(self, input, outFun):
125 ldif.LDIFParser.__init__(self, input)
131 # this is to exit the parse loop:
132 # we close the input file as soon as we have a result...
136 def handle(self, dn, entry):
137 # debug("[FritzCallPhonebook] LDIF handle: " + dn)
138 found = re.match('.*cn=(.*),', str(dn))
140 name = found.group(1)
146 if entry.has_key('telephoneNumber') or entry.has_key('homePhone') or entry.has_key('mobile'):
147 # debug("[FritzCallPhonebook] LDIF get address")
148 nameB = (name + ' (' + _('business') + ')') if name else ""
149 if entry.has_key('company'):
150 nameB = (nameB + ', ' + entry['company'][0]) if nameB else entry['company'][0]
151 if entry.has_key('l'):
152 addressB = entry['l'][0]
153 if entry.has_key('postalCode'):
154 addressB = entry['postalCode'][0] + ' ' + addressB
155 if entry.has_key('c'):
156 addressB = addressB + ', ' + entry['c'][0]
157 if entry.has_key('street'):
158 addressB = entry['street'][0] + ', ' + addressB
159 # debug("[FritzCallPhonebook] LDIF address: " + addressB)
160 if entry.has_key('telephoneNumber'):
161 no = normalizePhoneNumber(entry['telephoneNumber'][0])
162 result = nameB + ', ' + addressB.replace('\n', ', ').replace('\r', '').replace('#', '')
163 self.outFun(no, result)
165 if entry.has_key('telephoneNumber'):
166 no = normalizePhoneNumber(entry['telephoneNumber'][0])
167 result = nameB.replace('\n', ', ').replace('\r', '').replace('#', '')
168 self.outFun(no, result)
169 for i in ['homePhone','mobile']:
171 no = normalizePhoneNumber(entry[i][0])
173 nameHM = name + ' (' + _('mobile') + ')'
175 nameHM = name + ' (' + _('home') + ')'
176 if entry.has_key('mozillaHomeLocalityName'):
177 address = entry['mozillaHomeLocalityName'][0]
178 if entry.has_key('mozillaHomePostalCode'):
179 address = entry['mozillaHomePostalCode'][0] + ' ' + address
180 if entry.has_key('mozillaHomeCountryName'):
181 address = address + ', ' + entry['mozillaHomeCountryName'][0]
182 result = nameHM + ', ' + address.replace('\n', ', ').replace('\r', '').replace('#', '')
183 self.outFun(no, result)
186 nameHM = nameHM + ', ' + addressB.replace('\n', ', ').replace('\r', '').replace('#', '')
187 self.outFun(no, nameHM)
189 def lookedUp(number,name):
190 print number + ' ' + name
192 if __name__ == '__main__':
194 cwd = os.path.dirname(sys.argv[0])
195 if (len(sys.argv) == 1):
196 readNumbers(open("Kontakte.ldif"), out)
197 elif (len(sys.argv) == 2):
199 findNumber(sys.argv[1], open("Kontakte.ldif"), lookedUp)