.. _cmd:

******************************
Command Line Tool - mod_python
******************************

.. _cmd-overview:

Overview of mod_python command
==============================

mod_python includes a command-line tool named ``mod_python``. The
``mod_python`` command exists to facilitate tasks related to
configuration and management of mod_python.

The general syntax for the command is ``mod_python <subcommand> <arguments>``
where ``<subcommand>`` is a separate tool with its own argument requirements.

.. _cmd-subcommands:

mod_python command line tool sub-commands
=========================================

create
------

``create`` sub-command creates a simple Apache configuration and a
skeleton directory structure necessary for placement of configuration,
logs and content. It is meant to be executed only once per lifetime of
a project.

The configuration generated by ``create`` consists of an
:mod:`httpdconf` based version (in Python) which can then be used to
generate an actual Apache configuration (by using the ``genconfig``
subcommand or simply executing the config files itself). The idea is
that the Apache configuration is always generated and the Python
version is the one meant for editing/adjustments.

The ``create`` subcommand will create the necessary files and
directories if they do not exist, but will not overwrite any existing
files or directories only producing a warning when a file or directory
already exists. It will abort if the Python version of the
configuration file already exists.

``create`` requires a single argument: the distination directory,
Apache ``ServerRoot``.

``create`` has the following command options:

.. cmdoption:: --listen

   A string describing the port and optional IP address on which the
   server is to listen for incoming requests in the form
   ``[ip_address:]port`` The argument will be applied to the Apache
   ``Listen`` directive as is and therefore must be syntactically
   compatible with it.

.. cmdoption:: --pythonpath

   A colon (``":"``) separate list of paths to be applied to the
   :ref:`dir-other-pp` directive.

.. cmdoption:: --pythonhandler

   The name of the Python handler to use. Applied to the
   :ref:`dir-handlers-ph` directive.

.. cmdoption:: --pythonoption

   An option to be specified in the configuration. Multiple options
   are alowed. Applied to the :ref:`dir-other-po` directive.

.. _cmd-sub-create-example:

genconfig
---------

This sub-command exists to facilitate re-generation of an Apache
configuration from a Python-based one. All it does is run the script,
but its use is recommended because the mod_python command will execute
the correct version of Python under which mod_python was initially
compiled. Example::

   mod_python genconfig /path/to/server_root/httpd_conf.py > /path/to/server_root/httpd.conf

start
-----

Starts an Apache instance. Requires a single argument, the path to
Apache configuration file.

stop
----

Stops an Apache instance (using graceful-stop). Requires a single
argument, the path to Apache configuration file.

restart
-------

Stops an Apache instance (using graceful). Requires a single argument,
the path to Apache configuration file.

version
-------

This sub-command prints out version and location information about
this mod_python installation, the Apache HTTP Server and Python used
when building this mod_python instance.

Example
-------

To create an Apache instance with all the required directories for a
WSGI application which is located in ``/path/to/myapp`` and defined in
``/path/to/myapp/myapp/myapp/wsgi.py``, run the following::

   mod_python create /path/to/new/server_root \
       --pythonpath=/path/to/my/app \
       --pythonhandler=mod_python.wsgi \
       --pythonoption="mod_python.wsgi.application myapp.wsgi::application"

The above example will create a Python-based configuration in
``/path/to/new/server_root/conf/http_conf.py`` which is a simple
Python script. When executed, the output of the script becomes an
Apache configuration (``create`` will take care of generating the
first Apache config for you).

You should be able to run this Apache instance by executing::

   mod_python start /path/to/new/server_root/conf/httpd.conf
