Files
abcddb2vcard/abcddb2vcard.py
2023-02-21 20:11:02 +01:00

44 lines
1.4 KiB
Python
Executable File

#!/usr/bin/env python3
'''
Extract data from AddressBook database (.abcddb) to Contacts VCards file (.vcf)
'''
import os
import sys
from ABCDDB import ABCDDB
from pathlib import Path
from argparse import ArgumentParser
DB_FILE = str(Path.home().joinpath(
'Library', 'Application Support', 'AddressBook', 'AddressBook-v22.abcddb'))
cli = ArgumentParser(description=__doc__)
cli.add_argument('output', type=str, metavar='outfile.vcf',
help='VCard output file.')
cli.add_argument('-f', '--force', action='store_true',
help='Overwrite existing output file.')
cli.add_argument('-i', '--input', type=str, metavar='AddressBook.abcddb',
default=DB_FILE, help='Specify another abcddb input file.'
' Default: ' + DB_FILE)
args = cli.parse_args()
# check input args
if not os.path.isfile(args.input):
print('AddressBook "{}" does not exist.'.format(args.input),
file=sys.stderr)
exit(1)
elif not os.path.isdir(os.path.dirname(args.output) or os.curdir):
print('Output parent directory does not exist.', file=sys.stderr)
exit(1)
elif os.path.isfile(args.output) and not args.force:
print('Output file already exist. Use -f to force overwrite.',
file=sys.stderr)
exit(1)
# perform export
contacts = ABCDDB.load(args.input)
with open(args.output, 'w') as f:
for rec in contacts:
f.write(rec.makeVCard())
print(len(contacts), 'contacts.')