Source code for stoq.main
# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
##
## Copyright (C) 2005-2011 Async Open Source <http://www.async.com.br>
## All rights reserved
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## 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 Lesser General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., or visit: http://www.gnu.org/.
##
## Author(s): Stoq Team <stoq-devel@async.com.br>
##
##
""" Stoq startup routines"""
import logging
import optparse
import os
import platform
import sys
# To avoid kiwi dependency at startup
log = logging.getLogger(__name__)
[docs]def get_shell(args):
log.info('parsing command line arguments: %s ' % (args, ))
from stoq.lib.options import get_option_parser
parser = get_option_parser()
group = optparse.OptionGroup(parser, 'Stoq')
group.add_option('-A', '--autoreload',
action="store_true",
dest="autoreload",
help='Autoreload application when source is modified')
group.add_option('', '--fatal-warnings',
action="store_false",
dest="non_fatal_warnings",
default=True,
help='Make all warnings fatal')
group.add_option('', '--login-username',
action="store",
dest="login_username",
default=None,
help='Username to login to stoq with')
group.add_option('', '--no-splash-screen',
action="store_false",
dest="splashscreen",
default=True,
help='Disable the splash screen')
group.add_option('', '--version',
action="store_true",
dest="version",
help='Show the application version')
group.add_option('', '--wizard',
action="store_true",
dest="wizard",
default=None,
help='Run the wizard')
parser.add_option_group(group)
options, args = parser.parse_args(args)
if options.version:
import stoq
raise SystemExit(stoq.version)
from stoq.gui.shell.bootstrap import boot_shell
shell = boot_shell(options)
return args, shell
def _windows_fixes(): # pragma: no cover
executable = os.path.realpath(os.path.abspath(sys.executable))
root = os.path.dirname(executable)
# Indicate the cert.pem location so requests can use it on verify
# From: http://stackoverflow.com/a/33334042
import requests
requests.utils.DEFAULT_CA_BUNDLE_PATH = os.path.join(root, 'cacert.pem')
[docs]def main(args):
if platform.system() == 'Windows': # pragma: no cover
_windows_fixes()
args, shell = get_shell(args)
action_name = None
if len(args) < 2:
appname = None
else:
appname = args[1].strip()
if appname.endswith('/'):
appname = appname[:-1]
from stoq.lib.applist import get_application_names
apps = get_application_names()
if not appname in apps:
raise SystemExit("'%s' is not an application. "
"Valid applications are: %s" % (appname, apps))
if len(args) > 2:
action_name = args[2]
shell.main(appname, action_name)