Source code for watson.framework.support.console.commands.development

# -*- coding: utf-8 -*-
import code
import os
from watson.console import command
from watson.console.decorators import arg, cmd
from watson.common.imports import load_definition_from_string
from watson.di import ContainerAware
from watson.dev.server import make_dev_server


[docs]class Dev(command.Base, ContainerAware): """Development related tasks. Example: .. code-block:: ./console.py dev runserver Provides access to the following commands during development: - runserver """
[docs] @arg('host', optional=True) @arg('port', optional=True) @arg('noreload', optional=True, default=False) def runserver(self, host, port, noreload): """Runs the development server for the current application. Args: host: The host to bind to port: The port to run on """ app_dir = os.environ['APP_DIR'] app_module = os.environ['APP_MODULE'] script_dir = os.environ['SCRIPT_DIR'] public_dir = os.environ['PUBLIC_DIR'] os.chdir(app_dir) app = load_definition_from_string('{0}.app.application'.format( app_module)) kwargs = { 'app': app, 'script_dir': script_dir, 'public_dir': public_dir, } if host: kwargs['host'] = host if port: kwargs['port'] = int(port) kwargs['noreload'] = True if noreload else False make_dev_server(**kwargs)
[docs] @cmd() def shell(self): """Run an interactive shell based on the current application. The current application can be accessed via `app`. """ locals_ = globals() from watson.framework.applications import Base locals_['app'] = Base.global_app code.InteractiveConsole(locals=locals_).interact()