= CherryPy =
Pythonic, object-oriented web framework

http://www.cherrypy.org/

== Install on Slackware 14 ==
 * wget https://pypi.python.org/packages/source/C/CherryPy/CherryPy-3.2.4.tar.gz
 * cp CherryPy-3.2.4.tar.gz /tmp
 * cd /tmp
 * tar xvzf CherryPy-3.2.4.tar.gz
 * python setup.py build
 * python setup.py install

== Check installation ==
{{{
python
Python 2.7.3 (default, Jul  3 2012, 21:16:07) 
[GCC 4.7.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cherrypy
>>> cherrypy.__version__
'3.2.2'
>>> quit()
}}}

== CherryPy test web app ==

Create folder the web app
 * mkdir -p /var/www/htdocs/cherrypytest/static

Create file '''/var/www/htdocs/cherrypytest/cherrypytest.wsgi'''

{{{#!highlight python
import sys
sys.stdout = sys.stderr
import cherrypy

cherrypy.config.update({'environment': 'embedded'})

class HelloWorld(object):
    @cherrypy.expose
    def index(self):
        return "Hello World CherryPy!!!!"
    @cherrypy.expose
    def add(self,param1,param2):
       return str( int(param1)+int(param2) )

hello = HelloWorld()    
#static dir
confx={'/static': {'tools.staticdir.on':True ,
                  'tools.staticdir.dir':'/var/www/htdocs/cherrypytest/static'
                  }}

application = cherrypy.Application(hello, script_name=None, config=confx)
}}}

Create static file
 * echo "Static Test" > /var/www/htdocs/cherrypytest/static/a.txt 

Create entry in /etc/httpd/vhosts.conf
{{{#!highlight xml
<VirtualHost *:80>
    ServerName localhostcherrypytest
    DocumentRoot "/var/www/htdocs/cherrypytest"
    WSGIScriptAlias / /var/www/htdocs/cherrypytest/cherrypytest.wsgi
    <Directory "/var/www/htdocs/cherrypytest">
      Require local
    </Directory>
</VirtualHost>
}}}

Add entry in /etc/hosts
 * 127.0.0.1 localhostcherrypytest

Restart apache
 * /etc/rc.d/rc.httpd restart

Open the following URLs:
 * http://localhostcherrypytest/
 * http://localhostcherrypytest/add/3/4
 * http://localhostcherrypytest/static/a.txt

== CherryPy configuration location ==
In Slack14 is in 
 * /usr/lib/python2.7/site-packages/CherryPy-3.2.2-py2.7.egg/cherrypy/_cpconfig.py

Inside the file look for Config.environments .
Run python interactively to check the environments
{{{
>>> import cherrypy
>>> envs= cherrypy._cpconfig.environments #dictionary
>>> envs['embedded']
{'checker.on': True, 'engine.SIGTERM': None, 'request.show_mismatched_params': True, 'request.show_tracebacks': True, 'engine.autoreload_on': False, 'tools.log_headers.on': True, 'log.screen': True, 'engine.SIGHUP': None}
>>> envs['production']
{'request.show_tracebacks': False, 'log.screen': False, 'request.show_mismatched_params': False, 'checker.on': False, 'engine.autoreload_on': False, 'tools.log_headers.on': False}
}}}

Open url  http://localhostcherrypytest/add/1/2a with environment embedded will show a traceback.

To disable the traceback add the follow inside the class HelloWorld
{{{#!highlight python
class HelloWorld(object):
    _cp_config = {'request.show_tracebacks': False}
    @cherrypy.expose
    def index(self):
        return "Hello World CherryPy!!!!"
    @cherrypy.expose
    def add(self,param1,param2):
       return str( int(param1)+int(param2) )
}}}

== Templating ==
Check [[Jinja2]]