-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmain.py
executable file
·66 lines (53 loc) · 2.48 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python3
"""A script to import picasa.ini files into digiKam's SQLite database."""
import logging
import shutil
import sys
import time
import argparse
from argparse import ArgumentParser
from pathlib import Path
import digikam_db
import migrator
def init_argparse() -> ArgumentParser:
parser = ArgumentParser('Import picasa.ini files into a digiKam SQLite database.')
parser.add_argument('--photos_dir', required=True, type=Path,
help='Path to a root directory with photos and picasa.ini files to be imported')
parser.add_argument('--digikam_db', required=True, type=Path,
help='Full path to digiKam\'s digikam4.db file.')
parser.add_argument('--contacts', required=False, type=Path,
help='Optional full path to Picasa''s contacts.xml file')
parser.add_argument('--dry_run', action='store_true')
parser.add_argument('--verbose', '-v', action='count', default=0,
help='Log verbosity. Pass -vv to see debug output.')
parser.add_argument('--skip_same_rect', action=argparse.BooleanOptionalAction,
help='Skip or not to skip adding face to digiKam if it already has that rectangle defined')
return parser
def main() -> None:
sys.stdout.reconfigure(encoding='utf-8')
root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)
log_handler = logging.StreamHandler(sys.stdout)
root_logger.setLevel(logging.DEBUG)
log_handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
root_logger.addHandler(log_handler)
parser = init_argparse()
args = parser.parse_args()
log_handler.setLevel(30 - (10 * args.verbose))
if not args.dry_run:
backup_path = f'{args.digikam_db}.bak.{int(time.time()):d}'
logging.info(f'Creating database backup at {backup_path}')
shutil.copyfile(args.digikam_db, backup_path)
logging.info('Inspecting existing digiKam database')
db = digikam_db.DigikamDb(args.digikam_db)
logging.debug(db)
logging.info('Traversing input directories')
with db.conn: # Transaction
migrator.migrate_directories_under(input_root_dir=args.photos_dir, db=db,
dry_run=args.dry_run,
contacts_file=args.contacts,
skip_same_rect=args.skip_same_rect)
db.close()
logging.info('Done')
if __name__ == '__main__':
main()