symuid-list 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import symuid
  4. def symuid_list(path, path_ignore_regex, filter_expression, sort_expression, limit):
  5. # use generators until sort is required
  6. attr_it = ({'path': track.path, 'play_count': track.get_play_count_sum()}
  7. for track in symuid.Track.walk(path, path_ignore_regex))
  8. if filter_expression:
  9. attr_it = filter(lambda a: eval(filter_expression, a), attr_it)
  10. if sort_expression:
  11. attr_it = list(attr_it)
  12. attr_it.sort(key=lambda a: eval(sort_expression, a))
  13. for i, attr in enumerate(attr_it):
  14. if limit and i == limit:
  15. break
  16. print(attr['path'])
  17. def _init_argparser():
  18. import argparse
  19. import re
  20. argparser = argparse.ArgumentParser(description=None)
  21. argparser.add_argument('path')
  22. argparser.add_argument(
  23. '--path-ignore-regex',
  24. default=symuid.Track.PATH_DEFAULT_IGNORE_REGEX,
  25. nargs=1,
  26. metavar='pattern',
  27. dest='path_ignore_regex',
  28. type=lambda pattern: re.compile(pattern),
  29. help='(default: %(default)s)',
  30. )
  31. argparser.add_argument(
  32. '--filter',
  33. metavar='expression',
  34. dest='filter_expression',
  35. help='(example: {!r})'.format(
  36. "play_count > 16 and path.endswith('.mp3')",
  37. ),
  38. )
  39. argparser.add_argument(
  40. '--sort',
  41. metavar='expression',
  42. dest='sort_expression',
  43. help='(example: {!r} or {!r})'.format(
  44. "play_count * -1",
  45. "(play_count, len(path))",
  46. ),
  47. )
  48. argparser.add_argument(
  49. '--limit',
  50. type=int,
  51. help='(default: none)',
  52. )
  53. return argparser
  54. def main(argv):
  55. argparser = _init_argparser()
  56. args = argparser.parse_args(argv[1:])
  57. symuid_list(**vars(args))
  58. return 0
  59. if __name__ == "__main__":
  60. import sys
  61. sys.exit(main(sys.argv))