Improve morituri configuration handling, help

thomasvs/morituri#141
This commit is contained in:
JoeLametta
2015-11-29 16:28:06 +01:00
parent 735596c401
commit ace8d5ac22
3 changed files with 56 additions and 7 deletions

View File

@@ -163,18 +163,33 @@ when possible.
It lives in `$XDG_CONFIG_HOME/morituri/morituri.conf`
The configuration file follows python's ConfigParser syntax.
There is a "main" section and zero or more sections starting with "drive:"
- main section:
The possible sections are:
- main section: [main]
- `path_filter_fat`: whether to filter path components for FAT file systems
- `path_filter_special`: whether to filter path components for special
characters
- drive section:
- drive section: [drive:IDENTIFIER], one for each configured drive
All these values are probed by morituri and should not be edited by hand.
- `defeats_cache`: whether this drive can defeat the audio cache
- `read_offset`: the read offset of the drive
- rip command section: [rip.COMMAND.SUBCOMMAND]
Can be used to change the command options default values.
Example section to configure "rip cd rip" defaults:
[rip.cd.rip]
unknown = True
output_directory = ~/My Music
track_template = new/%%A/%%y - %%d/%%t - %%n
disc_template = %(track_template)s
profile = flac
Note: to get a literal '%' character it must be doubled.
CONTRIBUTING
------------
- Please send pull requests through github.

View File

@@ -34,6 +34,33 @@ class LogCommand(command.Command, log.Loggable):
command.Command.__init__(self, parentCommand, **kwargs)
self.logCategory = self.name
def parse(self, argv):
cmd = self.getRootCommand()
if hasattr(cmd, 'config'):
config = cmd.config
# find section name
cmd = self
section = []
while cmd is not None:
section.insert(0, cmd.name)
cmd = cmd.parentCommand
section = '.'.join(section)
# get defaults from config
defaults = {}
for opt in self.parser.option_list:
if opt.dest is None:
continue
if 'string' == opt.type:
val = config.get(section, opt.dest)
elif opt.action in ('store_false', 'store_true'):
val = config.getboolean(section, opt.dest)
else:
val = None
if val is not None:
defaults[opt.dest] = val
self.parser.set_defaults(**defaults)
command.Command.parse(self, argv)
# command.Command has a fake debug method, so choose the right one
def debug(self, format, *args):

View File

@@ -224,11 +224,13 @@ Log files will log the path to tracks relative to this directory.
help="output directory; will be included in file paths in result "
"files "
"(defaults to absolute path to current directory; set to "
"empty if you want paths to be relative instead) ")
"empty if you want paths to be relative instead; "
"configured value: %default) ")
self.parser.add_option('-W', '--working-directory',
action="store", dest="working_directory",
help="working directory; morituri will change to this directory "
"and files will be created relative to it when not absolute ")
"and files will be created relative to it when not absolute "
"(configured value: %default) ")
rcommon.addTemplate(self)
@@ -239,8 +241,8 @@ Log files will log the path to tracks relative to this directory.
self.parser.add_option('', '--profile',
action="store", dest="profile",
help="profile for encoding (default '%s', choices '%s')" % (
default, "', '".join(encode.PROFILES.keys())),
help="profile for encoding (default '%%default', choices '%s')" % (
"', '".join(encode.PROFILES.keys())),
default=default)
self.parser.add_option('-U', '--unknown',
action="store_true", dest="unknown",
@@ -270,6 +272,11 @@ Install pycdio and run 'rip offset find' to detect your drive's offset.
options.offset)
if self.options.output_directory is None:
self.options.output_directory = os.getcwd()
else:
self.options.output_directory = os.path.expanduser(self.options.output_directory)
if self.options.working_directory is not None:
self.options.working_directory = os.path.expanduser(self.options.working_directory)
if self.options.logger:
try: