Merge pull request #2422 from justinmayer/print-settings

Add CLI argument to print current settings
This commit is contained in:
Justin Mayer 2018-10-26 18:04:21 +02:00 committed by GitHub
commit f2b429b7b7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 4 deletions

View file

@ -21,6 +21,12 @@ Settings are configured in the form of a Python module (a file). There is an
<https://github.com/getpelican/pelican/raw/master/samples/pelican.conf.py>`_ <https://github.com/getpelican/pelican/raw/master/samples/pelican.conf.py>`_
available for reference. available for reference.
To see a list of current settings in your environment, including both default
and any customized values, run the following command (append one or more
specific setting names as arguments to see values for those settings only)::
pelican --print-settings
All the setting identifiers must be set in all-caps, otherwise they will not be All the setting identifiers must be set in all-caps, otherwise they will not be
processed. Setting values that are numbers (5, 20, etc.), booleans (True, processed. Setting values that are numbers (5, 20, etc.), booleans (True,
False, None, etc.), dictionaries, or tuples should *not* be enclosed in False, None, etc.), dictionaries, or tuples should *not* be enclosed in
@ -28,10 +34,9 @@ quotation marks. All other values (i.e., strings) *must* be enclosed in
quotation marks. quotation marks.
Unless otherwise specified, settings that refer to paths can be either absolute Unless otherwise specified, settings that refer to paths can be either absolute
or relative to the configuration file. or relative to the configuration file. The settings you define in the
configuration file will be passed to the templates, which allows you to use your
The settings you define in the configuration file will be passed to the settings to add site-wide content.
templates, which allows you to use your settings to add site-wide content.
Here is a list of settings for Pelican: Here is a list of settings for Pelican:

View file

@ -7,6 +7,7 @@ import locale
import logging import logging
import multiprocessing import multiprocessing
import os import os
import pprint
import re import re
import sys import sys
import time import time
@ -269,6 +270,32 @@ class Pelican(object):
return writer(self.output_path, settings=self.settings) return writer(self.output_path, settings=self.settings)
class PrintSettings(argparse.Action):
def __call__(self, parser, namespace, values, option_string):
instance, settings = get_instance(namespace)
if values:
# One or more arguments provided, so only print those settings
for setting in values:
if setting in settings:
# Only add newline between setting name and value if dict
if isinstance(settings[setting], dict):
setting_format = '\n{}:\n{}'
else:
setting_format = '\n{}: {}'
print(setting_format.format(
setting,
pprint.pformat(settings[setting])))
else:
print('\n{} is not a recognized setting.'.format(setting))
break
else:
# No argument was given to --print-settings, so print all settings
pprint.pprint(settings)
parser.exit()
def parse_arguments(): def parse_arguments():
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description='A tool to generate a static blog, ' description='A tool to generate a static blog, '
@ -319,6 +346,12 @@ def parse_arguments():
help='Relaunch pelican each time a modification occurs' help='Relaunch pelican each time a modification occurs'
' on the content files.') ' on the content files.')
parser.add_argument('--print-settings', dest='print_settings', nargs='*',
action=PrintSettings, metavar='SETTING_NAME',
help='Print current configuration settings and exit. '
'Append one or more setting name arguments to see the '
'values for specific settings only.')
parser.add_argument('--relative-urls', dest='relative_paths', parser.add_argument('--relative-urls', dest='relative_paths',
action='store_true', action='store_true',
help='Use relative urls in output, ' help='Use relative urls in output, '
@ -527,6 +560,7 @@ def main():
try: try:
pelican, settings = get_instance(args) pelican, settings = get_instance(args)
readers = Readers(settings) readers = Readers(settings)
reader_descs = sorted(set(['%s (%s)' % reader_descs = sorted(set(['%s (%s)' %
(type(r).__name__, (type(r).__name__,