musicman/musicman/utils/__init__.py

96 lines
7.1 KiB
Python

import os
#import tempfile
from musicman.utils.constants import SUPPORTED_FORMATS, VERSION
def parse_args():
import argparse
#parser = optparse.OptionParser(usage="%prog [options] [files]",
# version=VERSION)
#parser = argparse.ArgumentParser(description="Media Library Management Tools",
# usage="%(prog)s [command] [options]")
parser = argparse.ArgumentParser(description="Media Library Management Tools")
#subparsers = parser.add_subparsers(help="sub-command-help")
#parser.add_argument('-b', '--base', help="Origin Directory for Library (overrides config)", type=str, dest="originDir")
#parser.add_argument('-t', '--target', help="Target Directory for Library (overrides config)", type=str, dest="targetDir")
parser.add_argument('--version', help="show version information and exit", action="version", version='%(prog)s '+VERSION)
parser.add_argument('-v', help='Increase verbosity of processing', dest='verbose', action='count')
subparsers = parser.add_subparsers(title="Command Modes", dest="mode")
clean = subparsers.add_parser('clean', help='Clean Mode', description='Library cleanup operations. Allows you to remove empty directories.')
clean_lib = clean.add_argument_group('Library Options')
clean_lib.add_argument('-o', '--origin', help="Origin Directory for Library (overrides config)", metavar="DIR", type=str, dest="originDir")
clean_lib.add_argument('-t', '--target', help="Target Directory for Library (overrides config)", metavar="DIR", type=str, dest="targetDir")
clean_lib.add_argument('-w', '--work', help="Working Directory for new processed files (overrides config)", metavar="DIR", type=str, dest="workingDir")
clean_lib.add_argument('-e', '--exclude', help="Exclude Directory from origin (can be used multiple times)", metavar="DIR", dest='excludeDirs', action='append')
clean_act = clean.add_argument_group('Action Options')
clean_act.add_argument('-g', '--go', help="Clean up library (default just shows what would be done)", dest="act", action='store_true')
clean.set_defaults(act=False)
convert = subparsers.add_parser('convert', help='Convert Mode', description='Conversion mode scans for media in the origin library, and converts them into the target format. Conversion depends on a fully tagged library, including MusicBrainz metadata. This insures that the data provide is accurate as it uses that metadata for the destination artist/album/song.')
convert_lib = convert.add_argument_group('Library Options')
convert_lib.add_argument('-o', '--origin', help="Origin Directory for Library (overrides config)", metavar="DIR", type=str, dest="originDir")
convert_lib.add_argument('-t', '--target', help="Target Directory for Library (overrides config)", metavar="DIR", type=str, dest="targetDir")
convert_lib.add_argument('-w', '--work', help="Working Directory for new processed files (overrides config)", metavar="DIR", type=str, dest="workingDir")
convert_lib.add_argument('--format', help="Target directory library format", metavar="FORMAT", type=str, dest="targetFormat")
convert_lib.add_argument('-e', '--exclude', help="Exclude Directory from origin (can be used multiple times)", metavar="DIR", dest='excludeDirs', action='append')
convert_act = convert.add_argument_group('Action Options')
convert_act.add_argument('-g', '--go', help="Convert media (default just shows new items)", dest="act", action='store_true')
convert.set_defaults(act=False)
info = subparsers.add_parser('info', help='Info Mode', description='Displays file and metadata information about specified files and files within specified directories.')
info.add_argument('paths', help="Show information about files, or all files in directory.", metavar="PATH", nargs='+')
rename = subparsers.add_parser('rename', help='Rename Mode', description='Library rename tool renames media into their respective Artist/Album/[Disc-][Track-]Title in relation to their metadata.')
rename_lib = rename.add_argument_group('Library Options')
rename_lib.add_argument('-o', '--origin', help="Origin Directory for Library (overrides config)", metavar="DIR", type=str, dest="originDir")
rename_lib.add_argument('-e', '--exclude', help="Exclude Directory from origin (can be used multiple times)", metavar="DIR", dest='excludeDirs', action='append')
rename_act = rename.add_argument_group('Action Options')
rename_act.add_argument('-g', '--go', help="Process renaming (default just shows what would be done", dest="act", action='store_true')
rename.set_defaults(act=False)
scan = subparsers.add_parser('scan', help='Scan Mode', description='Scan library for various different operational purposes.')
scan_lib = scan.add_argument_group('Library Options')
scan_lib.add_argument('-o', '--origin', help="Origin Directory for Library (overrides config)", metavar="DIR", type=str, dest="originDir")
scan_lib.add_argument('-t', '--target', help="Target Directory for Library (overrides config)", metavar="DIR", type=str, dest="targetDir")
scan_lib.add_argument('-w', '--work', help="Working Directory for new processed files (overrides config)", metavar="DIR", type=str, dest="workingDir")
scan_lib.add_argument('--format', help="Target directory library format", metavar="FORMAT", type=str, dest="targetFormat")
scan_lib.add_argument('-e', '--exclude', help="Exclude Directory from origin (can be used multiple times)", metavar="DIR", dest='excludeDirs', action='append')
scan_subparsers = scan.add_subparsers(title='Scan Modes', dest='scanMode')
scan_untagged = scan_subparsers.add_parser('untagged', help='Find untagged media', description='Scans for untagged or insufficiently tagged media in the library.')
scan_new = scan_subparsers.add_parser('new', help='Find new unconverted media', description='Scans for new media that is not in the target library for conversion.')
sync = subparsers.add_parser('sync', help='Sync Mode', description='Moves media from working DIR into target DIR')
sync_lib = sync.add_argument_group('Library Options')
#sync_lib.add_argument('-o', '--origin', help="Origin Directory for Library (overrides config)", metavar="DIR", type=str, dest="originDir")
sync_lib.add_argument('-t', '--target', help="Target Directory for Library (overrides config)", metavar="DIR", type=str, dest="targetDir")
sync_lib.add_argument('-w', '--work', help="Working Directory for new processed files (overrides config)", metavar="DIR", type=str, dest="workingDir")
sync_lib.add_argument('-e', '--exclude', help="Exclude Directory from origin (can be used multiple times)", metavar="DIR", dest='excludeDirs', action='append')
sync_act = sync.add_argument_group('Action Options')
sync_act.add_argument('-g', '--go', help="Move media (default just what would be done)", dest="act", action='store_true')
parser.set_defaults(verbose=0)
return parser.parse_args()
def load_config():
import configparser
config = configparser.ConfigParser()
config.read('musicman.ini')
try:
#print("Test1:", config.get('lossless', 'test'))
config.get('origin', 'path')
config.get('origin', 'format')
config.get('target', 'path')
config.get('target', 'format')
config.get('working', 'path')
except configparser.NoOptionError as err:
print("ERROR: Configuration of required settings are missing:", err)
sys.exit(1)
return config