forked from Philipp91/picasa2digikam
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
executable file
·66 lines (53 loc) · 2.48 KB
/
main.py
File metadata and controls
executable file
·66 lines (53 loc) · 2.48 KB
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()