From 5872959a758da688cfb176615c23058135558c87 Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Sun, 10 Mar 2013 16:05:20 -0400 Subject: [PATCH] Move website/sphinx/ to docs/, remove rest of appengine website dir. --- {website/sphinx => docs}/auth.rst | 0 {website/sphinx => docs}/autoreload.rst | 0 {website/sphinx => docs}/conf.py | 0 {website/sphinx => docs}/documentation.rst | 0 {website/sphinx => docs}/escape.rst | 0 {website/sphinx => docs}/favicon.ico | Bin {website/sphinx => docs}/gen.rst | 0 {website/sphinx => docs}/httpclient.rst | 0 {website/sphinx => docs}/httpserver.rst | 0 {website/sphinx => docs}/httputil.rst | 0 {website/sphinx => docs}/index.rst | 0 {website/sphinx => docs}/integration.rst | 0 {website/sphinx => docs}/ioloop.rst | 0 {website/sphinx => docs}/iostream.rst | 0 {website/sphinx => docs}/locale.rst | 0 {website/sphinx => docs}/log.rst | 0 {website/sphinx => docs}/netutil.rst | 0 {website/sphinx => docs}/networking.rst | 0 {website/sphinx => docs}/options.rst | 0 {website/sphinx => docs}/overview.rst | 0 {website/sphinx => docs}/process.rst | 0 {website/sphinx => docs}/releases.rst | 0 {website/sphinx => docs}/releases/next.rst | 0 {website/sphinx => docs}/releases/v1.0.0.rst | 0 {website/sphinx => docs}/releases/v1.0.1.rst | 0 {website/sphinx => docs}/releases/v1.1.0.rst | 0 {website/sphinx => docs}/releases/v1.1.1.rst | 0 {website/sphinx => docs}/releases/v1.2.0.rst | 0 {website/sphinx => docs}/releases/v1.2.1.rst | 0 {website/sphinx => docs}/releases/v2.0.0.rst | 0 {website/sphinx => docs}/releases/v2.1.0.rst | 0 {website/sphinx => docs}/releases/v2.1.1.rst | 0 {website/sphinx => docs}/releases/v2.2.0.rst | 0 {website/sphinx => docs}/releases/v2.2.1.rst | 0 {website/sphinx => docs}/releases/v2.3.0.rst | 0 {website/sphinx => docs}/releases/v2.4.0.rst | 0 {website/sphinx => docs}/releases/v2.4.1.rst | 0 {website/sphinx => docs}/stack_context.rst | 0 {website/sphinx => docs}/template.rst | 0 {website/sphinx => docs}/testing.rst | 0 {website/sphinx => docs}/tornado.png | Bin {website/sphinx => docs}/twisted.rst | 0 {website/sphinx => docs}/utilities.rst | 0 {website/sphinx => docs}/web.rst | 0 {website/sphinx => docs}/webframework.rst | 0 {website/sphinx => docs}/websocket.rst | 0 {website/sphinx => docs}/wsgi.rst | 0 website/Makefile | 24 ---- website/app.yaml | 32 ----- website/index.yaml | 0 website/static/base.css | 120 ------------------- website/static/facebook.png | Bin 7457 -> 0 bytes website/static/favicon.ico | Bin 1022 -> 0 bytes website/static/friendfeed.png | Bin 7906 -> 0 bytes website/static/robots.txt | 2 - website/static/sphinx.css | 67 ----------- website/static/tornado.png | Bin 7101 -> 0 bytes website/static/twitter.png | Bin 7197 -> 0 bytes website/templates/base.html | 28 ----- website/templates/index.html | 67 ----------- website/tornado | 1 - website/website.py | 47 -------- 62 files changed, 388 deletions(-) rename {website/sphinx => docs}/auth.rst (100%) rename {website/sphinx => docs}/autoreload.rst (100%) rename {website/sphinx => docs}/conf.py (100%) rename {website/sphinx => docs}/documentation.rst (100%) rename {website/sphinx => docs}/escape.rst (100%) rename {website/sphinx => docs}/favicon.ico (100%) rename {website/sphinx => docs}/gen.rst (100%) rename {website/sphinx => docs}/httpclient.rst (100%) rename {website/sphinx => docs}/httpserver.rst (100%) rename {website/sphinx => docs}/httputil.rst (100%) rename {website/sphinx => docs}/index.rst (100%) rename {website/sphinx => docs}/integration.rst (100%) rename {website/sphinx => docs}/ioloop.rst (100%) rename {website/sphinx => docs}/iostream.rst (100%) rename {website/sphinx => docs}/locale.rst (100%) rename {website/sphinx => docs}/log.rst (100%) rename {website/sphinx => docs}/netutil.rst (100%) rename {website/sphinx => docs}/networking.rst (100%) rename {website/sphinx => docs}/options.rst (100%) rename {website/sphinx => docs}/overview.rst (100%) rename {website/sphinx => docs}/process.rst (100%) rename {website/sphinx => docs}/releases.rst (100%) rename {website/sphinx => docs}/releases/next.rst (100%) rename {website/sphinx => docs}/releases/v1.0.0.rst (100%) rename {website/sphinx => docs}/releases/v1.0.1.rst (100%) rename {website/sphinx => docs}/releases/v1.1.0.rst (100%) rename {website/sphinx => docs}/releases/v1.1.1.rst (100%) rename {website/sphinx => docs}/releases/v1.2.0.rst (100%) rename {website/sphinx => docs}/releases/v1.2.1.rst (100%) rename {website/sphinx => docs}/releases/v2.0.0.rst (100%) rename {website/sphinx => docs}/releases/v2.1.0.rst (100%) rename {website/sphinx => docs}/releases/v2.1.1.rst (100%) rename {website/sphinx => docs}/releases/v2.2.0.rst (100%) rename {website/sphinx => docs}/releases/v2.2.1.rst (100%) rename {website/sphinx => docs}/releases/v2.3.0.rst (100%) rename {website/sphinx => docs}/releases/v2.4.0.rst (100%) rename {website/sphinx => docs}/releases/v2.4.1.rst (100%) rename {website/sphinx => docs}/stack_context.rst (100%) rename {website/sphinx => docs}/template.rst (100%) rename {website/sphinx => docs}/testing.rst (100%) rename {website/sphinx => docs}/tornado.png (100%) rename {website/sphinx => docs}/twisted.rst (100%) rename {website/sphinx => docs}/utilities.rst (100%) rename {website/sphinx => docs}/web.rst (100%) rename {website/sphinx => docs}/webframework.rst (100%) rename {website/sphinx => docs}/websocket.rst (100%) rename {website/sphinx => docs}/wsgi.rst (100%) delete mode 100644 website/Makefile delete mode 100644 website/app.yaml delete mode 100644 website/index.yaml delete mode 100644 website/static/base.css delete mode 100644 website/static/facebook.png delete mode 100644 website/static/favicon.ico delete mode 100644 website/static/friendfeed.png delete mode 100644 website/static/robots.txt delete mode 100644 website/static/sphinx.css delete mode 100644 website/static/tornado.png delete mode 100644 website/static/twitter.png delete mode 100644 website/templates/base.html delete mode 100644 website/templates/index.html delete mode 120000 website/tornado delete mode 100644 website/website.py diff --git a/website/sphinx/auth.rst b/docs/auth.rst similarity index 100% rename from website/sphinx/auth.rst rename to docs/auth.rst diff --git a/website/sphinx/autoreload.rst b/docs/autoreload.rst similarity index 100% rename from website/sphinx/autoreload.rst rename to docs/autoreload.rst diff --git a/website/sphinx/conf.py b/docs/conf.py similarity index 100% rename from website/sphinx/conf.py rename to docs/conf.py diff --git a/website/sphinx/documentation.rst b/docs/documentation.rst similarity index 100% rename from website/sphinx/documentation.rst rename to docs/documentation.rst diff --git a/website/sphinx/escape.rst b/docs/escape.rst similarity index 100% rename from website/sphinx/escape.rst rename to docs/escape.rst diff --git a/website/sphinx/favicon.ico b/docs/favicon.ico similarity index 100% rename from website/sphinx/favicon.ico rename to docs/favicon.ico diff --git a/website/sphinx/gen.rst b/docs/gen.rst similarity index 100% rename from website/sphinx/gen.rst rename to docs/gen.rst diff --git a/website/sphinx/httpclient.rst b/docs/httpclient.rst similarity index 100% rename from website/sphinx/httpclient.rst rename to docs/httpclient.rst diff --git a/website/sphinx/httpserver.rst b/docs/httpserver.rst similarity index 100% rename from website/sphinx/httpserver.rst rename to docs/httpserver.rst diff --git a/website/sphinx/httputil.rst b/docs/httputil.rst similarity index 100% rename from website/sphinx/httputil.rst rename to docs/httputil.rst diff --git a/website/sphinx/index.rst b/docs/index.rst similarity index 100% rename from website/sphinx/index.rst rename to docs/index.rst diff --git a/website/sphinx/integration.rst b/docs/integration.rst similarity index 100% rename from website/sphinx/integration.rst rename to docs/integration.rst diff --git a/website/sphinx/ioloop.rst b/docs/ioloop.rst similarity index 100% rename from website/sphinx/ioloop.rst rename to docs/ioloop.rst diff --git a/website/sphinx/iostream.rst b/docs/iostream.rst similarity index 100% rename from website/sphinx/iostream.rst rename to docs/iostream.rst diff --git a/website/sphinx/locale.rst b/docs/locale.rst similarity index 100% rename from website/sphinx/locale.rst rename to docs/locale.rst diff --git a/website/sphinx/log.rst b/docs/log.rst similarity index 100% rename from website/sphinx/log.rst rename to docs/log.rst diff --git a/website/sphinx/netutil.rst b/docs/netutil.rst similarity index 100% rename from website/sphinx/netutil.rst rename to docs/netutil.rst diff --git a/website/sphinx/networking.rst b/docs/networking.rst similarity index 100% rename from website/sphinx/networking.rst rename to docs/networking.rst diff --git a/website/sphinx/options.rst b/docs/options.rst similarity index 100% rename from website/sphinx/options.rst rename to docs/options.rst diff --git a/website/sphinx/overview.rst b/docs/overview.rst similarity index 100% rename from website/sphinx/overview.rst rename to docs/overview.rst diff --git a/website/sphinx/process.rst b/docs/process.rst similarity index 100% rename from website/sphinx/process.rst rename to docs/process.rst diff --git a/website/sphinx/releases.rst b/docs/releases.rst similarity index 100% rename from website/sphinx/releases.rst rename to docs/releases.rst diff --git a/website/sphinx/releases/next.rst b/docs/releases/next.rst similarity index 100% rename from website/sphinx/releases/next.rst rename to docs/releases/next.rst diff --git a/website/sphinx/releases/v1.0.0.rst b/docs/releases/v1.0.0.rst similarity index 100% rename from website/sphinx/releases/v1.0.0.rst rename to docs/releases/v1.0.0.rst diff --git a/website/sphinx/releases/v1.0.1.rst b/docs/releases/v1.0.1.rst similarity index 100% rename from website/sphinx/releases/v1.0.1.rst rename to docs/releases/v1.0.1.rst diff --git a/website/sphinx/releases/v1.1.0.rst b/docs/releases/v1.1.0.rst similarity index 100% rename from website/sphinx/releases/v1.1.0.rst rename to docs/releases/v1.1.0.rst diff --git a/website/sphinx/releases/v1.1.1.rst b/docs/releases/v1.1.1.rst similarity index 100% rename from website/sphinx/releases/v1.1.1.rst rename to docs/releases/v1.1.1.rst diff --git a/website/sphinx/releases/v1.2.0.rst b/docs/releases/v1.2.0.rst similarity index 100% rename from website/sphinx/releases/v1.2.0.rst rename to docs/releases/v1.2.0.rst diff --git a/website/sphinx/releases/v1.2.1.rst b/docs/releases/v1.2.1.rst similarity index 100% rename from website/sphinx/releases/v1.2.1.rst rename to docs/releases/v1.2.1.rst diff --git a/website/sphinx/releases/v2.0.0.rst b/docs/releases/v2.0.0.rst similarity index 100% rename from website/sphinx/releases/v2.0.0.rst rename to docs/releases/v2.0.0.rst diff --git a/website/sphinx/releases/v2.1.0.rst b/docs/releases/v2.1.0.rst similarity index 100% rename from website/sphinx/releases/v2.1.0.rst rename to docs/releases/v2.1.0.rst diff --git a/website/sphinx/releases/v2.1.1.rst b/docs/releases/v2.1.1.rst similarity index 100% rename from website/sphinx/releases/v2.1.1.rst rename to docs/releases/v2.1.1.rst diff --git a/website/sphinx/releases/v2.2.0.rst b/docs/releases/v2.2.0.rst similarity index 100% rename from website/sphinx/releases/v2.2.0.rst rename to docs/releases/v2.2.0.rst diff --git a/website/sphinx/releases/v2.2.1.rst b/docs/releases/v2.2.1.rst similarity index 100% rename from website/sphinx/releases/v2.2.1.rst rename to docs/releases/v2.2.1.rst diff --git a/website/sphinx/releases/v2.3.0.rst b/docs/releases/v2.3.0.rst similarity index 100% rename from website/sphinx/releases/v2.3.0.rst rename to docs/releases/v2.3.0.rst diff --git a/website/sphinx/releases/v2.4.0.rst b/docs/releases/v2.4.0.rst similarity index 100% rename from website/sphinx/releases/v2.4.0.rst rename to docs/releases/v2.4.0.rst diff --git a/website/sphinx/releases/v2.4.1.rst b/docs/releases/v2.4.1.rst similarity index 100% rename from website/sphinx/releases/v2.4.1.rst rename to docs/releases/v2.4.1.rst diff --git a/website/sphinx/stack_context.rst b/docs/stack_context.rst similarity index 100% rename from website/sphinx/stack_context.rst rename to docs/stack_context.rst diff --git a/website/sphinx/template.rst b/docs/template.rst similarity index 100% rename from website/sphinx/template.rst rename to docs/template.rst diff --git a/website/sphinx/testing.rst b/docs/testing.rst similarity index 100% rename from website/sphinx/testing.rst rename to docs/testing.rst diff --git a/website/sphinx/tornado.png b/docs/tornado.png similarity index 100% rename from website/sphinx/tornado.png rename to docs/tornado.png diff --git a/website/sphinx/twisted.rst b/docs/twisted.rst similarity index 100% rename from website/sphinx/twisted.rst rename to docs/twisted.rst diff --git a/website/sphinx/utilities.rst b/docs/utilities.rst similarity index 100% rename from website/sphinx/utilities.rst rename to docs/utilities.rst diff --git a/website/sphinx/web.rst b/docs/web.rst similarity index 100% rename from website/sphinx/web.rst rename to docs/web.rst diff --git a/website/sphinx/webframework.rst b/docs/webframework.rst similarity index 100% rename from website/sphinx/webframework.rst rename to docs/webframework.rst diff --git a/website/sphinx/websocket.rst b/docs/websocket.rst similarity index 100% rename from website/sphinx/websocket.rst rename to docs/websocket.rst diff --git a/website/sphinx/wsgi.rst b/docs/wsgi.rst similarity index 100% rename from website/sphinx/wsgi.rst rename to docs/wsgi.rst diff --git a/website/Makefile b/website/Makefile deleted file mode 100644 index 202e2d13..00000000 --- a/website/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -SPHINXOPTS=-W -d sphinx/build/doctrees sphinx - -.PHONY: sphinx -sphinx: - sphinx-build -b html $(SPHINXOPTS) sphinx/build/html - -.PHONY: coverage -coverage: - sphinx-build -b coverage ${SPHINXOPTS} sphinx/build/coverage - cat sphinx/build/coverage/python.txt - -.PHONY: latex -latex: - sphinx-build -b latex $(SPHINXOPTS) sphinx/build/latex - -# Building a pdf requires a latex installation. For macports, the needed -# packages are texlive-latex-extra and texlive-fonts-recommended. -# The output is in sphinx/build/latex/tornado.pdf -.PHONY: pdf -pdf: latex - cd sphinx/build/latex && pdflatex -interaction=nonstopmode tornado.tex - -clean: - rm -rf sphinx/build diff --git a/website/app.yaml b/website/app.yaml deleted file mode 100644 index f1fcfdfd..00000000 --- a/website/app.yaml +++ /dev/null @@ -1,32 +0,0 @@ -application: python-tornado-hrd -version: 3 -runtime: python27 -api_version: 1 -threadsafe: yes - -handlers: -- url: /static/tornado-0.1.tar.gz - script: website.application - -- url: /static/tornado-0.2.tar.gz - script: website.application - -- url: /static/ - static_dir: static - -- url: /robots\.txt - static_files: static/robots.txt - upload: static/robots.txt - -- url: /favicon\.ico - static_files: static/favicon.ico - upload: static/favicon.ico - -- url: /documentation/? - script: website.application - -- url: /documentation - static_dir: sphinx/build/html - -- url: /.* - script: website.application diff --git a/website/index.yaml b/website/index.yaml deleted file mode 100644 index e69de29b..00000000 diff --git a/website/static/base.css b/website/static/base.css deleted file mode 100644 index 543d6f24..00000000 --- a/website/static/base.css +++ /dev/null @@ -1,120 +0,0 @@ -body { - background: white; - color: black; - font-family: Georgia, serif; - font-size: 11pt; - margin: 10px; - margin-top: 15px; - margin-bottom: 15px; -} - -h1, -h2, -h3, -h4 { - font-family: Calibri, sans-serif; - margin: 0; -} - -img { - border: 0; -} - -pre, -code { - color: #060; -} - -a, -a code { - color: #216093; -} - -table { - border-collapse: collapse; - border: 0; -} - -td { - border: 0; - padding: 0; -} - -#body { - margin: auto; - max-width: 850px; -} - -#header { - margin-bottom: 15px; - margin-right: 30px; -} - -#content, -#footer { - margin-left: 31px; - margin-right: 31px; -} - -#content p, -#content li, -#footer { - line-height: 16pt; -} - -#content pre { - line-height: 14pt; - margin: 17pt; - padding-left: 1em; - border-left: 1px solid #ccc; -} - -#footer { - margin-top: 5em; -} - -#header .logo { - line-height: 0; - padding-bottom: 5px; - padding-right: 15px; -} - -#header .logo img { - width: 286px; - height: 72px; -} - -#header .title { - vertical-align: bottom; -} - -#header .title h1 { - font-size: 35px; - font-weight: normal; -} - -#header .title h1, -#header .title h1 a { - color: #666; -} - -#content h1, -#content h2, -#content h3 { - color: #4d8cbf; - margin-bottom: 2pt; - margin-top: 17pt; -} - -#content h2 { - font-size: 19pt; -} - -#content h3 { - font-size: 15pt; -} - -#content p { - margin: 0; - margin-bottom: 1em; -} diff --git a/website/static/facebook.png b/website/static/facebook.png deleted file mode 100644 index 47738323ed50f47074a68991256acefe17ad9030..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7457 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 diff --git a/website/static/favicon.ico b/website/static/favicon.ico deleted file mode 100644 index c9cc4d6aa47ba3c3f3115b90a48bc04b3eaa82a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcma))TZRrA@J&KMBS=6|i4Q?tO(JH@kZz04SUoj61sBVzmiDcs2YOQtt&e6H2z3|*T4(A1U=?>il5&@QD#d;N-N zD4lJW(_S-o0j=CcG*@OsYwdzC>v!OqWf+YN?Dk)xwfX}by?8nZs;R);d5_ke%Eimz zdpY5m>%uik;L0jI>psX2eRm#mAuXiE^Kg{xeb-n&;F;x|l%0XkcSJX+BcaT5| zIpNnxpF{QLS-5Ixi_6)Rt*k}r*01RG6w)=}>g&*Ueur7lpyTeMPxgMVjgD7?xqAy{ z^$x8g9e1^2L^&qk9s+wCt@2NhaxZy)f-Buo5 zg>P>PTV94%nS-)<6;l2?)K|ZT)mXr=Zy=m>Xs?Wri&rojSm%dB`;;MP!1cVaT7SY; zR$w;oLD~8l&GIGi_9{kwQw)2W&>qdgsLWFwe}6o7U!r?e_4aMbc}X~W0k*mVuC76E z+=jE47rwOxM=iv6_6LD_ISf0`#1A+L`zO0WRkyT7a3d>xzA3n#P2MiPbI)s(d!F=3 zG!5UTKl1GUe~J4j8lN2Wln0KLhq<=^-`Nm>w*%KM)42=|h!aoi!;n9jLWrZ`*#C_3 z9y;b4H2Dwc>Me|hrbhd`77M4-NurOU#|&bcjN^Ywq@pN1LjDgXlkVbpXpbIG1~X)T lF%kXKh%=0dR~Z`<@^g%R8gr1GPeaq#7PIsw>4<<3#NXO#hRXl| diff --git a/website/static/friendfeed.png b/website/static/friendfeed.png deleted file mode 100644 index ac09f4e45342ae36713f21d535aa3af62af1429a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7906 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

