Commits

Andriy Kornatskyy committed 0c705dd

Added hello world for turbogears.

Comments (0)

Files changed (7)

 *.pyc
 *.pyo
 *.zip
+01-welcome/turbogears/helloworld
 04-pep8/bottle
 04-pep8/chameleon
 04-pep8/cherrypy

01-welcome/Makefile

-.SILENT: clean env pypy django flask pyramid web.py bottle wheezy.web tornado web2py bobo cherrypy wsgi circuits
-.PHONY: clean env pypy django flask pyramid web.py bottle wheezy.web tornado web2py bobo cherrypy wsgi circuits
+.SILENT: clean env pypy django flask pyramid web.py bottle wheezy.web tornado web2py bobo cherrypy wsgi circuits turbogears
+.PHONY: clean env pypy django flask pyramid web.py bottle wheezy.web tornado web2py bobo cherrypy wsgi circuits turbogears
 
 VERSION=2.7
 PYPI=http://pypi.python.org/simple
 	export PYTHONPATH=$$PYTHONPATH:circuits ; \
 	$(ENV)/bin/gunicorn -b 0.0.0.0:8080 -w 4 app:main
 endif
+
+turbogears:
+	$(ENV)/bin/easy_install-$(VERSION) -i $(PYPI) -O2 \
+			"tg.devtools>=2.2.0" "webob==1.1.1"; \
+	cd turbogears ; rm -rf helloworld ; \
+	../env/bin/paster quickstart -n -x --noinput helloworld ; \
+	cd helloworld ; ../../env/bin/python setup.py develop ; \
+	cp ../root.py helloworld/controllers ; \
+	cp ../development.ini .
+
+ifeq ($(SERVER),uwsgi)
+	$(ENV)/bin/uwsgi --ini turbogears/uwsgi.ini
+else
+	$(ENV)/bin/gunicorn_paster -w 4 `pwd`/turbogears/helloworld/development.ini
+endif

01-welcome/benchmark.py

 }
 
 frameworks = ['bottle', 'pyramid', 'wheezy.web', 'wsgi']
-frameworks += ['circuits', 'django', 'flask', 'web2py']
-frameworks += ['bobo', 'cherrypy', 'tornado', 'web.py']
+frameworks += ['circuits', 'django', 'flask']
+frameworks += ['bobo', 'cherrypy', 'tornado']
+frameworks += ['turbogears', 'web.py', 'web2py']
 frameworks = sorted(frameworks)
 
 
             del sys.modules['app']
         except ImportError:
             print("%-15s not installed" % framework)
+        modules = [m for m in sys.modules.keys() if m.endswith('helloworld')]
+        for m in modules:
+            del sys.modules[m]
 
 
 if __name__ == '__main__':

01-welcome/turbogears/app.py

+from paste.deploy import loadapp
+
+
+main = loadapp('config:development.ini', relative_to='./helloworld')

01-welcome/turbogears/development.ini

