[PATCH 03 of 17 v3] cli: convert 'gearbox make-config' into 'kallithea-cli config-create'
Thomas De Schampheleire
patrickdepinguin at gmail.com
Thu Oct 18 20:49:26 UTC 2018
# HG changeset patch
# User Thomas De Schampheleire <thomas.de_schampheleire at nokia.com>
# Date 1537821464 -7200
# Mon Sep 24 22:37:44 2018 +0200
# Node ID 9d368360e821838c058aeee6e3f0e7108229b514
# Parent 580800b703d07e94be68796e550ecfd690b6b4db
cli: convert 'gearbox make-config' into 'kallithea-cli config-create'
... and update documentation.
diff --git a/docs/contributing.rst b/docs/contributing.rst
--- a/docs/contributing.rst
+++ b/docs/contributing.rst
@@ -39,7 +39,7 @@ To get started with Kallithea developmen
pip install --upgrade -r dev_requirements.txt
npm install # install dependencies - both tools and data
npm run less # for generating css from less
- gearbox make-config my.ini
+ kallithea-cli config-create my.ini
gearbox setup-db -c my.ini --user=user --email=user at example.com --password=password --repos=/tmp
gearbox serve -c my.ini --reload &
firefox http://127.0.0.1:5000/
diff --git a/docs/dev/dbmigrations.rst b/docs/dev/dbmigrations.rst
--- a/docs/dev/dbmigrations.rst
+++ b/docs/dev/dbmigrations.rst
@@ -18,7 +18,7 @@ 1. :ref:`Create a Kallithea configuratio
2. Create a separate throwaway configuration for iterating on the actual
database changes::
- gearbox make-config temp.ini
+ kallithea-cli config-create temp.ini
Edit the file to change database settings. SQLite is typically fine,
but make sure to change the path to e.g. ``temp.db``, to avoid
diff --git a/docs/installation_win.rst b/docs/installation_win.rst
--- a/docs/installation_win.rst
+++ b/docs/installation_win.rst
@@ -166,7 +166,7 @@ it, reopen it following the same command
one). When ready, type::
cd C:\Kallithea\Bin
- gearbox make-config my.ini
+ kallithea-cli config-create my.ini
Then you must edit my.ini to fit your needs (IP address, IP
port, mail settings, database, etc.). `NotePad++`__ or a similar text
diff --git a/docs/installation_win_old.rst b/docs/installation_win_old.rst
--- a/docs/installation_win_old.rst
+++ b/docs/installation_win_old.rst
@@ -204,7 +204,7 @@ if you closed it reopen it following the
"activate" one). When ready, just type::
cd C:\Kallithea\Bin
- gearbox make-config my.ini
+ kallithea-cli config-create my.ini
Then, you must edit my.ini to fit your needs (network address and
port, mail settings, database, whatever). I recommend using NotePad++
diff --git a/docs/setup.rst b/docs/setup.rst
--- a/docs/setup.rst
+++ b/docs/setup.rst
@@ -27,14 +27,14 @@ Setting up Kallithea
First, you will need to create a Kallithea configuration file. Run the
following command to do so::
- gearbox make-config my.ini
+ kallithea-cli config-create my.ini
This will create the file ``my.ini`` in the current directory. This
configuration file contains the various settings for Kallithea, e.g.
proxy port, email settings, usage of static files, cache, Celery
settings, and logging. Extra settings can be specified like::
- gearbox make-config my.ini host=8.8.8.8 "[handler_console]" formatter=color_formatter
+ kallithea-cli config-create my.ini host=8.8.8.8 "[handler_console]" formatter=color_formatter
Next, you need to create the databases used by Kallithea. It is recommended to
use PostgreSQL or SQLite (default). If you choose a database other than the
diff --git a/docs/upgrade.rst b/docs/upgrade.rst
--- a/docs/upgrade.rst
+++ b/docs/upgrade.rst
@@ -105,7 +105,7 @@ 5. Upgrade your configuration
Run the following command to create a new configuration (``.ini``) file::
- gearbox make-config new.ini
+ kallithea-cli config-create new.ini
Then compare it with your old config file and see what changed.
diff --git a/kallithea/bin/kallithea_cli.py b/kallithea/bin/kallithea_cli.py
--- a/kallithea/bin/kallithea_cli.py
+++ b/kallithea/bin/kallithea_cli.py
@@ -14,3 +14,6 @@
# import top-level 'cli' object referenced from setup.py
from kallithea.bin.kallithea_cli_base import cli
+
+# import commands (they will add themselves to the 'cli' object)
+import kallithea.bin.kallithea_cli_config
diff --git a/kallithea/lib/paster_commands/make_config.py b/kallithea/bin/kallithea_cli_config.py
rename from kallithea/lib/paster_commands/make_config.py
rename to kallithea/bin/kallithea_cli_config.py
--- a/kallithea/lib/paster_commands/make_config.py
+++ b/kallithea/bin/kallithea_cli_config.py
@@ -11,80 +11,59 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-kallithea.lib.paster_commands.make_config
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-make-config gearbox command for Kallithea
-
-:license: GPLv3, see LICENSE.md for more details.
-"""
-
+import click
+from kallithea.bin.kallithea_cli_base import cli
import os
-import sys
import uuid
-import argparse
from collections import defaultdict
import mako.exceptions
-from kallithea.lib.paster_commands.common import BasePasterCommand
from kallithea.lib import inifile
+def show_defaults(ctx, param, value):
+ # Following construct is taken from the Click documentation:
+ # https://click.palletsprojects.com/en/6.x/options/#callbacks-and-eager-options
+ # "The resilient_parsing flag is applied to the context if Click wants to
+ # parse the command line without any destructive behavior that would change
+ # the execution flow. In this case, because we would exit the program, we
+ # instead do nothing."
+ if not value or ctx.resilient_parsing:
+ return
-class Command(BasePasterCommand):
- """Kallithea: Create a new config file
+ for key, value in inifile.default_variables.items():
+ click.echo('%s=%s' % (key, value))
- make-config is the first part of the two step setup process. This first
- step creates a customized .ini configuration file. The next step is to run
- setup-db to populate the database that is referenced in the configuration
- file.
+ ctx.exit()
+
+ at cli.command()
+ at click.option('--show-defaults', callback=show_defaults,
+ is_flag=True, expose_value=False, is_eager=True,
+ help='Show the default values that can be overridden')
+ at click.argument('config_file', type=click.Path())
+ at click.argument('key_value_pairs', nargs=-1)
+def config_create(config_file, key_value_pairs):
+ """Create a new configuration file.
+
+ This command creates a default configuration file, possibly adding/updating
+ settings you specify.
The primary high level configuration keys and their default values are
- shown with --show-defaults . Custom values can be specified on the command
- line as key=value arguments when creating a config file.
+ shown with --show-defaults . Custom values for these keys can be specified
+ on the command line as key=value arguments.
Additional key=value arguments will be patched/inserted in the [app:main]
section ... until another section name specifies where any following values
should go.
"""
- takes_config_file = False # at least not an existing one ...
-
- def take_action(self, args):
- _run(args)
-
- def get_parser(self, prog_name):
- parser = super(Command, self).get_parser(prog_name)
-
- parser.add_argument('config_file', nargs='?',
- help='application config file to write')
-
- parser.add_argument('custom', nargs=argparse.REMAINDER,
- help='"key=value" for customizing the config file')
-
- parser.add_argument('--show-defaults', action='store_true',
- help="Show the default values that can be overridden")
-
- return parser
-
-
-def _run(args):
- if args.show_defaults:
- if args.config_file is not None:
- raise ValueError("Can't specify both config file and --show-defaults")
- for key, value in inifile.default_variables.items():
- print '%s=%s' % (key, value)
- sys.exit(0)
- if args.config_file is None:
- raise ValueError("Missing argument: config file")
-
mako_variable_values = {}
ini_settings = defaultdict(dict)
section_name = None
- for parameter in args.custom:
+ for parameter in key_value_pairs:
parts = parameter.split('=', 1)
if len(parts) == 1 and parameter.startswith('[') and parameter.endswith(']'):
section_name = parameter
@@ -104,9 +83,9 @@ def _run(args):
'uuid': lambda: uuid.uuid4().hex,
})
try:
- config_file = os.path.abspath(args.config_file)
- inifile.create(config_file, mako_variable_values, ini_settings)
- print 'Wrote new config file in %s' % config_file
+ config_file_abs = os.path.abspath(config_file)
+ inifile.create(config_file_abs, mako_variable_values, ini_settings)
+ click.echo('Wrote new config file in %s' % config_file_abs)
except Exception:
- print mako.exceptions.text_error_template().render()
+ click.echo(mako.exceptions.text_error_template().render())
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -163,7 +163,6 @@ setuptools.setup(
cleanup-repos=kallithea.lib.paster_commands.cleanup:Command
install-iis=kallithea.lib.paster_commands.install_iis:Command
ishell=kallithea.lib.paster_commands.ishell:Command
- make-config=kallithea.lib.paster_commands.make_config:Command
make-index=kallithea.lib.paster_commands.make_index:Command
make-rcext=kallithea.lib.paster_commands.make_rcextensions:Command
repo-scan=kallithea.lib.paster_commands.repo_scan:Command
More information about the kallithea-general
mailing list