-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathshashin.py
executable file
·93 lines (71 loc) · 3.21 KB
/
shashin.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env python3
import argparse
import sys
from commands import browse, cp, mv, organize, scan
from exceptions import UserError
from file_utils import normalized_path
from plugins import export_random_snapshots, google_tag_images
CACHE_DIR = '~/.cache/shashin/'
# TODO make configurable
SKIP_DIRS = ['@eaDir', "#snapshot"]
DEFAULT_HIERARCHY = r'''
{% if DateTimeOriginal and DateTimeOriginal|datetime %}
{{ DateTimeOriginal|datetime('%Y/%m/%d') }}
{% else %}
{{ FileModifyDate|datetime('%Y/%m/%d') }}
{% endif %}
'''
def get_parser():
parser = argparse.ArgumentParser()
parser.add_argument('-c', '--cache-dir', default=CACHE_DIR,
help='cache directory (default: %(default)s)')
verbosity = parser.add_mutually_exclusive_group()
verbosity.add_argument('-v', '--verbose', action='store_true')
verbosity.add_argument('-q', '--quiet', action='store_true')
subparsers = parser.add_subparsers(dest='command')
subparsers.required = True
scan_parser = subparsers.add_parser("scan")
scan_parser.add_argument("scan_dirs", nargs='+', help="directories of images to scan")
scan_parser.set_defaults(cls=scan.ScanCommand)
browse_parser = subparsers.add_parser("browse")
browse_parser.set_defaults(cls=browse.BrowseCommand)
cp_parser = subparsers.add_parser("cp")
cp_parser.add_argument("src")
cp_parser.add_argument("dest")
cp_parser.add_argument('--hierarchy', default=DEFAULT_HIERARCHY)
cp_parser.add_argument('--dry-run', action='store_true')
cp_parser.set_defaults(cls=cp.CopyCommand)
mv_parser = subparsers.add_parser("mv")
mv_parser.add_argument("src")
mv_parser.add_argument("dest")
mv_parser.add_argument('--hierarchy', default=DEFAULT_HIERARCHY)
mv_parser.add_argument('--dry-run', action='store_true')
mv_parser.set_defaults(cls=mv.MoveCommand)
organize_parser = subparsers.add_parser("organize")
organize_parser.add_argument("src")
organize_parser.add_argument('--hierarchy', default=DEFAULT_HIERARCHY)
organize_parser.add_argument('--dry-run', action='store_true')
organize_parser.set_defaults(cls=organize.OrganizeCommand)
export_random_snapshots_parser = subparsers.add_parser("export-random-snapshots")
export_random_snapshots_parser.add_argument("export_dir")
export_random_snapshots_parser.add_argument("--number", default=10)
export_random_snapshots_parser.set_defaults(cls=export_random_snapshots.RandomSnapshotsCommand)
google_tag_images_parser = subparsers.add_parser("google-tag-images")
google_tag_images_parser.add_argument("--number", default=1)
google_tag_images_parser.set_defaults(cls=google_tag_images.GoogleTagImages)
return parser
def main(args):
parser = get_parser()
config = parser.parse_args(args)
# Check that cache_dir exists or create it
config.cache_dir = normalized_path(config.cache_dir)
if not config.cache_dir.exists():
config.cache_dir.mkdir(parents=True)
elif not config.cache_dir.is_dir():
raise UserError(f"{config.cache_dir} is not a directory")
config.cls(config).execute()
if __name__ == "__main__":
try:
main(sys.argv[1:])
except UserError as e:
print(e)