changelog shortlog tags changeset files revisions annotate raw

osx/addressbook/make_international.py

changeset 20: b6b0e9bc226d
author: Greg Darke <greg+laptop@tsukasa.net.au>
date: Thu Apr 16 00:45:45 2009 +1000 (11 months ago)
permissions: -rwxr-xr-x
description: Ignore some stuff
1#!/usr/bin/env python
2# Copyright 2008 Greg Darke <greg+laptop@tsukasa.net.au>
3# Licensed for distribution under the GPL version 2, check COPYING for details
4
5# This program reads in all of your contact details (from AddressBook) and then
6# turns them into internation numbers (removes the leading 0, and repaces it
7# with +61). This program will also add an area code if it detects one is missing.
8
9AREA_CODE = u'02'
10COUNTRY_CODE = u'+61'
11
12import os, sys
13reload(sys).setdefaultencoding('utf8') # Hacky
14
15import logging
16logging.basicConfig(level=logging.DEBUG)
17
18try:
19 import AddressBook
20except ImportError:
21 print >>sys.stderr, 'Seems you do not have pyobjc working for this version of python'
22 raise
23
24def processPerson(person):
25 logger = logging.getLogger('main.processPerson')
26 phoneNumbers = person.valueForProperty_(AddressBook.kABPhoneProperty)
27
28 personName = '%s %s' % (
29 person.valueForProperty_(AddressBook.kABFirstNameProperty),
30 person.valueForProperty_(AddressBook.kABLastNameProperty),
31 )
32
33 if phoneNumbers is None:
34 logger.debug('There are no phone number for %s', personName)
35 return
36
37 phoneNumbers = phoneNumbers.mutableCopy()
38 for i in xrange(phoneNumbers.count()):
39 number = phoneNumbers.valueAtIndex_(i)
40 name = phoneNumbers.labelAtIndex_(i)
41 number = number.replace(' ', '')
42
43 if len(number) == 8:
44 # Prepend the 02 area code
45 number = AREA_CODE + number
46
47 if number.startswith('(') and ')' in number:
48 number = number.replace('(', '').replace(')', '')
49
50 if number.startswith('0') and len(number)==10:
51 # Drop the first digit, and then prepend '+61'
52 number = COUNTRY_CODE + number[1:]
53
54 if number.startswith('+') and len(number)==12:
55 # Format it as follows:
56 # +61 2 0000 0000
57 number = u'%s %s %s %s' % (number[:3], number[3:4], number[4:8], number[8:12])
58 logger.debug('%s: Setting number to %s (%s)', personName, number, name)
59 phoneNumbers.replaceValueAtIndex_withValue_(i, number)
60 else:
61 logger.debug('%s: Got (weird) number %s (%s)', personName, number, name)
62
63 person.setValue_forProperty_(phoneNumbers, AddressBook.kABPhoneProperty)
64
65def main():
66 book = AddressBook.ABAddressBook.sharedAddressBook()
67
68 for person in book.people():
69 processPerson(person)
70
71 book.save()
72
73if __name__ == "__main__":
74 main()