symuid-sync 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import re
  4. import subprocess
  5. import sys
  6. import symuid
  7. def generate_uuid():
  8. return subprocess.check_output(['uuid', '-v', '4', '-F', 'BIN']).strip()
  9. def log_path(track_path, msg, stream=sys.stdout):
  10. stream.write("{!r}: {}\n".format(track_path, msg))
  11. def log_path_error(track_path, msg):
  12. log_path(track_path, msg, stream=sys.stderr)
  13. def symuid_sync(path, path_ignore_regex, show_ignored=False):
  14. for track in symuid.Track.walk(
  15. root_path=path,
  16. path_ignore_regex=path_ignore_regex,
  17. ignored_cb=lambda p: show_ignored and log_path(p, 'ignored'),
  18. unsupported_cb=lambda p, e:
  19. log_path_error(p, 'unsupported type, skipped'),
  20. ):
  21. if track.get_uuid() is None:
  22. track.assign_uuid(generate_uuid())
  23. log_path(track.path, 'assigned uuid {!r}'.format(track.get_uuid()))
  24. def _init_argparser():
  25. import argparse
  26. argparser = argparse.ArgumentParser(description=None)
  27. argparser.add_argument('path')
  28. argparser.add_argument(
  29. '--path-ignore-regex',
  30. default=symuid.Track.PATH_DEFAULT_IGNORE_REGEX,
  31. nargs=1,
  32. metavar='pattern',
  33. dest='path_ignore_regex',
  34. type=lambda pattern: re.compile(pattern),
  35. help='(default: %(default)s)',
  36. )
  37. argparser.add_argument(
  38. '--show-ignored',
  39. action='store_true',
  40. )
  41. return argparser
  42. def main(argv):
  43. argparser = _init_argparser()
  44. args = argparser.parse_args(argv[1:])
  45. symuid_sync(**vars(args))
  46. return 0
  47. if __name__ == "__main__":
  48. sys.exit(main(sys.argv))