setup_rhodecode.py
145 lines
| 4.9 KiB
| text/x-python
|
PythonLexer
r1 | # -*- coding: utf-8 -*- | |||
r1271 | # Copyright (C) 2010-2017 RhodeCode GmbH | |||
r1 | # | |||
# This program is free software: you can redistribute it and/or modify | ||||
# it under the terms of the GNU Affero General Public License, version 3 | ||||
# (only), as published by the Free Software Foundation. | ||||
# | ||||
# This program is distributed in the hope that it will be useful, | ||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU Affero General Public License | ||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
# | ||||
# This program is dual-licensed. If you wish to learn more about the | ||||
# RhodeCode Enterprise Edition, including its added features, Support services, | ||||
# and proprietary license terms, please see https://rhodecode.com/licenses/ | ||||
import os | ||||
import sys | ||||
from paste.script.appinstall import AbstractInstallCommand | ||||
from paste.script.command import BadCommand | ||||
from paste.deploy import appconfig | ||||
# fix rhodecode import | ||||
from os.path import dirname as dn | ||||
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( | ||||
'--api-key', | ||||
action='store', | ||||
dest='api_key', | ||||
help='Initial API key for the admin user') | ||||
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') | ||||
parser.add_option( | ||||
'--public-access', | ||||
action='store_true', | ||||
dest='public_access', | ||||
default=None, | ||||
help='Enable public access on this installation (default)') | ||||
parser.add_option( | ||||
'--no-public-access', | ||||
action='store_false', | ||||
dest='public_access', | ||||
default=None, | ||||
help='Disable public access on this installation ') | ||||
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) | ||||