diff --git a/Makefile b/Makefile index 62930f9..a3c48ba 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ install: uninstall: python3 -m pip uninstall abcddb2vcard rm -rf ./*.egg-info/ - -rm -i "$$(which abcddb2vcard)" "$$(which vcard2img)" + @-rm -i "$$(which abcddb2vcard)" "$$(which vcard2img)" dist: setup.py abcddb2vcard/* [ -z "$${VIRTUAL_ENV}" ] # you can not do this inside a virtual environment. diff --git a/abcddb2vcard/__init__.py b/abcddb2vcard/__init__.py index f8554f4..ffc58f7 100644 --- a/abcddb2vcard/__init__.py +++ b/abcddb2vcard/__init__.py @@ -2,6 +2,6 @@ ''' Convert AddressBook database (.abcddb) to Contacts VCards file (.vcf) ''' -__version__ = '1.0.0' +__version__ = '1.0.1' from .ABCDDB import ABCDDB diff --git a/abcddb2vcard/__main__.py b/abcddb2vcard/__main__.py index ed0e1b7..0d7ffda 100644 --- a/abcddb2vcard/__main__.py +++ b/abcddb2vcard/__main__.py @@ -1,2 +1,4 @@ #!/usr/bin/env python3 -from . import abcddb2vcard # execute sub-module code +from .abcddb2vcard import main + +main() diff --git a/abcddb2vcard/abcddb2vcard.py b/abcddb2vcard/abcddb2vcard.py index e0711e5..f7f1db0 100755 --- a/abcddb2vcard/abcddb2vcard.py +++ b/abcddb2vcard/abcddb2vcard.py @@ -11,38 +11,41 @@ try: except ImportError: # fallback if not run as module from ABCDDB import ABCDDB # type: ignore[import, no-redef] - 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) +def main() -> None: + 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() -# 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.') + # 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) -exit() + # 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.') + + +if __name__ == '__main__': + main() diff --git a/abcddb2vcard/vcard2img.py b/abcddb2vcard/vcard2img.py index 22c64fe..d88c0dc 100755 --- a/abcddb2vcard/vcard2img.py +++ b/abcddb2vcard/vcard2img.py @@ -7,48 +7,53 @@ import sys from base64 import b64decode from argparse import ArgumentParser, FileType -cli = ArgumentParser(description=__doc__) -cli.add_argument('input', type=FileType('r'), metavar='infile.vcf', - help='VCard input file.') -cli.add_argument('outdir', type=str, help='Output directory.') -args = cli.parse_args() -# check input args -if not os.path.isdir(os.path.dirname(args.outdir) or os.curdir): - print('Output parent directory does not exist.', file=sys.stderr) - exit(1) +def main() -> None: + cli = ArgumentParser(description=__doc__) + cli.add_argument('input', type=FileType('r'), metavar='infile.vcf', + help='VCard input file.') + cli.add_argument('outdir', type=str, help='Output directory.') + args = cli.parse_args() -os.makedirs(args.outdir, exist_ok=True) + # check input args + if not os.path.isdir(os.path.dirname(args.outdir) or os.curdir): + print('Output parent directory does not exist.', file=sys.stderr) + exit(1) -# perform export -c1 = 0 -c2 = 0 -name = '' -img = '' -collect = False -for line in args.input.readlines(): - line = line.rstrip() - if line == 'BEGIN:VCARD': - c1 += 1 - name = '' - img = '' - collect = False - elif line.startswith('FN:'): - name = line.split(':', 1)[1] - elif line.startswith('PHOTO;'): - img = line.split(':', 1)[1] - collect = True - elif collect: - if line[0] == ' ': - img += line[1:] - else: + os.makedirs(args.outdir, exist_ok=True) + + # perform export + c1 = 0 + c2 = 0 + name = '' + img = '' + collect = False + for line in args.input.readlines(): + line = line.rstrip() + if line == 'BEGIN:VCARD': + c1 += 1 + name = '' + img = '' collect = False - if line == 'END:VCARD' and img: - c2 += 1 - name = name.replace('\\,', ',').replace('\\;', ';').replace( - '/', '-') - with open(os.path.join(args.outdir, name + '.jpg'), 'wb') as fw: - fw.write(b64decode(img)) + elif line.startswith('FN:'): + name = line.split(':', 1)[1] + elif line.startswith('PHOTO;'): + img = line.split(':', 1)[1] + collect = True + elif collect: + if line[0] == ' ': + img += line[1:] + else: + collect = False + if line == 'END:VCARD' and img: + c2 += 1 + name = name.replace('\\,', ',').replace('\\;', ';').replace( + '/', '-') + with open(os.path.join(args.outdir, name + '.jpg'), 'wb') as fw: + fw.write(b64decode(img)) -print(c1, 'contacts.', c2, 'images.') -exit() + print(c1, 'contacts.', c2, 'images.') + + +if __name__ == '__main__': + main() diff --git a/setup.py b/setup.py index 95f9425..b4ec5ec 100644 --- a/setup.py +++ b/setup.py @@ -15,8 +15,8 @@ setup( packages=['abcddb2vcard'], entry_points={ 'console_scripts': [ - 'abcddb2vcard=abcddb2vcard.abcddb2vcard', - 'vcard2img=abcddb2vcard.vcard2img', + 'abcddb2vcard=abcddb2vcard.abcddb2vcard:main', + 'vcard2img=abcddb2vcard.vcard2img:main', ] }, long_description_content_type="text/markdown",