Files @ 260a7a01b054
Branch filter:

Location: kallithea/rhodecode/lib/paster_commands/setup_rhodecode.py

Mads Kiilerich
follow Python conventions for boolean values

True and False might be singletons and the "default" values for "boolean"
expressions, but "all" values in Python has a boolean value and should be
evaluated as such. Checking with 'is True' and 'is False' is thus confusing,
error prone and unnessarily complex.

If we anywhere rely and nullable boolean fields from the database layer and
don't want the null value to be treated as False then we should check
explicitly for null with 'is None'.
import os
import sys
from paste.script.appinstall import AbstractInstallCommand
from paste.script.command import BadCommand
from paste.deploy import appconfig

from os.path import dirname as dn, join as jn
#to get the rhodecode import
rc_path = dn(dn(dn(os.path.realpath(__file__))))
sys.path.append(rc_path)


class Command(AbstractInstallCommand):

    default_verbosity = 1
    max_args = 1
    min_args = 1
    summary = "Setup an application, given a config file"
    usage = "CONFIG_FILE"
    group_name = "RhodeCode"

    description = """\

    Setup RhodeCode according to its configuration file.  This is
    the second part of a two-phase web application installation
    process (the first phase is prepare-app).  The setup process
    consist of things like setting up databases, creating super user
    """

    parser = AbstractInstallCommand.standard_parser(
        simulate=True, quiet=True, interactive=True)
    parser.add_option('--user',
                      action='store',
                      dest='username',
                      default=None,
                      help='Admin Username')
    parser.add_option('--email',
                      action='store',
                      dest='email',
                      default=None,
                      help='Admin Email')
    parser.add_option('--password',
                      action='store',
                      dest='password',
                      default=None,
                      help='Admin password min 6 chars')
    parser.add_option('--repos',
                      action='store',
                      dest='repos_location',
                      default=None,
                      help='Absolute path to repositories location')
    parser.add_option('--name',
                      action='store',
                      dest='section_name',
                      default=None,
                      help='The name of the section to set up (default: app:main)')
    parser.add_option('--force-yes',
                       action='store_true',
                       dest='force_ask',
                       default=None,
                       help='Force yes to every question')
    parser.add_option('--force-no',
                       action='store_false',
                       dest='force_ask',
                       default=None,
                       help='Force no to every question')

    def command(self):
        config_spec = self.args[0]
        section = self.options.section_name
        if section is None:
            if '#' in config_spec:
                config_spec, section = config_spec.split('#', 1)
            else:
                section = 'main'
        if not ':' in section:
            plain_section = section
            section = 'app:' + section
        else:
            plain_section = section.split(':', 1)[0]
        if not config_spec.startswith('config:'):
            config_spec = 'config:' + config_spec
        if plain_section != 'main':
            config_spec += '#' + plain_section
        config_file = config_spec[len('config:'):].split('#', 1)[0]
        config_file = os.path.join(os.getcwd(), config_file)
        self.logging_file_config(config_file)
        conf = appconfig(config_spec, relative_to=os.getcwd())
        ep_name = conf.context.entry_point_name
        ep_group = conf.context.protocol
        dist = conf.context.distribution
        if dist is None:
            raise BadCommand(
                "The section %r is not the application (probably a filter).  "
                "You should add #section_name, where section_name is the "
                "section that configures your application" % plain_section)
        installer = self.get_installer(dist, ep_group, ep_name)
        installer.setup_config(
            self, config_file, section, self.sysconfig_install_vars(installer))
        self.call_sysconfig_functions(
            'post_setup_hook', installer, config_file)