#!/usr/bin/env python3 # -*- coding: utf-8 -*- import re import subprocess import sys import symuid def generate_uuid(): return subprocess.check_output(['uuid', '-v', '4', '-F', 'BIN']).strip() def log_path(track_path, msg, stream=sys.stdout): stream.write("{!r}: {}\n".format(track_path, msg)) def log_path_error(track_path, msg): log_path(track_path, msg, stream=sys.stderr) def symuid_sync(path, path_ignore_regex, show_ignored=False): for track in symuid.Track.walk( root_path=path, path_ignore_regex=path_ignore_regex, ignored_cb=lambda p: show_ignored and log_path(p, 'ignored'), unsupported_cb=lambda p, e: log_path_error(p, 'unsupported type, skipped'), ): if track.get_uuid() is None: track.assign_uuid(generate_uuid()) log_path(track.path, 'assigned uuid {!r}'.format(track.get_uuid())) def _init_argparser(): import argparse argparser = argparse.ArgumentParser(description=None) argparser.add_argument('path') argparser.add_argument( '--path-ignore-regex', default=symuid.Track.PATH_DEFAULT_IGNORE_REGEX, nargs=1, metavar='pattern', dest='path_ignore_regex', type=lambda pattern: re.compile(pattern), help='(default: %(default)s)', ) argparser.add_argument( '--show-ignored', action='store_true', ) return argparser def main(argv): argparser = _init_argparser() args = argparser.parse_args(argv[1:]) symuid_sync(**vars(args)) return 0 if __name__ == "__main__": sys.exit(main(sys.argv))