Browse Source

setup `symuid-list` cli entry point via setuptools.setup()

Fabian Peter Hammerle 4 years ago
parent
commit
8fbfa9aefc
2 changed files with 25 additions and 32 deletions
  1. 1 0
      setup.py
  2. 24 32
      symuid/list.py

+ 1 - 0
setup.py

@@ -7,6 +7,7 @@ setuptools.setup(
     entry_points={
         'console_scripts': [
             'symuid-import-itunes = symuid.import_library.itunes_xml:_main',
+            'symuid-list = symuid.list:_main',
             'symuid-sync = symuid.sync:_main',
         ],
     },

+ 24 - 32
symuid-list → symuid/list.py

@@ -1,38 +1,26 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
+import argparse
+import re
+import typing
 
 import symuid
 
 
-def symuid_list(path, path_ignore_regex, filter_expression, sort_expression, limit, prefix):
-    # use generators until sort is required
-    attr_it = ({'path': track.path,
-                'comment': track.comment,
-                'play_count': track.get_play_count_sum()}
-               for track in symuid.Track.walk(path, path_ignore_regex))
-    if filter_expression:
-        attr_it = filter(lambda a: eval(filter_expression, a), attr_it)
-    if sort_expression:
-        attr_it = list(attr_it)
-        attr_it.sort(key=lambda a: eval(sort_expression, a))
-    for i, attr in enumerate(attr_it):
-        if limit and i == limit:
-            break
-        print(prefix + attr['path'])
-
+def _walk_track_attrs(path, path_ignore_regex) -> typing.Iterator[dict]:
+    for track in symuid.Track.walk(path, path_ignore_regex):
+        yield {'path': track.path,
+               'comment': track.comment,
+               'play_count': track.get_play_count_sum()}
 
 def _init_argparser():
-    import argparse
-    import re
-    argparser = argparse.ArgumentParser(description=None)
+    argparser = argparse.ArgumentParser(description='filter & sort tracks')
     argparser.add_argument('path')
     argparser.add_argument(
         '--path-ignore-regex',
         default=symuid.Track.PATH_DEFAULT_IGNORE_REGEX,
+        dest='path_ignore_regex',
         nargs=1,
+        type=re.compile,
         metavar='pattern',
-        dest='path_ignore_regex',
-        type=lambda pattern: re.compile(pattern),
         help='(default: %(default)s)',
     )
     argparser.add_argument(
@@ -67,12 +55,16 @@ def _init_argparser():
     return argparser
 
 
-def main(argv):
-    argparser = _init_argparser()
-    args = argparser.parse_args(argv[1:])
-    symuid_list(**vars(args))
-    return 0
-
-if __name__ == "__main__":
-    import sys
-    sys.exit(main(sys.argv))
+def _main():
+    args = _init_argparser().parse_args()
+    # use generators until sort is required
+    track_attrs = _walk_track_attrs(path=args.path, path_ignore_regex=args.path_ignore_regex)
+    # pylint: disable=eval-used
+    if args.filter_expression:
+        track_attrs = filter(lambda a: eval(args.filter_expression, a), track_attrs)
+    if args.sort_expression:
+        track_attrs = sorted(track_attrs, key=lambda a: eval(args.sort_expression, a))
+    for track_index, attr in enumerate(track_attrs):
+        if args.limit and track_index == args.limit:
+            break
+        print(args.prefix + attr['path'])