+#
+# helloworld - Pylons development environment configuration
+#
+# The %(here)s variable will be replaced with the parent directory of this file
+#
+# This file is for deployment specific config options -- other configuration
+# that is always required for the app is done in the config directory,
+# and generally should not be modified by end users.
+
+[DEFAULT]
+debug = false
+# Uncomment and replace with the address which should receive any error reports
+#email_to = you@yourdomain.com
+smtp_server = localhost
+error_email_from = paste@localhost
+
+[server:main]
+use = egg:Paste#http
+host = 127.0.0.1
+port = 8080
+
+[sa_auth]
+cookie_secret = 8c55f1b7-0dd3-43f0-86b2-971c97525d05
+
+[app:main]
+use = egg:helloworld
+full_stack = true
+#lang = ru
+cache_dir = %(here)s/data
+beaker.session.key = helloworld
+beaker.session.secret = 8c55f1b7-0dd3-43f0-86b2-971c97525d05
+
+#By default session is store in cookies to avoid the overhead
+#of having to manage a session storage. On production you might
+#want to switch to a better session storage.
+beaker.session.type = cookie
+beaker.session.validate_key = 8c55f1b7-0dd3-43f0-86b2-971c97525d05
+
+# Disable template autoreload to boost performances in production
+# WARNING: if you want to deploy your application using a zipped egg
+# (ie: if your application's setup.py defines zip-safe=True, then you
+# MUST put "false" for the production environment because there will
+# be no disk and real files to compare time with.
+#auto_reload_templates = false
+
+# If you'd like to fine-tune the individual locations of the cache data dirs
+# for the Cache data, or the Session saves, un-comment the desired settings
+# here:
+#beaker.cache.data_dir = %(here)s/data/cache
+#beaker.session.data_dir = %(here)s/data/sessions
+
+# pick the form for your database
+# %(here) may include a ':' character on Windows environments; this can
+# invalidate the URI when specifying a SQLite db via path name
+# sqlalchemy.url=postgres://username:password@hostname:port/databasename
+# sqlalchemy.url=mysql://username:password@hostname:port/databasename
+
+
+# If you have sqlite, here's a simple default to get you started
+# in development
+
+sqlalchemy.url = sqlite:///%(here)s/devdata.db
+#echo shouldn't be used together with the logging module.
+sqlalchemy.echo = false
+sqlalchemy.echo_pool = false
+sqlalchemy.pool_recycle = 3600
+
+# This line ensures that Genshi will render xhtml when sending the
+# output. Change to html or xml, as desired.
+templating.genshi.method = xhtml
+templating.genshi.doctype = html5
+
+# the compiled template dir is a directory that must be readable by your
+# webserver. It will be used to store the resulting templates once compiled
+# by the TemplateLookup system.
+# During development you generally don't need this option since paste's HTTP
+# server will have access to you development directories, but in production
+# you'll most certainly want to have apache or nginx to write in a directory
+# that does not contain any source code in any form for obvious security reasons.
+templating.mako.compiled_templates_dir = %(here)s/data/templates
+
+# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT*
+# Debug mode will enable the interactive debugging tool, allowing ANYONE to
+# execute malicious code after an exception is raised.
+#set debug = false
+
+# Logging configuration
+# Add additional loggers, handlers, formatters here
+# Uses python's logging config file format
+# http://docs.python.org/lib/logging-config-fileformat.html
+
+#turn this setting to "min" if you would like tw to produce minified
+#javascript files (if your library supports that)
+toscawidgets.framework.resource_variant=debug
+
+[loggers]
+keys = root, helloworld, sqlalchemy, auth
+
+[handlers]
+keys = console
+
+[formatters]
+keys = generic
+
+# If you create additional loggers, add them as a key to [loggers]
+[logger_root]
+level = WARN
+handlers = console
+
+[logger_helloworld]
+level = WARN
+handlers =
+qualname = helloworld
+
+[logger_sqlalchemy]
+level = WARN
+handlers =
+qualname = sqlalchemy.engine
+# "level = INFO" logs SQL queries.
+# "level = DEBUG" logs SQL queries and results.
+# "level = WARN" logs neither.  (Recommended for production systems.)
+
+# A logger for authentication, identification and authorization
+# this is repoze.who:
+[logger_auth]
+level = WARN
+handlers =
+qualname = auth
+
+# If you create additional handlers, add them as a key to [handlers]
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+# If you create additional formatters, add them as a key to [formatters]
+[formatter_generic]
+format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
+datefmt = %H:%M:%S

01-welcome/turbogears/root.py

+from tg import expose
+from helloworld.lib.base import BaseController
+
+
+class RootController(BaseController):
+
+    @expose()
+    def welcome(self):
+        return "Hello World!"

01-welcome/turbogears/uwsgi.ini

+
+[uwsgi]
+chdir = turbogears
+virtualenv = ../env
+pythonpath = .
+wsgi = app:main
+procname-prefix = MyTurboGears-
+
+http-socket = 0.0.0.0:8080
+listen = 1024
+uid = www-data
+gid = www-data
+harakiri = 10
+#optimize = 2
+master = True
+processes = 4
+disable-logging = True
+#logto = /dev/null
+no-default-app = False
+auto-procname = True
+limit-as = 90
+buffer-size = 2048
+post-buffering = 1024
+limit-post = 1024
+thread-stacksize = 64