NV0_{Nr*NgZop>&!ME^! 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 diff --git a/website/templates/base.html b/website/templates/base.html deleted file mode 100644 index 88529a13..00000000 --- a/website/templates/base.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - {% block title %}Tornado Web Server{% end %} - - - {% block head %}{% end %} - - -

- -
{% block body %}{% end %}
- -
- {% block bottom %}{% end %} - - diff --git a/website/templates/index.html b/website/templates/index.html deleted file mode 100644 index bd61129a..00000000 --- a/website/templates/index.html +++ /dev/null @@ -1,67 +0,0 @@ -{% extends "base.html" %} - -{% block body %} -

Tornado is an open source version of the scalable, non-blocking web server and tools that power FriendFeed. The FriendFeed application is written using a web framework that looks a bit like web.py or Google's webapp, but with additional tools and optimizations to take advantage of the underlying non-blocking infrastructure.

-

The framework is distinct from most mainstream web server frameworks (and certainly most Python frameworks) because it is non-blocking and reasonably fast. Because it is non-blocking and uses epoll or kqueue, it can handle thousands of simultaneous standing connections, which means it is ideal for real-time web services. We built the web server specifically to handle FriendFeed's real-time features — every active user of FriendFeed maintains an open connection to the FriendFeed servers. (For more information on scaling servers to support thousands of clients, see The C10K problem.)

- -

Upgrading from Tornado 1.x

- -

Tornado 2.0 introduces several potentially backwards-incompatible changes, - including in particular automatic escaping of template output. Users - who are upgrading from Tornado 1.x should see the - release notes for - information about backwards compatibility.

- -

Quick links

- - - -

Hello, world

-

Here is the canonical "Hello, world" example app for Tornado:

-
import tornado.ioloop
-import tornado.web
-
-class MainHandler(tornado.web.RequestHandler):
-    def get(self):
-        self.write("Hello, world")
-
-application = tornado.web.Application([
-    (r"/", MainHandler),
-])
-
-if __name__ == "__main__":
-    application.listen(8888)
-    tornado.ioloop.IOLoop.instance().start()
-

See the Tornado documentation for a detailed walkthrough of the framework.

- -

Installation

- -

Automatic installation: Tornado is listed in PyPI and can be installed with pip or easy_install. Note that the source distribution includes demo applications that are not present when Tornado is installed in this way, so you may wish to download a copy of the source tarball as well.

- -

Manual installation: Download tornado-{{version}}.tar.gz

-
tar xvzf tornado-{{version}}.tar.gz
-cd tornado-{{version}}
-python setup.py build
-sudo python setup.py install
-

The Tornado source code is hosted on GitHub. It is also possible to simply add the tornado directory to your PYTHONPATH instead of building with setup.py. - -

Prerequisites: Tornado runs on Python 2.6+ and 3.2+. Both CPython and PyPy are supported. There are no required dependencies outside the Python standard library, although unittest2 is required to run Tornado's unittest suite on Python 2.6. Certain optional features require additional third-party modules: -

    -
  • tornado.curl_httpclient needs PycURL (version 7.18.2 or higher required; version 7.21.1 or higher recommended)
  • -
  • Multithreading support requires the concurrent.futures module, which is in the standard library for Python 3.2+ and available on pypi for older versions.
  • -

- -

Platforms: Tornado should run on any Unix-like platform, although - for the best performance and scalability only Linux and BSD (including - BSD derivatives like Mac OS X) are recommended.

- -

Discussion and support

-

You can discuss Tornado and report bugs on the Tornado developer mailing list. Links to additional resources can be found on the Tornado wiki. - -{% end %} diff --git a/website/tornado b/website/tornado deleted file mode 120000 index 18db1e4b..00000000 --- a/website/tornado +++ /dev/null @@ -1 +0,0 @@ -../tornado \ No newline at end of file diff --git a/website/website.py b/website/website.py deleted file mode 100644 index 2d1d8374..00000000 --- a/website/website.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2009 Bret Taylor -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -import os -import os.path -import tornado.web -import tornado.wsgi - - -class ContentHandler(tornado.web.RequestHandler): - def get(self, path="index"): - paths = ("index",) - if path not in paths: - raise tornado.web.HTTPError(404) - self.render(path + ".html", version=tornado.version) - - -settings = { - "template_path": os.path.join(os.path.dirname(__file__), "templates"), - "xsrf_cookies": True, - "debug": os.environ.get("SERVER_SOFTWARE", "").startswith("Development/"), -} -application = tornado.wsgi.WSGIApplication([ - (r"/", ContentHandler), - (r"/(index)", ContentHandler), - (r"/static/tornado-0.1.tar.gz", tornado.web.RedirectHandler, - dict(url="https://github.com/downloads/facebook/tornado/tornado-0.1.tar.gz")), - (r"/static/tornado-0.2.tar.gz", tornado.web.RedirectHandler, - dict(url="https://github.com/downloads/facebook/tornado/tornado-0.2.tar.gz")), - - (r"/documentation/?", tornado.web.RedirectHandler, - dict(url="/documentation/index.html")), - -], **settings)