123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- from O365 import Account
- from O365.address_book import Contact
- client_id = '925f74dc-f96a-4718-9ca7-d6cc3fa43e1e'
- client_secret = 'SS~8Q~QpBZV9toZuwkzW1XGGen2Hn833spNMtdq5'
- account = Account(
- (client_id, client_secret),
- auth_flow_type='credentials',
- tenant_id='2ad0dff5-07ce-4cc2-a852-99ce8b91c218'
- )
- mailboxes = [
- 'bedner@global-cube.net',
- 'brandt@global-cube.net',
- # 'd.ankenbrand@global-cube.de',
- # 'gawliczek@global-cube.de',
- 'm.geiss@global-cube.net',
- 'matarrelli@global-cube.net',
- 'winkler@global-cube.net',
- 'winter@global-cube.de'
- ]
- def copy_contact(p_from: Contact, p_to: Contact):
- p_to.display_name = p_from.display_name
- p_to.name = p_from.name
- p_to.surname = p_from.surname
- p_to.title = p_from.title
- p_to.job_title = p_from.job_title
- p_to.company_name = p_from.company_name
- p_to.department = p_from.department
- p_to.office_location = p_from.office_location
- p_to.business_phones = p_from.business_phones
- p_to.mobile_phone = p_from.mobile_phone
- p_to.home_phones = p_from.home_phones
- p_to.emails.clear()
- for rcp in p_from.emails:
- p_to.emails.add(rcp)
- p_to.business_address = p_from.business_address
- # p_to.home_address = p_from.home_address
- p_to.other_address = p_from.other_address
- p_to.categories = p_from.categories
- p_to.personal_notes = p_from.personal_notes
- p_to.save()
- def sync_contacts():
- account.authenticate()
- shared = account.address_book(resource='adressbuch@global-cube.net', address_book='personal')
- shared_contacts = {p.display_name: p for p in shared.get_contacts(limit=None)}
- delete_candidates = set()
- for mailbox in mailboxes:
- print(mailbox)
- personal = account.address_book(resource=mailbox, address_book='personal')
- personal_contacts = {p.display_name: p for p in personal.get_contacts(limit=None)}
- extra_contacts = set(personal_contacts.keys()).difference(shared_contacts.keys())
- print(extra_contacts)
- if len(delete_candidates) == 0:
- delete_candidates = extra_contacts
- else:
- delete_candidates = delete_candidates.intersection(extra_contacts)
- # p.delete()
- for p_shared in shared_contacts.values():
- if p_shared.display_name not in personal_contacts:
- p_new = personal.new_contact()
- copy_contact(p_shared, p_new)
- else:
- p_existing = personal_contacts[p_shared.display_name]
- if p_existing.to_api_data() != p_shared.to_api_data():
- copy_contact(p_shared, p_existing)
- return delete_candidates
- def delete_contacts(delete_candidates):
- account.authenticate()
- for mailbox in mailboxes:
- print(mailbox)
- personal = account.address_book(resource=mailbox, address_book='personal')
- personal_contacts = {p.display_name: p for p in personal.get_contacts(limit=None)}
- selected_contacts = set(delete_candidates).intersection(personal_contacts.keys())
- print(selected_contacts)
- for c in selected_contacts:
- personal_contacts[c].delete()
- def normalize_phone_number(phone_number: str):
- if phone_number is None:
- return None
- if phone_number.startswith('0'):
- phone_number = '+49 ' + phone_number[1:]
- for c in '()/?':
- phone_number = phone_number.replace(c, '')
- return phone_number.replace(' -', '-').replace('- ', '-').replace(' ', ' ')
- def cleanup_contacts():
- account.authenticate()
- shared = account.address_book(resource='adressbuch@global-cube.net', address_book='personal')
- for p in shared.get_contacts(limit=None):
- business = [normalize_phone_number(no) for no in p.business_phones]
- if p.business_phones != business:
- p.business_phones = business
- home = [normalize_phone_number(no) for no in p.home_phones]
- if p.home_phones != home:
- p.home_phones = home
- mobile = normalize_phone_number(p.mobile_phone)
- if p.mobile_phone != mobile:
- p.mobile_phone = mobile
- p.save()
- if __name__ == '__main__':
- contacts = sync_contacts()
- if len(contacts) > 0:
- delete_contacts(contacts)
- # cleanup_contacts()
|