pgadmin4/web/pgAdmin4.py
Ashesh Vashi a35288e25d Save the runtime status information in the application object for using
it other places.

globals() does not return consistent value across the application
context.

Thanks Neel Patel for reporting the issue.
2016-06-21 15:13:04 +05:30

93 lines
3.3 KiB
Python

##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2016, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
"""This is the main application entry point for pgAdmin 4. If running on
a webserver, this will provide the WSGI interface, otherwise, we're going
to start a web server."""
import os
import sys
# We need to include the root directory in sys.path to ensure that we can
# find everything we need when running in the standalone runtime.
root = os.path.dirname(os.path.realpath(__file__))
if sys.path[0] != root:
sys.path.insert(0, root)
import config
from pgadmin import create_app
##########################################################################
# Sanity checks
##########################################################################
# Check for local settings if running in server mode
if config.SERVER_MODE is True:
local_config = os.path.join(os.path.dirname(os.path.realpath(__file__)),
'config_local.py')
if not os.path.isfile(local_config):
print("The configuration file %s does not exist.\n" % local_config)
print("Before running this application, ensure that config_local.py has been created")
print("and sets values for SECRET_KEY, SECURITY_PASSWORD_SALT and CSRF_SESSION_KEY")
print("at bare minimum. See config.py for more information and a complete list of")
print("settings. Exiting...")
sys.exit(1)
# Check if the database exists. If it does not, create it.
if not os.path.isfile(config.SQLITE_PATH):
setupfile = os.path.join(os.path.dirname(os.path.realpath(__file__)),
'setup.py')
exec (open(setupfile).read())
##########################################################################
# Server starup
##########################################################################
# Create the app!
app = create_app()
if config.DEBUG:
app.debug = True
else:
app.debug = False
# Start the web server. The port number should have already been set by the
# runtime if we're running in desktop mode, otherwise we'll just use the
# Flask default.
PGADMIN_RUNTIME = False
if 'PGADMIN_PORT' in globals():
app.logger.debug('Running under the desktop runtime, port: %s',
globals()['PGADMIN_PORT'])
server_port = int(globals()['PGADMIN_PORT'])
PGADMIN_RUNTIME = True
else:
app.logger.debug(
'Not running under the desktop runtime, port: %s',
config.DEFAULT_SERVER_PORT)
server_port = config.DEFAULT_SERVER_PORT
# Let the application save the status about the runtime for using it later.
app.PGADMIN_RUNTIME = PGADMIN_RUNTIME
# Output a startup message if we're not under the runtime
if not PGADMIN_RUNTIME:
print("Starting %s. Please navigate to http://localhost:%d in your browser." %
(config.APP_NAME, server_port))
sys.stdout.flush()
try:
app.run(
host=config.DEFAULT_SERVER,
port=server_port,
use_reloader=((not PGADMIN_RUNTIME) and app.debug),
threaded=config.THREADED_MODE
)
except IOError:
app.logger.error("Error starting the app server: %s", sys.exc_info())