Skip to content

Instantly share code, notes, and snippets.

@jacobk
Created December 9, 2010 20:04
Show Gist options
  • Save jacobk/735246 to your computer and use it in GitHub Desktop.
Save jacobk/735246 to your computer and use it in GitHub Desktop.
Simple script to process raw data from Tornado BM
#!/usr/bin/env python
# encoding: utf-8
#
# Requires statlib http://code.google.com/p/python-statlib/
"""
process_tornado_bm.py
Created by Jacob Kristhammar on 2010-12-09.
"""
import csv
import os
import statlib.stats
import sys
import time
# Proccess args
if len(sys.argv) < 3:
sys.exit('Usage: %s input_file output_file' % sys.argv[0])
if not os.path.exists(sys.argv[1]):
sys.exit('ERROR: file %s was not found!' % sys.argv[1])
fin = sys.argv[1]
fout = sys.argv[2]
# Read and collate test data
print "Reading", fin
with open(fin) as f:
data = {}
print "Processing raw data"
for line in f.readlines():
timestamp, commit, desc, rps, i = line.split("<>")
samples = data.setdefault(commit, [timestamp, desc, []])
samples[2].append(float(rps or "0.0"))
# Calc mean and standard devation and normalize
print "Crunching numbers"
max_samples = 0
processed_data = []
for commit, sample in data.items():
timestamp, desc, samples = sample
max_samples = max(max_samples, len(samples))
mean = statlib.stats.mean(samples)
std = statlib.stats.stdev(samples)
processed = [timestamp, mean, desc, commit, std] + samples
processed_data.append(processed)
# Sort on timestamp and conver to google friende date format
sorted_data = sorted(processed_data, lambda a,b: cmp(a[0], b[0]))
format = "%m/%d/%Y %H:%M:%S" # Google docs
for e in sorted_data:
e[0] = time.strftime(format, time.localtime(float(e[0])))
# Export as CSV
print "Writing result to", fout
with open(fout, "wb") as f:
cw = csv.writer(f)
header = ["Date", "MEAN", "Desc", "Commit", "STD"]
header.extend(["Sample%s" % (i + 1) for i in xrange(max_samples)])
cw.writerow(header)
for e in sorted_data:
cw.writerow(e)
print "Done!"
#!/usr/bin/env bash
# Setup
export PYTHONPATH=.
local_host=127.0.0.1 #192.168.0.189
local_port=8888
remote_host=127.0.0.1 #192.168.0.88
output_dir=../test_data
# ab setuo
num_req=100000
concurrency=25
# Make sure output dir exists
mkdir -p $output_dir
file_suffix=$(date +"%Y%m%d_%H%M%S")
git checkout master
git pull
commit_list=$(git log --format="%h")
# Don't leave Tornado running when ^C
trap 'kill $tpid; exit' INT
for i in 1 2 3 4 5
do
for c in $commit_list
do
echo "Checking out commit $c"
git checkout -q $c
python demos/helloworld/helloworld.py --logging=error --port=$local_port &
disown # supress ugly Terminated messages
tpid=$! # save pid for killing
echo "Started tornado with pid: $tpid"
sleep 1 # give tornado a change to "boot"
if [ $local_host = $remote_host ]
then
echo "Executing test runner on localhost"
rps=$(ab -q -n $num_req -c $concurrency http://$local_host:$local_port/ |grep "Requests per second" | awk '{print $4}')
else
echo "Executing test runner on remote machine $remote_host"
rps=$(ssh $remote_host ab -q -n $num_req -c $concurrency http://$local_host:$local_port/ |grep "Requests per second" | awk '{print $4}')
fi
echo "Writing results"
echo "$(git show -s --format="%ct<>%H<>%s")<>$rps<>$i" >> $output_dir/results.$file_suffix.txt
echo "Killing tornado"
kill $tpid
done
done
1291419193<>8e4a7730d3fa599aa99fdc58d911d149344eb711<>Merge remote branch 'slay2k/fb_fix_graph_mixin'<>2080.17<>1
1291184933<>a18eead89e6a31175abd60964a05da365139cab3<>Fix duplicated remote_ip field in HTTPRequest.__repr__<>2050.11<>1
1291089736<>ffe291f2eec262679c43c63c4485ac6595eb1433<>A few fixes for FacebookGraphMixin<>2094.94<>1
1291071676<>96ecb6603a10bdcf30bb238d3462ec9da0560c89<>Use request.uri instead of request.path as default redirect for auth.py.<>2086.78<>1
1291068481<>6151498dba7d55d602cbf0360df8f29b712c33a1<>Log malformed HTTP requests more gracefully.<>2234.14<>1
1291067346<>ae3cc317c2781ad515a0ad48891d65b2370982df<>Treat HEAD requests the same as GET for e.g. sending Etag headers.<>2078.80<>1
1291066455<>eededcf5d51c4e945757b0936512115cf50d09f4<>Preserve the order of css_files from UIModules, like we already do for JS<>2094.75<>1
1291065423<>00b9ee91f17c7bc8eb07999381ec3aeb3191ebed<>Expose the client's SSL certificate as HTTPRequest.get_ssl_certificate().<>2086.71<>1
1290472268<>263994e8fc5cec66a57151ca48fd959b6496e281<>Fix bug in multipart/form-data requests.<>2099.86<>1
1290271899<>b0578819e1001bd3ab3555c490e8845f79099c88<>Update pydoc to mention response.rethrow instead of reraise.<>2094.04<>1
1290204293<>9e965556ff7a343864059c35bd8517f434d5c88e<>Don't assume 'boundary' is last field in Content-Type header.<>2134.54<>1
1290108374<>cb232b22dab6754ceaab77ee47b451b3a4811a5f<>Merge remote branch 'vijayp/master'<>2102.38<>1
1290106724<>905a215a286041c986005859c378c0445c127cbb<>Set proxy to '' if no proxy is explicitly set in the request. If this is not done, curls with proxies set are re-inserted into the empty list, and are then reused. This causes connections to be randomly proxied, if some requests use a proxy, and others don't.<>2441.91<>1
1289954273<>d0620d67181714e1880b83b54ebafd6ba9f37666<>Add debug logging for queuing in simple_httpclient.<>2076.34<>1
1289953851<>08e5ba5da8d85cc22ed55d34663b61a6be470579<>Add address parameter to Application.listen to match HTTPServer.listen<>2098.15<>1
1289885571<>0b607c10badb89125118d892b176c36aacd63323<>Fixes for python 2.5<>2095.79<>1
1289884532<>a853850e26d31288941a264125b674d9def9f096<>Add convenience method Application.listen(port) so most apps don't need to explicitly touch HTTPServer.<>2087.46<>1
1289868824<>5f5e0bb3be4e522039fbbe3768109ea64cc99fe2<>Implement max_clients limitation and queueing for SimpleAsyncHTTPClient<>2196.77<>1
1289866269<>7750fe7773366d19937038d2a2fd12b66445f674<>Port pseudo-singleton magic from AsyncHTTPClient to SimpleAsyncHTTPClient<>2115.07<>1
1289774717<>f2aa302bcb044b204ae14c9b66342f483a245218<>Add timeout support to simple_httpclient<>2099.64<>1
1289768294<>8a941c42b27726aee81479be5f80b5a0d33631aa<>Improve docs for IOLoop.add/remove_timeout()<>2081.16<>1
1289332354<>31b0ab0c5d8bcc695589e89bcf9c5848c1dffdf0<>Fix typo in docs<>2103.34<>1
1289246016<>3dc7ebad62b97726795e15b11a28a8c6b4d44726<>Add Amharic to tornado.locale's list of languages.<>2102.18<>1
1289245342<>0dcee8d7dc4ad0a88562ed2676a0b95e6453e405<>Fix mangled language names in tornado.locale for Chinese, Japanese, Korean.<>2095.93<>1
1289242490<>ee55403cd4a6255f275b0f39cbc19f03accd29ef<>Support X-Forwarded-Proto in addition to X-Scheme<>2070.94<>1
1289242262<>7ed8fbe136edc91fe9d884a20e2717b64f1a43b7<>Support websockets over https.<>2117.56<>1
1289242143<>965099eda08b376e18c42dffb7dfd4b5dd79dcc9<>Support "from x import y" in templates, not just "import x"<>2099.21<>1
1289066879<>3e44643d3b89c99c6bc285b0e650ab12ee06fb16<>Fix typo from commit 2b44fac<>2081.71<>1
1288981158<>9ec87c2ba25e202fbce5ff1f35184fcbabba26f3<>Capture StackContext explicitly in HTTPConnection to prevent leaks from one request to the next.<>2076.35<>1
1288896454<>2b44fac4ecf273aadc97dbcaa5abf1e3a1ee7dff<>Check for a closed connection in _add_io_state.<>2402.26<>1
1288829551<>c467cf0274b3e2135393af4fc88683de9d930018<>fix linkify regex plus add unit test<>2441.73<>1
1288240015<>b914a94ac24c6e09003b29bc4919d028a042ed25<>Don't manually set Content-Length in StaticFileHandler.<>2386.51<>1
1288206719<>5e987aa6b2ffededbe11cda78901caa18aff32fb<>Merge remote branch 'szeim/master'<>2330.40<>1
1288205245<>88111779c9a84177b64faef6ae452d550aeaf359<>Merge remote branch 'fiam/master'<>2468.20<>1
1288179372<>2dbb05d5a09406b2369ee30661c88cd890b09e63<>SSLIOStream._do_ssl_handshake SSL error check<>2409.77<>1
1288179287<>3b486fc4f8081355fc0b87ebbf6c261692d7a418<>Fixed IOStream._handle_events (try/except block)<>2395.90<>1
1288123456<>bd4ef586e026e6bb20850215db53ced81706de37<>Make exception handling in AsyncHTTPClient more customizable<>2880.45<>1
1287702042<>af3d0b3b03bc9d0a37938ee97852ca01e20d7a80<>Add gzip support to SimpleAsyncHTTPClient<>2315.58<>1
1287699426<>d06f8f4bcd46d4f2b620ea1cb614731f4b74ab71<>Support minor HTTP request attributes in SimpleAsyncHTTPClient.<>2502.84<>1
1287698310<>3d19e10355477cb5a92d6e708445965de917507c<>Add basic auth support to SimpleAsyncHTTPClient<>2356.58<>1
1287698190<>83d623a1c5495a6f973f55df95e91495c4bb44a5<>Use AsyncHTTPTestCase.fetch instead of overriding it with a less useful version.<>2355.16<>1
1287698129<>09c0c9d772eb1e68f8be24de752eb9917d1ae79b<>Reindent to 4 spaces<>2337.36<>1
1287522815<>d47c453c5f70b6ecac5e3e8b2aa769377b05da23<>Attempt to fix StaticFileHandler when os.path.sep != '/'.<>2354.48<>1
1287522587<>fe5172768e8bb96bfa4f5af127ecbf9f173a31b8<>Merge remote branch 'mdg/default_filename'<>2376.02<>1
1287516527<>e7553f75130329446149085d877403164d3770e9<>Add test case for encoding of request parameters and paths, in response to a mailing list thread that raised questions about handling of '%3F' and '?'.<>2333.57<>1
1287516516<>11fdd479b2ff45a3071672fd483cdb4aa81783ec<>Add a convenience method for synchronous fetches in AsyncHTTPTestCase<>2435.51<>1
1287454424<>c41029217918992d8320aaaa2defd82e590d1d6c<>Add test suite to tarball releases.<>2383.71<>1
1287198174<>638a151d96d681d3bdd6ba5ce5dcf2bd1447959c<>make StaticFileHandler support default filename<>2399.05<>1
1287007129<>86bd681ff841f272c5205f24cd2a613535ed2e00<>Support websockets over HTTP proxies.<>2413.39<>1
1287003931<>334b127003fbc82c53b60289637978ac5291330f<>Windows compatibility for non-blocking IOStream.connect.<>2555.32<>1
1286931569<>f10c7176f11ee26de1aa063ee76af672ca5854d0<>Refactor async connect logic from SimpleAsyncHTTPClient to IOStream.<>2365.84<>1
1286843051<>b57bfd35ccf5c65f65b98b584b0aae0e9b48b7bb<>Reindent example in docstring, which apparently trips up emacs' indentation detection.<>2400.32<>1
1286842743<>7c7b0117cffb6abb336407e392f0ecd3b3e3c1da<>Make Locale.format_date() behave sanely with dates in the future.<>2377.18<>1
1286841735<>3ce6d3daeeeda0fc25206ef99048467307aa0cbe<>Run all IOStream callbacks inside a NullContext so that exception handlers are run in the right order.<>2403.59<>1
1286834257<>925af5045c8eeb1727837c1cc9129d14aec50e76<>Make USE_SIMPLE_HTTPCLIENT work without pycurl installed.<>2496.61<>1
1286831812<>dd5cad996e2a6a4fc43bb603e14b942255986182<>Add initial version of non-curl-based AsyncHTTPClient.<>2456.61<>1
1286821225<>5fffe5a8c738a43821c993fab2693437f229e6c1<>Limit the amount of data sent to socket.send at a time (for windows).<>2485.76<>1
1286564176<>160c961fe1dcbf44f574261207af78f382ccddde<>Move Links section from index.html to the wiki. Remove links to unmaintained social media accounts.<>2484.20<>1
1286562352<>b19953441d88c43b8ba6efd3ed40526c5049d2e3<>Fix StackContext in IOStream. IOStream._handle_events now runs in a NullContext, and user callbacks are wrapped on entry to IOStream.<>2438.20<>1
1285882873<>f732f98063f8a0bf9f7e331876964bedbbdc8462<>add a linkify() function for converting text to html with link detection. Also changed xhtml_escape to not convert return value to utf8, since pages should be assembed in unicode and not utf8 encoded until they are ready to write().<>2916.05<>1
1285729902<>75bfe842c5afe8945ee0635ac431b27de6202f6d<>Handle IOStream.read_bytes(0) gracefully.<>2950.37<>1
1285729856<>e210a644aa982bd6502726a900c79ebdcbe8fdc2<>Make AsyncTestCase.stop() prefer _arg over **kwargs, even when the former is not truthy.<>2938.54<>1
1285713981<>8ecaa43734085ed445ebf7ae70f5be280962e943<>Remove references to async_callback from documentation<>2954.88<>1
1285621832<>1221865747ecfde69a0463b9a0d77b3c5b87f320<>In the select()-based IOLoop, always listen for reads so we can tell when the other side closed the connection.<>2930.86<>1
1285616780<>8300c7ff93227a8cb3ef93b8b2cf8931949beb1c<>Close the IOStream when the remote connection is closed.<>3138.58<>1
1285614283<>b02a31b668af71160c84b1c95a22e1035d9c218a<>Factor port-selection logic out of AsyncHTTPTestCase so it can be used from lower-level tests<>3131.57<>1
1285353753<>7a7e24143e77481d140fb5579bc67e4c45cbcfad<>Make StackContext more usable in libraries by reducing the need to explicitly use IOLoop.add_callback or NullContext.<>2922.62<>1
1285259852<>4973e296ebd68bdaf5bd7fc51186b56c6c69bc91<>Update installation instructions in README.<>2854.63<>1
1285096502<>a1d94db451e57301e2f97d7c33eae6a84592d078<>Fix default_host redirect.<>2926.77<>1
1284841350<>9f529b89863da8c5d8d5011f8d968e094fc2065f<>Fix improperly-renamed variable in set_blocking_signal_threshold<>2915.09<>1
1284760003<>81a3eae5e63eb48f5b42941e5394d58cd7e0f994<>Make xhtml_escape available in the template namespace under its own name in addition to "escape".<>2955.31<>1
1284759945<>625a9bef1adae3d075ac098418f70b5603b83b29<>Move cookie-signing code from set_secure_cookie to a new method for non-cookie use cases<>2906.71<>1
1284746563<>8c4fb07636133586366e195eece8e0254484dd8c<>Document the entire template namespace<>2901.99<>1
1284682504<>f46cfa423869157ce6752d80155ab949bb2044b6<>Generalize IOLoop.set_blocking_log_threshold by allowing user-specified signal handlers (via a new set_blocking_signal_threshold method).<>2930.16<>1
1284672563<>f6f7f83719a48083f3e5ed999e19c0ec67de9b9b<>Refactor IOStream reading logic to fix problems with SSL sockets.<>2919.00<>1
1284494682<>7b17caa0be878ebe1e5a796385c66190c5085c16<>Fixed another two win32_support import<>2904.02<>1
1284494682<>0e21608e86cc85defa265323cb8a50e6337d3d41<>Fixed win32_support import<>2869.09<>1
1284494682<>dbd0051a87aa03c9af6ef235309999c300c63260<>Added binary flag to _waker_reader and _waker_writer<>2883.35<>1
1284494682<>a1b5c33b40ffe87649eeb9aa126e622097479119<>Replaced map() in web.py with for loop<>2864.63<>1
1284494682<>4118b8e7d3a56a3b6d5ba72d900349c58ac91595<>Changed e[0] to e.args[0]<>3066.40<>1
1284486176<>fb08c11bc0011db1120a4f312f83e3ac71c1a202<>Update docs to mention requirement of pycurl 7.18.2.<>2886.05<>1
1284410474<>8dd551b9cd4cde1935f1c48378de1bcb2cb073b9<>Merge remote branch 'fiam/master'<>2839.86<>1
1284402652<>a352f5ed45e2c8647e87fecd9e9612f85aa45336<>When forking multiple processes, properly initialize the random seed<>2880.84<>1
1284402510<>98e4344fe66663d690003b39af3ac5808e499623<>Avoid raising a KeyError when there's no session expiration date<>2891.33<>1
1284401926<>6e1dbe248cdc6012ffa8feae71726bfef5c2f091<>Fix calls to getattr (which, unlike dict.get, does not default to None).<>2894.15<>1
1284052007<>34f04945a9d4e88b451f3af6ac068b3ccee21184<>Add download url to setup.py for pypi<>2894.17<>1
1283983581<>9163e3470da3bb82f310ad00925af8e92188a381<>Check self._running before rescheduling a PeriodicCallback, so stop() can be called from inside the callback.<>2819.53<>1
1283904312<>2338348edda61c663fff8a7f6f77cf489bf63de6<>Bump version number to 1.1<>2946.54<>1
1283904170<>afb82f686850116e4d3b360222c73e43a7e06ea5<>Disable SSL test on versions of libcurl with blocking SSL handshakes. (using gnutls instead of openssl and libcurl < 7.21.0).<>3039.90<>1
1283900482<>bb8d2fa458dd565b88db4e2185062f641864e990<>Disable SSL test on python 2.5<>2901.36<>1
1283900464<>2e288577a1145901dc7b4fbeaa4fd9ff6dc06ccf<>Use the older name for threading.activeCount for compatibility with python 2.5<>2857.87<>1
1283897961<>e6d93d9350c55d245c871b2558553c33eb74a68d<>Fix error in comment<>2873.05<>1
1283797449<>6d7e515ea490f1ab587fe7fa10bee001ac2f2dbd<>Fix typo in websocket.py<>2884.53<>1
1283756452<>8e34c59edd9a72fdc4be9f16074aaa3f1c3ee9cf<>Remove superfluous lambdas in tornado.escape.<>2860.79<>1
1283657939<>93fc3d0935e11ad1056e1a4cf3826935faebb0db<>Document why RequestHandler.write does not convert lists to JSON.<>2885.86<>1
1283627986<>890d829171e1c33e7b570d1a2a5a911bb45e47e2<>Add more documentation for request.files.<>2907.59<>1
1283626588<>5b9e79e733108bf983d22237587d7b6e782af0db<>auth.py updates for OAuth 1.0a and 2.0.<>2905.41<>1
1283380052<>d1b58414e0b0b239d620e4ae623680c8d73b71d8<>Remove the statement that tornado has only been tested with firefox.<>2880.51<>1
1283379417<>0aae8f9052b8b05059cfbe4f94972beb28b4f9b5<>Remove __del__ method from HTTPResponse. Closing cStringIO objects isn't really necessary, and the presence of a __del__ method prevents python's GC from breaking cyclical references (which happen on errors as HTTPError and HTTPResponse refer to each other).<>2876.03<>1
1283195901<>aab1be8bc885494f43680b2fc492dd224f68816b<>Update class docstring for HTTPServer.<>2860.69<>1
1282863814<>2ccfb35ff2604b35956a62c54bef23e5dac403f5<>adding support for http method OPTIONS used by firefox, safari, for cross domain<>2902.76<>1
1282848761<>b4c5aba7c2d00f929a1d1d16577aa5e2b6fc5d72<>Fix reference to slice.indices.<>2876.14<>1
1282848049<>86667742944aec95bb909876be486ca278254e5a<>Document the limitations of multi-process mode.<>2870.42<>1
1282847546<>c4413f5b636da2ac00d1d4d56805bc38d65ba47c<>Document the fact that add_handlers should only be called once for each host_pattern.<>2839.78<>1
1282846210<>318ec31c3d164361e99eac654a41eeb95f37f6be<>Set pycurl.NOSIGNAL when multiple threads are detected.<>2839.27<>1
1282781864<>fcab3583c051093d6f59baee420cfeace91ba0aa<>Set PeriodicCallback._running to True in start instead of __init__<>2951.94<>1
1282780442<>803f33c153408076c1493300acc8010c656e7197<>Add a tornado.version variable, and use it anywhere we use the current tornado version to produce a Server: header.<>2915.02<>1
1282779281<>3f0740c89428f0a6482f93876c1603b5a17c61e8<>Check in Jacob Kristhammar's updated websocket implementation.<>2836.57<>1
1282775661<>e571668d8947ac5f2e45aa21cb613b64eca022ed<>Add more documentation of overridable methods in RequestHandler<>2880.64<>1
1282761404<>1580728fe85d2b42ca54c88b876a452192f8abee<>Move AuthRedirectTest from httpserver_test to web_test where it belongs<>2893.07<>1
1282761189<>b398a816743db473a7f4373c251225c4d9be299e<>Add a test for HTTPServer's SSL support<>2911.56<>1
1282761130<>b3e953ea0a0bedcb6e6cf2137c8de8299a5dbe1b<>Don't swallow SSL errors - always reraise or return<>2939.88<>1
1282242315<>9d605f2bb21dba9a0b0b2c974fd173b98e93157a<>Make the SSL handshake non-blocking.<>2917.27<>1
1282240667<>252a2bb92d24e0c095d4e39cecf516e335f1037d<>Merge remote branch 'tomhsx/proxy-support'<>2879.84<>1
1282240329<>4e10c31fe8307f0e532eb2783dfad299029df11f<>Add HTTPServer(..., xheaders=True) to the web documentation.<>2994.67<>1
1282240088<>55b4eae8af9aacdab74ecc0f16dff369ddc7e00a<>Add a links section to the website<>2922.99<>1
1281937036<>00f9e48d2a2729970c51d8127968bc0e2f124533<>Added proxy support to httpclient<>2905.13<>1
1281921462<>51d6ba42dd0cd260c28d6feec1357712201f76f3<>Suppress tornado's default logging setup if there is any existing logging config, not just --log_file_prefix.<>2838.43<>1
1281921108<>221058e1cb9d8b424efd5b6af40768537f26060c<>In LogTrapTestCase, leave everything alone rather than throwing an exception if the logging config is not as expected.<>2907.30<>1
1281920674<>551ea94d2475f6702f652e49698a20be97c26b2e<>Initialize member variables in AsyncTestCase.__init__ instead of setUp to avoid masking the real error in _stack_context() if run() throws an exception.<>2886.94<>1
1281736143<>33fe4a4e9090ea0fa48f14d6ee849c81d439a124<>Fix another link to 1.0.1<>2866.99<>1
1281721910<>0ece9ed61f9fb94f68e44ea3a32fd82d7bd80c02<>Check in symlink to tornado package in website directory<>2896.04<>1
1281721837<>d8b265dd8a7da0621ec134d0fb98c8d401dda6e0<>Update links to 1.0.1 release<>2940.11<>1
1281719966<>bbc1ef1288c3b58f51b493217e4bd9dac04fde67<>Test case for secure cookie change<>3006.37<>1
1281719908<>a770a7cf6c2b0a4703cf29f419c400266fee1530<>Check for far-future timestamps in secure cookies.<>3053.44<>1
1281684863<>8d607129d9bd13da2a76d3a2acc656b0122e1e5f<>Add future import to fix tests on 2.5<>2870.08<>1
1281551680<>db3d021921fd7f55ccb018f165f634e332646ced<>Add a mention of on_connection_close to the html docs. Add a warning about proxies keeping connections open.<>2916.20<>1
1281474018<>41c14b82c41de817c0b4ab7a4e721f32cb71ac54<>Remove the ability to pre-bind parameters in stack_context.wrap.<>2876.25<>1
1281473852<>9d4444e341f4fc16fc9373526fe95bbf0c5a930f<>Reindent everything to 4 spaces.<>2898.40<>1
1281473513<>02d07def3ac3e9f553a9d69e5f63029aed29b50a<>StackContext should not re-wrap previously-wrapped callbacks.<>2852.67<>1
1281389612<>cd888f2f00228d8154c3ec043a1488dad5e07803<>Be less picky about line endings in headers in httpclient.<>3040.98<>1
1281388353<>00ce7d4d996ff4c5e19748a5582142fa53de33cd<>Add a simple main function to httpclient.py for manual testing<>3008.35<>1
1281387708<>fef1129b1668853fd854345a3b3ba3fcfd306ad0<>The periodic call to multi_socket_all needs to be followed by _finish_pending_request or else those requests won't be finished until after the next one is started.<>3174.08<>1
1281136144<>91c1bcba8ff213adcca8d8769ea7cc6b7f702023<>Record more detailed timing information from AsyncHTTPClient, and make it available as HTTPResponse.time_info.<>3031.52<>1
1281125534<>98d4126169836f498b892345137dbffa92024b9a<>When login_url is absolute, use an absolute url for the next redirect.<>3050.92<>1
1280972862<>ae3c35454787d0e5c071e9485872f9390a8bd406<>Use the right IOLoop in AsyncHTTPClient's PeriodicCallback<>2992.51<>1
1280968927<>e5bd0c066afee37609156d1ac465057a726afcd4<>Use POST instead of GET for OpenID check_authentication.<>3029.98<>1
1280968824<>becb5f270336ad972b23f2e703de677f8ece30b1<>Suppress libcurl's magic "Expect: 100-continue" behavior.<>3026.00<>1
1280968220<>8995f5a0f93717e27e01fd1de2e7ab8f54782276<>Add a brute-force workaround for the class of libcurl bugs that cause file descriptors or timeouts to get silently dropped. (the old fdset/perform implementation of AsycnHTTPClient had a similar workaround).<>3027.99<>1
1280955634<>0875b784d10927629eccc4b371f10cd16753f401<>Fix a typo in docstring<>3058.18<>1
1280948525<>2aa8927314d8bfd2e190d04bdd7642b85983411f<>Parse form bodies on PUT as well as POST.<>2991.99<>1
1280871345<>805ac65dc85e6c0f90d880135219fc88ceb31ed4<>Work around the "MySQL server has gone away" issue by closing and reopening connections that have been idle for too long.<>3119.32<>1
1280870484<>9a083095ffa709fc0531a7deb2d16e149b4ebd37<>Use the more portable multiprocessing.cpu_count() to detect the number of cpus where available (python 2.6).<>3060.34<>1
1280535773<>8c17e79bdd115c708dad6429e031dc2a4b7eb3bd<>Add a workaround for missing multi.socket_action on older versions of pycurl.<>3064.27<>1
1280533633<>293d15d55993282863904af5621b83ed7532a43d<>Only catch pycurl.error, not all Exceptions around a call to multi.socket_action.<>3050.94<>1
1280524897<>252cb1c00b999e05b0f0041829bdbbf9905b6617<>Docstring updates<>3026.16<>1
1280455710<>6df410aa53261f56d6ec0aa336c9578c246277f8<>Fix a StackContext-related bug that was causing exceptions in callbacks to result in timeouts instead of making wait() re-throw the exception. Add a test to verify that this works.<>3119.49<>1
1280455273<>b260c92d17eba13403ec4a40edba8aa12055bc7a<>Add __future__ import for python2.5 compatibility<>3046.62<>1
1280455206<>66f94d2c13ce501027106df7449d48485a132820<>Update test_ioloop to use AsyncTestCase. Rename it to ioloop_test and make other stylistic changes for consistency.<>3036.04<>1
1280454798<>15e5bf08ed8ba620d3118816722e3ecad175b916<>Add a test framework for IOLoop-based async code<>3061.41<>1
1280448220<>28adce306aa583e92a5245bee7f449345e4e5cc9<>Make all internal imports of tornado modules absolute<>3076.06<>1
1280171040<>83864d60198c001cbe53fad657a42c2a7777ad1b<>Add an initialize() method to RequestHandler for use by subclasses.<>2990.89<>1
1280170145<>dbfdf46c94dfe0d1900c459b1cdef3f26ba5e5be<>Remove unused transforms parameter to RequestHandler.__init__. Transforms are actually passed in via _execute.<>3074.90<>1
1279913708<>721e25d0acc68d751073261bec150ac12a9f88ab<>Introduce StackContext, a way to automatically manage exception handling and other stack-related state for asynchronous callbacks. This means that it is no longer necessary to wrap everything in RequestHandler.async_callback.<>3072.99<>1
1279908776<>94f073b7a209d04b463ea3098ab89bbabb8ba7ca<>Remove the old AsyncHTTPClient (fdset) and make AsyncHTTPClient2 (socket_action) the standard.<>3313.43<>1
1279842981<>eb5b3d8df7a305ac1ffa0a12c813e5d7ee4d6cd3<>Set version number to 1.0<>3283.70<>1
1279842980<>d90ba2e0da31a8f12b0930a8c6b9c3ef35697a69<>Remove old release tarballs and redirect previous urls to github<>3308.43<>1
1279836805<>22f452569cabcbfb5b396e01d3708437cd267571<>Move download links to github<>3241.69<>1
1279834147<>0bb985a8d4f1d8be46e06107ac0e8ecb206cfc3b<>Remove websocket.py. The websocket protocol has changed in incompatible ways (and is still not yet final), so the version implemented in this module is not compatible with current browsers. This module may be reintroduced in the future when we have an implementation of the new protocol.<>3279.74<>1
1279832861<>7a288245dc49589f84c45d25fbe4320185cae7d0<>Update installation instructions.<>3531.47<>1
1279646725<>2c89b89536bbfa081745336bb5ab5465c448cb8a<>Accept None (i.e. unmatched optional groups) when extracting parameters from the path.<>3286.55<>1
1279593582<>ad104ffb412dbbf66da0bb67d5e48d8907a7b17c<>When no json library is found, don't throw an exception unless json functionality is used, to make the simplejson dependency optional for python 2.5 users.<>3263.62<>1
1279570168<>ea032b6c9c8dd5ff370057a73a762d4a7af1e897<>Check for EINTR in a more flexible way for compatibility with older pythons and poll implementations.<>3294.25<>1
1279156336<>7a30f9f6eac9aa0cf295b078695156776fd050ce<>Fix typo in support for multiple ui_method/ui_module containers<>3279.67<>1
1279150852<>c78ab55dc07a137b8eee1f8e09857102bcb19e98<>Better timeout handling in AsyncHTTPClient2. Tornado and libcurl may use different clock functions, which can cause timeouts to be delayed (in some cases until the next fetch is started). This change resynchronizes the schedule after each timeout call.<>3330.37<>1
1279122246<>64d8d4e5080b4ee75b842b77eaf4c3deef9a8f42<>Fix small bug in database set up.<>3302.89<>1
1279009732<>e2181b035b216c60bd1b67736ca334562c0e9c84<>Make iteration over sql fields clearer<>3258.91<>1
1279009561<>a9090a97f49dbcb93653c259d831e5124a154574<>Remove unused imports and variables<>3299.48<>1
1278724512<>b42c61c88ebabbd20ba3bb6d797ff73249ab2b07<>In AsyncHTTPClient2, disable IPv6 for versions of libcurl with the socket-reopening bug (i.e. <= 7.21.0). (this can be overridden if needed with a prepare_curl_callback)<>3218.88<>1
1278706063<>557da3db1c912039bda9d0e54717e4bd23af8c9c<>Unquote percent escapes in captured groups in the path component of the URI, to be more consistent with our handling of query parameters.<>3259.76<>1
1278705421<>455eb75b18afbe625c8a2fe97c1a9888ef09ed50<>Revert "Parse percent escapes in the path component of the uri, to be more"<>3384.89<>1
1278638863<>7b80c2f4db226d6fa3a7f3dfa59277da1d642f91<>Parse percent escapes in the path component of the uri, to be more consistent with our handling of query parameters (especially important when capturing groups are used in the URLSpec regex).<>3315.73<>1
1278634460<>a7dc5bc4b463c90c41355c9d8d54e82fd39cee5f<>Consolidate the various HTTP header dictionary classes into one, which includes better handling of headers with repeated values (e.g. Set-Cookie)<>3348.15<>1
1278629564<>e98735bf4b35688aadeaffbfe1fc6ad636ebc318<>Disable preforking by default in HTTPServer.start().<>3753.19<>1
1277743966<>2ac7426855dd06ee6daad69985d6ad5f62b26437<>UTF8-encode more user-supplied strings in httpclient (headers and user-agent)<>3777.17<>1
1277593226<>52c378f7f8bcddbffa521bec93d02b61425f062b<>Update the set of active file descriptors immediately after calling perform instead of after running user callbacks, since those callbacks might have started using file descriptors that were closed by curl in perform().<>3777.72<>1
1277590575<>33c3f8d28bfda17e100a5d4f77880bd017e56807<>Include the HTTPResponse object as an attribute of HTTPError<>3779.40<>1
1277341290<>60ef8d5d909d25f4c1c5e35bef199b0799cd264e<>Remove unused "overwrite" argument to options.parse_config_file<>3770.33<>1
1277137767<>e7654cda9cc288201d8db116225e45212eaf597b<>Fix typo in comment<>3716.89<>1
1277002540<>1ba0161e384eba2ec65a9cd5f5f4a677f7e98bd0<>Add a second implementation of AsyncHTTPClient, using a new libcurl api.<>3763.02<>1
1276901959<>df0d88eb8d3eef5f2fe351676ef1500e115e3131<>Close wsgi responses correctly - the close method, if present, will be on the result of self.wsgi_application() and not on the list of output we're building up.<>3772.29<>1
1276206597<>39ac6d169a36a54bb1f6b9bf1fdebb5c9da96e09<>In the libcurl file descriptor limit hack, log to both stderr and logging.error since they may got to different places and one may be more visible than the other.<>3771.71<>1
1276022923<>27171cde844065591b160e1a1193f563cd0f4e57<>Catch and log exceptions from user callbacks in AsyncHTTPClient.<>3759.77<>1
1275896639<>b8271f94434208646eeec9cf33da703d97c5364e<>Fix missing import<>3706.99<>1
1275287972<>d1e145039c40b0b50d8dac63c3ebaf53b8b5c8fa<>Optionally allow nonstandard http methods to be used in httpclient.<>3755.82<>1
1275287972<>d5a3d8a027306426c9d722219f52b71cb6816244<>Changed it so one can access the StringIO buffer<>3755.67<>1
1275287972<>6f6c95054fd98998aa47bd1dbed3c1e9a81b33dd<>Clear the close_callback set on the IOStream by RequestHandlers in finish(), so that the close_callback does not prevent garbage collection of the handlers.<>3720.70<>1
1275287962<>5d430b100abaae34f9241af0d21e86622715d5a7<>Close the socket on uncaught exceptions from iostream handlers.<>3764.79<>1
1275287930<>2b0684028a9ca38318ce5038fa611e7274576e22<>Improve parsing of multipart/form-data headers.<>3310.02<>1
1275287930<>982554e710344b498887020071b921a3e63a17ac<>Added RequestHandler.get_arguments(), which does the same normalization as get_argument() but returns a list for repeated arguments.<>3356.15<>1
1275092759<>548bd70d7ba3463331911225d33cfa8f706bdbd5<>Update documentation for WebSocketHandler<>3334.39<>1
1275092212<>70a377088a2a589cb1433a508fc6ecec3c053c18<>Revert "websockets: continue listening for messages after parsing completion"<>3332.44<>1
1274823410<>7f8725c718e2614536bf48638b103f1fca033ba1<>Allow StaticFileHandler subclasses to set additional headers on the response<>3401.53<>1
1274812842<>57a9ac031a86aa1389144ea06638b5550d525b3e<>Don't try to compute max() of an empty sequence (which throws an exception)<>3342.77<>1
1274753191<>d6002cafa15847cf4eee96832a96382113901e36<>Add a hacky workaround for libcurl's FD_SETSIZE bug. It's ugly, but better than undefined behavior.<>3324.92<>1
1274388603<>b9a9ccc38841fcb9f8486e0d2854d570c34fe4c8<>Make it possible to override template_path at the handler level<>3319.13<>1
1274063706<>0c363662462e0408ba10bc2fb831066cf27fea63<>Use a lambda instead of functools.partial for pycurl.HEADERFUNCTION. Older versions of pycurl (including 7.16.2.1, which is the recommended version for Mac OS X 10.5) only work with real functions, not objects with a __call__ method like functools.partial.<>3334.55<>1
1273456474<>e8dec4d0b0431c4826188a0ac2d550cc0b01deaa<>Merge remote branch 'dlo/master'<>3333.11<>1
1273456309<>f0a3d8950b497b03755cdc15f3a456526956cb63<>Translate </ to <\/ in json output to avoid issues with the string "</script>".<>3307.75<>1
1273455966<>26af9e40e012dc6005a59921e6f066f352707733<>Support additional keyword arguments on cookies (to be handled by the underlying stdlib Cookie module)<>3329.13<>1
1273014305<>9ea5f8a277db96557ae7867375c7db4d8c5f633a<>websockets: continue listening for messages after parsing completion<>3340.03<>1
1272673720<>00ad92f3982b7cb6f4634186b98219816cc5dac0<>Allow for missing "expires" field in facebook session, which can happen if offline_access is granted.<>3337.03<>1
1272522465<>339f08bdbd2a1a32c873431a9fab0415c35b3467<>Correcting a grammatical error (attribute -> attributes).<>3333.28<>1
1272324450<>808473910a1467ae88d034b592212142bee38278<>UIModule.css_files returns CSS files, not Javascript files<>3341.14<>1
1272223638<>bbdf207637e4b035d0882619f642a3ae32a04fca<>Updating base Twitter url<>3312.71<>1
1271977961<>0fcef4e2376626a2d961931243ab0a828be956d2<>Clear itimer signals in autoreload so the combination of autoreload and ioloop.set_blocking_log_threshold doesn't cause the new process to get killed.<>3317.35<>1
1271884678<>9f7c9a38ff4d07fc79101bb05809cecd2efb8d6c<>Use escape.utf8() instead of .encode('utf-8') so we don't double-encode<>3836.99<>1
1271883425<>c87e84f068706eca9e078937c8ff5857a72b8331<>cStringIO's constructor uses a 16-bit encoding when given a unicode string. This is inconsistent with its write method, which encodes all strings as ascii (and rejects unicode strings iff they have any non-ascii characters). This change uses utf-8 as the default encoding when constructing cStringIO objects in tornado.<>3306.78<>1
1271876264<>b686d6d44617d2dc7df54e8144cadab93ea4c060<>Add an option to log a stack trace any time the ioloop is blocked for more than a specified amount of time.<>3337.31<>1
1271803233<>ca8002fa9f8182504e117f11c289fabe544f1a50<>Send all logging to the root logger instead of per-module loggers. This undoes the effect of http://github.com/facebook/tornado/commit/e391fd289ed085671344504cc5b1fa84f5a3c774<>3307.37<>1
1271722040<>40ac8d362a2f9d0f076ea1ba4d4ccec0b8ee274a<>Fix header parsing in httpclient for headers whose value contains ':'<>3804.06<>1
1271701203<>b8a28243437892a0802fba5a8a95ab1b0f6f5b2d<>Better HTTP header parsing: Allow (and strip) any amount of leading and trailing whitespace around header values instead of just a single space. Such whitespace is legal but appears to be uncommon (and nginx apparently normalizes everything to a single space) http://tools.ietf.org/html/rfc2616#page-31<>3342.75<>1
1271700186<>43e02a2d88d67fdc8da532c60b13125af11590e4<>Add a closed flag to AsyncHTTPClient so that a scheduled perform callback won't cause an exception after the client is closed.<>3357.25<>1
1271113599<>fc00b61751bc5be9505db03408db93a9cd00f7f0<>Use the original request's protocol as the openid realm instead of hard-coding http.<>3685.50<>1
1270684474<>62bc2e40fd24d5389aa7da66cabab6246abd6eec<>Add support for reading translation from gettext .mo files instead of CSV.<>3368.75<>1
1270502476<>002ba2c1801e963a9cfaf3f023d464c12ae16a42<>Log a warning when multiple handlers have the same name.<>3332.11<>1
1270495404<>b5365d8c015b11a26b5ac6f29a40cd4d59e550e3<>Make options.__getattr__ raise AttributeError instead of Error for consistency with standard attribute lookups (so getattr(options, 'foo', None) works if no option 'foo' has been defined).<>3313.04<>1
1270234059<>218dd1edc86e329e6c12f26d8fa253fd56205b73<>Escape double quotes in addition to angle brackets and ampersands.<>3355.46<>1
1270233656<>e520b21ed297cb92706356e6a0877df02205564c<>Adding for the ability of ui-modules to add something at the end of the body of a document.<>3324.43<>1
1270233138<>794685b892fa0214cc9ed95f365d63979d2a11e1<>Merge remote branch 'mgenti/master'<>3852.11<>1
1270075049<>5f4413bec42dcccce2d85f1421b49218fc5d6712<>Return a write method from start_response, as required by the wsgi spec.<>3334.63<>1
1269956417<>c33709a0ec4acf786d8ee843f8f3fbd520f59068<>When using the select based IOLoop, select can throw an error if based to many socket. This does not have an errno<>3363.41<>1
1269711046<>32a31f4e8ed2385a71b228d605c15ec47ce4d85d<>Don't try to colorize log output on terminals that don't support it<>3344.52<>1
1269644104<>a4ba918180ca292cc2f67a6793c8563cec0d1ac3<>Make add_handlers (for multiple hostnames) usable with static_path (which forces the creation of a wildcard handler) by maintaining a sensible order for handler groups.<>3357.62<>1
1269558577<>6326f82715e67316c0ca5012bc6397080f764eb7<>Add a warning about the experimental status of our win32 support<>3370.98<>1
1269558009<>7b458119c4b90c25bf8f9d51964653fbbe5ba104<>Be consistent in platform checks: use os.name == 'nt' everywhere, replacing uses of os.name == 'posix' and sys.platform.startswith('win')<>3362.57<>1
1269557958<>064cc4693d2bec86a6fc2eec84c90aa097b6bbfb<>Make ioloop test runnable on unix (chmod +x and add #! line), and remove hard-coded PYTHONPATH manipulations. Add a small readme for tests.<>3377.34<>1
1269443643<>3e1d57b2bde20d1d4dbbac4ab1ba64bac333e2e1<>Fix for raising an exception; Fix for waking loop; Added test<>3345.59<>1
1269437123<>73fbe2843dfbc950f2264676f9d3f054fef39217<>Merge branch 'master' of git://github.com/facebook/tornado<>3342.76<>1
1269392000<>e391fd289ed085671344504cc5b1fa84f5a3c774<>Use per-module loggers instead of the root logger.<>3335.14<>1
1269390674<>e340491473498e7b67fd0e9e2e2a31d6b16ee20e<>Add __slots__ to ioloop._Timeout to reduce memory overhead when there are many pending timeouts.<>3348.01<>1
1269354586<>9f4c6af84ac58b903cb500249bb20bac13b87d62<>Implementing suggested changes<>3362.08<>1
1269354274<>ae7f90bf5b2146cdec2a3da41bb7dc4cb14c3f85<>Merge remote branch 'upstream/master'<>3359.57<>1
1269300905<>33a587b0d5dc22c4f124734acca904759123a453<>Don't put wsgi response headers in a dictionary to support repeated headers with the same value (mainly important for Set-Cookie)<>3354.26<>1
1269112842<>7fda8c5d381b293d8c8b632b7dd007d8533ba9a0<>Don't set the etag header if the handler already did it.<>3328.92<>1
1269022856<>bce36a7c1aa9d2eef490a87745d3eda7282af7d1<>Add a callback to handle headers in httpclient as they come in, so they will be available for data handled by streaming_callback.<>3351.41<>1
1268944069<>70fb42d6a0b5e4fa2eed4d3aa4c795b957798e19<>Add a close method to AsyncHTTPClient.<>3326.43<>1
1268878953<>03308b1a7dad63d5ff12155d097fb6ee110a4cf3<>add a template_loader application setting for using custom template loaders. a slight refactoring of TemplateLoader's load method to expose some internals. also, add a reset method to the loader that's called in debug mode to flush the template cache.<>3338.97<>1
1268877097<>8359c05ca061ba012805e7ba74da1f9dde73941d<>Support named groups in url pattern regexes. Note that either all or none of the groups to be passed to the handler must be named.<>3410.34<>1
1268876912<>fca7c831341b864916c6c97bdbdb2f95d95b2c12<>Allow more than two consecutive curlies to appear in templates (and use the innermost). This was previously a syntax error in the generated python.<>3892.95<>1
1268875743<>8c096b231ccf3285b5384bb9b03b24a4a4821bd7<>Combine repeated headers with the same name into a single comma-separated string http://www.w3.org/Protocols/HTTP/1.0/spec.html#Message-Headers<>3370.77<>1
1268863157<>40ce72c1c6339da37d0081c1e5ec35cce0ee8a89<>Replace all tabs with spaces.<>3369.22<>1
1268536106<>6d070f77c2a694ba5739e50203b7f88170783ed1<>updated the gitignore to include files generated on installation<>3384.71<>1
1268257236<>6704dc99a073ed7f6c30400d4bc7dd875f345df5<>win32 needs to open the files as binary<>3535.30<>1
1268257190<>bec0552eff1160c601c3c96adaf03bc78d9845d8<>Trying to better re-use code<>3693.98<>1
1268257078<>248c57809fe62af118aee451d82ec14a7939d8e5<>Merge remote branch 'upstream/master'<>3359.64<>1
1268155043<>d2ca9ad61850dd716ba07fb2a5c7636d1e0edbcb<>Fix bug with IOLoop's 'waker' pipe which rendered it ineffective on linux and mac (where pipes are unidirectional) and caused high cpu usage on solaris (where pipes are bidirectional). Thanks to Jari Ahonen for finding the bug.<>3363.42<>1
1267994872<>45f76c518eaf032c40fd39cc1384577742e5dd4d<>In finish(), test if chunk is None rather than using truthiness to decide whether to call write().<>3357.87<>1
1267735173<>8637a738ef1bd3d4236f64329d4956b641edc1a6<>Set the close-on-exec flag on file descriptors used by IOLoop (epoll/kqueue and pipe) so that long-lived autoreloading processes don't leak file descriptors.<>3349.77<>1
1267732338<>f4359bc12864f0c5dd5d4f92403c8c19c34e5f8c<>Use a WeakKeyDictionary instead of a regular dictionary to associate IOLoop and AsyncHTTPClients. This prevents leaks of memory and file descriptors when one process (in my case a unit test runner) create many IOLoop/AsyncHTTPClient pairs.<>3370.66<>1
1267672485<>d42334e3197680e988805c8201fcc6f09abb1366<>Allow subclasses of IOLoop to override the default logging of uncaught exceptions in callbacks.<>3374.17<>1
1267665768<>a0af68cc04aeb68cc98b8452524c4bece108b0cf<>Ensure that self.io_loop is set in HTTPServer.start(), so that HTTPServer.stop can clean up correctly.<>3375.08<>1
1267499884<>62cdb36b6c97100bbee827b2fd73bd74e4b72a64<>Revamp logging configuration.<>3349.62<>1
1267230981<>61f0fafe4bc8d5aa077767ef6c3dcebd9acfc34b<>Call the close() method on the wsgi response object if it exists. This is required by the WSGI spec, and cherrypy leaks memory without it.<>3361.98<>1
1267222089<>f6266ba8064bbd5e0a73fa3b921624fd9ad551f0<>Add SERVER_PROTOCOL variable to wsgi environment. This turns out to be necessary for using cherrypy in a tornado WSGIContainer.<>3493.14<>1
1267207887<>1ae186a504224e9f6cf5375b56f8e26e4774e2a0<>Add exc_info parameter to start_response() in WSGIContainer.<>3369.82<>1
1267141748<>c5627d2f1613f6bf60c826bfbb84eae08f1c98e6<>Work around an odd error I occasionally see in autoreload (which causes autoreload to loop endlessly without restarting the process)<>3370.64<>1
1267058231<>f9cda8634bf80bf6978bb443561ae9304e476fee<>Add a workaround for a bug in os.execv when used on Mac OS X versions prior to 10.6 when there are multiple threads in the process.<>3349.76<>1
1267053519<>010271d7eca811f1540c8eda20d3d2d3c06feb10<>Always reraise KeyboardInterrupt and SystemExit whenever IOLoop tries to swallow exceptions.<>3353.47<>1
1266353603<>15ceda22784752436f96d7af254705010177ae0c<>Fix ioloop._KQueue to work correctly when listening for both read and write.<>3365.48<>1
1265394297<>ef83f4b6cafabbc3183db061c03faf5cf58d6808<>Support passing in cookie value directly in cases where you have to parse the value from other sources (e.g., from the URL for Flash requests). Also fix documentation error for Facebook Connect.<>3366.75<>1
1265318323<>7ffb44237fdd655a7650805dd51f126b5bfd8b8a<>Don't set content-length in StaticFileHandler unless we're actually sending the content. Some browsers get confused by this (e.g. the version of webkit embedded in fluid, but not the version used in chrome).<>3344.23<>1
1265270529<>c1be85fcfe3d5a841be3bfe99b0c7b714a0dd4db<>Add backwards compatability for secure cookie reading<>3360.15<>1
1265269880<>4daeb8d880204f5baa64fc958654da9dff60ae0e<>Simplify JavaScript path ordering patch<>3375.25<>1
1265240945<>a34dc422e25fbfd8704e652ff787e87a385f2f6d<>Import setuptools if it's available.<>3363.30<>1
1265240812<>ae1ed23421ffefa27fac765003cca41026bb971d<>Making sure StaticFileHandlers get first, if not, a catch all handler would break the static handlers.<>3321.20<>1
1265228324<>3e9a285af0a7c4f3c7fa4a512bd9f6191995194b<>Include cookie name in signature so that a value signed for use in one cookie can't be used in another. Note that this invalidates all existing signed cookies.<>3360.44<>1
1265228248<>efbc2e09b9e9fc28f3919f44df0c14c1bef2b41c<>using os specific path seperator<>3386.40<>1
1265227869<>8aae3263dd9ec9271d27a1b0aa4f04e8d6278d12<>Fix for maintaining script inclusion order<>3360.76<>1
1265227676<>0984e008c96a5157755e00765ee41532b01a65a1<>Added the ability to stop an HTTPServer. Mostly for unittesting.<>3373.94<>1
1265227603<>74f75616c15c225e1bf717f96c93bc67af5e5422<>Stop parsing arguments after --<>3868.15<>1
1265227503<>20361993368b87c607d450484d32bc305dbd2146<>Fix EINTR exception handling for non-english locales.<>3334.33<>1
1265227017<>8186101e6530dcc025b714a7e8ee3026f5fa3665<>Set headers earlier in StaticFileHandler, so we return the correct content-type with 304 results (instead of always returning text/html)<>3355.61<>1
1265226572<>77eb5867e1473d3e575cc314277b3746947c2958<>Add static_url_prefix setting to allow serving of static files somewhere other than /static/<>3356.83<>1
1265212981<>123771a096b228e869028c848e44e9d32456c4a9<>Added support for running Tornado on win32<>3346.25<>1
1264725860<>e30e28bcfb9a8880bc1889c425e36f1c1476e930<>Add a hook to allow applications to modify the curl objects directly.<>3678.56<>1
1264667302<>b6ad0f6323a4b67f6aa38f004af88f683cba343b<>Merge branch 'master' of git://github.com/bdarnell/tornado<>3341.14<>1
1264664772<>a2adfa1f997e6ad731c0d8da81dfd9831e4d4999<>allow connect and request timeouts of zero<>3331.39<>1
1264664117<>47db027764c32e097353f1119a80c04b6b0d0b79<>use self.headers for cases where no headers were passed in<>3359.37<>1
1264194591<>a1991136fdab2700c627cb94ac8f9d4db9cc5dca<>Make parse_command_line initialize logging even when there are non-option arguments.<>3345.76<>1
1264194513<>adcc1039942ce756a1eb9ebf872d0b7483cbefa1<>Merge branch 'master' of git://github.com/facebook/tornado<>3373.81<>1
1263843579<>1e291eb5092d232d84be5914429808aa24c9ee9d<>Add HTML 5 WebSocket support (see http://bret.appspot.com/entry/web-sockets-in-tornado)<>3315.30<>1
1263791544<>fb66140dce8e002ffc10e5d6985df9e3e3f9225e<>Fix httpclient / epoll interaction errors, per http://groups.google.com/group/python-tornado/browse_thread/thread/276059a076593266. Thanks everyone for the patch and discussion.<>3326.75<>1
1263616062<>57ec818a3f8ab56dec1b6cf585fa7c8c4d6ab80a<>Catch both IOError and OSError in another place.<>3355.12<>1
1263609720<>8c2429dbd3472d651a03839bd2568d30b1ed7c8d<>Catch IOError in addition to OSError in IOLoop.remove_handler (friendfeed's epoll module throws OSError, while the one in the standard library throws IOError)<>3358.15<>1
1263467278<>7e3ace860790c80ef2170ede1ef57e5955727515<>fb demo fix<>3527.69<>1
1263248247<>c436d7aa8df246dcb9e70a6a16fe558618c60d13<>Fix new connection close handler for WSGI handlers<>3337.12<>1
1263239601<>9107b6be2bffe4bcaf8cd47cf79c6d792cdf71d4<>Add reverse_url to RequestHandler class as well<>3354.91<>1
1263236543<>7014417608d03e7af2c7aba58ba358d8657a24a2<>Merge remote branch 'bdarnell/master'<>3367.72<>1
1263234701<>e4c6eec2114d2d95e48762dc8099b364e0a4e23c<>Use time indepdent compare for secure cookie.<>3896.71<>1
1262919971<>1ea5df5e6f44bb3b98c830535319a92c386cda93<>Add a method to RequestHandler that can be used to detect when the connection has been closed by the client.<>3358.63<>1
1262919227<>d877a65d471f5a52ea7109897d6c4294de6f5cb4<>Add a kqueue-based implementation of IOLoop for BSD/Mac systems.<>3828.65<>1
1262051700<>52d20a0dafe207a1f8da03b2be73b0682209b1c2<>Don't try to write to a stream that was closed out from under us. This should get rid of all the "exception after headers written" spam in our logs.<>3890.58<>1
1262050025<>6ee22230f8e657591ef3cd5d3dda8e9b36125786<>Add httpclient support for the delete method.<>3929.91<>1
1261011697<>3ab63905aa3801b0ab11becb145366964a18e896<>If IOLoop.stop is called before the loop is running, make the next call to IOLoop.start return immediately, so that one call each to start and stop will result in the loop not running rather than running infinitely, even if the call to stop happens first.<>3928.18<>1
1260832886<>22d840ed1d3728dedd2344f1194b1f89f20cdd83<>Added kwargs to get_error_html in the RequestHandler so that downstream actors can render or otherwise use the exception object thrown. This is a backwards-incompatible change for anyone who has overridden get_error_html().<>3899.30<>1
1260407238<>4381df04e70452e3ebf15c925031f477da0a6c30<>Use empty dictionary instead of None as default for kwargs<>3910.36<>1
1260406744<>1823a772c08aa0f3f218f733bf98b7bf094e2ef9<>Fix missed variable rename<>3925.77<>1
1260405859<>df5c994ae0d2961f3607759e8525872bca94d43f<>Add Application.reverse_url, which can generate a url to a handler by name. This minimizes repetition of url patterns for links and redirects.<>3896.87<>1
1260400988<>9ade70501e2103dcbadc0918acc4fc195593ea86<>Merge branch 'master' of git://github.com/facebook/tornado<>3928.61<>1
1260352130<>b3d98c4a369e50eddb0411af9174b232f8b6ad28<>Add basic error checking so you can't add a server to the IOLoop twice<>3878.76<>1
1260351905<>8d4dde80e85a9d34631c68746fa0ff4372880792<>Typo in error message<>3822.36<>1
1260347043<>6fb90ae694190fcedc48d9fb98b02325826d783e<>Pre-forking implementation so a single Tornado server can utilize all CPU cores<>3914.43<>1
1260291362<>1da2b3c5c65c23f97433f9ce33fc1a70d21c4d27<>Add gzip Content-Encoding support with 'gzip' application option<>3935.81<>1
1260231439<>41a94730959d641e6c2c765ca631645327805c5a<>Add REMOTE_ADDR to WSGIContainer<>3889.33<>1
1260230008<>ce20498adb28f65d120e8daa3f3d2fa50aed9361<>Merge branch 'master' of http://github.com/facebook/tornado<>3873.33<>1
1260229636<>400d2c9f80d0e3c9652bf8df0c9d35b54cba459e<>Make WSGIContainer._environ public and static, so it can be used to adapt tornado requests to WSGI environments without a full WSGIContainer.<>3934.31<>1
1260178086<>41e46d97f5648e241f04051e3ed12bd095c04d4c<>Fix transform headers bug<>3939.74<>1
1260070610<>c50d9b8c789eb1914f31bd4dc7adbf1383c8fdb1<>Ignore XSRF cookie check when X-Requested-With XMLHttpRequest header is present<>4055.31<>1
1259870272<>5fc06caffe9a362a526e6c5480a2ebdd174eb29f<>Add a FallbackHandler class to allow use of other applications (e.g. tornado.wsgi.WSGIContainer) from within a tornado.web.Application to facilitate migration from other web frameworks.<>3903.73<>1
1259087258<>595ffa1975835c82ef21b4cfd8bc5076c292e828<>Add support for Squid proxy headers<>4322.59<>1
1256720423<>7546f8d3b21cc31ed1ec679fd093be4cb9156e51<>Ask for more Facebook Connect fields by default<>3853.33<>1
1254813230<>b5c6ccb312c21a653e29e449801ec3e8dad2dea4<>Initial support for SSL (thanks to Dan McDougall for suggesting this and code samples)<>4152.86<>1
1254454909<>718c1816e13ac71ad9cb88b597b82df41ff35db9<>Missing website images<>3939.88<>1
1254454889<>4e0a8433d9519a78fa255a1f76a01100bcc8ae43<>Fix embedded CSS bug<>3909.56<>1
1254347796<>681d4d2fabaa3df89bdb43213e7e13c917cebf40<>Add links to FB, Twitter, FF on web site<>3910.63<>1
1254297660<>b32b6b4b0435e974db8990f6cc6cf9b8daed9952<>Bug fix<>4295.00<>1
1254295960<>aa836cdf3952d52efc68201872b3a0053aca33ad<>CSS/JS embeds after files<>3832.45<>1
1253731577<>571dd056d226109592d2e05225a4c360cdc31a31<>add address param to listen<>3904.58<>1
1253551113<>50528c010ae06ff14d7c9ea2e682de6549ba4c8f<>Typo in PeriodicCallback<>3917.57<>1
1253242390<>d6e9cd5a116fe640dffe019079900c80c13673de<>New 0.2 distribution from the past week's bug fixes<>4005.18<>1
1253242052<>11503326a6ed78907aee462fc07ef0b9cdb0c8a2<>Turn on auto-reloading when 'debug' setting is given<>3937.56<>1
1253234806<>c4f682d4fef08cffb4156d9f19f2e62ccb355024<>Bug in locale.py and increase poll time for autoreloader<>3879.81<>1
1253167182<>6e1cb0ddf45c968e74db570c6c0499cb0ff321e4<>add streaming_callback option to httpclient<>3898.40<>1
1253090998<>237944d5241aedc2a281c7a17cbb08a3f18c5a2a<>Rename auto-reload module<>3906.58<>1
1253089752<>be71a24f1ae9223558152b61b9b93a0635d1a0a2<>Experimental module auto-reloading on modification<>3854.69<>1
1252977006<>dd6cadf2776ab2afec484cb7cf366f730e174647<>Auto-reconnect on MySQL connection failur<>4173.97<>1
1252975245<>f524cc6ad5b216ac42fe7e12410bddedad4a2abd<>Add gitignore file<>3912.11<>1
1252957387<>016dee1e9659297ddcaf298ae7ee1e26812e5504<>use correct module<>3925.17<>1
1252951707<>c59cf2ab0657e56ffae9908f6f651cbf893dd21c<>make logout link work<>3913.94<>1
1252946724<>2be82a07b38e8c64cb066cea158e38350c07749c<>Fix multipart/form-data for WSGIApplication<>3940.90<>1
1252946256<>91d90b2ff1c7e4901ff197a503af1732c2909953<>Get rid of unnecessary/inconsistent mixin<>3906.61<>1
1252876435<>82a2de536ae92f26f2cc89c6945fc759be0aabf9<>Add addslash and removeslash decorators for, e.g., redirecting '/dir' to '/dir/'<>4033.05<>1
1252869976<>37e671203620c8b030412666fd03283fad9fcd44<>Two minor typos<>3901.44<>1
1252865997<>8ca616088cfb26ff19fcc6f359d654fef905b8da<>Add initial WSGI container support for running other frameworks on Tornado's HTTP server<>3875.87<>1
1252772703<>9c51d01b123fed12907e7f3a5f85d19525de3196<>Don't reference Exception.message due to deprecation in Python 2.6<>3815.33<>1
1252694588<>6b07e69551f045e4632660ed20a2c66606cb92d4<>documentation typos<>3908.85<>1
1252669653<>9e24ae162d024e4049b8811d7ca19e319c20021d<>s/Google Code/GitHub<>3897.66<>1
1252618768<>f6798502befee7fa5c66696dac31b443bbb5a3ff<>Merge branch 'master' of git@github.com:facebook/tornado<>3864.74<>1
1252618763<>cdcfb26316845294178707bb235cee0ce953e8eb<>make sign out clickable, ignoring automatic redirect for now<>3881.42<>1
1252617873<>72707599e8da89bba125df14ed454562224fc9fb<>Merge branch 'master' of git://github.com/jaybaird/tornado<>3917.73<>1
1252617023<>e0526867ca0fe0e2839b46acc597fa1509150bc5<>typo<>3864.06<>1
1252615273<>41ea6da5f5cc79721614430bd0a3bcb4bb0a8251<>both links work, but this one seems canonical<>3835.50<>1
1252614279<>2fd2ad6d42f66efc6565231d08b29bdf92f257d8<>remove cases where intern is used. This will prevent a DoS via memory starvation if a lot of requests are sent using random headers<>3854.63<>1
1252609296<>19c8610eee0b669298984786083a318439e594f7<>typo<>4148.48<>1
1252608567<>2e1e2a79826999bd9d20cf4c5b60e4bce8930ad7<>Add python-dev to apt-get command per http://groups.google.com/group/python-tornado/browse_thread/thread/d88de85aa33193a7<>3876.14<>1
1252607729<>e48e2b1129be390fca684635f6f232fe26adb63b<>typo<>3889.58<>1
1252606316<>e997ac0ad9133a9768996ff3c7fe415922c9302a<>Merge branch 'master' of github.com:facebook/tornado<>3776.47<>1
1252606299<>01405d0b08e91f0ffed0a7a41af9f96e3542381a<>typos<>3854.62<>1
1252606168<>6794fced8023bcc5783589554dbd6f9db7274d51<>Merge branch 'master' of git@github.com:facebook/tornado<>3884.41<>1
1252606161<>f431c9e59701bd7d841d9401fda1895b2456ae4e<>updated tarball<>3898.95<>1
1252605146<>d9d3e9cafb016df407e15121c2390d707fb26253<>fix README<>3858.18<>1
1252604839<>e197a479bef594614e1a10a04e7b33b420005efc<>escape more<>3902.73<>1
1252604288<>e4d56d91839f74896c24cf52c987b5a82cdce849<>typo<>3882.67<>1
1252603492<>71a44bc082ab6f09d3b948f11bb6fa1585a36424<>Another typo (thanks, Ben)<>3756.62<>1
1252600189<>9a8bd2fb6fd6279be16d6f0a2e57e49fe1b98f8f<>Add prerequisites to Tornado docs<>3799.32<>1
1252570604<>98a6bd9ac795809ef2c4f7b7152d527e0f852d6c<>Fixed typo (thanks Casey)<>3912.72<>1
1252569187<>efd4666dfbb000ad067c2aab4b67a57d60ebbeb3<>No favicon for Tornado web site<>3855.68<>1
1252569051<>2afa97349330d1a224a7e4fdce0dcdf760222a8b<>Move Tornado project to Github<>3842.25<>1
1252473318<>07e5e8c43d5cec87aca862276f296af58695d520<>Wrote initial README file<><>1
1252472484<>11de50a83acb07ab3a4439b38f0153444a124381<>Created project<><>1
1291419193<>8e4a7730d3fa599aa99fdc58d911d149344eb711<>Merge remote branch 'slay2k/fb_fix_graph_mixin'<>2078.86<>2
1291184933<>a18eead89e6a31175abd60964a05da365139cab3<>Fix duplicated remote_ip field in HTTPRequest.__repr__<>2068.23<>2
1291089736<>ffe291f2eec262679c43c63c4485ac6595eb1433<>A few fixes for FacebookGraphMixin<>2092.48<>2
1291071676<>96ecb6603a10bdcf30bb238d3462ec9da0560c89<>Use request.uri instead of request.path as default redirect for auth.py.<>2098.68<>2
1291068481<>6151498dba7d55d602cbf0360df8f29b712c33a1<>Log malformed HTTP requests more gracefully.<>2161.12<>2
1291067346<>ae3cc317c2781ad515a0ad48891d65b2370982df<>Treat HEAD requests the same as GET for e.g. sending Etag headers.<>2109.18<>2
1291066455<>eededcf5d51c4e945757b0936512115cf50d09f4<>Preserve the order of css_files from UIModules, like we already do for JS<>2070.17<>2
1291065423<>00b9ee91f17c7bc8eb07999381ec3aeb3191ebed<>Expose the client's SSL certificate as HTTPRequest.get_ssl_certificate().<>2093.44<>2
1290472268<>263994e8fc5cec66a57151ca48fd959b6496e281<>Fix bug in multipart/form-data requests.<>2088.45<>2
1290271899<>b0578819e1001bd3ab3555c490e8845f79099c88<>Update pydoc to mention response.rethrow instead of reraise.<>2094.41<>2
1290204293<>9e965556ff7a343864059c35bd8517f434d5c88e<>Don't assume 'boundary' is last field in Content-Type header.<>2109.11<>2
1290108374<>cb232b22dab6754ceaab77ee47b451b3a4811a5f<>Merge remote branch 'vijayp/master'<>2253.87<>2
1290106724<>905a215a286041c986005859c378c0445c127cbb<>Set proxy to '' if no proxy is explicitly set in the request. If this is not done, curls with proxies set are re-inserted into the empty list, and are then reused. This causes connections to be randomly proxied, if some requests use a proxy, and others don't.<>2598.28<>2
1289954273<>d0620d67181714e1880b83b54ebafd6ba9f37666<>Add debug logging for queuing in simple_httpclient.<>2279.24<>2
1289953851<>08e5ba5da8d85cc22ed55d34663b61a6be470579<>Add address parameter to Application.listen to match HTTPServer.listen<>2097.55<>2
1289885571<>0b607c10badb89125118d892b176c36aacd63323<>Fixes for python 2.5<>2281.35<>2
1289884532<>a853850e26d31288941a264125b674d9def9f096<>Add convenience method Application.listen(port) so most apps don't need to explicitly touch HTTPServer.<>2120.21<>2
1289868824<>5f5e0bb3be4e522039fbbe3768109ea64cc99fe2<>Implement max_clients limitation and queueing for SimpleAsyncHTTPClient<>2072.34<>2
1289866269<>7750fe7773366d19937038d2a2fd12b66445f674<>Port pseudo-singleton magic from AsyncHTTPClient to SimpleAsyncHTTPClient<>2287.47<>2
1289774717<>f2aa302bcb044b204ae14c9b66342f483a245218<>Add timeout support to simple_httpclient<>2093.96<>2
1289768294<>8a941c42b27726aee81479be5f80b5a0d33631aa<>Improve docs for IOLoop.add/remove_timeout()<>2121.81<>2
1289332354<>31b0ab0c5d8bcc695589e89bcf9c5848c1dffdf0<>Fix typo in docs<>2298.89<>2
1289246016<>3dc7ebad62b97726795e15b11a28a8c6b4d44726<>Add Amharic to tornado.locale's list of languages.<>2110.20<>2
1289245342<>0dcee8d7dc4ad0a88562ed2676a0b95e6453e405<>Fix mangled language names in tornado.locale for Chinese, Japanese, Korean.<>2092.82<>2
1289242490<>ee55403cd4a6255f275b0f39cbc19f03accd29ef<>Support X-Forwarded-Proto in addition to X-Scheme<>2289.49<>2
1289242262<>7ed8fbe136edc91fe9d884a20e2717b64f1a43b7<>Support websockets over https.<>2127.71<>2
1289242143<>965099eda08b376e18c42dffb7dfd4b5dd79dcc9<>Support "from x import y" in templates, not just "import x"<>2107.26<>2
1289066879<>3e44643d3b89c99c6bc285b0e650ab12ee06fb16<>Fix typo from commit 2b44fac<>2091.12<>2
1288981158<>9ec87c2ba25e202fbce5ff1f35184fcbabba26f3<>Capture StackContext explicitly in HTTPConnection to prevent leaks from one request to the next.<>2089.59<>2
1288896454<>2b44fac4ecf273aadc97dbcaa5abf1e3a1ee7dff<>Check for a closed connection in _add_io_state.<>2388.58<>2
1288829551<>c467cf0274b3e2135393af4fc88683de9d930018<>fix linkify regex plus add unit test<>2387.88<>2
1288240015<>b914a94ac24c6e09003b29bc4919d028a042ed25<>Don't manually set Content-Length in StaticFileHandler.<>2415.18<>2
1288206719<>5e987aa6b2ffededbe11cda78901caa18aff32fb<>Merge remote branch 'szeim/master'<>2479.82<>2
1288205245<>88111779c9a84177b64faef6ae452d550aeaf359<>Merge remote branch 'fiam/master'<>2392.12<>2
1288179372<>2dbb05d5a09406b2369ee30661c88cd890b09e63<>SSLIOStream._do_ssl_handshake SSL error check<>2361.30<>2
1288179287<>3b486fc4f8081355fc0b87ebbf6c261692d7a418<>Fixed IOStream._handle_events (try/except block)<>2405.77<>2
1288123456<>bd4ef586e026e6bb20850215db53ced81706de37<>Make exception handling in AsyncHTTPClient more customizable<>2887.81<>2
1287702042<>af3d0b3b03bc9d0a37938ee97852ca01e20d7a80<>Add gzip support to SimpleAsyncHTTPClient<>2341.86<>2
1287699426<>d06f8f4bcd46d4f2b620ea1cb614731f4b74ab71<>Support minor HTTP request attributes in SimpleAsyncHTTPClient.<>2413.25<>2
1287698310<>3d19e10355477cb5a92d6e708445965de917507c<>Add basic auth support to SimpleAsyncHTTPClient<>2522.94<>2
1287698190<>83d623a1c5495a6f973f55df95e91495c4bb44a5<>Use AsyncHTTPTestCase.fetch instead of overriding it with a less useful version.<>2364.71<>2
1287698129<>09c0c9d772eb1e68f8be24de752eb9917d1ae79b<>Reindent to 4 spaces<>2373.47<>2
1287522815<>d47c453c5f70b6ecac5e3e8b2aa769377b05da23<>Attempt to fix StaticFileHandler when os.path.sep != '/'.<>2394.47<>2
1287522587<>fe5172768e8bb96bfa4f5af127ecbf9f173a31b8<>Merge remote branch 'mdg/default_filename'<>2392.45<>2
1287516527<>e7553f75130329446149085d877403164d3770e9<>Add test case for encoding of request parameters and paths, in response to a mailing list thread that raised questions about handling of '%3F' and '?'.<>2349.93<>2
1287516516<>11fdd479b2ff45a3071672fd483cdb4aa81783ec<>Add a convenience method for synchronous fetches in AsyncHTTPTestCase<>2400.44<>2
1287454424<>c41029217918992d8320aaaa2defd82e590d1d6c<>Add test suite to tarball releases.<>2415.42<>2
1287198174<>638a151d96d681d3bdd6ba5ce5dcf2bd1447959c<>make StaticFileHandler support default filename<>2376.83<>2
1287007129<>86bd681ff841f272c5205f24cd2a613535ed2e00<>Support websockets over HTTP proxies.<>2405.51<>2
1287003931<>334b127003fbc82c53b60289637978ac5291330f<>Windows compatibility for non-blocking IOStream.connect.<>2374.18<>2
1286931569<>f10c7176f11ee26de1aa063ee76af672ca5854d0<>Refactor async connect logic from SimpleAsyncHTTPClient to IOStream.<>2388.73<>2
1286843051<>b57bfd35ccf5c65f65b98b584b0aae0e9b48b7bb<>Reindent example in docstring, which apparently trips up emacs' indentation detection.<>2424.02<>2
1286842743<>7c7b0117cffb6abb336407e392f0ecd3b3e3c1da<>Make Locale.format_date() behave sanely with dates in the future.<>2391.79<>2
1286841735<>3ce6d3daeeeda0fc25206ef99048467307aa0cbe<>Run all IOStream callbacks inside a NullContext so that exception handlers are run in the right order.<>2350.53<>2
1286834257<>925af5045c8eeb1727837c1cc9129d14aec50e76<>Make USE_SIMPLE_HTTPCLIENT work without pycurl installed.<>2599.54<>2
1286831812<>dd5cad996e2a6a4fc43bb603e14b942255986182<>Add initial version of non-curl-based AsyncHTTPClient.<>2518.79<>2
1286821225<>5fffe5a8c738a43821c993fab2693437f229e6c1<>Limit the amount of data sent to socket.send at a time (for windows).<>2476.30<>2
1286564176<>160c961fe1dcbf44f574261207af78f382ccddde<>Move Links section from index.html to the wiki. Remove links to unmaintained social media accounts.<>2484.77<>2
1286562352<>b19953441d88c43b8ba6efd3ed40526c5049d2e3<>Fix StackContext in IOStream. IOStream._handle_events now runs in a NullContext, and user callbacks are wrapped on entry to IOStream.<>2478.25<>2
1285882873<>f732f98063f8a0bf9f7e331876964bedbbdc8462<>add a linkify() function for converting text to html with link detection. Also changed xhtml_escape to not convert return value to utf8, since pages should be assembed in unicode and not utf8 encoded until they are ready to write().<>2909.67<>2
1285729902<>75bfe842c5afe8945ee0635ac431b27de6202f6d<>Handle IOStream.read_bytes(0) gracefully.<>2874.28<>2
1285729856<>e210a644aa982bd6502726a900c79ebdcbe8fdc2<>Make AsyncTestCase.stop() prefer _arg over **kwargs, even when the former is not truthy.<>2954.48<>2
1285713981<>8ecaa43734085ed445ebf7ae70f5be280962e943<>Remove references to async_callback from documentation<>3039.53<>2
1285621832<>1221865747ecfde69a0463b9a0d77b3c5b87f320<>In the select()-based IOLoop, always listen for reads so we can tell when the other side closed the connection.<>3098.34<>2
1285616780<>8300c7ff93227a8cb3ef93b8b2cf8931949beb1c<>Close the IOStream when the remote connection is closed.<>2953.18<>2
1285614283<>b02a31b668af71160c84b1c95a22e1035d9c218a<>Factor port-selection logic out of AsyncHTTPTestCase so it can be used from lower-level tests<>3109.30<>2
1285353753<>7a7e24143e77481d140fb5579bc67e4c45cbcfad<>Make StackContext more usable in libraries by reducing the need to explicitly use IOLoop.add_callback or NullContext.<>2928.22<>2
1285259852<>4973e296ebd68bdaf5bd7fc51186b56c6c69bc91<>Update installation instructions in README.<>2928.08<>2
1285096502<>a1d94db451e57301e2f97d7c33eae6a84592d078<>Fix default_host redirect.<>2921.43<>2
1284841350<>9f529b89863da8c5d8d5011f8d968e094fc2065f<>Fix improperly-renamed variable in set_blocking_signal_threshold<>2953.79<>2
1284760003<>81a3eae5e63eb48f5b42941e5394d58cd7e0f994<>Make xhtml_escape available in the template namespace under its own name in addition to "escape".<>2933.14<>2
1284759945<>625a9bef1adae3d075ac098418f70b5603b83b29<>Move cookie-signing code from set_secure_cookie to a new method for non-cookie use cases<>3081.57<>2
1284746563<>8c4fb07636133586366e195eece8e0254484dd8c<>Document the entire template namespace<>2945.44<>2
1284682504<>f46cfa423869157ce6752d80155ab949bb2044b6<>Generalize IOLoop.set_blocking_log_threshold by allowing user-specified signal handlers (via a new set_blocking_signal_threshold method).<>2910.50<>2
1284672563<>f6f7f83719a48083f3e5ed999e19c0ec67de9b9b<>Refactor IOStream reading logic to fix problems with SSL sockets.<>2923.06<>2
1284494682<>7b17caa0be878ebe1e5a796385c66190c5085c16<>Fixed another two win32_support import<>2887.55<>2
1284494682<>0e21608e86cc85defa265323cb8a50e6337d3d41<>Fixed win32_support import<>2922.20<>2
1284494682<>dbd0051a87aa03c9af6ef235309999c300c63260<>Added binary flag to _waker_reader and _waker_writer<>2876.89<>2
1284494682<>a1b5c33b40ffe87649eeb9aa126e622097479119<>Replaced map() in web.py with for loop<>2874.54<>2
1284494682<>4118b8e7d3a56a3b6d5ba72d900349c58ac91595<>Changed e[0] to e.args[0]<>2877.70<>2
1284486176<>fb08c11bc0011db1120a4f312f83e3ac71c1a202<>Update docs to mention requirement of pycurl 7.18.2.<>3036.38<>2
1284410474<>8dd551b9cd4cde1935f1c48378de1bcb2cb073b9<>Merge remote branch 'fiam/master'<>2884.09<>2
1284402652<>a352f5ed45e2c8647e87fecd9e9612f85aa45336<>When forking multiple processes, properly initialize the random seed<>2925.14<>2
1284402510<>98e4344fe66663d690003b39af3ac5808e499623<>Avoid raising a KeyError when there's no session expiration date<>2923.21<>2
1284401926<>6e1dbe248cdc6012ffa8feae71726bfef5c2f091<>Fix calls to getattr (which, unlike dict.get, does not default to None).<>2899.79<>2
1284052007<>34f04945a9d4e88b451f3af6ac068b3ccee21184<>Add download url to setup.py for pypi<>2888.32<>2
1283983581<>9163e3470da3bb82f310ad00925af8e92188a381<>Check self._running before rescheduling a PeriodicCallback, so stop() can be called from inside the callback.<>2882.02<>2
1283904312<>2338348edda61c663fff8a7f6f77cf489bf63de6<>Bump version number to 1.1<>2871.52<>2
1283904170<>afb82f686850116e4d3b360222c73e43a7e06ea5<>Disable SSL test on versions of libcurl with blocking SSL handshakes. (using gnutls instead of openssl and libcurl < 7.21.0).<>2868.03<>2
1283900482<>bb8d2fa458dd565b88db4e2185062f641864e990<>Disable SSL test on python 2.5<>3013.86<>2
1283900464<>2e288577a1145901dc7b4fbeaa4fd9ff6dc06ccf<>Use the older name for threading.activeCount for compatibility with python 2.5<>2872.48<>2
1283897961<>e6d93d9350c55d245c871b2558553c33eb74a68d<>Fix error in comment<>2891.42<>2
1283797449<>6d7e515ea490f1ab587fe7fa10bee001ac2f2dbd<>Fix typo in websocket.py<>2858.81<>2
1283756452<>8e34c59edd9a72fdc4be9f16074aaa3f1c3ee9cf<>Remove superfluous lambdas in tornado.escape.<>2845.23<>2
1283657939<>93fc3d0935e11ad1056e1a4cf3826935faebb0db<>Document why RequestHandler.write does not convert lists to JSON.<>2895.81<>2
1283627986<>890d829171e1c33e7b570d1a2a5a911bb45e47e2<>Add more documentation for request.files.<>2867.90<>2
1283626588<>5b9e79e733108bf983d22237587d7b6e782af0db<>auth.py updates for OAuth 1.0a and 2.0.<>2886.77<>2
1283380052<>d1b58414e0b0b239d620e4ae623680c8d73b71d8<>Remove the statement that tornado has only been tested with firefox.<>2879.00<>2
1283379417<>0aae8f9052b8b05059cfbe4f94972beb28b4f9b5<>Remove __del__ method from HTTPResponse. Closing cStringIO objects isn't really necessary, and the presence of a __del__ method prevents python's GC from breaking cyclical references (which happen on errors as HTTPError and HTTPResponse refer to each other).<>2877.60<>2
1283195901<>aab1be8bc885494f43680b2fc492dd224f68816b<>Update class docstring for HTTPServer.<>3025.16<>2
1282863814<>2ccfb35ff2604b35956a62c54bef23e5dac403f5<>adding support for http method OPTIONS used by firefox, safari, for cross domain<>3077.15<>2
1282848761<>b4c5aba7c2d00f929a1d1d16577aa5e2b6fc5d72<>Fix reference to slice.indices.<>3046.98<>2
1282848049<>86667742944aec95bb909876be486ca278254e5a<>Document the limitations of multi-process mode.<>2891.56<>2
1282847546<>c4413f5b636da2ac00d1d4d56805bc38d65ba47c<>Document the fact that add_handlers should only be called once for each host_pattern.<>2913.82<>2
1282846210<>318ec31c3d164361e99eac654a41eeb95f37f6be<>Set pycurl.NOSIGNAL when multiple threads are detected.<>2910.29<>2
1282781864<>fcab3583c051093d6f59baee420cfeace91ba0aa<>Set PeriodicCallback._running to True in start instead of __init__<>2879.93<>2
1282780442<>803f33c153408076c1493300acc8010c656e7197<>Add a tornado.version variable, and use it anywhere we use the current tornado version to produce a Server: header.<>2862.13<>2
1282779281<>3f0740c89428f0a6482f93876c1603b5a17c61e8<>Check in Jacob Kristhammar's updated websocket implementation.<>3099.33<>2
1282775661<>e571668d8947ac5f2e45aa21cb613b64eca022ed<>Add more documentation of overridable methods in RequestHandler<>3057.04<>2
1282761404<>1580728fe85d2b42ca54c88b876a452192f8abee<>Move AuthRedirectTest from httpserver_test to web_test where it belongs<>2858.21<>2
1282761189<>b398a816743db473a7f4373c251225c4d9be299e<>Add a test for HTTPServer's SSL support<>2903.69<>2
1282761130<>b3e953ea0a0bedcb6e6cf2137c8de8299a5dbe1b<>Don't swallow SSL errors - always reraise or return<>2912.52<>2
1282242315<>9d605f2bb21dba9a0b0b2c974fd173b98e93157a<>Make the SSL handshake non-blocking.<>2940.76<>2
1282240667<>252a2bb92d24e0c095d4e39cecf516e335f1037d<>Merge remote branch 'tomhsx/proxy-support'<>2913.68<>2
1282240329<>4e10c31fe8307f0e532eb2783dfad299029df11f<>Add HTTPServer(..., xheaders=True) to the web documentation.<>2931.91<>2
1282240088<>55b4eae8af9aacdab74ecc0f16dff369ddc7e00a<>Add a links section to the website<>2936.44<>2
1281937036<>00f9e48d2a2729970c51d8127968bc0e2f124533<>Added proxy support to httpclient<>3043.63<>2
1281921462<>51d6ba42dd0cd260c28d6feec1357712201f76f3<>Suppress tornado's default logging setup if there is any existing logging config, not just --log_file_prefix.<>2869.54<>2
1281921108<>221058e1cb9d8b424efd5b6af40768537f26060c<>In LogTrapTestCase, leave everything alone rather than throwing an exception if the logging config is not as expected.<>3039.47<>2
1281920674<>551ea94d2475f6702f652e49698a20be97c26b2e<>Initialize member variables in AsyncTestCase.__init__ instead of setUp to avoid masking the real error in _stack_context() if run() throws an exception.<>2903.98<>2
1281736143<>33fe4a4e9090ea0fa48f14d6ee849c81d439a124<>Fix another link to 1.0.1<>2908.29<>2
1281721910<>0ece9ed61f9fb94f68e44ea3a32fd82d7bd80c02<>Check in symlink to tornado package in website directory<>2878.22<>2
1281721837<>d8b265dd8a7da0621ec134d0fb98c8d401dda6e0<>Update links to 1.0.1 release<>2924.66<>2
1281719966<>bbc1ef1288c3b58f51b493217e4bd9dac04fde67<>Test case for secure cookie change<>2898.68<>2
1281719908<>a770a7cf6c2b0a4703cf29f419c400266fee1530<>Check for far-future timestamps in secure cookies.<>2898.86<>2
1281684863<>8d607129d9bd13da2a76d3a2acc656b0122e1e5f<>Add future import to fix tests on 2.5<>3082.70<>2
1281551680<>db3d021921fd7f55ccb018f165f634e332646ced<>Add a mention of on_connection_close to the html docs. Add a warning about proxies keeping connections open.<>2900.64<>2
1281474018<>41c14b82c41de817c0b4ab7a4e721f32cb71ac54<>Remove the ability to pre-bind parameters in stack_context.wrap.<>2881.74<>2
1281473852<>9d4444e341f4fc16fc9373526fe95bbf0c5a930f<>Reindent everything to 4 spaces.<>2904.21<>2
1281473513<>02d07def3ac3e9f553a9d69e5f63029aed29b50a<>StackContext should not re-wrap previously-wrapped callbacks.<>2884.07<>2
1281389612<>cd888f2f00228d8154c3ec043a1488dad5e07803<>Be less picky about line endings in headers in httpclient.<>3032.43<>2
1281388353<>00ce7d4d996ff4c5e19748a5582142fa53de33cd<>Add a simple main function to httpclient.py for manual testing<>3039.40<>2
1281387708<>fef1129b1668853fd854345a3b3ba3fcfd306ad0<>The periodic call to multi_socket_all needs to be followed by _finish_pending_request or else those requests won't be finished until after the next one is started.<>2981.18<>2
1281136144<>91c1bcba8ff213adcca8d8769ea7cc6b7f702023<>Record more detailed timing information from AsyncHTTPClient, and make it available as HTTPResponse.time_info.<>3050.86<>2
1281125534<>98d4126169836f498b892345137dbffa92024b9a<>When login_url is absolute, use an absolute url for the next redirect.<>3188.79<>2
1280972862<>ae3c35454787d0e5c071e9485872f9390a8bd406<>Use the right IOLoop in AsyncHTTPClient's PeriodicCallback<>3035.76<>2
1280968927<>e5bd0c066afee37609156d1ac465057a726afcd4<>Use POST instead of GET for OpenID check_authentication.<>3263.69<>2
1280968824<>becb5f270336ad972b23f2e703de677f8ece30b1<>Suppress libcurl's magic "Expect: 100-continue" behavior.<>3033.30<>2
1280968220<>8995f5a0f93717e27e01fd1de2e7ab8f54782276<>Add a brute-force workaround for the class of libcurl bugs that cause file descriptors or timeouts to get silently dropped. (the old fdset/perform implementation of AsycnHTTPClient had a similar workaround).<>3228.73<>2
1280955634<>0875b784d10927629eccc4b371f10cd16753f401<>Fix a typo in docstring<>3033.06<>2
1280948525<>2aa8927314d8bfd2e190d04bdd7642b85983411f<>Parse form bodies on PUT as well as POST.<>2947.80<>2
1280871345<>805ac65dc85e6c0f90d880135219fc88ceb31ed4<>Work around the "MySQL server has gone away" issue by closing and reopening connections that have been idle for too long.<>3040.50<>2
1280870484<>9a083095ffa709fc0531a7deb2d16e149b4ebd37<>Use the more portable multiprocessing.cpu_count() to detect the number of cpus where available (python 2.6).<>3052.25<>2
1280535773<>8c17e79bdd115c708dad6429e031dc2a4b7eb3bd<>Add a workaround for missing multi.socket_action on older versions of pycurl.<>3140.40<>2
1280533633<>293d15d55993282863904af5621b83ed7532a43d<>Only catch pycurl.error, not all Exceptions around a call to multi.socket_action.<>3034.65<>2
1280524897<>252cb1c00b999e05b0f0041829bdbbf9905b6617<>Docstring updates<>3082.56<>2
1280455710<>6df410aa53261f56d6ec0aa336c9578c246277f8<>Fix a StackContext-related bug that was causing exceptions in callbacks to result in timeouts instead of making wait() re-throw the exception. Add a test to verify that this works.<>3013.58<>2
1280455273<>b260c92d17eba13403ec4a40edba8aa12055bc7a<>Add __future__ import for python2.5 compatibility<>3058.47<>2
1280455206<>66f94d2c13ce501027106df7449d48485a132820<>Update test_ioloop to use AsyncTestCase. Rename it to ioloop_test and make other stylistic changes for consistency.<>3030.89<>2
1280454798<>15e5bf08ed8ba620d3118816722e3ecad175b916<>Add a test framework for IOLoop-based async code<>3058.52<>2
1280448220<>28adce306aa583e92a5245bee7f449345e4e5cc9<>Make all internal imports of tornado modules absolute<>3030.03<>2
1280171040<>83864d60198c001cbe53fad657a42c2a7777ad1b<>Add an initialize() method to RequestHandler for use by subclasses.<>3272.77<>2
1280170145<>dbfdf46c94dfe0d1900c459b1cdef3f26ba5e5be<>Remove unused transforms parameter to RequestHandler.__init__. Transforms are actually passed in via _execute.<>3048.88<>2
1279913708<>721e25d0acc68d751073261bec150ac12a9f88ab<>Introduce StackContext, a way to automatically manage exception handling and other stack-related state for asynchronous callbacks. This means that it is no longer necessary to wrap everything in RequestHandler.async_callback.<>3062.75<>2
1279908776<>94f073b7a209d04b463ea3098ab89bbabb8ba7ca<>Remove the old AsyncHTTPClient (fdset) and make AsyncHTTPClient2 (socket_action) the standard.<>3295.28<>2
1279842981<>eb5b3d8df7a305ac1ffa0a12c813e5d7ee4d6cd3<>Set version number to 1.0<>3265.08<>2
1279842980<>d90ba2e0da31a8f12b0930a8c6b9c3ef35697a69<>Remove old release tarballs and redirect previous urls to github<>3328.11<>2
1279836805<>22f452569cabcbfb5b396e01d3708437cd267571<>Move download links to github<>3282.09<>2
1279834147<>0bb985a8d4f1d8be46e06107ac0e8ecb206cfc3b<>Remove websocket.py. The websocket protocol has changed in incompatible ways (and is still not yet final), so the version implemented in this module is not compatible with current browsers. This module may be reintroduced in the future when we have an implementation of the new protocol.<>3280.10<>2
1279832861<>7a288245dc49589f84c45d25fbe4320185cae7d0<>Update installation instructions.<>3285.34<>2
1279646725<>2c89b89536bbfa081745336bb5ab5465c448cb8a<>Accept None (i.e. unmatched optional groups) when extracting parameters from the path.<>3476.17<>2
1279593582<>ad104ffb412dbbf66da0bb67d5e48d8907a7b17c<>When no json library is found, don't throw an exception unless json functionality is used, to make the simplejson dependency optional for python 2.5 users.<>3222.63<>2
1279570168<>ea032b6c9c8dd5ff370057a73a762d4a7af1e897<>Check for EINTR in a more flexible way for compatibility with older pythons and poll implementations.<>3214.55<>2
1279156336<>7a30f9f6eac9aa0cf295b078695156776fd050ce<>Fix typo in support for multiple ui_method/ui_module containers<>3313.79<>2
1279150852<>c78ab55dc07a137b8eee1f8e09857102bcb19e98<>Better timeout handling in AsyncHTTPClient2. Tornado and libcurl may use different clock functions, which can cause timeouts to be delayed (in some cases until the next fetch is started). This change resynchronizes the schedule after each timeout call.<>3315.79<>2
1279122246<>64d8d4e5080b4ee75b842b77eaf4c3deef9a8f42<>Fix small bug in database set up.<>3292.68<>2
1279009732<>e2181b035b216c60bd1b67736ca334562c0e9c84<>Make iteration over sql fields clearer<>3272.75<>2
1279009561<>a9090a97f49dbcb93653c259d831e5124a154574<>Remove unused imports and variables<>3326.10<>2
1278724512<>b42c61c88ebabbd20ba3bb6d797ff73249ab2b07<>In AsyncHTTPClient2, disable IPv6 for versions of libcurl with the socket-reopening bug (i.e. <= 7.21.0). (this can be overridden if needed with a prepare_curl_callback)<>3587.51<>2
1278706063<>557da3db1c912039bda9d0e54717e4bd23af8c9c<>Unquote percent escapes in captured groups in the path component of the URI, to be more consistent with our handling of query parameters.<>3310.02<>2
1278705421<>455eb75b18afbe625c8a2fe97c1a9888ef09ed50<>Revert "Parse percent escapes in the path component of the uri, to be more"<>3530.55<>2
1278638863<>7b80c2f4db226d6fa3a7f3dfa59277da1d642f91<>Parse percent escapes in the path component of the uri, to be more consistent with our handling of query parameters (especially important when capturing groups are used in the URLSpec regex).<>3313.80<>2
1278634460<>a7dc5bc4b463c90c41355c9d8d54e82fd39cee5f<>Consolidate the various HTTP header dictionary classes into one, which includes better handling of headers with repeated values (e.g. Set-Cookie)<>3370.72<>2
1278629564<>e98735bf4b35688aadeaffbfe1fc6ad636ebc318<>Disable preforking by default in HTTPServer.start().<>4057.79<>2
1277743966<>2ac7426855dd06ee6daad69985d6ad5f62b26437<>UTF8-encode more user-supplied strings in httpclient (headers and user-agent)<>3786.19<>2
1277593226<>52c378f7f8bcddbffa521bec93d02b61425f062b<>Update the set of active file descriptors immediately after calling perform instead of after running user callbacks, since those callbacks might have started using file descriptors that were closed by curl in perform().<>3719.73<>2
1277590575<>33c3f8d28bfda17e100a5d4f77880bd017e56807<>Include the HTTPResponse object as an attribute of HTTPError<>3764.25<>2
1277341290<>60ef8d5d909d25f4c1c5e35bef199b0799cd264e<>Remove unused "overwrite" argument to options.parse_config_file<>3764.48<>2
1277137767<>e7654cda9cc288201d8db116225e45212eaf597b<>Fix typo in comment<>3679.99<>2
1277002540<>1ba0161e384eba2ec65a9cd5f5f4a677f7e98bd0<>Add a second implementation of AsyncHTTPClient, using a new libcurl api.<>3767.12<>2
1276901959<>df0d88eb8d3eef5f2fe351676ef1500e115e3131<>Close wsgi responses correctly - the close method, if present, will be on the result of self.wsgi_application() and not on the list of output we're building up.<>3715.78<>2
1276206597<>39ac6d169a36a54bb1f6b9bf1fdebb5c9da96e09<>In the libcurl file descriptor limit hack, log to both stderr and logging.error since they may got to different places and one may be more visible than the other.<>3752.93<>2
1276022923<>27171cde844065591b160e1a1193f563cd0f4e57<>Catch and log exceptions from user callbacks in AsyncHTTPClient.<>3741.02<>2
1275896639<>b8271f94434208646eeec9cf33da703d97c5364e<>Fix missing import<>3755.07<>2
1275287972<>d1e145039c40b0b50d8dac63c3ebaf53b8b5c8fa<>Optionally allow nonstandard http methods to be used in httpclient.<>3870.37<>2
1275287972<>d5a3d8a027306426c9d722219f52b71cb6816244<>Changed it so one can access the StringIO buffer<>3795.13<>2
1275287972<>6f6c95054fd98998aa47bd1dbed3c1e9a81b33dd<>Clear the close_callback set on the IOStream by RequestHandlers in finish(), so that the close_callback does not prevent garbage collection of the handlers.<>3723.32<>2
1275287962<>5d430b100abaae34f9241af0d21e86622715d5a7<>Close the socket on uncaught exceptions from iostream handlers.<>3272.90<>2
1275287930<>2b0684028a9ca38318ce5038fa611e7274576e22<>Improve parsing of multipart/form-data headers.<>3333.37<>2
1275287930<>982554e710344b498887020071b921a3e63a17ac<>Added RequestHandler.get_arguments(), which does the same normalization as get_argument() but returns a list for repeated arguments.<>3840.80<>2
1275092759<>548bd70d7ba3463331911225d33cfa8f706bdbd5<>Update documentation for WebSocketHandler<>3310.69<>2
1275092212<>70a377088a2a589cb1433a508fc6ecec3c053c18<>Revert "websockets: continue listening for messages after parsing completion"<>3322.09<>2
1274823410<>7f8725c718e2614536bf48638b103f1fca033ba1<>Allow StaticFileHandler subclasses to set additional headers on the response<>3315.89<>2
1274812842<>57a9ac031a86aa1389144ea06638b5550d525b3e<>Don't try to compute max() of an empty sequence (which throws an exception)<>3308.48<>2
1274753191<>d6002cafa15847cf4eee96832a96382113901e36<>Add a hacky workaround for libcurl's FD_SETSIZE bug. It's ugly, but better than undefined behavior.<>3348.13<>2
1274388603<>b9a9ccc38841fcb9f8486e0d2854d570c34fe4c8<>Make it possible to override template_path at the handler level<>3769.30<>2
1274063706<>0c363662462e0408ba10bc2fb831066cf27fea63<>Use a lambda instead of functools.partial for pycurl.HEADERFUNCTION. Older versions of pycurl (including 7.16.2.1, which is the recommended version for Mac OS X 10.5) only work with real functions, not objects with a __call__ method like functools.partial.<>3834.96<>2
1273456474<>e8dec4d0b0431c4826188a0ac2d550cc0b01deaa<>Merge remote branch 'dlo/master'<>3285.41<>2
1273456309<>f0a3d8950b497b03755cdc15f3a456526956cb63<>Translate </ to <\/ in json output to avoid issues with the string "</script>".<>3325.26<>2
1273455966<>26af9e40e012dc6005a59921e6f066f352707733<>Support additional keyword arguments on cookies (to be handled by the underlying stdlib Cookie module)<>3324.71<>2
1273014305<>9ea5f8a277db96557ae7867375c7db4d8c5f633a<>websockets: continue listening for messages after parsing completion<>3319.30<>2
1272673720<>00ad92f3982b7cb6f4634186b98219816cc5dac0<>Allow for missing "expires" field in facebook session, which can happen if offline_access is granted.<>3331.76<>2
1272522465<>339f08bdbd2a1a32c873431a9fab0415c35b3467<>Correcting a grammatical error (attribute -> attributes).<>3324.54<>2
1272324450<>808473910a1467ae88d034b592212142bee38278<>UIModule.css_files returns CSS files, not Javascript files<>3334.33<>2
1272223638<>bbdf207637e4b035d0882619f642a3ae32a04fca<>Updating base Twitter url<>3315.55<>2
1271977961<>0fcef4e2376626a2d961931243ab0a828be956d2<>Clear itimer signals in autoreload so the combination of autoreload and ioloop.set_blocking_log_threshold doesn't cause the new process to get killed.<>3843.18<>2
1271884678<>9f7c9a38ff4d07fc79101bb05809cecd2efb8d6c<>Use escape.utf8() instead of .encode('utf-8') so we don't double-encode<>3326.81<>2
1271883425<>c87e84f068706eca9e078937c8ff5857a72b8331<>cStringIO's constructor uses a 16-bit encoding when given a unicode string. This is inconsistent with its write method, which encodes all strings as ascii (and rejects unicode strings iff they have any non-ascii characters). This change uses utf-8 as the default encoding when constructing cStringIO objects in tornado.<>3323.83<>2
1271876264<>b686d6d44617d2dc7df54e8144cadab93ea4c060<>Add an option to log a stack trace any time the ioloop is blocked for more than a specified amount of time.<>3286.60<>2
1271803233<>ca8002fa9f8182504e117f11c289fabe544f1a50<>Send all logging to the root logger instead of per-module loggers. This undoes the effect of http://github.com/facebook/tornado/commit/e391fd289ed085671344504cc5b1fa84f5a3c774<>3308.38<>2
1271722040<>40ac8d362a2f9d0f076ea1ba4d4ccec0b8ee274a<>Fix header parsing in httpclient for headers whose value contains ':'<>3319.73<>2
1271701203<>b8a28243437892a0802fba5a8a95ab1b0f6f5b2d<>Better HTTP header parsing: Allow (and strip) any amount of leading and trailing whitespace around header values instead of just a single space. Such whitespace is legal but appears to be uncommon (and nginx apparently normalizes everything to a single space) http://tools.ietf.org/html/rfc2616#page-31<>3342.78<>2
1271700186<>43e02a2d88d67fdc8da532c60b13125af11590e4<>Add a closed flag to AsyncHTTPClient so that a scheduled perform callback won't cause an exception after the client is closed.<>3367.49<>2
1271113599<>fc00b61751bc5be9505db03408db93a9cd00f7f0<>Use the original request's protocol as the openid realm instead of hard-coding http.<>3367.62<>2
1270684474<>62bc2e40fd24d5389aa7da66cabab6246abd6eec<>Add support for reading translation from gettext .mo files instead of CSV.<>3380.81<>2
1270502476<>002ba2c1801e963a9cfaf3f023d464c12ae16a42<>Log a warning when multiple handlers have the same name.<>3730.89<>2
1270495404<>b5365d8c015b11a26b5ac6f29a40cd4d59e550e3<>Make options.__getattr__ raise AttributeError instead of Error for consistency with standard attribute lookups (so getattr(options, 'foo', None) works if no option 'foo' has been defined).<>3321.60<>2
1270234059<>218dd1edc86e329e6c12f26d8fa253fd56205b73<>Escape double quotes in addition to angle brackets and ampersands.<>3353.83<>2
1270233656<>e520b21ed297cb92706356e6a0877df02205564c<>Adding for the ability of ui-modules to add something at the end of the body of a document.<>3331.09<>2
1270233138<>794685b892fa0214cc9ed95f365d63979d2a11e1<>Merge remote branch 'mgenti/master'<>3359.62<>2
1270075049<>5f4413bec42dcccce2d85f1421b49218fc5d6712<>Return a write method from start_response, as required by the wsgi spec.<>3353.89<>2
1269956417<>c33709a0ec4acf786d8ee843f8f3fbd520f59068<>When using the select based IOLoop, select can throw an error if based to many socket. This does not have an errno<>3630.48<>2
1269711046<>32a31f4e8ed2385a71b228d605c15ec47ce4d85d<>Don't try to colorize log output on terminals that don't support it<>3317.83<>2
1269644104<>a4ba918180ca292cc2f67a6793c8563cec0d1ac3<>Make add_handlers (for multiple hostnames) usable with static_path (which forces the creation of a wildcard handler) by maintaining a sensible order for handler groups.<>3326.12<>2
1269558577<>6326f82715e67316c0ca5012bc6397080f764eb7<>Add a warning about the experimental status of our win32 support<>3324.03<>2
1269558009<>7b458119c4b90c25bf8f9d51964653fbbe5ba104<>Be consistent in platform checks: use os.name == 'nt' everywhere, replacing uses of os.name == 'posix' and sys.platform.startswith('win')<>3348.50<>2
1269557958<>064cc4693d2bec86a6fc2eec84c90aa097b6bbfb<>Make ioloop test runnable on unix (chmod +x and add #! line), and remove hard-coded PYTHONPATH manipulations. Add a small readme for tests.<>3770.94<>2
1269443643<>3e1d57b2bde20d1d4dbbac4ab1ba64bac333e2e1<>Fix for raising an exception; Fix for waking loop; Added test<>3330.46<>2
1269437123<>73fbe2843dfbc950f2264676f9d3f054fef39217<>Merge branch 'master' of git://github.com/facebook/tornado<>3356.75<>2
1269392000<>e391fd289ed085671344504cc5b1fa84f5a3c774<>Use per-module loggers instead of the root logger.<>3340.84<>2
1269390674<>e340491473498e7b67fd0e9e2e2a31d6b16ee20e<>Add __slots__ to ioloop._Timeout to reduce memory overhead when there are many pending timeouts.<>3878.49<>2
1269354586<>9f4c6af84ac58b903cb500249bb20bac13b87d62<>Implementing suggested changes<>3351.03<>2
1269354274<>ae7f90bf5b2146cdec2a3da41bb7dc4cb14c3f85<>Merge remote branch 'upstream/master'<>3334.39<>2
1269300905<>33a587b0d5dc22c4f124734acca904759123a453<>Don't put wsgi response headers in a dictionary to support repeated headers with the same value (mainly important for Set-Cookie)<>3347.08<>2
1269112842<>7fda8c5d381b293d8c8b632b7dd007d8533ba9a0<>Don't set the etag header if the handler already did it.<>3338.27<>2
1269022856<>bce36a7c1aa9d2eef490a87745d3eda7282af7d1<>Add a callback to handle headers in httpclient as they come in, so they will be available for data handled by streaming_callback.<>3335.82<>2
1268944069<>70fb42d6a0b5e4fa2eed4d3aa4c795b957798e19<>Add a close method to AsyncHTTPClient.<>3440.13<>2
1268878953<>03308b1a7dad63d5ff12155d097fb6ee110a4cf3<>add a template_loader application setting for using custom template loaders. a slight refactoring of TemplateLoader's load method to expose some internals. also, add a reset method to the loader that's called in debug mode to flush the template cache.<>3345.60<>2
1268877097<>8359c05ca061ba012805e7ba74da1f9dde73941d<>Support named groups in url pattern regexes. Note that either all or none of the groups to be passed to the handler must be named.<>3338.60<>2
1268876912<>fca7c831341b864916c6c97bdbdb2f95d95b2c12<>Allow more than two consecutive curlies to appear in templates (and use the innermost). This was previously a syntax error in the generated python.<>3455.30<>2
1268875743<>8c096b231ccf3285b5384bb9b03b24a4a4821bd7<>Combine repeated headers with the same name into a single comma-separated string http://www.w3.org/Protocols/HTTP/1.0/spec.html#Message-Headers<>3377.86<>2
1268863157<>40ce72c1c6339da37d0081c1e5ec35cce0ee8a89<>Replace all tabs with spaces.<>3384.64<>2
1268536106<>6d070f77c2a694ba5739e50203b7f88170783ed1<>updated the gitignore to include files generated on installation<>3397.69<>2
1268257236<>6704dc99a073ed7f6c30400d4bc7dd875f345df5<>win32 needs to open the files as binary<>3882.80<>2
1268257190<>bec0552eff1160c601c3c96adaf03bc78d9845d8<>Trying to better re-use code<>3895.84<>2
1268257078<>248c57809fe62af118aee451d82ec14a7939d8e5<>Merge remote branch 'upstream/master'<>3336.03<>2
1268155043<>d2ca9ad61850dd716ba07fb2a5c7636d1e0edbcb<>Fix bug with IOLoop's 'waker' pipe which rendered it ineffective on linux and mac (where pipes are unidirectional) and caused high cpu usage on solaris (where pipes are bidirectional). Thanks to Jari Ahonen for finding the bug.<>3544.51<>2
1267994872<>45f76c518eaf032c40fd39cc1384577742e5dd4d<>In finish(), test if chunk is None rather than using truthiness to decide whether to call write().<>3795.84<>2
1267735173<>8637a738ef1bd3d4236f64329d4956b641edc1a6<>Set the close-on-exec flag on file descriptors used by IOLoop (epoll/kqueue and pipe) so that long-lived autoreloading processes don't leak file descriptors.<>3350.49<>2
1267732338<>f4359bc12864f0c5dd5d4f92403c8c19c34e5f8c<>Use a WeakKeyDictionary instead of a regular dictionary to associate IOLoop and AsyncHTTPClients. This prevents leaks of memory and file descriptors when one process (in my case a unit test runner) create many IOLoop/AsyncHTTPClient pairs.<>3363.94<>2
1267672485<>d42334e3197680e988805c8201fcc6f09abb1366<>Allow subclasses of IOLoop to override the default logging of uncaught exceptions in callbacks.<>3362.76<>2
1267665768<>a0af68cc04aeb68cc98b8452524c4bece108b0cf<>Ensure that self.io_loop is set in HTTPServer.start(), so that HTTPServer.stop can clean up correctly.<>3384.89<>2
1267499884<>62cdb36b6c97100bbee827b2fd73bd74e4b72a64<>Revamp logging configuration.<>3352.03<>2
1267230981<>61f0fafe4bc8d5aa077767ef6c3dcebd9acfc34b<>Call the close() method on the wsgi response object if it exists. This is required by the WSGI spec, and cherrypy leaks memory without it.<>3374.98<>2
1267222089<>f6266ba8064bbd5e0a73fa3b921624fd9ad551f0<>Add SERVER_PROTOCOL variable to wsgi environment. This turns out to be necessary for using cherrypy in a tornado WSGIContainer.<>3373.75<>2
1267207887<>1ae186a504224e9f6cf5375b56f8e26e4774e2a0<>Add exc_info parameter to start_response() in WSGIContainer.<>3341.46<>2
1267141748<>c5627d2f1613f6bf60c826bfbb84eae08f1c98e6<>Work around an odd error I occasionally see in autoreload (which causes autoreload to loop endlessly without restarting the process)<>3343.88<>2
1267058231<>f9cda8634bf80bf6978bb443561ae9304e476fee<>Add a workaround for a bug in os.execv when used on Mac OS X versions prior to 10.6 when there are multiple threads in the process.<>3506.55<>2
1267053519<>010271d7eca811f1540c8eda20d3d2d3c06feb10<>Always reraise KeyboardInterrupt and SystemExit whenever IOLoop tries to swallow exceptions.<>3368.15<>2
1266353603<>15ceda22784752436f96d7af254705010177ae0c<>Fix ioloop._KQueue to work correctly when listening for both read and write.<>3356.09<>2
1265394297<>ef83f4b6cafabbc3183db061c03faf5cf58d6808<>Support passing in cookie value directly in cases where you have to parse the value from other sources (e.g., from the URL for Flash requests). Also fix documentation error for Facebook Connect.<>3365.82<>2
1265318323<>7ffb44237fdd655a7650805dd51f126b5bfd8b8a<>Don't set content-length in StaticFileHandler unless we're actually sending the content. Some browsers get confused by this (e.g. the version of webkit embedded in fluid, but not the version used in chrome).<>3359.58<>2
1265270529<>c1be85fcfe3d5a841be3bfe99b0c7b714a0dd4db<>Add backwards compatability for secure cookie reading<>3347.66<>2
1265269880<>4daeb8d880204f5baa64fc958654da9dff60ae0e<>Simplify JavaScript path ordering patch<>3350.10<>2
1265240945<>a34dc422e25fbfd8704e652ff787e87a385f2f6d<>Import setuptools if it's available.<>3339.73<>2
1265240812<>ae1ed23421ffefa27fac765003cca41026bb971d<>Making sure StaticFileHandlers get first, if not, a catch all handler would break the static handlers.<>3338.98<>2
1265228324<>3e9a285af0a7c4f3c7fa4a512bd9f6191995194b<>Include cookie name in signature so that a value signed for use in one cookie can't be used in another. Note that this invalidates all existing signed cookies.<>3329.61<>2
1265228248<>efbc2e09b9e9fc28f3919f44df0c14c1bef2b41c<>using os specific path seperator<>3469.24<>2
1265227869<>8aae3263dd9ec9271d27a1b0aa4f04e8d6278d12<>Fix for maintaining script inclusion order<>3373.19<>2
1265227676<>0984e008c96a5157755e00765ee41532b01a65a1<>Added the ability to stop an HTTPServer. Mostly for unittesting.<>3345.96<>2
1265227603<>74f75616c15c225e1bf717f96c93bc67af5e5422<>Stop parsing arguments after --<>3366.22<>2
1265227503<>20361993368b87c607d450484d32bc305dbd2146<>Fix EINTR exception handling for non-english locales.<>3350.78<>2
1265227017<>8186101e6530dcc025b714a7e8ee3026f5fa3665<>Set headers earlier in StaticFileHandler, so we return the correct content-type with 304 results (instead of always returning text/html)<>3352.43<>2
1265226572<>77eb5867e1473d3e575cc314277b3746947c2958<>Add static_url_prefix setting to allow serving of static files somewhere other than /static/<>3333.69<>2
1265212981<>123771a096b228e869028c848e44e9d32456c4a9<>Added support for running Tornado on win32<>3343.64<>2
1264725860<>e30e28bcfb9a8880bc1889c425e36f1c1476e930<>Add a hook to allow applications to modify the curl objects directly.<>3368.82<>2
1264667302<>b6ad0f6323a4b67f6aa38f004af88f683cba343b<>Merge branch 'master' of git://github.com/bdarnell/tornado<>3365.37<>2
1264664772<>a2adfa1f997e6ad731c0d8da81dfd9831e4d4999<>allow connect and request timeouts of zero<>3305.05<>2
1264664117<>47db027764c32e097353f1119a80c04b6b0d0b79<>use self.headers for cases where no headers were passed in<>3363.05<>2
1264194591<>a1991136fdab2700c627cb94ac8f9d4db9cc5dca<>Make parse_command_line initialize logging even when there are non-option arguments.<>3335.07<>2
1264194513<>adcc1039942ce756a1eb9ebf872d0b7483cbefa1<>Merge branch 'master' of git://github.com/facebook/tornado<>3351.93<>2
1263843579<>1e291eb5092d232d84be5914429808aa24c9ee9d<>Add HTML 5 WebSocket support (see http://bret.appspot.com/entry/web-sockets-in-tornado)<>3359.93<>2
1263791544<>fb66140dce8e002ffc10e5d6985df9e3e3f9225e<>Fix httpclient / epoll interaction errors, per http://groups.google.com/group/python-tornado/browse_thread/thread/276059a076593266. Thanks everyone for the patch and discussion.<>3359.96<>2
1263616062<>57ec818a3f8ab56dec1b6cf585fa7c8c4d6ab80a<>Catch both IOError and OSError in another place.<>3350.43<>2
1263609720<>8c2429dbd3472d651a03839bd2568d30b1ed7c8d<>Catch IOError in addition to OSError in IOLoop.remove_handler (friendfeed's epoll module throws OSError, while the one in the standard library throws IOError)<>3370.70<>2
1263467278<>7e3ace860790c80ef2170ede1ef57e5955727515<>fb demo fix<>3352.54<>2
1263248247<>c436d7aa8df246dcb9e70a6a16fe558618c60d13<>Fix new connection close handler for WSGI handlers<>3358.22<>2
1263239601<>9107b6be2bffe4bcaf8cd47cf79c6d792cdf71d4<>Add reverse_url to RequestHandler class as well<>3352.66<>2
1263236543<>7014417608d03e7af2c7aba58ba358d8657a24a2<>Merge remote branch 'bdarnell/master'<>3890.38<>2
1263234701<>e4c6eec2114d2d95e48762dc8099b364e0a4e23c<>Use time indepdent compare for secure cookie.<>3870.25<>2
1262919971<>1ea5df5e6f44bb3b98c830535319a92c386cda93<>Add a method to RequestHandler that can be used to detect when the connection has been closed by the client.<>3364.92<>2
1262919227<>d877a65d471f5a52ea7109897d6c4294de6f5cb4<>Add a kqueue-based implementation of IOLoop for BSD/Mac systems.<>4242.43<>2
1262051700<>52d20a0dafe207a1f8da03b2be73b0682209b1c2<>Don't try to write to a stream that was closed out from under us. This should get rid of all the "exception after headers written" spam in our logs.<>3836.16<>2
1262050025<>6ee22230f8e657591ef3cd5d3dda8e9b36125786<>Add httpclient support for the delete method.<>3931.81<>2
1261011697<>3ab63905aa3801b0ab11becb145366964a18e896<>If IOLoop.stop is called before the loop is running, make the next call to IOLoop.start return immediately, so that one call each to start and stop will result in the loop not running rather than running infinitely, even if the call to stop happens first.<>4268.07<>2
1260832886<>22d840ed1d3728dedd2344f1194b1f89f20cdd83<>Added kwargs to get_error_html in the RequestHandler so that downstream actors can render or otherwise use the exception object thrown. This is a backwards-incompatible change for anyone who has overridden get_error_html().<>3915.30<>2
1260407238<>4381df04e70452e3ebf15c925031f477da0a6c30<>Use empty dictionary instead of None as default for kwargs<>4138.17<>2
1260406744<>1823a772c08aa0f3f218f733bf98b7bf094e2ef9<>Fix missed variable rename<>3851.54<>2
1260405859<>df5c994ae0d2961f3607759e8525872bca94d43f<>Add Application.reverse_url, which can generate a url to a handler by name. This minimizes repetition of url patterns for links and redirects.<>3910.65<>2
1260400988<>9ade70501e2103dcbadc0918acc4fc195593ea86<>Merge branch 'master' of git://github.com/facebook/tornado<>3913.44<>2
1260352130<>b3d98c4a369e50eddb0411af9174b232f8b6ad28<>Add basic error checking so you can't add a server to the IOLoop twice<>4226.98<>2
1260351905<>8d4dde80e85a9d34631c68746fa0ff4372880792<>Typo in error message<>3827.13<>2
1260347043<>6fb90ae694190fcedc48d9fb98b02325826d783e<>Pre-forking implementation so a single Tornado server can utilize all CPU cores<>3851.43<>2
1260291362<>1da2b3c5c65c23f97433f9ce33fc1a70d21c4d27<>Add gzip Content-Encoding support with 'gzip' application option<>3873.73<>2
1260231439<>41a94730959d641e6c2c765ca631645327805c5a<>Add REMOTE_ADDR to WSGIContainer<>3843.63<>2
1260230008<>ce20498adb28f65d120e8daa3f3d2fa50aed9361<>Merge branch 'master' of http://github.com/facebook/tornado<>3841.17<>2
1260229636<>400d2c9f80d0e3c9652bf8df0c9d35b54cba459e<>Make WSGIContainer._environ public and static, so it can be used to adapt tornado requests to WSGI environments without a full WSGIContainer.<>3800.34<>2
1260178086<>41e46d97f5648e241f04051e3ed12bd095c04d4c<>Fix transform headers bug<>3912.50<>2
1260070610<>c50d9b8c789eb1914f31bd4dc7adbf1383c8fdb1<>Ignore XSRF cookie check when X-Requested-With XMLHttpRequest header is present<>3905.98<>2
1259870272<>5fc06caffe9a362a526e6c5480a2ebdd174eb29f<>Add a FallbackHandler class to allow use of other applications (e.g. tornado.wsgi.WSGIContainer) from within a tornado.web.Application to facilitate migration from other web frameworks.<>3909.15<>2
1259087258<>595ffa1975835c82ef21b4cfd8bc5076c292e828<>Add support for Squid proxy headers<>3890.94<>2
1256720423<>7546f8d3b21cc31ed1ec679fd093be4cb9156e51<>Ask for more Facebook Connect fields by default<>3905.06<>2
1254813230<>b5c6ccb312c21a653e29e449801ec3e8dad2dea4<>Initial support for SSL (thanks to Dan McDougall for suggesting this and code samples)<>3996.93<>2
1254454909<>718c1816e13ac71ad9cb88b597b82df41ff35db9<>Missing website images<>3905.69<>2
1254454889<>4e0a8433d9519a78fa255a1f76a01100bcc8ae43<>Fix embedded CSS bug<>3808.38<>2
1254347796<>681d4d2fabaa3df89bdb43213e7e13c917cebf40<>Add links to FB, Twitter, FF on web site<>3800.54<>2
1254297660<>b32b6b4b0435e974db8990f6cc6cf9b8daed9952<>Bug fix<>3897.80<>2
1254295960<>aa836cdf3952d52efc68201872b3a0053aca33ad<>CSS/JS embeds after files<>3826.93<>2
1253731577<>571dd056d226109592d2e05225a4c360cdc31a31<>add address param to listen<>3890.09<>2
1253551113<>50528c010ae06ff14d7c9ea2e682de6549ba4c8f<>Typo in PeriodicCallback<>3924.86<>2
1253242390<>d6e9cd5a116fe640dffe019079900c80c13673de<>New 0.2 distribution from the past week's bug fixes<>3914.95<>2
1253242052<>11503326a6ed78907aee462fc07ef0b9cdb0c8a2<>Turn on auto-reloading when 'debug' setting is given<>3848.66<>2
1253234806<>c4f682d4fef08cffb4156d9f19f2e62ccb355024<>Bug in locale.py and increase poll time for autoreloader<>3865.51<>2
1253167182<>6e1cb0ddf45c968e74db570c6c0499cb0ff321e4<>add streaming_callback option to httpclient<>4023.63<>2
1253090998<>237944d5241aedc2a281c7a17cbb08a3f18c5a2a<>Rename auto-reload module<>3851.61<>2
1253089752<>be71a24f1ae9223558152b61b9b93a0635d1a0a2<>Experimental module auto-reloading on modification<>3905.82<>2
1252977006<>dd6cadf2776ab2afec484cb7cf366f730e174647<>Auto-reconnect on MySQL connection failur<>3864.31<>2
1252975245<>f524cc6ad5b216ac42fe7e12410bddedad4a2abd<>Add gitignore file<>3862.64<>2
1252957387<>016dee1e9659297ddcaf298ae7ee1e26812e5504<>use correct module<>3904.40<>2
1252951707<>c59cf2ab0657e56ffae9908f6f651cbf893dd21c<>make logout link work<>3883.76<>2
1252946724<>2be82a07b38e8c64cb066cea158e38350c07749c<>Fix multipart/form-data for WSGIApplication<>3883.58<>2
1252946256<>91d90b2ff1c7e4901ff197a503af1732c2909953<>Get rid of unnecessary/inconsistent mixin<>3814.50<>2
1252876435<>82a2de536ae92f26f2cc89c6945fc759be0aabf9<>Add addslash and removeslash decorators for, e.g., redirecting '/dir' to '/dir/'<>3901.65<>2
1252869976<>37e671203620c8b030412666fd03283fad9fcd44<>Two minor typos<>3904.82<>2
1252865997<>8ca616088cfb26ff19fcc6f359d654fef905b8da<>Add initial WSGI container support for running other frameworks on Tornado's HTTP server<>3888.84<>2
1252772703<>9c51d01b123fed12907e7f3a5f85d19525de3196<>Don't reference Exception.message due to deprecation in Python 2.6<>4116.32<>2
1252694588<>6b07e69551f045e4632660ed20a2c66606cb92d4<>documentation typos<>3889.05<>2
1252669653<>9e24ae162d024e4049b8811d7ca19e319c20021d<>s/Google Code/GitHub<>3768.69<>2
1252618768<>f6798502befee7fa5c66696dac31b443bbb5a3ff<>Merge branch 'master' of git@github.com:facebook/tornado<>3914.26<>2
1252618763<>cdcfb26316845294178707bb235cee0ce953e8eb<>make sign out clickable, ignoring automatic redirect for now<>3895.10<>2
1252617873<>72707599e8da89bba125df14ed454562224fc9fb<>Merge branch 'master' of git://github.com/jaybaird/tornado<>3838.12<>2
1252617023<>e0526867ca0fe0e2839b46acc597fa1509150bc5<>typo<>3861.06<>2
1252615273<>41ea6da5f5cc79721614430bd0a3bcb4bb0a8251<>both links work, but this one seems canonical<>3852.42<>2
1252614279<>2fd2ad6d42f66efc6565231d08b29bdf92f257d8<>remove cases where intern is used. This will prevent a DoS via memory starvation if a lot of requests are sent using random headers<>3887.44<>2
1252609296<>19c8610eee0b669298984786083a318439e594f7<>typo<>3875.57<>2
1252608567<>2e1e2a79826999bd9d20cf4c5b60e4bce8930ad7<>Add python-dev to apt-get command per http://groups.google.com/group/python-tornado/browse_thread/thread/d88de85aa33193a7<>3823.08<>2
1252607729<>e48e2b1129be390fca684635f6f232fe26adb63b<>typo<>3853.03<>2
1252606316<>e997ac0ad9133a9768996ff3c7fe415922c9302a<>Merge branch 'master' of github.com:facebook/tornado<>3884.90<>2
1252606299<>01405d0b08e91f0ffed0a7a41af9f96e3542381a<>typos<>3820.79<>2
1252606168<>6794fced8023bcc5783589554dbd6f9db7274d51<>Merge branch 'master' of git@github.com:facebook/tornado<>3865.08<>2
1252606161<>f431c9e59701bd7d841d9401fda1895b2456ae4e<>updated tarball<>3822.08<>2
1252605146<>d9d3e9cafb016df407e15121c2390d707fb26253<>fix README<>3889.92<>2
1252604839<>e197a479bef594614e1a10a04e7b33b420005efc<>escape more<>3881.99<>2
1252604288<>e4d56d91839f74896c24cf52c987b5a82cdce849<>typo<>3854.44<>2
1252603492<>71a44bc082ab6f09d3b948f11bb6fa1585a36424<>Another typo (thanks, Ben)<>3853.78<>2
1252600189<>9a8bd2fb6fd6279be16d6f0a2e57e49fe1b98f8f<>Add prerequisites to Tornado docs<>3846.80<>2
1252570604<>98a6bd9ac795809ef2c4f7b7152d527e0f852d6c<>Fixed typo (thanks Casey)<>3774.50<>2
1252569187<>efd4666dfbb000ad067c2aab4b67a57d60ebbeb3<>No favicon for Tornado web site<>3870.84<>2
1252569051<>2afa97349330d1a224a7e4fdce0dcdf760222a8b<>Move Tornado project to Github<>3985.00<>2
1252473318<>07e5e8c43d5cec87aca862276f296af58695d520<>Wrote initial README file<><>2
1252472484<>11de50a83acb07ab3a4439b38f0153444a124381<>Created project<><>2
1291419193<>8e4a7730d3fa599aa99fdc58d911d149344eb711<>Merge remote branch 'slay2k/fb_fix_graph_mixin'<>2066.99<>3
1291184933<>a18eead89e6a31175abd60964a05da365139cab3<>Fix duplicated remote_ip field in HTTPRequest.__repr__<>2065.62<>3
1291089736<>ffe291f2eec262679c43c63c4485ac6595eb1433<>A few fixes for FacebookGraphMixin<>2073.54<>3
1291071676<>96ecb6603a10bdcf30bb238d3462ec9da0560c89<>Use request.uri instead of request.path as default redirect for auth.py.<>2292.10<>3
1291068481<>6151498dba7d55d602cbf0360df8f29b712c33a1<>Log malformed HTTP requests more gracefully.<>2076.32<>3
1291067346<>ae3cc317c2781ad515a0ad48891d65b2370982df<>Treat HEAD requests the same as GET for e.g. sending Etag headers.<>2099.77<>3
1291066455<>eededcf5d51c4e945757b0936512115cf50d09f4<>Preserve the order of css_files from UIModules, like we already do for JS<>2093.88<>3
1291065423<>00b9ee91f17c7bc8eb07999381ec3aeb3191ebed<>Expose the client's SSL certificate as HTTPRequest.get_ssl_certificate().<>2067.36<>3
1290472268<>263994e8fc5cec66a57151ca48fd959b6496e281<>Fix bug in multipart/form-data requests.<>2098.60<>3
1290271899<>b0578819e1001bd3ab3555c490e8845f79099c88<>Update pydoc to mention response.rethrow instead of reraise.<>2125.08<>3
1290204293<>9e965556ff7a343864059c35bd8517f434d5c88e<>Don't assume 'boundary' is last field in Content-Type header.<>2083.05<>3
1290108374<>cb232b22dab6754ceaab77ee47b451b3a4811a5f<>Merge remote branch 'vijayp/master'<>2092.21<>3
1290106724<>905a215a286041c986005859c378c0445c127cbb<>Set proxy to '' if no proxy is explicitly set in the request. If this is not done, curls with proxies set are re-inserted into the empty list, and are then reused. This causes connections to be randomly proxied, if some requests use a proxy, and others don't.<>2483.94<>3
1289954273<>d0620d67181714e1880b83b54ebafd6ba9f37666<>Add debug logging for queuing in simple_httpclient.<>2083.17<>3
1289953851<>08e5ba5da8d85cc22ed55d34663b61a6be470579<>Add address parameter to Application.listen to match HTTPServer.listen<>2093.09<>3
1289885571<>0b607c10badb89125118d892b176c36aacd63323<>Fixes for python 2.5<>2090.62<>3
1289884532<>a853850e26d31288941a264125b674d9def9f096<>Add convenience method Application.listen(port) so most apps don't need to explicitly touch HTTPServer.<>2099.62<>3
1289868824<>5f5e0bb3be4e522039fbbe3768109ea64cc99fe2<>Implement max_clients limitation and queueing for SimpleAsyncHTTPClient<>2108.70<>3
1289866269<>7750fe7773366d19937038d2a2fd12b66445f674<>Port pseudo-singleton magic from AsyncHTTPClient to SimpleAsyncHTTPClient<>2097.46<>3
1289774717<>f2aa302bcb044b204ae14c9b66342f483a245218<>Add timeout support to simple_httpclient<>2223.93<>3
1289768294<>8a941c42b27726aee81479be5f80b5a0d33631aa<>Improve docs for IOLoop.add/remove_timeout()<>2096.79<>3
1289332354<>31b0ab0c5d8bcc695589e89bcf9c5848c1dffdf0<>Fix typo in docs<>2107.92<>3
1289246016<>3dc7ebad62b97726795e15b11a28a8c6b4d44726<>Add Amharic to tornado.locale's list of languages.<>2077.06<>3
1289245342<>0dcee8d7dc4ad0a88562ed2676a0b95e6453e405<>Fix mangled language names in tornado.locale for Chinese, Japanese, Korean.<>2073.87<>3
1289242490<>ee55403cd4a6255f275b0f39cbc19f03accd29ef<>Support X-Forwarded-Proto in addition to X-Scheme<>2100.50<>3
1289242262<>7ed8fbe136edc91fe9d884a20e2717b64f1a43b7<>Support websockets over https.<>2095.09<>3
1289242143<>965099eda08b376e18c42dffb7dfd4b5dd79dcc9<>Support "from x import y" in templates, not just "import x"<>2097.66<>3
1289066879<>3e44643d3b89c99c6bc285b0e650ab12ee06fb16<>Fix typo from commit 2b44fac<>2098.37<>3
1288981158<>9ec87c2ba25e202fbce5ff1f35184fcbabba26f3<>Capture StackContext explicitly in HTTPConnection to prevent leaks from one request to the next.<>2074.18<>3
1288896454<>2b44fac4ecf273aadc97dbcaa5abf1e3a1ee7dff<>Check for a closed connection in _add_io_state.<>2401.94<>3
1288829551<>c467cf0274b3e2135393af4fc88683de9d930018<>fix linkify regex plus add unit test<>2480.92<>3
1288240015<>b914a94ac24c6e09003b29bc4919d028a042ed25<>Don't manually set Content-Length in StaticFileHandler.<>2344.47<>3
1288206719<>5e987aa6b2ffededbe11cda78901caa18aff32fb<>Merge remote branch 'szeim/master'<>2379.71<>3
1288205245<>88111779c9a84177b64faef6ae452d550aeaf359<>Merge remote branch 'fiam/master'<>2364.37<>3
1288179372<>2dbb05d5a09406b2369ee30661c88cd890b09e63<>SSLIOStream._do_ssl_handshake SSL error check<>2369.37<>3
1288179287<>3b486fc4f8081355fc0b87ebbf6c261692d7a418<>Fixed IOStream._handle_events (try/except block)<>2537.16<>3
1288123456<>bd4ef586e026e6bb20850215db53ced81706de37<>Make exception handling in AsyncHTTPClient more customizable<>3100.02<>3
1287702042<>af3d0b3b03bc9d0a37938ee97852ca01e20d7a80<>Add gzip support to SimpleAsyncHTTPClient<>2352.70<>3
1287699426<>d06f8f4bcd46d4f2b620ea1cb614731f4b74ab71<>Support minor HTTP request attributes in SimpleAsyncHTTPClient.<>2395.38<>3
1287698310<>3d19e10355477cb5a92d6e708445965de917507c<>Add basic auth support to SimpleAsyncHTTPClient<>2352.02<>3
1287698190<>83d623a1c5495a6f973f55df95e91495c4bb44a5<>Use AsyncHTTPTestCase.fetch instead of overriding it with a less useful version.<>2462.44<>3
1287698129<>09c0c9d772eb1e68f8be24de752eb9917d1ae79b<>Reindent to 4 spaces<>2374.81<>3
1287522815<>d47c453c5f70b6ecac5e3e8b2aa769377b05da23<>Attempt to fix StaticFileHandler when os.path.sep != '/'.<>2390.14<>3
1287522587<>fe5172768e8bb96bfa4f5af127ecbf9f173a31b8<>Merge remote branch 'mdg/default_filename'<>2384.78<>3
1287516527<>e7553f75130329446149085d877403164d3770e9<>Add test case for encoding of request parameters and paths, in response to a mailing list thread that raised questions about handling of '%3F' and '?'.<>2403.28<>3
1287516516<>11fdd479b2ff45a3071672fd483cdb4aa81783ec<>Add a convenience method for synchronous fetches in AsyncHTTPTestCase<>2367.16<>3
1287454424<>c41029217918992d8320aaaa2defd82e590d1d6c<>Add test suite to tarball releases.<>2391.06<>3
1287198174<>638a151d96d681d3bdd6ba5ce5dcf2bd1447959c<>make StaticFileHandler support default filename<>2407.43<>3
1287007129<>86bd681ff841f272c5205f24cd2a613535ed2e00<>Support websockets over HTTP proxies.<>2377.49<>3
1287003931<>334b127003fbc82c53b60289637978ac5291330f<>Windows compatibility for non-blocking IOStream.connect.<>2370.18<>3
1286931569<>f10c7176f11ee26de1aa063ee76af672ca5854d0<>Refactor async connect logic from SimpleAsyncHTTPClient to IOStream.<>2337.79<>3
1286843051<>b57bfd35ccf5c65f65b98b584b0aae0e9b48b7bb<>Reindent example in docstring, which apparently trips up emacs' indentation detection.<>2371.44<>3
1286842743<>7c7b0117cffb6abb336407e392f0ecd3b3e3c1da<>Make Locale.format_date() behave sanely with dates in the future.<>2359.31<>3
1286841735<>3ce6d3daeeeda0fc25206ef99048467307aa0cbe<>Run all IOStream callbacks inside a NullContext so that exception handlers are run in the right order.<>2549.37<>3
1286834257<>925af5045c8eeb1727837c1cc9129d14aec50e76<>Make USE_SIMPLE_HTTPCLIENT work without pycurl installed.<>2448.58<>3
1286831812<>dd5cad996e2a6a4fc43bb603e14b942255986182<>Add initial version of non-curl-based AsyncHTTPClient.<>2538.11<>3
1286821225<>5fffe5a8c738a43821c993fab2693437f229e6c1<>Limit the amount of data sent to socket.send at a time (for windows).<>2493.71<>3
1286564176<>160c961fe1dcbf44f574261207af78f382ccddde<>Move Links section from index.html to the wiki. Remove links to unmaintained social media accounts.<>2511.02<>3
1286562352<>b19953441d88c43b8ba6efd3ed40526c5049d2e3<>Fix StackContext in IOStream. IOStream._handle_events now runs in a NullContext, and user callbacks are wrapped on entry to IOStream.<>2468.87<>3
1285882873<>f732f98063f8a0bf9f7e331876964bedbbdc8462<>add a linkify() function for converting text to html with link detection. Also changed xhtml_escape to not convert return value to utf8, since pages should be assembed in unicode and not utf8 encoded until they are ready to write().<>2922.83<>3
1285729902<>75bfe842c5afe8945ee0635ac431b27de6202f6d<>Handle IOStream.read_bytes(0) gracefully.<>2942.23<>3
1285729856<>e210a644aa982bd6502726a900c79ebdcbe8fdc2<>Make AsyncTestCase.stop() prefer _arg over **kwargs, even when the former is not truthy.<>2933.68<>3
1285713981<>8ecaa43734085ed445ebf7ae70f5be280962e943<>Remove references to async_callback from documentation<>2927.31<>3
1285621832<>1221865747ecfde69a0463b9a0d77b3c5b87f320<>In the select()-based IOLoop, always listen for reads so we can tell when the other side closed the connection.<>2952.38<>3
1285616780<>8300c7ff93227a8cb3ef93b8b2cf8931949beb1c<>Close the IOStream when the remote connection is closed.<>2888.66<>3
1285614283<>b02a31b668af71160c84b1c95a22e1035d9c218a<>Factor port-selection logic out of AsyncHTTPTestCase so it can be used from lower-level tests<>2930.67<>3
1285353753<>7a7e24143e77481d140fb5579bc67e4c45cbcfad<>Make StackContext more usable in libraries by reducing the need to explicitly use IOLoop.add_callback or NullContext.<>2873.23<>3
1285259852<>4973e296ebd68bdaf5bd7fc51186b56c6c69bc91<>Update installation instructions in README.<>2900.72<>3
1285096502<>a1d94db451e57301e2f97d7c33eae6a84592d078<>Fix default_host redirect.<>2927.19<>3
1284841350<>9f529b89863da8c5d8d5011f8d968e094fc2065f<>Fix improperly-renamed variable in set_blocking_signal_threshold<>2926.57<>3
1284760003<>81a3eae5e63eb48f5b42941e5394d58cd7e0f994<>Make xhtml_escape available in the template namespace under its own name in addition to "escape".<>2956.58<>3
1284759945<>625a9bef1adae3d075ac098418f70b5603b83b29<>Move cookie-signing code from set_secure_cookie to a new method for non-cookie use cases<>2880.98<>3
1284746563<>8c4fb07636133586366e195eece8e0254484dd8c<>Document the entire template namespace<>2928.57<>3
1284682504<>f46cfa423869157ce6752d80155ab949bb2044b6<>Generalize IOLoop.set_blocking_log_threshold by allowing user-specified signal handlers (via a new set_blocking_signal_threshold method).<>2895.28<>3
1284672563<>f6f7f83719a48083f3e5ed999e19c0ec67de9b9b<>Refactor IOStream reading logic to fix problems with SSL sockets.<>2960.95<>3
1284494682<>7b17caa0be878ebe1e5a796385c66190c5085c16<>Fixed another two win32_support import<>2875.33<>3
1284494682<>0e21608e86cc85defa265323cb8a50e6337d3d41<>Fixed win32_support import<>2876.22<>3
1284494682<>dbd0051a87aa03c9af6ef235309999c300c63260<>Added binary flag to _waker_reader and _waker_writer<>2845.89<>3
1284494682<>a1b5c33b40ffe87649eeb9aa126e622097479119<>Replaced map() in web.py with for loop<>2881.70<>3
1284494682<>4118b8e7d3a56a3b6d5ba72d900349c58ac91595<>Changed e[0] to e.args[0]<>2898.72<>3
1284486176<>fb08c11bc0011db1120a4f312f83e3ac71c1a202<>Update docs to mention requirement of pycurl 7.18.2.<>2899.38<>3
1284410474<>8dd551b9cd4cde1935f1c48378de1bcb2cb073b9<>Merge remote branch 'fiam/master'<>2836.99<>3
1284402652<>a352f5ed45e2c8647e87fecd9e9612f85aa45336<>When forking multiple processes, properly initialize the random seed<>2831.86<>3
1284402510<>98e4344fe66663d690003b39af3ac5808e499623<>Avoid raising a KeyError when there's no session expiration date<>2915.30<>3
1284401926<>6e1dbe248cdc6012ffa8feae71726bfef5c2f091<>Fix calls to getattr (which, unlike dict.get, does not default to None).<>2894.16<>3
1284052007<>34f04945a9d4e88b451f3af6ac068b3ccee21184<>Add download url to setup.py for pypi<>2919.37<>3
1283983581<>9163e3470da3bb82f310ad00925af8e92188a381<>Check self._running before rescheduling a PeriodicCallback, so stop() can be called from inside the callback.<>2879.61<>3
1283904312<>2338348edda61c663fff8a7f6f77cf489bf63de6<>Bump version number to 1.1<>2912.13<>3
1283904170<>afb82f686850116e4d3b360222c73e43a7e06ea5<>Disable SSL test on versions of libcurl with blocking SSL handshakes. (using gnutls instead of openssl and libcurl < 7.21.0).<>2903.06<>3
1283900482<>bb8d2fa458dd565b88db4e2185062f641864e990<>Disable SSL test on python 2.5<>2896.97<>3
1283900464<>2e288577a1145901dc7b4fbeaa4fd9ff6dc06ccf<>Use the older name for threading.activeCount for compatibility with python 2.5<>3014.92<>3
1283897961<>e6d93d9350c55d245c871b2558553c33eb74a68d<>Fix error in comment<>2891.14<>3
1283797449<>6d7e515ea490f1ab587fe7fa10bee001ac2f2dbd<>Fix typo in websocket.py<>2877.57<>3
1283756452<>8e34c59edd9a72fdc4be9f16074aaa3f1c3ee9cf<>Remove superfluous lambdas in tornado.escape.<>2833.85<>3
1283657939<>93fc3d0935e11ad1056e1a4cf3826935faebb0db<>Document why RequestHandler.write does not convert lists to JSON.<>2873.66<>3
1283627986<>890d829171e1c33e7b570d1a2a5a911bb45e47e2<>Add more documentation for request.files.<>2856.45<>3
1283626588<>5b9e79e733108bf983d22237587d7b6e782af0db<>auth.py updates for OAuth 1.0a and 2.0.<>2906.85<>3
1283380052<>d1b58414e0b0b239d620e4ae623680c8d73b71d8<>Remove the statement that tornado has only been tested with firefox.<>2889.63<>3
1283379417<>0aae8f9052b8b05059cfbe4f94972beb28b4f9b5<>Remove __del__ method from HTTPResponse. Closing cStringIO objects isn't really necessary, and the presence of a __del__ method prevents python's GC from breaking cyclical references (which happen on errors as HTTPError and HTTPResponse refer to each other).<>2889.61<>3
1283195901<>aab1be8bc885494f43680b2fc492dd224f68816b<>Update class docstring for HTTPServer.<>2981.67<>3
1282863814<>2ccfb35ff2604b35956a62c54bef23e5dac403f5<>adding support for http method OPTIONS used by firefox, safari, for cross domain<>2912.31<>3
1282848761<>b4c5aba7c2d00f929a1d1d16577aa5e2b6fc5d72<>Fix reference to slice.indices.<>2899.26<>3
1282848049<>86667742944aec95bb909876be486ca278254e5a<>Document the limitations of multi-process mode.<>2869.90<>3
1282847546<>c4413f5b636da2ac00d1d4d56805bc38d65ba47c<>Document the fact that add_handlers should only be called once for each host_pattern.<>2894.83<>3
1282846210<>318ec31c3d164361e99eac654a41eeb95f37f6be<>Set pycurl.NOSIGNAL when multiple threads are detected.<>2897.61<>3
1282781864<>fcab3583c051093d6f59baee420cfeace91ba0aa<>Set PeriodicCallback._running to True in start instead of __init__<>2886.07<>3
1282780442<>803f33c153408076c1493300acc8010c656e7197<>Add a tornado.version variable, and use it anywhere we use the current tornado version to produce a Server: header.<>2830.02<>3
1282779281<>3f0740c89428f0a6482f93876c1603b5a17c61e8<>Check in Jacob Kristhammar's updated websocket implementation.<>2843.66<>3
1282775661<>e571668d8947ac5f2e45aa21cb613b64eca022ed<>Add more documentation of overridable methods in RequestHandler<>2999.40<>3
1282761404<>1580728fe85d2b42ca54c88b876a452192f8abee<>Move AuthRedirectTest from httpserver_test to web_test where it belongs<>2902.12<>3
1282761189<>b398a816743db473a7f4373c251225c4d9be299e<>Add a test for HTTPServer's SSL support<>2913.66<>3
1282761130<>b3e953ea0a0bedcb6e6cf2137c8de8299a5dbe1b<>Don't swallow SSL errors - always reraise or return<>2846.04<>3
1282242315<>9d605f2bb21dba9a0b0b2c974fd173b98e93157a<>Make the SSL handshake non-blocking.<>2912.06<>3
1282240667<>252a2bb92d24e0c095d4e39cecf516e335f1037d<>Merge remote branch 'tomhsx/proxy-support'<>2863.74<>3
1282240329<>4e10c31fe8307f0e532eb2783dfad299029df11f<>Add HTTPServer(..., xheaders=True) to the web documentation.<>2893.86<>3
1282240088<>55b4eae8af9aacdab74ecc0f16dff369ddc7e00a<>Add a links section to the website<>2923.43<>3
1281937036<>00f9e48d2a2729970c51d8127968bc0e2f124533<>Added proxy support to httpclient<>2925.14<>3
1281921462<>51d6ba42dd0cd260c28d6feec1357712201f76f3<>Suppress tornado's default logging setup if there is any existing logging config, not just --log_file_prefix.<>2909.86<>3
1281921108<>221058e1cb9d8b424efd5b6af40768537f26060c<>In LogTrapTestCase, leave everything alone rather than throwing an exception if the logging config is not as expected.<>2889.23<>3
1281920674<>551ea94d2475f6702f652e49698a20be97c26b2e<>Initialize member variables in AsyncTestCase.__init__ instead of setUp to avoid masking the real error in _stack_context() if run() throws an exception.<>2891.83<>3
1281736143<>33fe4a4e9090ea0fa48f14d6ee849c81d439a124<>Fix another link to 1.0.1<>2843.82<>3
1281721910<>0ece9ed61f9fb94f68e44ea3a32fd82d7bd80c02<>Check in symlink to tornado package in website directory<>3096.99<>3
1281721837<>d8b265dd8a7da0621ec134d0fb98c8d401dda6e0<>Update links to 1.0.1 release<>2890.80<>3
1281719966<>bbc1ef1288c3b58f51b493217e4bd9dac04fde67<>Test case for secure cookie change<>2911.72<>3
1281719908<>a770a7cf6c2b0a4703cf29f419c400266fee1530<>Check for far-future timestamps in secure cookies.<>2910.01<>3
1281684863<>8d607129d9bd13da2a76d3a2acc656b0122e1e5f<>Add future import to fix tests on 2.5<>2908.67<>3
1281551680<>db3d021921fd7f55ccb018f165f634e332646ced<>Add a mention of on_connection_close to the html docs. Add a warning about proxies keeping connections open.<>2893.55<>3
1281474018<>41c14b82c41de817c0b4ab7a4e721f32cb71ac54<>Remove the ability to pre-bind parameters in stack_context.wrap.<>2865.27<>3
1281473852<>9d4444e341f4fc16fc9373526fe95bbf0c5a930f<>Reindent everything to 4 spaces.<>2852.43<>3
1281473513<>02d07def3ac3e9f553a9d69e5f63029aed29b50a<>StackContext should not re-wrap previously-wrapped callbacks.<>2870.06<>3
1281389612<>cd888f2f00228d8154c3ec043a1488dad5e07803<>Be less picky about line endings in headers in httpclient.<>3052.69<>3
1281388353<>00ce7d4d996ff4c5e19748a5582142fa53de33cd<>Add a simple main function to httpclient.py for manual testing<>3029.62<>3
1281387708<>fef1129b1668853fd854345a3b3ba3fcfd306ad0<>The periodic call to multi_socket_all needs to be followed by _finish_pending_request or else those requests won't be finished until after the next one is started.<>2945.03<>3
1281136144<>91c1bcba8ff213adcca8d8769ea7cc6b7f702023<>Record more detailed timing information from AsyncHTTPClient, and make it available as HTTPResponse.time_info.<>3063.44<>3
1281125534<>98d4126169836f498b892345137dbffa92024b9a<>When login_url is absolute, use an absolute url for the next redirect.<>3002.40<>3
1280972862<>ae3c35454787d0e5c071e9485872f9390a8bd406<>Use the right IOLoop in AsyncHTTPClient's PeriodicCallback<>3265.70<>3
1280968927<>e5bd0c066afee37609156d1ac465057a726afcd4<>Use POST instead of GET for OpenID check_authentication.<>2959.21<>3
1280968824<>becb5f270336ad972b23f2e703de677f8ece30b1<>Suppress libcurl's magic "Expect: 100-continue" behavior.<>3033.13<>3
1280968220<>8995f5a0f93717e27e01fd1de2e7ab8f54782276<>Add a brute-force workaround for the class of libcurl bugs that cause file descriptors or timeouts to get silently dropped. (the old fdset/perform implementation of AsycnHTTPClient had a similar workaround).<>3059.08<>3
1280955634<>0875b784d10927629eccc4b371f10cd16753f401<>Fix a typo in docstring<>3006.46<>3
1280948525<>2aa8927314d8bfd2e190d04bdd7642b85983411f<>Parse form bodies on PUT as well as POST.<>3028.00<>3
1280871345<>805ac65dc85e6c0f90d880135219fc88ceb31ed4<>Work around the "MySQL server has gone away" issue by closing and reopening connections that have been idle for too long.<>3034.23<>3
1280870484<>9a083095ffa709fc0531a7deb2d16e149b4ebd37<>Use the more portable multiprocessing.cpu_count() to detect the number of cpus where available (python 2.6).<>3034.62<>3
1280535773<>8c17e79bdd115c708dad6429e031dc2a4b7eb3bd<>Add a workaround for missing multi.socket_action on older versions of pycurl.<>3046.02<>3
1280533633<>293d15d55993282863904af5621b83ed7532a43d<>Only catch pycurl.error, not all Exceptions around a call to multi.socket_action.<>3183.86<>3
1280524897<>252cb1c00b999e05b0f0041829bdbbf9905b6617<>Docstring updates<>3068.97<>3
1280455710<>6df410aa53261f56d6ec0aa336c9578c246277f8<>Fix a StackContext-related bug that was causing exceptions in callbacks to result in timeouts instead of making wait() re-throw the exception. Add a test to verify that this works.<>3000.01<>3
1280455273<>b260c92d17eba13403ec4a40edba8aa12055bc7a<>Add __future__ import for python2.5 compatibility<>3042.87<>3
1280455206<>66f94d2c13ce501027106df7449d48485a132820<>Update test_ioloop to use AsyncTestCase. Rename it to ioloop_test and make other stylistic changes for consistency.<>3065.78<>3
1280454798<>15e5bf08ed8ba620d3118816722e3ecad175b916<>Add a test framework for IOLoop-based async code<>3060.85<>3
1280448220<>28adce306aa583e92a5245bee7f449345e4e5cc9<>Make all internal imports of tornado modules absolute<>3046.56<>3
1280171040<>83864d60198c001cbe53fad657a42c2a7777ad1b<>Add an initialize() method to RequestHandler for use by subclasses.<>3263.68<>3
1280170145<>dbfdf46c94dfe0d1900c459b1cdef3f26ba5e5be<>Remove unused transforms parameter to RequestHandler.__init__. Transforms are actually passed in via _execute.<>3269.60<>3
1279913708<>721e25d0acc68d751073261bec150ac12a9f88ab<>Introduce StackContext, a way to automatically manage exception handling and other stack-related state for asynchronous callbacks. This means that it is no longer necessary to wrap everything in RequestHandler.async_callback.<>3079.53<>3
1279908776<>94f073b7a209d04b463ea3098ab89bbabb8ba7ca<>Remove the old AsyncHTTPClient (fdset) and make AsyncHTTPClient2 (socket_action) the standard.<>3541.96<>3
1279842981<>eb5b3d8df7a305ac1ffa0a12c813e5d7ee4d6cd3<>Set version number to 1.0<>3568.70<>3
1279842980<>d90ba2e0da31a8f12b0930a8c6b9c3ef35697a69<>Remove old release tarballs and redirect previous urls to github<>3324.94<>3
1279836805<>22f452569cabcbfb5b396e01d3708437cd267571<>Move download links to github<>3307.24<>3
1279834147<>0bb985a8d4f1d8be46e06107ac0e8ecb206cfc3b<>Remove websocket.py. The websocket protocol has changed in incompatible ways (and is still not yet final), so the version implemented in this module is not compatible with current browsers. This module may be reintroduced in the future when we have an implementation of the new protocol.<>3225.75<>3
1279832861<>7a288245dc49589f84c45d25fbe4320185cae7d0<>Update installation instructions.<>3295.56<>3
1279646725<>2c89b89536bbfa081745336bb5ab5465c448cb8a<>Accept None (i.e. unmatched optional groups) when extracting parameters from the path.<>3275.70<>3
1279593582<>ad104ffb412dbbf66da0bb67d5e48d8907a7b17c<>When no json library is found, don't throw an exception unless json functionality is used, to make the simplejson dependency optional for python 2.5 users.<>3256.68<>3
1279570168<>ea032b6c9c8dd5ff370057a73a762d4a7af1e897<>Check for EINTR in a more flexible way for compatibility with older pythons and poll implementations.<>3300.13<>3
1279156336<>7a30f9f6eac9aa0cf295b078695156776fd050ce<>Fix typo in support for multiple ui_method/ui_module containers<>3295.14<>3
1279150852<>c78ab55dc07a137b8eee1f8e09857102bcb19e98<>Better timeout handling in AsyncHTTPClient2. Tornado and libcurl may use different clock functions, which can cause timeouts to be delayed (in some cases until the next fetch is started). This change resynchronizes the schedule after each timeout call.<>3561.51<>3
1279122246<>64d8d4e5080b4ee75b842b77eaf4c3deef9a8f42<>Fix small bug in database set up.<>3314.79<>3
1279009732<>e2181b035b216c60bd1b67736ca334562c0e9c84<>Make iteration over sql fields clearer<>3330.80<>3
1279009561<>a9090a97f49dbcb93653c259d831e5124a154574<>Remove unused imports and variables<>3325.09<>3
1278724512<>b42c61c88ebabbd20ba3bb6d797ff73249ab2b07<>In AsyncHTTPClient2, disable IPv6 for versions of libcurl with the socket-reopening bug (i.e. <= 7.21.0). (this can be overridden if needed with a prepare_curl_callback)<>3538.71<>3
1278706063<>557da3db1c912039bda9d0e54717e4bd23af8c9c<>Unquote percent escapes in captured groups in the path component of the URI, to be more consistent with our handling of query parameters.<>3315.79<>3
1278705421<>455eb75b18afbe625c8a2fe97c1a9888ef09ed50<>Revert "Parse percent escapes in the path component of the uri, to be more"<>3382.02<>3
1278638863<>7b80c2f4db226d6fa3a7f3dfa59277da1d642f91<>Parse percent escapes in the path component of the uri, to be more consistent with our handling of query parameters (especially important when capturing groups are used in the URLSpec regex).<>3295.46<>3
1278634460<>a7dc5bc4b463c90c41355c9d8d54e82fd39cee5f<>Consolidate the various HTTP header dictionary classes into one, which includes better handling of headers with repeated values (e.g. Set-Cookie)<>3276.35<>3
1278629564<>e98735bf4b35688aadeaffbfe1fc6ad636ebc318<>Disable preforking by default in HTTPServer.start().<>3767.77<>3
1277743966<>2ac7426855dd06ee6daad69985d6ad5f62b26437<>UTF8-encode more user-supplied strings in httpclient (headers and user-agent)<>4058.04<>3
1277593226<>52c378f7f8bcddbffa521bec93d02b61425f062b<>Update the set of active file descriptors immediately after calling perform instead of after running user callbacks, since those callbacks might have started using file descriptors that were closed by curl in perform().<>3769.36<>3
1277590575<>33c3f8d28bfda17e100a5d4f77880bd017e56807<>Include the HTTPResponse object as an attribute of HTTPError<>3771.73<>3
1277341290<>60ef8d5d909d25f4c1c5e35bef199b0799cd264e<>Remove unused "overwrite" argument to options.parse_config_file<>3708.07<>3
1277137767<>e7654cda9cc288201d8db116225e45212eaf597b<>Fix typo in comment<>3780.25<>3
1277002540<>1ba0161e384eba2ec65a9cd5f5f4a677f7e98bd0<>Add a second implementation of AsyncHTTPClient, using a new libcurl api.<>3777.31<>3
1276901959<>df0d88eb8d3eef5f2fe351676ef1500e115e3131<>Close wsgi responses correctly - the close method, if present, will be on the result of self.wsgi_application() and not on the list of output we're building up.<>3661.89<>3
1276206597<>39ac6d169a36a54bb1f6b9bf1fdebb5c9da96e09<>In the libcurl file descriptor limit hack, log to both stderr and logging.error since they may got to different places and one may be more visible than the other.<>3726.14<>3
1276022923<>27171cde844065591b160e1a1193f563cd0f4e57<>Catch and log exceptions from user callbacks in AsyncHTTPClient.<>3766.19<>3
1275896639<>b8271f94434208646eeec9cf33da703d97c5364e<>Fix missing import<>3721.10<>3
1275287972<>d1e145039c40b0b50d8dac63c3ebaf53b8b5c8fa<>Optionally allow nonstandard http methods to be used in httpclient.<>3770.21<>3
1275287972<>d5a3d8a027306426c9d722219f52b71cb6816244<>Changed it so one can access the StringIO buffer<>3776.62<>3
1275287972<>6f6c95054fd98998aa47bd1dbed3c1e9a81b33dd<>Clear the close_callback set on the IOStream by RequestHandlers in finish(), so that the close_callback does not prevent garbage collection of the handlers.<>3770.49<>3
1275287962<>5d430b100abaae34f9241af0d21e86622715d5a7<>Close the socket on uncaught exceptions from iostream handlers.<>3283.14<>3
1275287930<>2b0684028a9ca38318ce5038fa611e7274576e22<>Improve parsing of multipart/form-data headers.<>3320.34<>3
1275287930<>982554e710344b498887020071b921a3e63a17ac<>Added RequestHandler.get_arguments(), which does the same normalization as get_argument() but returns a list for repeated arguments.<>3317.00<>3
1275092759<>548bd70d7ba3463331911225d33cfa8f706bdbd5<>Update documentation for WebSocketHandler<>3332.08<>3
1275092212<>70a377088a2a589cb1433a508fc6ecec3c053c18<>Revert "websockets: continue listening for messages after parsing completion"<>3325.50<>3
1274823410<>7f8725c718e2614536bf48638b103f1fca033ba1<>Allow StaticFileHandler subclasses to set additional headers on the response<>3335.57<>3
1274812842<>57a9ac031a86aa1389144ea06638b5550d525b3e<>Don't try to compute max() of an empty sequence (which throws an exception)<>3866.56<>3
1274753191<>d6002cafa15847cf4eee96832a96382113901e36<>Add a hacky workaround for libcurl's FD_SETSIZE bug. It's ugly, but better than undefined behavior.<>3303.95<>3
1274388603<>b9a9ccc38841fcb9f8486e0d2854d570c34fe4c8<>Make it possible to override template_path at the handler level<>3330.19<>3
1274063706<>0c363662462e0408ba10bc2fb831066cf27fea63<>Use a lambda instead of functools.partial for pycurl.HEADERFUNCTION. Older versions of pycurl (including 7.16.2.1, which is the recommended version for Mac OS X 10.5) only work with real functions, not objects with a __call__ method like functools.partial.<>3308.83<>3
1273456474<>e8dec4d0b0431c4826188a0ac2d550cc0b01deaa<>Merge remote branch 'dlo/master'<>3312.20<>3
1273456309<>f0a3d8950b497b03755cdc15f3a456526956cb63<>Translate </ to <\/ in json output to avoid issues with the string "</script>".<>3326.37<>3
1273455966<>26af9e40e012dc6005a59921e6f066f352707733<>Support additional keyword arguments on cookies (to be handled by the underlying stdlib Cookie module)<>3309.83<>3
1273014305<>9ea5f8a277db96557ae7867375c7db4d8c5f633a<>websockets: continue listening for messages after parsing completion<>3329.58<>3
1272673720<>00ad92f3982b7cb6f4634186b98219816cc5dac0<>Allow for missing "expires" field in facebook session, which can happen if offline_access is granted.<>3348.28<>3
1272522465<>339f08bdbd2a1a32c873431a9fab0415c35b3467<>Correcting a grammatical error (attribute -> attributes).<>3324.72<>3
1272324450<>808473910a1467ae88d034b592212142bee38278<>UIModule.css_files returns CSS files, not Javascript files<>3335.73<>3
1272223638<>bbdf207637e4b035d0882619f642a3ae32a04fca<>Updating base Twitter url<>3321.48<>3
1271977961<>0fcef4e2376626a2d961931243ab0a828be956d2<>Clear itimer signals in autoreload so the combination of autoreload and ioloop.set_blocking_log_threshold doesn't cause the new process to get killed.<>3335.01<>3
1271884678<>9f7c9a38ff4d07fc79101bb05809cecd2efb8d6c<>Use escape.utf8() instead of .encode('utf-8') so we don't double-encode<>3498.13<>3
1271883425<>c87e84f068706eca9e078937c8ff5857a72b8331<>cStringIO's constructor uses a 16-bit encoding when given a unicode string. This is inconsistent with its write method, which encodes all strings as ascii (and rejects unicode strings iff they have any non-ascii characters). This change uses utf-8 as the default encoding when constructing cStringIO objects in tornado.<>3305.63<>3
1271876264<>b686d6d44617d2dc7df54e8144cadab93ea4c060<>Add an option to log a stack trace any time the ioloop is blocked for more than a specified amount of time.<>3315.95<>3
1271803233<>ca8002fa9f8182504e117f11c289fabe544f1a50<>Send all logging to the root logger instead of per-module loggers. This undoes the effect of http://github.com/facebook/tornado/commit/e391fd289ed085671344504cc5b1fa84f5a3c774<>3849.30<>3
1271722040<>40ac8d362a2f9d0f076ea1ba4d4ccec0b8ee274a<>Fix header parsing in httpclient for headers whose value contains ':'<>3317.05<>3
1271701203<>b8a28243437892a0802fba5a8a95ab1b0f6f5b2d<>Better HTTP header parsing: Allow (and strip) any amount of leading and trailing whitespace around header values instead of just a single space. Such whitespace is legal but appears to be uncommon (and nginx apparently normalizes everything to a single space) http://tools.ietf.org/html/rfc2616#page-31<>3330.88<>3
1271700186<>43e02a2d88d67fdc8da532c60b13125af11590e4<>Add a closed flag to AsyncHTTPClient so that a scheduled perform callback won't cause an exception after the client is closed.<>3351.92<>3
1271113599<>fc00b61751bc5be9505db03408db93a9cd00f7f0<>Use the original request's protocol as the openid realm instead of hard-coding http.<>3341.76<>3
1270684474<>62bc2e40fd24d5389aa7da66cabab6246abd6eec<>Add support for reading translation from gettext .mo files instead of CSV.<>3350.75<>3
1270502476<>002ba2c1801e963a9cfaf3f023d464c12ae16a42<>Log a warning when multiple handlers have the same name.<>3341.41<>3
1270495404<>b5365d8c015b11a26b5ac6f29a40cd4d59e550e3<>Make options.__getattr__ raise AttributeError instead of Error for consistency with standard attribute lookups (so getattr(options, 'foo', None) works if no option 'foo' has been defined).<>3529.63<>3
1270234059<>218dd1edc86e329e6c12f26d8fa253fd56205b73<>Escape double quotes in addition to angle brackets and ampersands.<>3354.31<>3
1270233656<>e520b21ed297cb92706356e6a0877df02205564c<>Adding for the ability of ui-modules to add something at the end of the body of a document.<>3318.32<>3
1270233138<>794685b892fa0214cc9ed95f365d63979d2a11e1<>Merge remote branch 'mgenti/master'<>3300.67<>3
1270075049<>5f4413bec42dcccce2d85f1421b49218fc5d6712<>Return a write method from start_response, as required by the wsgi spec.<>3362.55<>3
1269956417<>c33709a0ec4acf786d8ee843f8f3fbd520f59068<>When using the select based IOLoop, select can throw an error if based to many socket. This does not have an errno<>3785.73<>3
1269711046<>32a31f4e8ed2385a71b228d605c15ec47ce4d85d<>Don't try to colorize log output on terminals that don't support it<>3393.36<>3
1269644104<>a4ba918180ca292cc2f67a6793c8563cec0d1ac3<>Make add_handlers (for multiple hostnames) usable with static_path (which forces the creation of a wildcard handler) by maintaining a sensible order for handler groups.<>3329.25<>3
1269558577<>6326f82715e67316c0ca5012bc6397080f764eb7<>Add a warning about the experimental status of our win32 support<>3340.34<>3
1269558009<>7b458119c4b90c25bf8f9d51964653fbbe5ba104<>Be consistent in platform checks: use os.name == 'nt' everywhere, replacing uses of os.name == 'posix' and sys.platform.startswith('win')<>3350.45<>3
1269557958<>064cc4693d2bec86a6fc2eec84c90aa097b6bbfb<>Make ioloop test runnable on unix (chmod +x and add #! line), and remove hard-coded PYTHONPATH manipulations. Add a small readme for tests.<>3389.85<>3
1269443643<>3e1d57b2bde20d1d4dbbac4ab1ba64bac333e2e1<>Fix for raising an exception; Fix for waking loop; Added test<>3380.24<>3
1269437123<>73fbe2843dfbc950f2264676f9d3f054fef39217<>Merge branch 'master' of git://github.com/facebook/tornado<>3621.37<>3
1269392000<>e391fd289ed085671344504cc5b1fa84f5a3c774<>Use per-module loggers instead of the root logger.<>3329.47<>3
1269390674<>e340491473498e7b67fd0e9e2e2a31d6b16ee20e<>Add __slots__ to ioloop._Timeout to reduce memory overhead when there are many pending timeouts.<>3856.18<>3
1269354586<>9f4c6af84ac58b903cb500249bb20bac13b87d62<>Implementing suggested changes<>3858.91<>3
1269354274<>ae7f90bf5b2146cdec2a3da41bb7dc4cb14c3f85<>Merge remote branch 'upstream/master'<>3368.19<>3
1269300905<>33a587b0d5dc22c4f124734acca904759123a453<>Don't put wsgi response headers in a dictionary to support repeated headers with the same value (mainly important for Set-Cookie)<>3331.21<>3
1269112842<>7fda8c5d381b293d8c8b632b7dd007d8533ba9a0<>Don't set the etag header if the handler already did it.<>3358.81<>3
1269022856<>bce36a7c1aa9d2eef490a87745d3eda7282af7d1<>Add a callback to handle headers in httpclient as they come in, so they will be available for data handled by streaming_callback.<>3356.36<>3
1268944069<>70fb42d6a0b5e4fa2eed4d3aa4c795b957798e19<>Add a close method to AsyncHTTPClient.<>3350.08<>3
1268878953<>03308b1a7dad63d5ff12155d097fb6ee110a4cf3<>add a template_loader application setting for using custom template loaders. a slight refactoring of TemplateLoader's load method to expose some internals. also, add a reset method to the loader that's called in debug mode to flush the template cache.<>3561.65<>3
1268877097<>8359c05ca061ba012805e7ba74da1f9dde73941d<>Support named groups in url pattern regexes. Note that either all or none of the groups to be passed to the handler must be named.<>3332.08<>3
1268876912<>fca7c831341b864916c6c97bdbdb2f95d95b2c12<>Allow more than two consecutive curlies to appear in templates (and use the innermost). This was previously a syntax error in the generated python.<>3361.18<>3
1268875743<>8c096b231ccf3285b5384bb9b03b24a4a4821bd7<>Combine repeated headers with the same name into a single comma-separated string http://www.w3.org/Protocols/HTTP/1.0/spec.html#Message-Headers<>3331.42<>3
1268863157<>40ce72c1c6339da37d0081c1e5ec35cce0ee8a89<>Replace all tabs with spaces.<>3371.09<>3
1268536106<>6d070f77c2a694ba5739e50203b7f88170783ed1<>updated the gitignore to include files generated on installation<>3383.92<>3
1268257236<>6704dc99a073ed7f6c30400d4bc7dd875f345df5<>win32 needs to open the files as binary<>3354.77<>3
1268257190<>bec0552eff1160c601c3c96adaf03bc78d9845d8<>Trying to better re-use code<>3709.81<>3
1268257078<>248c57809fe62af118aee451d82ec14a7939d8e5<>Merge remote branch 'upstream/master'<>3364.63<>3
1268155043<>d2ca9ad61850dd716ba07fb2a5c7636d1e0edbcb<>Fix bug with IOLoop's 'waker' pipe which rendered it ineffective on linux and mac (where pipes are unidirectional) and caused high cpu usage on solaris (where pipes are bidirectional). Thanks to Jari Ahonen for finding the bug.<>3872.34<>3
1267994872<>45f76c518eaf032c40fd39cc1384577742e5dd4d<>In finish(), test if chunk is None rather than using truthiness to decide whether to call write().<>3372.96<>3
1267735173<>8637a738ef1bd3d4236f64329d4956b641edc1a6<>Set the close-on-exec flag on file descriptors used by IOLoop (epoll/kqueue and pipe) so that long-lived autoreloading processes don't leak file descriptors.<>3323.13<>3
1267732338<>f4359bc12864f0c5dd5d4f92403c8c19c34e5f8c<>Use a WeakKeyDictionary instead of a regular dictionary to associate IOLoop and AsyncHTTPClients. This prevents leaks of memory and file descriptors when one process (in my case a unit test runner) create many IOLoop/AsyncHTTPClient pairs.<>3359.77<>3
1267672485<>d42334e3197680e988805c8201fcc6f09abb1366<>Allow subclasses of IOLoop to override the default logging of uncaught exceptions in callbacks.<>3364.46<>3
1267665768<>a0af68cc04aeb68cc98b8452524c4bece108b0cf<>Ensure that self.io_loop is set in HTTPServer.start(), so that HTTPServer.stop can clean up correctly.<>3366.15<>3
1267499884<>62cdb36b6c97100bbee827b2fd73bd74e4b72a64<>Revamp logging configuration.<>3351.29<>3
1267230981<>61f0fafe4bc8d5aa077767ef6c3dcebd9acfc34b<>Call the close() method on the wsgi response object if it exists. This is required by the WSGI spec, and cherrypy leaks memory without it.<>3377.29<>3
1267222089<>f6266ba8064bbd5e0a73fa3b921624fd9ad551f0<>Add SERVER_PROTOCOL variable to wsgi environment. This turns out to be necessary for using cherrypy in a tornado WSGIContainer.<>3361.62<>3
1267207887<>1ae186a504224e9f6cf5375b56f8e26e4774e2a0<>Add exc_info parameter to start_response() in WSGIContainer.<>3357.86<>3
1267141748<>c5627d2f1613f6bf60c826bfbb84eae08f1c98e6<>Work around an odd error I occasionally see in autoreload (which causes autoreload to loop endlessly without restarting the process)<>3331.49<>3
1267058231<>f9cda8634bf80bf6978bb443561ae9304e476fee<>Add a workaround for a bug in os.execv when used on Mac OS X versions prior to 10.6 when there are multiple threads in the process.<>3355.98<>3
1267053519<>010271d7eca811f1540c8eda20d3d2d3c06feb10<>Always reraise KeyboardInterrupt and SystemExit whenever IOLoop tries to swallow exceptions.<>3792.94<>3
1266353603<>15ceda22784752436f96d7af254705010177ae0c<>Fix ioloop._KQueue to work correctly when listening for both read and write.<>3352.75<>3
1265394297<>ef83f4b6cafabbc3183db061c03faf5cf58d6808<>Support passing in cookie value directly in cases where you have to parse the value from other sources (e.g., from the URL for Flash requests). Also fix documentation error for Facebook Connect.<>3342.63<>3
1265318323<>7ffb44237fdd655a7650805dd51f126b5bfd8b8a<>Don't set content-length in StaticFileHandler unless we're actually sending the content. Some browsers get confused by this (e.g. the version of webkit embedded in fluid, but not the version used in chrome).<>3368.83<>3
1265270529<>c1be85fcfe3d5a841be3bfe99b0c7b714a0dd4db<>Add backwards compatability for secure cookie reading<>3352.40<>3
1265269880<>4daeb8d880204f5baa64fc958654da9dff60ae0e<>Simplify JavaScript path ordering patch<>3361.58<>3
1265240945<>a34dc422e25fbfd8704e652ff787e87a385f2f6d<>Import setuptools if it's available.<>3333.96<>3
1265240812<>ae1ed23421ffefa27fac765003cca41026bb971d<>Making sure StaticFileHandlers get first, if not, a catch all handler would break the static handlers.<>3322.91<>3
1265228324<>3e9a285af0a7c4f3c7fa4a512bd9f6191995194b<>Include cookie name in signature so that a value signed for use in one cookie can't be used in another. Note that this invalidates all existing signed cookies.<>3362.57<>3
1265228248<>efbc2e09b9e9fc28f3919f44df0c14c1bef2b41c<>using os specific path seperator<>3368.61<>3
1265227869<>8aae3263dd9ec9271d27a1b0aa4f04e8d6278d12<>Fix for maintaining script inclusion order<>3582.03<>3
1265227676<>0984e008c96a5157755e00765ee41532b01a65a1<>Added the ability to stop an HTTPServer. Mostly for unittesting.<>3346.48<>3
1265227603<>74f75616c15c225e1bf717f96c93bc67af5e5422<>Stop parsing arguments after --<>3381.27<>3
1265227503<>20361993368b87c607d450484d32bc305dbd2146<>Fix EINTR exception handling for non-english locales.<>3352.33<>3
1265227017<>8186101e6530dcc025b714a7e8ee3026f5fa3665<>Set headers earlier in StaticFileHandler, so we return the correct content-type with 304 results (instead of always returning text/html)<>3331.07<>3
1265226572<>77eb5867e1473d3e575cc314277b3746947c2958<>Add static_url_prefix setting to allow serving of static files somewhere other than /static/<>3347.65<>3
1265212981<>123771a096b228e869028c848e44e9d32456c4a9<>Added support for running Tornado on win32<>3349.65<>3
1264725860<>e30e28bcfb9a8880bc1889c425e36f1c1476e930<>Add a hook to allow applications to modify the curl objects directly.<>3370.11<>3
1264667302<>b6ad0f6323a4b67f6aa38f004af88f683cba343b<>Merge branch 'master' of git://github.com/bdarnell/tornado<>3369.72<>3
1264664772<>a2adfa1f997e6ad731c0d8da81dfd9831e4d4999<>allow connect and request timeouts of zero<>3333.72<>3
1264664117<>47db027764c32e097353f1119a80c04b6b0d0b79<>use self.headers for cases where no headers were passed in<>3459.27<>3
1264194591<>a1991136fdab2700c627cb94ac8f9d4db9cc5dca<>Make parse_command_line initialize logging even when there are non-option arguments.<>3374.98<>3
1264194513<>adcc1039942ce756a1eb9ebf872d0b7483cbefa1<>Merge branch 'master' of git://github.com/facebook/tornado<>3353.25<>3
1263843579<>1e291eb5092d232d84be5914429808aa24c9ee9d<>Add HTML 5 WebSocket support (see http://bret.appspot.com/entry/web-sockets-in-tornado)<>3342.91<>3
1263791544<>fb66140dce8e002ffc10e5d6985df9e3e3f9225e<>Fix httpclient / epoll interaction errors, per http://groups.google.com/group/python-tornado/browse_thread/thread/276059a076593266. Thanks everyone for the patch and discussion.<>3350.90<>3
1263616062<>57ec818a3f8ab56dec1b6cf585fa7c8c4d6ab80a<>Catch both IOError and OSError in another place.<>3358.54<>3
1263609720<>8c2429dbd3472d651a03839bd2568d30b1ed7c8d<>Catch IOError in addition to OSError in IOLoop.remove_handler (friendfeed's epoll module throws OSError, while the one in the standard library throws IOError)<>3372.89<>3
1263467278<>7e3ace860790c80ef2170ede1ef57e5955727515<>fb demo fix<>3313.51<>3
1263248247<>c436d7aa8df246dcb9e70a6a16fe558618c60d13<>Fix new connection close handler for WSGI handlers<>3339.54<>3
1263239601<>9107b6be2bffe4bcaf8cd47cf79c6d792cdf71d4<>Add reverse_url to RequestHandler class as well<>3349.68<>3
1263236543<>7014417608d03e7af2c7aba58ba358d8657a24a2<>Merge remote branch 'bdarnell/master'<>3341.06<>3
1263234701<>e4c6eec2114d2d95e48762dc8099b364e0a4e23c<>Use time indepdent compare for secure cookie.<>3913.54<>3
1262919971<>1ea5df5e6f44bb3b98c830535319a92c386cda93<>Add a method to RequestHandler that can be used to detect when the connection has been closed by the client.<>3364.44<>3
1262919227<>d877a65d471f5a52ea7109897d6c4294de6f5cb4<>Add a kqueue-based implementation of IOLoop for BSD/Mac systems.<>3918.70<>3
1262051700<>52d20a0dafe207a1f8da03b2be73b0682209b1c2<>Don't try to write to a stream that was closed out from under us. This should get rid of all the "exception after headers written" spam in our logs.<>3910.18<>3
1262050025<>6ee22230f8e657591ef3cd5d3dda8e9b36125786<>Add httpclient support for the delete method.<>3916.48<>3
1261011697<>3ab63905aa3801b0ab11becb145366964a18e896<>If IOLoop.stop is called before the loop is running, make the next call to IOLoop.start return immediately, so that one call each to start and stop will result in the loop not running rather than running infinitely, even if the call to stop happens first.<>3892.71<>3
1260832886<>22d840ed1d3728dedd2344f1194b1f89f20cdd83<>Added kwargs to get_error_html in the RequestHandler so that downstream actors can render or otherwise use the exception object thrown. This is a backwards-incompatible change for anyone who has overridden get_error_html().<>3895.89<>3
1260407238<>4381df04e70452e3ebf15c925031f477da0a6c30<>Use empty dictionary instead of None as default for kwargs<>3905.23<>3
1260406744<>1823a772c08aa0f3f218f733bf98b7bf094e2ef9<>Fix missed variable rename<>3913.32<>3
1260405859<>df5c994ae0d2961f3607759e8525872bca94d43f<>Add Application.reverse_url, which can generate a url to a handler by name. This minimizes repetition of url patterns for links and redirects.<>3859.71<>3
1260400988<>9ade70501e2103dcbadc0918acc4fc195593ea86<>Merge branch 'master' of git://github.com/facebook/tornado<>3851.61<>3
1260352130<>b3d98c4a369e50eddb0411af9174b232f8b6ad28<>Add basic error checking so you can't add a server to the IOLoop twice<>4033.68<>3
1260351905<>8d4dde80e85a9d34631c68746fa0ff4372880792<>Typo in error message<>3848.49<>3
1260347043<>6fb90ae694190fcedc48d9fb98b02325826d783e<>Pre-forking implementation so a single Tornado server can utilize all CPU cores<>3891.95<>3
1260291362<>1da2b3c5c65c23f97433f9ce33fc1a70d21c4d27<>Add gzip Content-Encoding support with 'gzip' application option<>3916.93<>3
1260231439<>41a94730959d641e6c2c765ca631645327805c5a<>Add REMOTE_ADDR to WSGIContainer<>3909.95<>3
1260230008<>ce20498adb28f65d120e8daa3f3d2fa50aed9361<>Merge branch 'master' of http://github.com/facebook/tornado<>3947.49<>3
1260229636<>400d2c9f80d0e3c9652bf8df0c9d35b54cba459e<>Make WSGIContainer._environ public and static, so it can be used to adapt tornado requests to WSGI environments without a full WSGIContainer.<>4221.23<>3
1260178086<>41e46d97f5648e241f04051e3ed12bd095c04d4c<>Fix transform headers bug<>4135.70<>3
1260070610<>c50d9b8c789eb1914f31bd4dc7adbf1383c8fdb1<>Ignore XSRF cookie check when X-Requested-With XMLHttpRequest header is present<>3898.41<>3
1259870272<>5fc06caffe9a362a526e6c5480a2ebdd174eb29f<>Add a FallbackHandler class to allow use of other applications (e.g. tornado.wsgi.WSGIContainer) from within a tornado.web.Application to facilitate migration from other web frameworks.<>3836.57<>3
1259087258<>595ffa1975835c82ef21b4cfd8bc5076c292e828<>Add support for Squid proxy headers<>3912.08<>3
1256720423<>7546f8d3b21cc31ed1ec679fd093be4cb9156e51<>Ask for more Facebook Connect fields by default<>3933.73<>3
1254813230<>b5c6ccb312c21a653e29e449801ec3e8dad2dea4<>Initial support for SSL (thanks to Dan McDougall for suggesting this and code samples)<>3986.51<>3
1254454909<>718c1816e13ac71ad9cb88b597b82df41ff35db9<>Missing website images<>3987.98<>3
1254454889<>4e0a8433d9519a78fa255a1f76a01100bcc8ae43<>Fix embedded CSS bug<>3873.08<>3
1254347796<>681d4d2fabaa3df89bdb43213e7e13c917cebf40<>Add links to FB, Twitter, FF on web site<>3914.67<>3
1254297660<>b32b6b4b0435e974db8990f6cc6cf9b8daed9952<>Bug fix<>3907.34<>3
1254295960<>aa836cdf3952d52efc68201872b3a0053aca33ad<>CSS/JS embeds after files<>3859.67<>3
1253731577<>571dd056d226109592d2e05225a4c360cdc31a31<>add address param to listen<>3903.44<>3
1253551113<>50528c010ae06ff14d7c9ea2e682de6549ba4c8f<>Typo in PeriodicCallback<>4318.97<>3
1253242390<>d6e9cd5a116fe640dffe019079900c80c13673de<>New 0.2 distribution from the past week's bug fixes<>3894.77<>3
1253242052<>11503326a6ed78907aee462fc07ef0b9cdb0c8a2<>Turn on auto-reloading when 'debug' setting is given<>3885.63<>3
1253234806<>c4f682d4fef08cffb4156d9f19f2e62ccb355024<>Bug in locale.py and increase poll time for autoreloader<>3873.00<>3
1253167182<>6e1cb0ddf45c968e74db570c6c0499cb0ff321e4<>add streaming_callback option to httpclient<>3905.51<>3
1253090998<>237944d5241aedc2a281c7a17cbb08a3f18c5a2a<>Rename auto-reload module<>4076.09<>3
1253089752<>be71a24f1ae9223558152b61b9b93a0635d1a0a2<>Experimental module auto-reloading on modification<>3899.08<>3
1252977006<>dd6cadf2776ab2afec484cb7cf366f730e174647<>Auto-reconnect on MySQL connection failur<>3806.78<>3
1252975245<>f524cc6ad5b216ac42fe7e12410bddedad4a2abd<>Add gitignore file<>3907.12<>3
1252957387<>016dee1e9659297ddcaf298ae7ee1e26812e5504<>use correct module<>3895.91<>3
1252951707<>c59cf2ab0657e56ffae9908f6f651cbf893dd21c<>make logout link work<>3898.11<>3
1252946724<>2be82a07b38e8c64cb066cea158e38350c07749c<>Fix multipart/form-data for WSGIApplication<>3914.33<>3
1252946256<>91d90b2ff1c7e4901ff197a503af1732c2909953<>Get rid of unnecessary/inconsistent mixin<>3910.01<>3
1252876435<>82a2de536ae92f26f2cc89c6945fc759be0aabf9<>Add addslash and removeslash decorators for, e.g., redirecting '/dir' to '/dir/'<>3896.25<>3
1252869976<>37e671203620c8b030412666fd03283fad9fcd44<>Two minor typos<>3839.49<>3
1252865997<>8ca616088cfb26ff19fcc6f359d654fef905b8da<>Add initial WSGI container support for running other frameworks on Tornado's HTTP server<>3905.94<>3
1252772703<>9c51d01b123fed12907e7f3a5f85d19525de3196<>Don't reference Exception.message due to deprecation in Python 2.6<>3869.54<>3
1252694588<>6b07e69551f045e4632660ed20a2c66606cb92d4<>documentation typos<>4302.75<>3
1252669653<>9e24ae162d024e4049b8811d7ca19e319c20021d<>s/Google Code/GitHub<>3890.48<>3
1252618768<>f6798502befee7fa5c66696dac31b443bbb5a3ff<>Merge branch 'master' of git@github.com:facebook/tornado<>3839.69<>3
1252618763<>cdcfb26316845294178707bb235cee0ce953e8eb<>make sign out clickable, ignoring automatic redirect for now<>3842.49<>3
1252617873<>72707599e8da89bba125df14ed454562224fc9fb<>Merge branch 'master' of git://github.com/jaybaird/tornado<>3827.30<>3
1252617023<>e0526867ca0fe0e2839b46acc597fa1509150bc5<>typo<>3780.43<>3
1252615273<>41ea6da5f5cc79721614430bd0a3bcb4bb0a8251<>both links work, but this one seems canonical<>3861.82<>3
1252614279<>2fd2ad6d42f66efc6565231d08b29bdf92f257d8<>remove cases where intern is used. This will prevent a DoS via memory starvation if a lot of requests are sent using random headers<>3851.60<>3
1252609296<>19c8610eee0b669298984786083a318439e594f7<>typo<>3902.05<>3
1252608567<>2e1e2a79826999bd9d20cf4c5b60e4bce8930ad7<>Add python-dev to apt-get command per http://groups.google.com/group/python-tornado/browse_thread/thread/d88de85aa33193a7<>3789.75<>3
1252607729<>e48e2b1129be390fca684635f6f232fe26adb63b<>typo<>3843.82<>3
1252606316<>e997ac0ad9133a9768996ff3c7fe415922c9302a<>Merge branch 'master' of github.com:facebook/tornado<>3811.95<>3
1252606299<>01405d0b08e91f0ffed0a7a41af9f96e3542381a<>typos<>3866.21<>3
1252606168<>6794fced8023bcc5783589554dbd6f9db7274d51<>Merge branch 'master' of git@github.com:facebook/tornado<>3862.29<>3
1252606161<>f431c9e59701bd7d841d9401fda1895b2456ae4e<>updated tarball<>4245.95<>3
1252605146<>d9d3e9cafb016df407e15121c2390d707fb26253<>fix README<>3881.09<>3
1252604839<>e197a479bef594614e1a10a04e7b33b420005efc<>escape more<>3861.25<>3
1252604288<>e4d56d91839f74896c24cf52c987b5a82cdce849<>typo<>3854.31<>3
1252603492<>71a44bc082ab6f09d3b948f11bb6fa1585a36424<>Another typo (thanks, Ben)<>3830.62<>3
1252600189<>9a8bd2fb6fd6279be16d6f0a2e57e49fe1b98f8f<>Add prerequisites to Tornado docs<>3852.49<>3
1252570604<>98a6bd9ac795809ef2c4f7b7152d527e0f852d6c<>Fixed typo (thanks Casey)<>4290.88<>3
1252569187<>efd4666dfbb000ad067c2aab4b67a57d60ebbeb3<>No favicon for Tornado web site<>3848.56<>3
1252569051<>2afa97349330d1a224a7e4fdce0dcdf760222a8b<>Move Tornado project to Github<>3921.85<>3
1252473318<>07e5e8c43d5cec87aca862276f296af58695d520<>Wrote initial README file<><>3
1252472484<>11de50a83acb07ab3a4439b38f0153444a124381<>Created project<><>3
1291419193<>8e4a7730d3fa599aa99fdc58d911d149344eb711<>Merge remote branch 'slay2k/fb_fix_graph_mixin'<>2187.13<>4
1291184933<>a18eead89e6a31175abd60964a05da365139cab3<>Fix duplicated remote_ip field in HTTPRequest.__repr__<>2085.85<>4
1291089736<>ffe291f2eec262679c43c63c4485ac6595eb1433<>A few fixes for FacebookGraphMixin<>2093.84<>4
1291071676<>96ecb6603a10bdcf30bb238d3462ec9da0560c89<>Use request.uri instead of request.path as default redirect for auth.py.<>2081.60<>4
1291068481<>6151498dba7d55d602cbf0360df8f29b712c33a1<>Log malformed HTTP requests more gracefully.<>2091.84<>4
1291067346<>ae3cc317c2781ad515a0ad48891d65b2370982df<>Treat HEAD requests the same as GET for e.g. sending Etag headers.<>2078.94<>4
1291066455<>eededcf5d51c4e945757b0936512115cf50d09f4<>Preserve the order of css_files from UIModules, like we already do for JS<>2053.79<>4
1291065423<>00b9ee91f17c7bc8eb07999381ec3aeb3191ebed<>Expose the client's SSL certificate as HTTPRequest.get_ssl_certificate().<>2066.88<>4
1290472268<>263994e8fc5cec66a57151ca48fd959b6496e281<>Fix bug in multipart/form-data requests.<>2107.10<>4
1290271899<>b0578819e1001bd3ab3555c490e8845f79099c88<>Update pydoc to mention response.rethrow instead of reraise.<>2106.03<>4
1290204293<>9e965556ff7a343864059c35bd8517f434d5c88e<>Don't assume 'boundary' is last field in Content-Type header.<>2078.70<>4
1290108374<>cb232b22dab6754ceaab77ee47b451b3a4811a5f<>Merge remote branch 'vijayp/master'<>2100.67<>4
1290106724<>905a215a286041c986005859c378c0445c127cbb<>Set proxy to '' if no proxy is explicitly set in the request. If this is not done, curls with proxies set are re-inserted into the empty list, and are then reused. This causes connections to be randomly proxied, if some requests use a proxy, and others don't.<>2472.09<>4
1289954273<>d0620d67181714e1880b83b54ebafd6ba9f37666<>Add debug logging for queuing in simple_httpclient.<>2183.85<>4
1289953851<>08e5ba5da8d85cc22ed55d34663b61a6be470579<>Add address parameter to Application.listen to match HTTPServer.listen<>2094.30<>4
1289885571<>0b607c10badb89125118d892b176c36aacd63323<>Fixes for python 2.5<>2092.17<>4
1289884532<>a853850e26d31288941a264125b674d9def9f096<>Add convenience method Application.listen(port) so most apps don't need to explicitly touch HTTPServer.<>2115.48<>4
1289868824<>5f5e0bb3be4e522039fbbe3768109ea64cc99fe2<>Implement max_clients limitation and queueing for SimpleAsyncHTTPClient<>2079.67<>4
1289866269<>7750fe7773366d19937038d2a2fd12b66445f674<>Port pseudo-singleton magic from AsyncHTTPClient to SimpleAsyncHTTPClient<>2095.18<>4
1289774717<>f2aa302bcb044b204ae14c9b66342f483a245218<>Add timeout support to simple_httpclient<>2103.72<>4
1289768294<>8a941c42b27726aee81479be5f80b5a0d33631aa<>Improve docs for IOLoop.add/remove_timeout()<>2098.32<>4
1289332354<>31b0ab0c5d8bcc695589e89bcf9c5848c1dffdf0<>Fix typo in docs<>2100.16<>4
1289246016<>3dc7ebad62b97726795e15b11a28a8c6b4d44726<>Add Amharic to tornado.locale's list of languages.<>2089.34<>4
1289245342<>0dcee8d7dc4ad0a88562ed2676a0b95e6453e405<>Fix mangled language names in tornado.locale for Chinese, Japanese, Korean.<>2093.43<>4
1289242490<>ee55403cd4a6255f275b0f39cbc19f03accd29ef<>Support X-Forwarded-Proto in addition to X-Scheme<>2101.44<>4
1289242262<>7ed8fbe136edc91fe9d884a20e2717b64f1a43b7<>Support websockets over https.<>2120.15<>4
1289242143<>965099eda08b376e18c42dffb7dfd4b5dd79dcc9<>Support "from x import y" in templates, not just "import x"<>2204.88<>4
1289066879<>3e44643d3b89c99c6bc285b0e650ab12ee06fb16<>Fix typo from commit 2b44fac<>2079.36<>4
1288981158<>9ec87c2ba25e202fbce5ff1f35184fcbabba26f3<>Capture StackContext explicitly in HTTPConnection to prevent leaks from one request to the next.<>2106.77<>4
1288896454<>2b44fac4ecf273aadc97dbcaa5abf1e3a1ee7dff<>Check for a closed connection in _add_io_state.<>2364.70<>4
1288829551<>c467cf0274b3e2135393af4fc88683de9d930018<>fix linkify regex plus add unit test<>2340.35<>4
1288240015<>b914a94ac24c6e09003b29bc4919d028a042ed25<>Don't manually set Content-Length in StaticFileHandler.<>2385.48<>4
1288206719<>5e987aa6b2ffededbe11cda78901caa18aff32fb<>Merge remote branch 'szeim/master'<>2346.26<>4
1288205245<>88111779c9a84177b64faef6ae452d550aeaf359<>Merge remote branch 'fiam/master'<>2449.51<>4
1288179372<>2dbb05d5a09406b2369ee30661c88cd890b09e63<>SSLIOStream._do_ssl_handshake SSL error check<>2371.88<>4
1288179287<>3b486fc4f8081355fc0b87ebbf6c261692d7a418<>Fixed IOStream._handle_events (try/except block)<>2346.46<>4
1288123456<>bd4ef586e026e6bb20850215db53ced81706de37<>Make exception handling in AsyncHTTPClient more customizable<>2884.01<>4
1287702042<>af3d0b3b03bc9d0a37938ee97852ca01e20d7a80<>Add gzip support to SimpleAsyncHTTPClient<>2341.30<>4
1287699426<>d06f8f4bcd46d4f2b620ea1cb614731f4b74ab71<>Support minor HTTP request attributes in SimpleAsyncHTTPClient.<>2386.42<>4
1287698310<>3d19e10355477cb5a92d6e708445965de917507c<>Add basic auth support to SimpleAsyncHTTPClient<>2338.38<>4
1287698190<>83d623a1c5495a6f973f55df95e91495c4bb44a5<>Use AsyncHTTPTestCase.fetch instead of overriding it with a less useful version.<>2412.48<>4
1287698129<>09c0c9d772eb1e68f8be24de752eb9917d1ae79b<>Reindent to 4 spaces<>2511.94<>4
1287522815<>d47c453c5f70b6ecac5e3e8b2aa769377b05da23<>Attempt to fix StaticFileHandler when os.path.sep != '/'.<>2368.23<>4
1287522587<>fe5172768e8bb96bfa4f5af127ecbf9f173a31b8<>Merge remote branch 'mdg/default_filename'<>2386.96<>4
1287516527<>e7553f75130329446149085d877403164d3770e9<>Add test case for encoding of request parameters and paths, in response to a mailing list thread that raised questions about handling of '%3F' and '?'.<>2370.41<>4
1287516516<>11fdd479b2ff45a3071672fd483cdb4aa81783ec<>Add a convenience method for synchronous fetches in AsyncHTTPTestCase<>2402.37<>4
1287454424<>c41029217918992d8320aaaa2defd82e590d1d6c<>Add test suite to tarball releases.<>2349.02<>4
1287198174<>638a151d96d681d3bdd6ba5ce5dcf2bd1447959c<>make StaticFileHandler support default filename<>2332.99<>4
1287007129<>86bd681ff841f272c5205f24cd2a613535ed2e00<>Support websockets over HTTP proxies.<>2495.66<>4
1287003931<>334b127003fbc82c53b60289637978ac5291330f<>Windows compatibility for non-blocking IOStream.connect.<>2340.83<>4
1286931569<>f10c7176f11ee26de1aa063ee76af672ca5854d0<>Refactor async connect logic from SimpleAsyncHTTPClient to IOStream.<>2356.57<>4
1286843051<>b57bfd35ccf5c65f65b98b584b0aae0e9b48b7bb<>Reindent example in docstring, which apparently trips up emacs' indentation detection.<>2404.66<>4
1286842743<>7c7b0117cffb6abb336407e392f0ecd3b3e3c1da<>Make Locale.format_date() behave sanely with dates in the future.<>2386.46<>4
1286841735<>3ce6d3daeeeda0fc25206ef99048467307aa0cbe<>Run all IOStream callbacks inside a NullContext so that exception handlers are run in the right order.<>2390.34<>4
1286834257<>925af5045c8eeb1727837c1cc9129d14aec50e76<>Make USE_SIMPLE_HTTPCLIENT work without pycurl installed.<>2486.77<>4
1286831812<>dd5cad996e2a6a4fc43bb603e14b942255986182<>Add initial version of non-curl-based AsyncHTTPClient.<>2467.89<>4
1286821225<>5fffe5a8c738a43821c993fab2693437f229e6c1<>Limit the amount of data sent to socket.send at a time (for windows).<>2485.45<>4
1286564176<>160c961fe1dcbf44f574261207af78f382ccddde<>Move Links section from index.html to the wiki. Remove links to unmaintained social media accounts.<>2469.13<>4
1286562352<>b19953441d88c43b8ba6efd3ed40526c5049d2e3<>Fix StackContext in IOStream. IOStream._handle_events now runs in a NullContext, and user callbacks are wrapped on entry to IOStream.<>2445.10<>4
1285882873<>f732f98063f8a0bf9f7e331876964bedbbdc8462<>add a linkify() function for converting text to html with link detection. Also changed xhtml_escape to not convert return value to utf8, since pages should be assembed in unicode and not utf8 encoded until they are ready to write().<>2927.15<>4
1285729902<>75bfe842c5afe8945ee0635ac431b27de6202f6d<>Handle IOStream.read_bytes(0) gracefully.<>2942.30<>4
1285729856<>e210a644aa982bd6502726a900c79ebdcbe8fdc2<>Make AsyncTestCase.stop() prefer _arg over **kwargs, even when the former is not truthy.<>2944.46<>4
1285713981<>8ecaa43734085ed445ebf7ae70f5be280962e943<>Remove references to async_callback from documentation<>2899.04<>4
1285621832<>1221865747ecfde69a0463b9a0d77b3c5b87f320<>In the select()-based IOLoop, always listen for reads so we can tell when the other side closed the connection.<>2918.78<>4
1285616780<>8300c7ff93227a8cb3ef93b8b2cf8931949beb1c<>Close the IOStream when the remote connection is closed.<>3066.09<>4
1285614283<>b02a31b668af71160c84b1c95a22e1035d9c218a<>Factor port-selection logic out of AsyncHTTPTestCase so it can be used from lower-level tests<>2905.23<>4
1285353753<>7a7e24143e77481d140fb5579bc67e4c45cbcfad<>Make StackContext more usable in libraries by reducing the need to explicitly use IOLoop.add_callback or NullContext.<>2915.48<>4
1285259852<>4973e296ebd68bdaf5bd7fc51186b56c6c69bc91<>Update installation instructions in README.<>2916.17<>4
1285096502<>a1d94db451e57301e2f97d7c33eae6a84592d078<>Fix default_host redirect.<>2954.26<>4
1284841350<>9f529b89863da8c5d8d5011f8d968e094fc2065f<>Fix improperly-renamed variable in set_blocking_signal_threshold<>3132.83<>4
1284760003<>81a3eae5e63eb48f5b42941e5394d58cd7e0f994<>Make xhtml_escape available in the template namespace under its own name in addition to "escape".<>2946.26<>4
1284759945<>625a9bef1adae3d075ac098418f70b5603b83b29<>Move cookie-signing code from set_secure_cookie to a new method for non-cookie use cases<>2929.76<>4
1284746563<>8c4fb07636133586366e195eece8e0254484dd8c<>Document the entire template namespace<>2935.35<>4
1284682504<>f46cfa423869157ce6752d80155ab949bb2044b6<>Generalize IOLoop.set_blocking_log_threshold by allowing user-specified signal handlers (via a new set_blocking_signal_threshold method).<>3038.20<>4
1284672563<>f6f7f83719a48083f3e5ed999e19c0ec67de9b9b<>Refactor IOStream reading logic to fix problems with SSL sockets.<>2886.66<>4
1284494682<>7b17caa0be878ebe1e5a796385c66190c5085c16<>Fixed another two win32_support import<>2843.62<>4
1284494682<>0e21608e86cc85defa265323cb8a50e6337d3d41<>Fixed win32_support import<>2889.34<>4
1284494682<>dbd0051a87aa03c9af6ef235309999c300c63260<>Added binary flag to _waker_reader and _waker_writer<>2921.72<>4
1284494682<>a1b5c33b40ffe87649eeb9aa126e622097479119<>Replaced map() in web.py with for loop<>2856.97<>4
1284494682<>4118b8e7d3a56a3b6d5ba72d900349c58ac91595<>Changed e[0] to e.args[0]<>2881.55<>4
1284486176<>fb08c11bc0011db1120a4f312f83e3ac71c1a202<>Update docs to mention requirement of pycurl 7.18.2.<>2866.18<>4
1284410474<>8dd551b9cd4cde1935f1c48378de1bcb2cb073b9<>Merge remote branch 'fiam/master'<>2877.71<>4
1284402652<>a352f5ed45e2c8647e87fecd9e9612f85aa45336<>When forking multiple processes, properly initialize the random seed<>3039.62<>4
1284402510<>98e4344fe66663d690003b39af3ac5808e499623<>Avoid raising a KeyError when there's no session expiration date<>2882.64<>4
1284401926<>6e1dbe248cdc6012ffa8feae71726bfef5c2f091<>Fix calls to getattr (which, unlike dict.get, does not default to None).<>2863.15<>4
1284052007<>34f04945a9d4e88b451f3af6ac068b3ccee21184<>Add download url to setup.py for pypi<>2876.50<>4
1283983581<>9163e3470da3bb82f310ad00925af8e92188a381<>Check self._running before rescheduling a PeriodicCallback, so stop() can be called from inside the callback.<>2897.54<>4
1283904312<>2338348edda61c663fff8a7f6f77cf489bf63de6<>Bump version number to 1.1<>2885.67<>4
1283904170<>afb82f686850116e4d3b360222c73e43a7e06ea5<>Disable SSL test on versions of libcurl with blocking SSL handshakes. (using gnutls instead of openssl and libcurl < 7.21.0).<>2863.05<>4
1283900482<>bb8d2fa458dd565b88db4e2185062f641864e990<>Disable SSL test on python 2.5<>2876.10<>4
1283900464<>2e288577a1145901dc7b4fbeaa4fd9ff6dc06ccf<>Use the older name for threading.activeCount for compatibility with python 2.5<>2910.77<>4
1283897961<>e6d93d9350c55d245c871b2558553c33eb74a68d<>Fix error in comment<>2997.47<>4
1283797449<>6d7e515ea490f1ab587fe7fa10bee001ac2f2dbd<>Fix typo in websocket.py<>2904.95<>4
1283756452<>8e34c59edd9a72fdc4be9f16074aaa3f1c3ee9cf<>Remove superfluous lambdas in tornado.escape.<>2905.39<>4
1283657939<>93fc3d0935e11ad1056e1a4cf3826935faebb0db<>Document why RequestHandler.write does not convert lists to JSON.<>3034.07<>4
1283627986<>890d829171e1c33e7b570d1a2a5a911bb45e47e2<>Add more documentation for request.files.<>2884.03<>4
1283626588<>5b9e79e733108bf983d22237587d7b6e782af0db<>auth.py updates for OAuth 1.0a and 2.0.<>2870.18<>4
1283380052<>d1b58414e0b0b239d620e4ae623680c8d73b71d8<>Remove the statement that tornado has only been tested with firefox.<>2883.09<>4
1283379417<>0aae8f9052b8b05059cfbe4f94972beb28b4f9b5<>Remove __del__ method from HTTPResponse. Closing cStringIO objects isn't really necessary, and the presence of a __del__ method prevents python's GC from breaking cyclical references (which happen on errors as HTTPError and HTTPResponse refer to each other).<>2839.26<>4
1283195901<>aab1be8bc885494f43680b2fc492dd224f68816b<>Update class docstring for HTTPServer.<>3007.56<>4
1282863814<>2ccfb35ff2604b35956a62c54bef23e5dac403f5<>adding support for http method OPTIONS used by firefox, safari, for cross domain<>3067.90<>4
1282848761<>b4c5aba7c2d00f929a1d1d16577aa5e2b6fc5d72<>Fix reference to slice.indices.<>2899.81<>4
1282848049<>86667742944aec95bb909876be486ca278254e5a<>Document the limitations of multi-process mode.<>2872.64<>4
1282847546<>c4413f5b636da2ac00d1d4d56805bc38d65ba47c<>Document the fact that add_handlers should only be called once for each host_pattern.<>2898.86<>4
1282846210<>318ec31c3d164361e99eac654a41eeb95f37f6be<>Set pycurl.NOSIGNAL when multiple threads are detected.<>2910.25<>4
1282781864<>fcab3583c051093d6f59baee420cfeace91ba0aa<>Set PeriodicCallback._running to True in start instead of __init__<>2903.15<>4
1282780442<>803f33c153408076c1493300acc8010c656e7197<>Add a tornado.version variable, and use it anywhere we use the current tornado version to produce a Server: header.<>2887.67<>4
1282779281<>3f0740c89428f0a6482f93876c1603b5a17c61e8<>Check in Jacob Kristhammar's updated websocket implementation.<>2838.90<>4
1282775661<>e571668d8947ac5f2e45aa21cb613b64eca022ed<>Add more documentation of overridable methods in RequestHandler<>2846.09<>4
1282761404<>1580728fe85d2b42ca54c88b876a452192f8abee<>Move AuthRedirectTest from httpserver_test to web_test where it belongs<>2913.47<>4
1282761189<>b398a816743db473a7f4373c251225c4d9be299e<>Add a test for HTTPServer's SSL support<>2907.15<>4
1282761130<>b3e953ea0a0bedcb6e6cf2137c8de8299a5dbe1b<>Don't swallow SSL errors - always reraise or return<>2915.85<>4
1282242315<>9d605f2bb21dba9a0b0b2c974fd173b98e93157a<>Make the SSL handshake non-blocking.<>2868.71<>4
1282240667<>252a2bb92d24e0c095d4e39cecf516e335f1037d<>Merge remote branch 'tomhsx/proxy-support'<>2909.44<>4
1282240329<>4e10c31fe8307f0e532eb2783dfad299029df11f<>Add HTTPServer(..., xheaders=True) to the web documentation.<>2890.53<>4
1282240088<>55b4eae8af9aacdab74ecc0f16dff369ddc7e00a<>Add a links section to the website<>2894.21<>4
1281937036<>00f9e48d2a2729970c51d8127968bc0e2f124533<>Added proxy support to httpclient<>2903.45<>4
1281921462<>51d6ba42dd0cd260c28d6feec1357712201f76f3<>Suppress tornado's default logging setup if there is any existing logging config, not just --log_file_prefix.<>2903.08<>4
1281921108<>221058e1cb9d8b424efd5b6af40768537f26060c<>In LogTrapTestCase, leave everything alone rather than throwing an exception if the logging config is not as expected.<>2920.87<>4
1281920674<>551ea94d2475f6702f652e49698a20be97c26b2e<>Initialize member variables in AsyncTestCase.__init__ instead of setUp to avoid masking the real error in _stack_context() if run() throws an exception.<>2882.27<>4
1281736143<>33fe4a4e9090ea0fa48f14d6ee849c81d439a124<>Fix another link to 1.0.1<>2882.54<>4
1281721910<>0ece9ed61f9fb94f68e44ea3a32fd82d7bd80c02<>Check in symlink to tornado package in website directory<>2873.14<>4
1281721837<>d8b265dd8a7da0621ec134d0fb98c8d401dda6e0<>Update links to 1.0.1 release<>2906.04<>4
1281719966<>bbc1ef1288c3b58f51b493217e4bd9dac04fde67<>Test case for secure cookie change<>2940.95<>4
1281719908<>a770a7cf6c2b0a4703cf29f419c400266fee1530<>Check for far-future timestamps in secure cookies.<>2914.05<>4
1281684863<>8d607129d9bd13da2a76d3a2acc656b0122e1e5f<>Add future import to fix tests on 2.5<>2915.56<>4
1281551680<>db3d021921fd7f55ccb018f165f634e332646ced<>Add a mention of on_connection_close to the html docs. Add a warning about proxies keeping connections open.<>3031.77<>4
1281474018<>41c14b82c41de817c0b4ab7a4e721f32cb71ac54<>Remove the ability to pre-bind parameters in stack_context.wrap.<>2913.82<>4
1281473852<>9d4444e341f4fc16fc9373526fe95bbf0c5a930f<>Reindent everything to 4 spaces.<>2906.99<>4
1281473513<>02d07def3ac3e9f553a9d69e5f63029aed29b50a<>StackContext should not re-wrap previously-wrapped callbacks.<>2858.83<>4
1281389612<>cd888f2f00228d8154c3ec043a1488dad5e07803<>Be less picky about line endings in headers in httpclient.<>3069.91<>4
1281388353<>00ce7d4d996ff4c5e19748a5582142fa53de33cd<>Add a simple main function to httpclient.py for manual testing<>3017.40<>4
1281387708<>fef1129b1668853fd854345a3b3ba3fcfd306ad0<>The periodic call to multi_socket_all needs to be followed by _finish_pending_request or else those requests won't be finished until after the next one is started.<>2998.72<>4
1281136144<>91c1bcba8ff213adcca8d8769ea7cc6b7f702023<>Record more detailed timing information from AsyncHTTPClient, and make it available as HTTPResponse.time_info.<>3003.51<>4
1281125534<>98d4126169836f498b892345137dbffa92024b9a<>When login_url is absolute, use an absolute url for the next redirect.<>3052.51<>4
1280972862<>ae3c35454787d0e5c071e9485872f9390a8bd406<>Use the right IOLoop in AsyncHTTPClient's PeriodicCallback<>3202.21<>4
1280968927<>e5bd0c066afee37609156d1ac465057a726afcd4<>Use POST instead of GET for OpenID check_authentication.<>3019.70<>4
1280968824<>becb5f270336ad972b23f2e703de677f8ece30b1<>Suppress libcurl's magic "Expect: 100-continue" behavior.<>3034.32<>4
1280968220<>8995f5a0f93717e27e01fd1de2e7ab8f54782276<>Add a brute-force workaround for the class of libcurl bugs that cause file descriptors or timeouts to get silently dropped. (the old fdset/perform implementation of AsycnHTTPClient had a similar workaround).<>3041.92<>4
1280955634<>0875b784d10927629eccc4b371f10cd16753f401<>Fix a typo in docstring<>3045.10<>4
1280948525<>2aa8927314d8bfd2e190d04bdd7642b85983411f<>Parse form bodies on PUT as well as POST.<>3013.79<>4
1280871345<>805ac65dc85e6c0f90d880135219fc88ceb31ed4<>Work around the "MySQL server has gone away" issue by closing and reopening connections that have been idle for too long.<>3219.72<>4
1280870484<>9a083095ffa709fc0531a7deb2d16e149b4ebd37<>Use the more portable multiprocessing.cpu_count() to detect the number of cpus where available (python 2.6).<>3041.27<>4
1280535773<>8c17e79bdd115c708dad6429e031dc2a4b7eb3bd<>Add a workaround for missing multi.socket_action on older versions of pycurl.<>3034.70<>4
1280533633<>293d15d55993282863904af5621b83ed7532a43d<>Only catch pycurl.error, not all Exceptions around a call to multi.socket_action.<>3030.87<>4
1280524897<>252cb1c00b999e05b0f0041829bdbbf9905b6617<>Docstring updates<>3188.21<>4
1280455710<>6df410aa53261f56d6ec0aa336c9578c246277f8<>Fix a StackContext-related bug that was causing exceptions in callbacks to result in timeouts instead of making wait() re-throw the exception. Add a test to verify that this works.<>3073.67<>4
1280455273<>b260c92d17eba13403ec4a40edba8aa12055bc7a<>Add __future__ import for python2.5 compatibility<>3002.05<>4
1280455206<>66f94d2c13ce501027106df7449d48485a132820<>Update test_ioloop to use AsyncTestCase. Rename it to ioloop_test and make other stylistic changes for consistency.<>3078.44<>4
1280454798<>15e5bf08ed8ba620d3118816722e3ecad175b916<>Add a test framework for IOLoop-based async code<>3038.96<>4
1280448220<>28adce306aa583e92a5245bee7f449345e4e5cc9<>Make all internal imports of tornado modules absolute<>3025.01<>4
1280171040<>83864d60198c001cbe53fad657a42c2a7777ad1b<>Add an initialize() method to RequestHandler for use by subclasses.<>3031.76<>4
1280170145<>dbfdf46c94dfe0d1900c459b1cdef3f26ba5e5be<>Remove unused transforms parameter to RequestHandler.__init__. Transforms are actually passed in via _execute.<>3064.52<>4
1279913708<>721e25d0acc68d751073261bec150ac12a9f88ab<>Introduce StackContext, a way to automatically manage exception handling and other stack-related state for asynchronous callbacks. This means that it is no longer necessary to wrap everything in RequestHandler.async_callback.<>3033.14<>4
1279908776<>94f073b7a209d04b463ea3098ab89bbabb8ba7ca<>Remove the old AsyncHTTPClient (fdset) and make AsyncHTTPClient2 (socket_action) the standard.<>3349.69<>4
1279842981<>eb5b3d8df7a305ac1ffa0a12c813e5d7ee4d6cd3<>Set version number to 1.0<>3548.94<>4
1279842980<>d90ba2e0da31a8f12b0930a8c6b9c3ef35697a69<>Remove old release tarballs and redirect previous urls to github<>3304.79<>4
1279836805<>22f452569cabcbfb5b396e01d3708437cd267571<>Move download links to github<>3313.26<>4
1279834147<>0bb985a8d4f1d8be46e06107ac0e8ecb206cfc3b<>Remove websocket.py. The websocket protocol has changed in incompatible ways (and is still not yet final), so the version implemented in this module is not compatible with current browsers. This module may be reintroduced in the future when we have an implementation of the new protocol.<>3275.27<>4
1279832861<>7a288245dc49589f84c45d25fbe4320185cae7d0<>Update installation instructions.<>3244.10<>4
1279646725<>2c89b89536bbfa081745336bb5ab5465c448cb8a<>Accept None (i.e. unmatched optional groups) when extracting parameters from the path.<>3262.52<>4
1279593582<>ad104ffb412dbbf66da0bb67d5e48d8907a7b17c<>When no json library is found, don't throw an exception unless json functionality is used, to make the simplejson dependency optional for python 2.5 users.<>3310.47<>4
1279570168<>ea032b6c9c8dd5ff370057a73a762d4a7af1e897<>Check for EINTR in a more flexible way for compatibility with older pythons and poll implementations.<>3498.14<>4
1279156336<>7a30f9f6eac9aa0cf295b078695156776fd050ce<>Fix typo in support for multiple ui_method/ui_module containers<>3307.24<>4
1279150852<>c78ab55dc07a137b8eee1f8e09857102bcb19e98<>Better timeout handling in AsyncHTTPClient2. Tornado and libcurl may use different clock functions, which can cause timeouts to be delayed (in some cases until the next fetch is started). This change resynchronizes the schedule after each timeout call.<>3541.08<>4
1279122246<>64d8d4e5080b4ee75b842b77eaf4c3deef9a8f42<>Fix small bug in database set up.<>3321.43<>4
1279009732<>e2181b035b216c60bd1b67736ca334562c0e9c84<>Make iteration over sql fields clearer<>3265.05<>4
1279009561<>a9090a97f49dbcb93653c259d831e5124a154574<>Remove unused imports and variables<>3302.85<>4
1278724512<>b42c61c88ebabbd20ba3bb6d797ff73249ab2b07<>In AsyncHTTPClient2, disable IPv6 for versions of libcurl with the socket-reopening bug (i.e. <= 7.21.0). (this can be overridden if needed with a prepare_curl_callback)<>3316.63<>4
1278706063<>557da3db1c912039bda9d0e54717e4bd23af8c9c<>Unquote percent escapes in captured groups in the path component of the URI, to be more consistent with our handling of query parameters.<>3317.27<>4
1278705421<>455eb75b18afbe625c8a2fe97c1a9888ef09ed50<>Revert "Parse percent escapes in the path component of the uri, to be more"<>3365.49<>4
1278638863<>7b80c2f4db226d6fa3a7f3dfa59277da1d642f91<>Parse percent escapes in the path component of the uri, to be more consistent with our handling of query parameters (especially important when capturing groups are used in the URLSpec regex).<>3326.71<>4
1278634460<>a7dc5bc4b463c90c41355c9d8d54e82fd39cee5f<>Consolidate the various HTTP header dictionary classes into one, which includes better handling of headers with repeated values (e.g. Set-Cookie)<>3304.98<>4
1278629564<>e98735bf4b35688aadeaffbfe1fc6ad636ebc318<>Disable preforking by default in HTTPServer.start().<>3773.04<>4
1277743966<>2ac7426855dd06ee6daad69985d6ad5f62b26437<>UTF8-encode more user-supplied strings in httpclient (headers and user-agent)<>3693.70<>4
1277593226<>52c378f7f8bcddbffa521bec93d02b61425f062b<>Update the set of active file descriptors immediately after calling perform instead of after running user callbacks, since those callbacks might have started using file descriptors that were closed by curl in perform().<>3808.31<>4
1277590575<>33c3f8d28bfda17e100a5d4f77880bd017e56807<>Include the HTTPResponse object as an attribute of HTTPError<>3720.77<>4
1277341290<>60ef8d5d909d25f4c1c5e35bef199b0799cd264e<>Remove unused "overwrite" argument to options.parse_config_file<>3717.63<>4
1277137767<>e7654cda9cc288201d8db116225e45212eaf597b<>Fix typo in comment<>3729.35<>4
1277002540<>1ba0161e384eba2ec65a9cd5f5f4a677f7e98bd0<>Add a second implementation of AsyncHTTPClient, using a new libcurl api.<>3766.46<>4
1276901959<>df0d88eb8d3eef5f2fe351676ef1500e115e3131<>Close wsgi responses correctly - the close method, if present, will be on the result of self.wsgi_application() and not on the list of output we're building up.<>3770.39<>4
1276206597<>39ac6d169a36a54bb1f6b9bf1fdebb5c9da96e09<>In the libcurl file descriptor limit hack, log to both stderr and logging.error since they may got to different places and one may be more visible than the other.<>3743.05<>4
1276022923<>27171cde844065591b160e1a1193f563cd0f4e57<>Catch and log exceptions from user callbacks in AsyncHTTPClient.<>3776.45<>4
1275896639<>b8271f94434208646eeec9cf33da703d97c5364e<>Fix missing import<>3774.48<>4
1275287972<>d1e145039c40b0b50d8dac63c3ebaf53b8b5c8fa<>Optionally allow nonstandard http methods to be used in httpclient.<>3745.00<>4
1275287972<>d5a3d8a027306426c9d722219f52b71cb6816244<>Changed it so one can access the StringIO buffer<>3787.07<>4
1275287972<>6f6c95054fd98998aa47bd1dbed3c1e9a81b33dd<>Clear the close_callback set on the IOStream by RequestHandlers in finish(), so that the close_callback does not prevent garbage collection of the handlers.<>3835.78<>4
1275287962<>5d430b100abaae34f9241af0d21e86622715d5a7<>Close the socket on uncaught exceptions from iostream handlers.<>3291.07<>4
1275287930<>2b0684028a9ca38318ce5038fa611e7274576e22<>Improve parsing of multipart/form-data headers.<>3344.04<>4
1275287930<>982554e710344b498887020071b921a3e63a17ac<>Added RequestHandler.get_arguments(), which does the same normalization as get_argument() but returns a list for repeated arguments.<>3336.16<>4
1275092759<>548bd70d7ba3463331911225d33cfa8f706bdbd5<>Update documentation for WebSocketHandler<>3330.09<>4
1275092212<>70a377088a2a589cb1433a508fc6ecec3c053c18<>Revert "websockets: continue listening for messages after parsing completion"<>3327.97<>4
1274823410<>7f8725c718e2614536bf48638b103f1fca033ba1<>Allow StaticFileHandler subclasses to set additional headers on the response<>3324.71<>4
1274812842<>57a9ac031a86aa1389144ea06638b5550d525b3e<>Don't try to compute max() of an empty sequence (which throws an exception)<>3350.40<>4
1274753191<>d6002cafa15847cf4eee96832a96382113901e36<>Add a hacky workaround for libcurl's FD_SETSIZE bug. It's ugly, but better than undefined behavior.<>3348.34<>4
1274388603<>b9a9ccc38841fcb9f8486e0d2854d570c34fe4c8<>Make it possible to override template_path at the handler level<>3799.07<>4
1274063706<>0c363662462e0408ba10bc2fb831066cf27fea63<>Use a lambda instead of functools.partial for pycurl.HEADERFUNCTION. Older versions of pycurl (including 7.16.2.1, which is the recommended version for Mac OS X 10.5) only work with real functions, not objects with a __call__ method like functools.partial.<>3294.10<>4
1273456474<>e8dec4d0b0431c4826188a0ac2d550cc0b01deaa<>Merge remote branch 'dlo/master'<>3329.57<>4
1273456309<>f0a3d8950b497b03755cdc15f3a456526956cb63<>Translate </ to <\/ in json output to avoid issues with the string "</script>".<>3299.92<>4
1273455966<>26af9e40e012dc6005a59921e6f066f352707733<>Support additional keyword arguments on cookies (to be handled by the underlying stdlib Cookie module)<>3373.80<>4
1273014305<>9ea5f8a277db96557ae7867375c7db4d8c5f633a<>websockets: continue listening for messages after parsing completion<>3330.76<>4
1272673720<>00ad92f3982b7cb6f4634186b98219816cc5dac0<>Allow for missing "expires" field in facebook session, which can happen if offline_access is granted.<>3335.02<>4
1272522465<>339f08bdbd2a1a32c873431a9fab0415c35b3467<>Correcting a grammatical error (attribute -> attributes).<>3319.28<>4
1272324450<>808473910a1467ae88d034b592212142bee38278<>UIModule.css_files returns CSS files, not Javascript files<>3338.66<>4
1272223638<>bbdf207637e4b035d0882619f642a3ae32a04fca<>Updating base Twitter url<>3348.20<>4
1271977961<>0fcef4e2376626a2d961931243ab0a828be956d2<>Clear itimer signals in autoreload so the combination of autoreload and ioloop.set_blocking_log_threshold doesn't cause the new process to get killed.<>3338.02<>4
1271884678<>9f7c9a38ff4d07fc79101bb05809cecd2efb8d6c<>Use escape.utf8() instead of .encode('utf-8') so we don't double-encode<>3313.60<>4
1271883425<>c87e84f068706eca9e078937c8ff5857a72b8331<>cStringIO's constructor uses a 16-bit encoding when given a unicode string. This is inconsistent with its write method, which encodes all strings as ascii (and rejects unicode strings iff they have any non-ascii characters). This change uses utf-8 as the default encoding when constructing cStringIO objects in tornado.<>3748.64<>4
1271876264<>b686d6d44617d2dc7df54e8144cadab93ea4c060<>Add an option to log a stack trace any time the ioloop is blocked for more than a specified amount of time.<>3342.46<>4
1271803233<>ca8002fa9f8182504e117f11c289fabe544f1a50<>Send all logging to the root logger instead of per-module loggers. This undoes the effect of http://github.com/facebook/tornado/commit/e391fd289ed085671344504cc5b1fa84f5a3c774<>3322.11<>4
1271722040<>40ac8d362a2f9d0f076ea1ba4d4ccec0b8ee274a<>Fix header parsing in httpclient for headers whose value contains ':'<>3340.56<>4
1271701203<>b8a28243437892a0802fba5a8a95ab1b0f6f5b2d<>Better HTTP header parsing: Allow (and strip) any amount of leading and trailing whitespace around header values instead of just a single space. Such whitespace is legal but appears to be uncommon (and nginx apparently normalizes everything to a single space) http://tools.ietf.org/html/rfc2616#page-31<>3319.79<>4
1271700186<>43e02a2d88d67fdc8da532c60b13125af11590e4<>Add a closed flag to AsyncHTTPClient so that a scheduled perform callback won't cause an exception after the client is closed.<>3325.86<>4
1271113599<>fc00b61751bc5be9505db03408db93a9cd00f7f0<>Use the original request's protocol as the openid realm instead of hard-coding http.<>3362.84<>4
1270684474<>62bc2e40fd24d5389aa7da66cabab6246abd6eec<>Add support for reading translation from gettext .mo files instead of CSV.<>3382.68<>4
1270502476<>002ba2c1801e963a9cfaf3f023d464c12ae16a42<>Log a warning when multiple handlers have the same name.<>3335.66<>4
1270495404<>b5365d8c015b11a26b5ac6f29a40cd4d59e550e3<>Make options.__getattr__ raise AttributeError instead of Error for consistency with standard attribute lookups (so getattr(options, 'foo', None) works if no option 'foo' has been defined).<>3359.02<>4
1270234059<>218dd1edc86e329e6c12f26d8fa253fd56205b73<>Escape double quotes in addition to angle brackets and ampersands.<>3635.55<>4
1270233656<>e520b21ed297cb92706356e6a0877df02205564c<>Adding for the ability of ui-modules to add something at the end of the body of a document.<>3340.82<>4
1270233138<>794685b892fa0214cc9ed95f365d63979d2a11e1<>Merge remote branch 'mgenti/master'<>3355.16<>4
1270075049<>5f4413bec42dcccce2d85f1421b49218fc5d6712<>Return a write method from start_response, as required by the wsgi spec.<>3622.99<>4
1269956417<>c33709a0ec4acf786d8ee843f8f3fbd520f59068<>When using the select based IOLoop, select can throw an error if based to many socket. This does not have an errno<>3342.01<>4
1269711046<>32a31f4e8ed2385a71b228d605c15ec47ce4d85d<>Don't try to colorize log output on terminals that don't support it<>3874.60<>4
1269644104<>a4ba918180ca292cc2f67a6793c8563cec0d1ac3<>Make add_handlers (for multiple hostnames) usable with static_path (which forces the creation of a wildcard handler) by maintaining a sensible order for handler groups.<>3334.23<>4
1269558577<>6326f82715e67316c0ca5012bc6397080f764eb7<>Add a warning about the experimental status of our win32 support<>3338.14<>4
1269558009<>7b458119c4b90c25bf8f9d51964653fbbe5ba104<>Be consistent in platform checks: use os.name == 'nt' everywhere, replacing uses of os.name == 'posix' and sys.platform.startswith('win')<>3352.07<>4
1269557958<>064cc4693d2bec86a6fc2eec84c90aa097b6bbfb<>Make ioloop test runnable on unix (chmod +x and add #! line), and remove hard-coded PYTHONPATH manipulations. Add a small readme for tests.<>3345.54<>4
1269443643<>3e1d57b2bde20d1d4dbbac4ab1ba64bac333e2e1<>Fix for raising an exception; Fix for waking loop; Added test<>3380.33<>4
1269437123<>73fbe2843dfbc950f2264676f9d3f054fef39217<>Merge branch 'master' of git://github.com/facebook/tornado<>3356.16<>4
1269392000<>e391fd289ed085671344504cc5b1fa84f5a3c774<>Use per-module loggers instead of the root logger.<>3362.61<>4
1269390674<>e340491473498e7b67fd0e9e2e2a31d6b16ee20e<>Add __slots__ to ioloop._Timeout to reduce memory overhead when there are many pending timeouts.<>3710.38<>4
1269354586<>9f4c6af84ac58b903cb500249bb20bac13b87d62<>Implementing suggested changes<>3349.55<>4
1269354274<>ae7f90bf5b2146cdec2a3da41bb7dc4cb14c3f85<>Merge remote branch 'upstream/master'<>3375.62<>4
1269300905<>33a587b0d5dc22c4f124734acca904759123a453<>Don't put wsgi response headers in a dictionary to support repeated headers with the same value (mainly important for Set-Cookie)<>3337.34<>4
1269112842<>7fda8c5d381b293d8c8b632b7dd007d8533ba9a0<>Don't set the etag header if the handler already did it.<>3328.49<>4
1269022856<>bce36a7c1aa9d2eef490a87745d3eda7282af7d1<>Add a callback to handle headers in httpclient as they come in, so they will be available for data handled by streaming_callback.<>3334.83<>4
1268944069<>70fb42d6a0b5e4fa2eed4d3aa4c795b957798e19<>Add a close method to AsyncHTTPClient.<>3336.09<>4
1268878953<>03308b1a7dad63d5ff12155d097fb6ee110a4cf3<>add a template_loader application setting for using custom template loaders. a slight refactoring of TemplateLoader's load method to expose some internals. also, add a reset method to the loader that's called in debug mode to flush the template cache.<>3336.61<>4
1268877097<>8359c05ca061ba012805e7ba74da1f9dde73941d<>Support named groups in url pattern regexes. Note that either all or none of the groups to be passed to the handler must be named.<>3578.98<>4
1268876912<>fca7c831341b864916c6c97bdbdb2f95d95b2c12<>Allow more than two consecutive curlies to appear in templates (and use the innermost). This was previously a syntax error in the generated python.<>3359.91<>4
1268875743<>8c096b231ccf3285b5384bb9b03b24a4a4821bd7<>Combine repeated headers with the same name into a single comma-separated string http://www.w3.org/Protocols/HTTP/1.0/spec.html#Message-Headers<>3348.35<>4
1268863157<>40ce72c1c6339da37d0081c1e5ec35cce0ee8a89<>Replace all tabs with spaces.<>3369.85<>4
1268536106<>6d070f77c2a694ba5739e50203b7f88170783ed1<>updated the gitignore to include files generated on installation<>3349.93<>4
1268257236<>6704dc99a073ed7f6c30400d4bc7dd875f345df5<>win32 needs to open the files as binary<>3946.13<>4
1268257190<>bec0552eff1160c601c3c96adaf03bc78d9845d8<>Trying to better re-use code<>3922.52<>4
1268257078<>248c57809fe62af118aee451d82ec14a7939d8e5<>Merge remote branch 'upstream/master'<>3410.44<>4
1268155043<>d2ca9ad61850dd716ba07fb2a5c7636d1e0edbcb<>Fix bug with IOLoop's 'waker' pipe which rendered it ineffective on linux and mac (where pipes are unidirectional) and caused high cpu usage on solaris (where pipes are bidirectional). Thanks to Jari Ahonen for finding the bug.<>3349.39<>4
1267994872<>45f76c518eaf032c40fd39cc1384577742e5dd4d<>In finish(), test if chunk is None rather than using truthiness to decide whether to call write().<>3361.92<>4
1267735173<>8637a738ef1bd3d4236f64329d4956b641edc1a6<>Set the close-on-exec flag on file descriptors used by IOLoop (epoll/kqueue and pipe) so that long-lived autoreloading processes don't leak file descriptors.<>3855.77<>4
1267732338<>f4359bc12864f0c5dd5d4f92403c8c19c34e5f8c<>Use a WeakKeyDictionary instead of a regular dictionary to associate IOLoop and AsyncHTTPClients. This prevents leaks of memory and file descriptors when one process (in my case a unit test runner) create many IOLoop/AsyncHTTPClient pairs.<>3325.42<>4
1267672485<>d42334e3197680e988805c8201fcc6f09abb1366<>Allow subclasses of IOLoop to override the default logging of uncaught exceptions in callbacks.<>3386.30<>4
1267665768<>a0af68cc04aeb68cc98b8452524c4bece108b0cf<>Ensure that self.io_loop is set in HTTPServer.start(), so that HTTPServer.stop can clean up correctly.<>3368.69<>4
1267499884<>62cdb36b6c97100bbee827b2fd73bd74e4b72a64<>Revamp logging configuration.<>3365.27<>4
1267230981<>61f0fafe4bc8d5aa077767ef6c3dcebd9acfc34b<>Call the close() method on the wsgi response object if it exists. This is required by the WSGI spec, and cherrypy leaks memory without it.<>3342.34<>4
1267222089<>f6266ba8064bbd5e0a73fa3b921624fd9ad551f0<>Add SERVER_PROTOCOL variable to wsgi environment. This turns out to be necessary for using cherrypy in a tornado WSGIContainer.<>3351.90<>4
1267207887<>1ae186a504224e9f6cf5375b56f8e26e4774e2a0<>Add exc_info parameter to start_response() in WSGIContainer.<>3346.62<>4
1267141748<>c5627d2f1613f6bf60c826bfbb84eae08f1c98e6<>Work around an odd error I occasionally see in autoreload (which causes autoreload to loop endlessly without restarting the process)<>3338.61<>4
1267058231<>f9cda8634bf80bf6978bb443561ae9304e476fee<>Add a workaround for a bug in os.execv when used on Mac OS X versions prior to 10.6 when there are multiple threads in the process.<>3365.81<>4
1267053519<>010271d7eca811f1540c8eda20d3d2d3c06feb10<>Always reraise KeyboardInterrupt and SystemExit whenever IOLoop tries to swallow exceptions.<>3342.35<>4
1266353603<>15ceda22784752436f96d7af254705010177ae0c<>Fix ioloop._KQueue to work correctly when listening for both read and write.<>3851.91<>4
1265394297<>ef83f4b6cafabbc3183db061c03faf5cf58d6808<>Support passing in cookie value directly in cases where you have to parse the value from other sources (e.g., from the URL for Flash requests). Also fix documentation error for Facebook Connect.<>3364.34<>4
1265318323<>7ffb44237fdd655a7650805dd51f126b5bfd8b8a<>Don't set content-length in StaticFileHandler unless we're actually sending the content. Some browsers get confused by this (e.g. the version of webkit embedded in fluid, but not the version used in chrome).<>3366.48<>4
1265270529<>c1be85fcfe3d5a841be3bfe99b0c7b714a0dd4db<>Add backwards compatability for secure cookie reading<>3379.73<>4
1265269880<>4daeb8d880204f5baa64fc958654da9dff60ae0e<>Simplify JavaScript path ordering patch<>3356.08<>4
1265240945<>a34dc422e25fbfd8704e652ff787e87a385f2f6d<>Import setuptools if it's available.<>3357.32<>4
1265240812<>ae1ed23421ffefa27fac765003cca41026bb971d<>Making sure StaticFileHandlers get first, if not, a catch all handler would break the static handlers.<>3350.85<>4
1265228324<>3e9a285af0a7c4f3c7fa4a512bd9f6191995194b<>Include cookie name in signature so that a value signed for use in one cookie can't be used in another. Note that this invalidates all existing signed cookies.<>3363.68<>4
1265228248<>efbc2e09b9e9fc28f3919f44df0c14c1bef2b41c<>using os specific path seperator<>3369.09<>4
1265227869<>8aae3263dd9ec9271d27a1b0aa4f04e8d6278d12<>Fix for maintaining script inclusion order<>3362.63<>4
1265227676<>0984e008c96a5157755e00765ee41532b01a65a1<>Added the ability to stop an HTTPServer. Mostly for unittesting.<>3606.80<>4
1265227603<>74f75616c15c225e1bf717f96c93bc67af5e5422<>Stop parsing arguments after --<>3383.95<>4
1265227503<>20361993368b87c607d450484d32bc305dbd2146<>Fix EINTR exception handling for non-english locales.<>3355.08<>4
1265227017<>8186101e6530dcc025b714a7e8ee3026f5fa3665<>Set headers earlier in StaticFileHandler, so we return the correct content-type with 304 results (instead of always returning text/html)<>3353.00<>4
1265226572<>77eb5867e1473d3e575cc314277b3746947c2958<>Add static_url_prefix setting to allow serving of static files somewhere other than /static/<>3371.10<>4
1265212981<>123771a096b228e869028c848e44e9d32456c4a9<>Added support for running Tornado on win32<>3371.44<>4
1264725860<>e30e28bcfb9a8880bc1889c425e36f1c1476e930<>Add a hook to allow applications to modify the curl objects directly.<>3350.86<>4
1264667302<>b6ad0f6323a4b67f6aa38f004af88f683cba343b<>Merge branch 'master' of git://github.com/bdarnell/tornado<>3338.85<>4
1264664772<>a2adfa1f997e6ad731c0d8da81dfd9831e4d4999<>allow connect and request timeouts of zero<>3356.39<>4
1264664117<>47db027764c32e097353f1119a80c04b6b0d0b79<>use self.headers for cases where no headers were passed in<>3363.06<>4
1264194591<>a1991136fdab2700c627cb94ac8f9d4db9cc5dca<>Make parse_command_line initialize logging even when there are non-option arguments.<>3470.27<>4
1264194513<>adcc1039942ce756a1eb9ebf872d0b7483cbefa1<>Merge branch 'master' of git://github.com/facebook/tornado<>3353.27<>4
1263843579<>1e291eb5092d232d84be5914429808aa24c9ee9d<>Add HTML 5 WebSocket support (see http://bret.appspot.com/entry/web-sockets-in-tornado)<>3370.27<>4
1263791544<>fb66140dce8e002ffc10e5d6985df9e3e3f9225e<>Fix httpclient / epoll interaction errors, per http://groups.google.com/group/python-tornado/browse_thread/thread/276059a076593266. Thanks everyone for the patch and discussion.<>3366.19<>4
1263616062<>57ec818a3f8ab56dec1b6cf585fa7c8c4d6ab80a<>Catch both IOError and OSError in another place.<>3346.76<>4
1263609720<>8c2429dbd3472d651a03839bd2568d30b1ed7c8d<>Catch IOError in addition to OSError in IOLoop.remove_handler (friendfeed's epoll module throws OSError, while the one in the standard library throws IOError)<>3352.91<>4
1263467278<>7e3ace860790c80ef2170ede1ef57e5955727515<>fb demo fix<>3350.11<>4
1263248247<>c436d7aa8df246dcb9e70a6a16fe558618c60d13<>Fix new connection close handler for WSGI handlers<>3349.58<>4
1263239601<>9107b6be2bffe4bcaf8cd47cf79c6d792cdf71d4<>Add reverse_url to RequestHandler class as well<>3349.42<>4
1263236543<>7014417608d03e7af2c7aba58ba358d8657a24a2<>Merge remote branch 'bdarnell/master'<>3344.89<>4
1263234701<>e4c6eec2114d2d95e48762dc8099b364e0a4e23c<>Use time indepdent compare for secure cookie.<>3858.03<>4
1262919971<>1ea5df5e6f44bb3b98c830535319a92c386cda93<>Add a method to RequestHandler that can be used to detect when the connection has been closed by the client.<>3351.10<>4
1262919227<>d877a65d471f5a52ea7109897d6c4294de6f5cb4<>Add a kqueue-based implementation of IOLoop for BSD/Mac systems.<>3875.50<>4
1262051700<>52d20a0dafe207a1f8da03b2be73b0682209b1c2<>Don't try to write to a stream that was closed out from under us. This should get rid of all the "exception after headers written" spam in our logs.<>3866.88<>4
1262050025<>6ee22230f8e657591ef3cd5d3dda8e9b36125786<>Add httpclient support for the delete method.<>3910.20<>4
1261011697<>3ab63905aa3801b0ab11becb145366964a18e896<>If IOLoop.stop is called before the loop is running, make the next call to IOLoop.start return immediately, so that one call each to start and stop will result in the loop not running rather than running infinitely, even if the call to stop happens first.<>3930.19<>4
1260832886<>22d840ed1d3728dedd2344f1194b1f89f20cdd83<>Added kwargs to get_error_html in the RequestHandler so that downstream actors can render or otherwise use the exception object thrown. This is a backwards-incompatible change for anyone who has overridden get_error_html().<>3946.56<>4
1260407238<>4381df04e70452e3ebf15c925031f477da0a6c30<>Use empty dictionary instead of None as default for kwargs<>3856.31<>4
1260406744<>1823a772c08aa0f3f218f733bf98b7bf094e2ef9<>Fix missed variable rename<>3898.45<>4
1260405859<>df5c994ae0d2961f3607759e8525872bca94d43f<>Add Application.reverse_url, which can generate a url to a handler by name. This minimizes repetition of url patterns for links and redirects.<>3901.07<>4
1260400988<>9ade70501e2103dcbadc0918acc4fc195593ea86<>Merge branch 'master' of git://github.com/facebook/tornado<>3833.65<>4
1260352130<>b3d98c4a369e50eddb0411af9174b232f8b6ad28<>Add basic error checking so you can't add a server to the IOLoop twice<>3925.03<>4
1260351905<>8d4dde80e85a9d34631c68746fa0ff4372880792<>Typo in error message<>3964.13<>4
1260347043<>6fb90ae694190fcedc48d9fb98b02325826d783e<>Pre-forking implementation so a single Tornado server can utilize all CPU cores<>3913.15<>4
1260291362<>1da2b3c5c65c23f97433f9ce33fc1a70d21c4d27<>Add gzip Content-Encoding support with 'gzip' application option<>3906.36<>4
1260231439<>41a94730959d641e6c2c765ca631645327805c5a<>Add REMOTE_ADDR to WSGIContainer<>3911.61<>4
1260230008<>ce20498adb28f65d120e8daa3f3d2fa50aed9361<>Merge branch 'master' of http://github.com/facebook/tornado<>3885.69<>4
1260229636<>400d2c9f80d0e3c9652bf8df0c9d35b54cba459e<>Make WSGIContainer._environ public and static, so it can be used to adapt tornado requests to WSGI environments without a full WSGIContainer.<>3798.29<>4
1260178086<>41e46d97f5648e241f04051e3ed12bd095c04d4c<>Fix transform headers bug<>3924.24<>4
1260070610<>c50d9b8c789eb1914f31bd4dc7adbf1383c8fdb1<>Ignore XSRF cookie check when X-Requested-With XMLHttpRequest header is present<>3926.92<>4
1259870272<>5fc06caffe9a362a526e6c5480a2ebdd174eb29f<>Add a FallbackHandler class to allow use of other applications (e.g. tornado.wsgi.WSGIContainer) from within a tornado.web.Application to facilitate migration from other web frameworks.<>3880.22<>4
1259087258<>595ffa1975835c82ef21b4cfd8bc5076c292e828<>Add support for Squid proxy headers<>3800.86<>4
1256720423<>7546f8d3b21cc31ed1ec679fd093be4cb9156e51<>Ask for more Facebook Connect fields by default<>3921.64<>4
1254813230<>b5c6ccb312c21a653e29e449801ec3e8dad2dea4<>Initial support for SSL (thanks to Dan McDougall for suggesting this and code samples)<>3906.59<>4
1254454909<>718c1816e13ac71ad9cb88b597b82df41ff35db9<>Missing website images<>4012.22<>4
1254454889<>4e0a8433d9519a78fa255a1f76a01100bcc8ae43<>Fix embedded CSS bug<>3794.74<>4
1254347796<>681d4d2fabaa3df89bdb43213e7e13c917cebf40<>Add links to FB, Twitter, FF on web site<>3856.03<>4
1254297660<>b32b6b4b0435e974db8990f6cc6cf9b8daed9952<>Bug fix<>3885.08<>4
1254295960<>aa836cdf3952d52efc68201872b3a0053aca33ad<>CSS/JS embeds after files<>3842.74<>4
1253731577<>571dd056d226109592d2e05225a4c360cdc31a31<>add address param to listen<>3928.50<>4
1253551113<>50528c010ae06ff14d7c9ea2e682de6549ba4c8f<>Typo in PeriodicCallback<>3913.99<>4
1253242390<>d6e9cd5a116fe640dffe019079900c80c13673de<>New 0.2 distribution from the past week's bug fixes<>3906.79<>4
1253242052<>11503326a6ed78907aee462fc07ef0b9cdb0c8a2<>Turn on auto-reloading when 'debug' setting is given<>3834.91<>4
1253234806<>c4f682d4fef08cffb4156d9f19f2e62ccb355024<>Bug in locale.py and increase poll time for autoreloader<>3871.99<>4
1253167182<>6e1cb0ddf45c968e74db570c6c0499cb0ff321e4<>add streaming_callback option to httpclient<>3821.80<>4
1253090998<>237944d5241aedc2a281c7a17cbb08a3f18c5a2a<>Rename auto-reload module<>3894.34<>4
1253089752<>be71a24f1ae9223558152b61b9b93a0635d1a0a2<>Experimental module auto-reloading on modification<>4252.07<>4
1252977006<>dd6cadf2776ab2afec484cb7cf366f730e174647<>Auto-reconnect on MySQL connection failur<>3910.99<>4
1252975245<>f524cc6ad5b216ac42fe7e12410bddedad4a2abd<>Add gitignore file<>3899.78<>4
1252957387<>016dee1e9659297ddcaf298ae7ee1e26812e5504<>use correct module<>3890.21<>4
1252951707<>c59cf2ab0657e56ffae9908f6f651cbf893dd21c<>make logout link work<>3887.15<>4
1252946724<>2be82a07b38e8c64cb066cea158e38350c07749c<>Fix multipart/form-data for WSGIApplication<>3905.87<>4
1252946256<>91d90b2ff1c7e4901ff197a503af1732c2909953<>Get rid of unnecessary/inconsistent mixin<>3923.35<>4
1252876435<>82a2de536ae92f26f2cc89c6945fc759be0aabf9<>Add addslash and removeslash decorators for, e.g., redirecting '/dir' to '/dir/'<>3857.00<>4
1252869976<>37e671203620c8b030412666fd03283fad9fcd44<>Two minor typos<>3890.69<>4
1252865997<>8ca616088cfb26ff19fcc6f359d654fef905b8da<>Add initial WSGI container support for running other frameworks on Tornado's HTTP server<>3913.43<>4
1252772703<>9c51d01b123fed12907e7f3a5f85d19525de3196<>Don't reference Exception.message due to deprecation in Python 2.6<>3856.95<>4
1252694588<>6b07e69551f045e4632660ed20a2c66606cb92d4<>documentation typos<>3800.23<>4
1252669653<>9e24ae162d024e4049b8811d7ca19e319c20021d<>s/Google Code/GitHub<>3894.80<>4
1252618768<>f6798502befee7fa5c66696dac31b443bbb5a3ff<>Merge branch 'master' of git@github.com:facebook/tornado<>3912.21<>4
1252618763<>cdcfb26316845294178707bb235cee0ce953e8eb<>make sign out clickable, ignoring automatic redirect for now<>3889.21<>4
1252617873<>72707599e8da89bba125df14ed454562224fc9fb<>Merge branch 'master' of git://github.com/jaybaird/tornado<>3900.25<>4
1252617023<>e0526867ca0fe0e2839b46acc597fa1509150bc5<>typo<>3892.30<>4
1252615273<>41ea6da5f5cc79721614430bd0a3bcb4bb0a8251<>both links work, but this one seems canonical<>3808.99<>4
1252614279<>2fd2ad6d42f66efc6565231d08b29bdf92f257d8<>remove cases where intern is used. This will prevent a DoS via memory starvation if a lot of requests are sent using random headers<>3911.97<>4
1252609296<>19c8610eee0b669298984786083a318439e594f7<>typo<>3884.26<>4
1252608567<>2e1e2a79826999bd9d20cf4c5b60e4bce8930ad7<>Add python-dev to apt-get command per http://groups.google.com/group/python-tornado/browse_thread/thread/d88de85aa33193a7<>3867.89<>4
1252607729<>e48e2b1129be390fca684635f6f232fe26adb63b<>typo<>3833.94<>4
1252606316<>e997ac0ad9133a9768996ff3c7fe415922c9302a<>Merge branch 'master' of github.com:facebook/tornado<>3800.79<>4
1252606299<>01405d0b08e91f0ffed0a7a41af9f96e3542381a<>typos<>3922.26<>4
1252606168<>6794fced8023bcc5783589554dbd6f9db7274d51<>Merge branch 'master' of git@github.com:facebook/tornado<>3861.61<>4
1252606161<>f431c9e59701bd7d841d9401fda1895b2456ae4e<>updated tarball<>3846.34<>4
1252605146<>d9d3e9cafb016df407e15121c2390d707fb26253<>fix README<>3833.97<>4
1252604839<>e197a479bef594614e1a10a04e7b33b420005efc<>escape more<>3857.13<>4
1252604288<>e4d56d91839f74896c24cf52c987b5a82cdce849<>typo<>3819.22<>4
1252603492<>71a44bc082ab6f09d3b948f11bb6fa1585a36424<>Another typo (thanks, Ben)<>3844.53<>4
1252600189<>9a8bd2fb6fd6279be16d6f0a2e57e49fe1b98f8f<>Add prerequisites to Tornado docs<>3886.29<>4
1252570604<>98a6bd9ac795809ef2c4f7b7152d527e0f852d6c<>Fixed typo (thanks Casey)<>3849.07<>4
1252569187<>efd4666dfbb000ad067c2aab4b67a57d60ebbeb3<>No favicon for Tornado web site<>3863.29<>4
1252569051<>2afa97349330d1a224a7e4fdce0dcdf760222a8b<>Move Tornado project to Github<>3848.71<>4
1252473318<>07e5e8c43d5cec87aca862276f296af58695d520<>Wrote initial README file<><>4
1252472484<>11de50a83acb07ab3a4439b38f0153444a124381<>Created project<><>4
1291419193<>8e4a7730d3fa599aa99fdc58d911d149344eb711<>Merge remote branch 'slay2k/fb_fix_graph_mixin'<>2136.82<>5
1291184933<>a18eead89e6a31175abd60964a05da365139cab3<>Fix duplicated remote_ip field in HTTPRequest.__repr__<>2069.16<>5
1291089736<>ffe291f2eec262679c43c63c4485ac6595eb1433<>A few fixes for FacebookGraphMixin<>2077.52<>5
1291071676<>96ecb6603a10bdcf30bb238d3462ec9da0560c89<>Use request.uri instead of request.path as default redirect for auth.py.<>2090.65<>5
1291068481<>6151498dba7d55d602cbf0360df8f29b712c33a1<>Log malformed HTTP requests more gracefully.<>2098.79<>5
1291067346<>ae3cc317c2781ad515a0ad48891d65b2370982df<>Treat HEAD requests the same as GET for e.g. sending Etag headers.<>2075.16<>5
1291066455<>eededcf5d51c4e945757b0936512115cf50d09f4<>Preserve the order of css_files from UIModules, like we already do for JS<>2101.49<>5
1291065423<>00b9ee91f17c7bc8eb07999381ec3aeb3191ebed<>Expose the client's SSL certificate as HTTPRequest.get_ssl_certificate().<>2260.02<>5
1290472268<>263994e8fc5cec66a57151ca48fd959b6496e281<>Fix bug in multipart/form-data requests.<>2092.80<>5
1290271899<>b0578819e1001bd3ab3555c490e8845f79099c88<>Update pydoc to mention response.rethrow instead of reraise.<>2108.36<>5
1290204293<>9e965556ff7a343864059c35bd8517f434d5c88e<>Don't assume 'boundary' is last field in Content-Type header.<>2079.70<>5
1290108374<>cb232b22dab6754ceaab77ee47b451b3a4811a5f<>Merge remote branch 'vijayp/master'<>2096.03<>5
1290106724<>905a215a286041c986005859c378c0445c127cbb<>Set proxy to '' if no proxy is explicitly set in the request. If this is not done, curls with proxies set are re-inserted into the empty list, and are then reused. This causes connections to be randomly proxied, if some requests use a proxy, and others don't.<>2440.21<>5
1289954273<>d0620d67181714e1880b83b54ebafd6ba9f37666<>Add debug logging for queuing in simple_httpclient.<>2094.98<>5
1289953851<>08e5ba5da8d85cc22ed55d34663b61a6be470579<>Add address parameter to Application.listen to match HTTPServer.listen<>2108.47<>5
1289885571<>0b607c10badb89125118d892b176c36aacd63323<>Fixes for python 2.5<>2084.85<>5
1289884532<>a853850e26d31288941a264125b674d9def9f096<>Add convenience method Application.listen(port) so most apps don't need to explicitly touch HTTPServer.<>2119.14<>5
1289868824<>5f5e0bb3be4e522039fbbe3768109ea64cc99fe2<>Implement max_clients limitation and queueing for SimpleAsyncHTTPClient<>2069.48<>5
1289866269<>7750fe7773366d19937038d2a2fd12b66445f674<>Port pseudo-singleton magic from AsyncHTTPClient to SimpleAsyncHTTPClient<>2098.79<>5
1289774717<>f2aa302bcb044b204ae14c9b66342f483a245218<>Add timeout support to simple_httpclient<>2096.20<>5
1289768294<>8a941c42b27726aee81479be5f80b5a0d33631aa<>Improve docs for IOLoop.add/remove_timeout()<>2239.77<>5
1289332354<>31b0ab0c5d8bcc695589e89bcf9c5848c1dffdf0<>Fix typo in docs<>2111.96<>5
1289246016<>3dc7ebad62b97726795e15b11a28a8c6b4d44726<>Add Amharic to tornado.locale's list of languages.<>2118.13<>5
1289245342<>0dcee8d7dc4ad0a88562ed2676a0b95e6453e405<>Fix mangled language names in tornado.locale for Chinese, Japanese, Korean.<>2110.20<>5
1289242490<>ee55403cd4a6255f275b0f39cbc19f03accd29ef<>Support X-Forwarded-Proto in addition to X-Scheme<>2100.84<>5
1289242262<>7ed8fbe136edc91fe9d884a20e2717b64f1a43b7<>Support websockets over https.<>2086.33<>5
1289242143<>965099eda08b376e18c42dffb7dfd4b5dd79dcc9<>Support "from x import y" in templates, not just "import x"<>2100.40<>5
1289066879<>3e44643d3b89c99c6bc285b0e650ab12ee06fb16<>Fix typo from commit 2b44fac<>2098.07<>5
1288981158<>9ec87c2ba25e202fbce5ff1f35184fcbabba26f3<>Capture StackContext explicitly in HTTPConnection to prevent leaks from one request to the next.<>2097.53<>5
1288896454<>2b44fac4ecf273aadc97dbcaa5abf1e3a1ee7dff<>Check for a closed connection in _add_io_state.<>2353.22<>5
1288829551<>c467cf0274b3e2135393af4fc88683de9d930018<>fix linkify regex plus add unit test<>2367.24<>5
1288240015<>b914a94ac24c6e09003b29bc4919d028a042ed25<>Don't manually set Content-Length in StaticFileHandler.<>2341.81<>5
1288206719<>5e987aa6b2ffededbe11cda78901caa18aff32fb<>Merge remote branch 'szeim/master'<>2382.78<>5
1288205245<>88111779c9a84177b64faef6ae452d550aeaf359<>Merge remote branch 'fiam/master'<>2520.89<>5
1288179372<>2dbb05d5a09406b2369ee30661c88cd890b09e63<>SSLIOStream._do_ssl_handshake SSL error check<>2403.12<>5
1288179287<>3b486fc4f8081355fc0b87ebbf6c261692d7a418<>Fixed IOStream._handle_events (try/except block)<>2339.62<>5
1288123456<>bd4ef586e026e6bb20850215db53ced81706de37<>Make exception handling in AsyncHTTPClient more customizable<>2945.49<>5
1287702042<>af3d0b3b03bc9d0a37938ee97852ca01e20d7a80<>Add gzip support to SimpleAsyncHTTPClient<>2332.85<>5
1287699426<>d06f8f4bcd46d4f2b620ea1cb614731f4b74ab71<>Support minor HTTP request attributes in SimpleAsyncHTTPClient.<>2328.09<>5
1287698310<>3d19e10355477cb5a92d6e708445965de917507c<>Add basic auth support to SimpleAsyncHTTPClient<>2376.00<>5
1287698190<>83d623a1c5495a6f973f55df95e91495c4bb44a5<>Use AsyncHTTPTestCase.fetch instead of overriding it with a less useful version.<>2389.28<>5
1287698129<>09c0c9d772eb1e68f8be24de752eb9917d1ae79b<>Reindent to 4 spaces<>2455.48<>5
1287522815<>d47c453c5f70b6ecac5e3e8b2aa769377b05da23<>Attempt to fix StaticFileHandler when os.path.sep != '/'.<>2372.80<>5
1287522587<>fe5172768e8bb96bfa4f5af127ecbf9f173a31b8<>Merge remote branch 'mdg/default_filename'<>2328.33<>5
1287516527<>e7553f75130329446149085d877403164d3770e9<>Add test case for encoding of request parameters and paths, in response to a mailing list thread that raised questions about handling of '%3F' and '?'.<>2374.86<>5
1287516516<>11fdd479b2ff45a3071672fd483cdb4aa81783ec<>Add a convenience method for synchronous fetches in AsyncHTTPTestCase<>2362.61<>5
1287454424<>c41029217918992d8320aaaa2defd82e590d1d6c<>Add test suite to tarball releases.<>2344.64<>5
1287198174<>638a151d96d681d3bdd6ba5ce5dcf2bd1447959c<>make StaticFileHandler support default filename<>2374.05<>5
1287007129<>86bd681ff841f272c5205f24cd2a613535ed2e00<>Support websockets over HTTP proxies.<>2422.61<>5
1287003931<>334b127003fbc82c53b60289637978ac5291330f<>Windows compatibility for non-blocking IOStream.connect.<>2356.43<>5
1286931569<>f10c7176f11ee26de1aa063ee76af672ca5854d0<>Refactor async connect logic from SimpleAsyncHTTPClient to IOStream.<>2381.16<>5
1286843051<>b57bfd35ccf5c65f65b98b584b0aae0e9b48b7bb<>Reindent example in docstring, which apparently trips up emacs' indentation detection.<>2392.31<>5
1286842743<>7c7b0117cffb6abb336407e392f0ecd3b3e3c1da<>Make Locale.format_date() behave sanely with dates in the future.<>2308.76<>5
1286841735<>3ce6d3daeeeda0fc25206ef99048467307aa0cbe<>Run all IOStream callbacks inside a NullContext so that exception handlers are run in the right order.<>2372.64<>5
1286834257<>925af5045c8eeb1727837c1cc9129d14aec50e76<>Make USE_SIMPLE_HTTPCLIENT work without pycurl installed.<>2490.21<>5
1286831812<>dd5cad996e2a6a4fc43bb603e14b942255986182<>Add initial version of non-curl-based AsyncHTTPClient.<>2458.52<>5
1286821225<>5fffe5a8c738a43821c993fab2693437f229e6c1<>Limit the amount of data sent to socket.send at a time (for windows).<>2588.50<>5
1286564176<>160c961fe1dcbf44f574261207af78f382ccddde<>Move Links section from index.html to the wiki. Remove links to unmaintained social media accounts.<>2481.89<>5
1286562352<>b19953441d88c43b8ba6efd3ed40526c5049d2e3<>Fix StackContext in IOStream. IOStream._handle_events now runs in a NullContext, and user callbacks are wrapped on entry to IOStream.<>2391.54<>5
1285882873<>f732f98063f8a0bf9f7e331876964bedbbdc8462<>add a linkify() function for converting text to html with link detection. Also changed xhtml_escape to not convert return value to utf8, since pages should be assembed in unicode and not utf8 encoded until they are ready to write().<>2932.92<>5
1285729902<>75bfe842c5afe8945ee0635ac431b27de6202f6d<>Handle IOStream.read_bytes(0) gracefully.<>2913.14<>5
1285729856<>e210a644aa982bd6502726a900c79ebdcbe8fdc2<>Make AsyncTestCase.stop() prefer _arg over **kwargs, even when the former is not truthy.<>2934.35<>5
1285713981<>8ecaa43734085ed445ebf7ae70f5be280962e943<>Remove references to async_callback from documentation<>2915.27<>5
1285621832<>1221865747ecfde69a0463b9a0d77b3c5b87f320<>In the select()-based IOLoop, always listen for reads so we can tell when the other side closed the connection.<>2936.51<>5
1285616780<>8300c7ff93227a8cb3ef93b8b2cf8931949beb1c<>Close the IOStream when the remote connection is closed.<>2954.26<>5
1285614283<>b02a31b668af71160c84b1c95a22e1035d9c218a<>Factor port-selection logic out of AsyncHTTPTestCase so it can be used from lower-level tests<>2916.79<>5
1285353753<>7a7e24143e77481d140fb5579bc67e4c45cbcfad<>Make StackContext more usable in libraries by reducing the need to explicitly use IOLoop.add_callback or NullContext.<>2936.76<>5
1285259852<>4973e296ebd68bdaf5bd7fc51186b56c6c69bc91<>Update installation instructions in README.<>2949.63<>5
1285096502<>a1d94db451e57301e2f97d7c33eae6a84592d078<>Fix default_host redirect.<>2914.72<>5
1284841350<>9f529b89863da8c5d8d5011f8d968e094fc2065f<>Fix improperly-renamed variable in set_blocking_signal_threshold<>2960.98<>5
1284760003<>81a3eae5e63eb48f5b42941e5394d58cd7e0f994<>Make xhtml_escape available in the template namespace under its own name in addition to "escape".<>2879.66<>5
1284759945<>625a9bef1adae3d075ac098418f70b5603b83b29<>Move cookie-signing code from set_secure_cookie to a new method for non-cookie use cases<>2931.05<>5
1284746563<>8c4fb07636133586366e195eece8e0254484dd8c<>Document the entire template namespace<>2911.58<>5
1284682504<>f46cfa423869157ce6752d80155ab949bb2044b6<>Generalize IOLoop.set_blocking_log_threshold by allowing user-specified signal handlers (via a new set_blocking_signal_threshold method).<>2993.70<>5
1284672563<>f6f7f83719a48083f3e5ed999e19c0ec67de9b9b<>Refactor IOStream reading logic to fix problems with SSL sockets.<>2940.43<>5
1284494682<>7b17caa0be878ebe1e5a796385c66190c5085c16<>Fixed another two win32_support import<>2830.19<>5
1284494682<>0e21608e86cc85defa265323cb8a50e6337d3d41<>Fixed win32_support import<>2858.87<>5
1284494682<>dbd0051a87aa03c9af6ef235309999c300c63260<>Added binary flag to _waker_reader and _waker_writer<>2919.65<>5
1284494682<>a1b5c33b40ffe87649eeb9aa126e622097479119<>Replaced map() in web.py with for loop<>2922.57<>5
1284494682<>4118b8e7d3a56a3b6d5ba72d900349c58ac91595<>Changed e[0] to e.args[0]<>2845.02<>5
1284486176<>fb08c11bc0011db1120a4f312f83e3ac71c1a202<>Update docs to mention requirement of pycurl 7.18.2.<>2833.67<>5
1284410474<>8dd551b9cd4cde1935f1c48378de1bcb2cb073b9<>Merge remote branch 'fiam/master'<>2856.40<>5
1284402652<>a352f5ed45e2c8647e87fecd9e9612f85aa45336<>When forking multiple processes, properly initialize the random seed<>2901.43<>5
1284402510<>98e4344fe66663d690003b39af3ac5808e499623<>Avoid raising a KeyError when there's no session expiration date<>2920.67<>5
1284401926<>6e1dbe248cdc6012ffa8feae71726bfef5c2f091<>Fix calls to getattr (which, unlike dict.get, does not default to None).<>2903.51<>5
1284052007<>34f04945a9d4e88b451f3af6ac068b3ccee21184<>Add download url to setup.py for pypi<>2917.66<>5
1283983581<>9163e3470da3bb82f310ad00925af8e92188a381<>Check self._running before rescheduling a PeriodicCallback, so stop() can be called from inside the callback.<>2911.49<>5
1283904312<>2338348edda61c663fff8a7f6f77cf489bf63de6<>Bump version number to 1.1<>2881.29<>5
1283904170<>afb82f686850116e4d3b360222c73e43a7e06ea5<>Disable SSL test on versions of libcurl with blocking SSL handshakes. (using gnutls instead of openssl and libcurl < 7.21.0).<>2899.25<>5
1283900482<>bb8d2fa458dd565b88db4e2185062f641864e990<>Disable SSL test on python 2.5<>2916.09<>5
1283900464<>2e288577a1145901dc7b4fbeaa4fd9ff6dc06ccf<>Use the older name for threading.activeCount for compatibility with python 2.5<>2899.94<>5
1283897961<>e6d93d9350c55d245c871b2558553c33eb74a68d<>Fix error in comment<>2994.65<>5
1283797449<>6d7e515ea490f1ab587fe7fa10bee001ac2f2dbd<>Fix typo in websocket.py<>2909.23<>5
1283756452<>8e34c59edd9a72fdc4be9f16074aaa3f1c3ee9cf<>Remove superfluous lambdas in tornado.escape.<>2813.99<>5
1283657939<>93fc3d0935e11ad1056e1a4cf3826935faebb0db<>Document why RequestHandler.write does not convert lists to JSON.<>2870.56<>5
1283627986<>890d829171e1c33e7b570d1a2a5a911bb45e47e2<>Add more documentation for request.files.<>2910.85<>5
1283626588<>5b9e79e733108bf983d22237587d7b6e782af0db<>auth.py updates for OAuth 1.0a and 2.0.<>2875.17<>5
1283380052<>d1b58414e0b0b239d620e4ae623680c8d73b71d8<>Remove the statement that tornado has only been tested with firefox.<>2790.28<>5
1283379417<>0aae8f9052b8b05059cfbe4f94972beb28b4f9b5<>Remove __del__ method from HTTPResponse. Closing cStringIO objects isn't really necessary, and the presence of a __del__ method prevents python's GC from breaking cyclical references (which happen on errors as HTTPError and HTTPResponse refer to each other).<>2863.33<>5
1283195901<>aab1be8bc885494f43680b2fc492dd224f68816b<>Update class docstring for HTTPServer.<>2856.26<>5
1282863814<>2ccfb35ff2604b35956a62c54bef23e5dac403f5<>adding support for http method OPTIONS used by firefox, safari, for cross domain<>3047.55<>5
1282848761<>b4c5aba7c2d00f929a1d1d16577aa5e2b6fc5d72<>Fix reference to slice.indices.<>3059.67<>5
1282848049<>86667742944aec95bb909876be486ca278254e5a<>Document the limitations of multi-process mode.<>2861.62<>5
1282847546<>c4413f5b636da2ac00d1d4d56805bc38d65ba47c<>Document the fact that add_handlers should only be called once for each host_pattern.<>2910.68<>5
1282846210<>318ec31c3d164361e99eac654a41eeb95f37f6be<>Set pycurl.NOSIGNAL when multiple threads are detected.<>2878.75<>5
1282781864<>fcab3583c051093d6f59baee420cfeace91ba0aa<>Set PeriodicCallback._running to True in start instead of __init__<>2880.37<>5
1282780442<>803f33c153408076c1493300acc8010c656e7197<>Add a tornado.version variable, and use it anywhere we use the current tornado version to produce a Server: header.<>2874.63<>5
1282779281<>3f0740c89428f0a6482f93876c1603b5a17c61e8<>Check in Jacob Kristhammar's updated websocket implementation.<>2872.06<>5
1282775661<>e571668d8947ac5f2e45aa21cb613b64eca022ed<>Add more documentation of overridable methods in RequestHandler<>2923.56<>5
1282761404<>1580728fe85d2b42ca54c88b876a452192f8abee<>Move AuthRedirectTest from httpserver_test to web_test where it belongs<>3006.02<>5
1282761189<>b398a816743db473a7f4373c251225c4d9be299e<>Add a test for HTTPServer's SSL support<>2903.36<>5
1282761130<>b3e953ea0a0bedcb6e6cf2137c8de8299a5dbe1b<>Don't swallow SSL errors - always reraise or return<>2883.42<>5
1282242315<>9d605f2bb21dba9a0b0b2c974fd173b98e93157a<>Make the SSL handshake non-blocking.<>2906.23<>5
1282240667<>252a2bb92d24e0c095d4e39cecf516e335f1037d<>Merge remote branch 'tomhsx/proxy-support'<>2872.20<>5
1282240329<>4e10c31fe8307f0e532eb2783dfad299029df11f<>Add HTTPServer(..., xheaders=True) to the web documentation.<>2873.88<>5
1282240088<>55b4eae8af9aacdab74ecc0f16dff369ddc7e00a<>Add a links section to the website<>2926.48<>5
1281937036<>00f9e48d2a2729970c51d8127968bc0e2f124533<>Added proxy support to httpclient<>2941.90<>5
1281921462<>51d6ba42dd0cd260c28d6feec1357712201f76f3<>Suppress tornado's default logging setup if there is any existing logging config, not just --log_file_prefix.<>2881.27<>5
1281921108<>221058e1cb9d8b424efd5b6af40768537f26060c<>In LogTrapTestCase, leave everything alone rather than throwing an exception if the logging config is not as expected.<>3025.52<>5
1281920674<>551ea94d2475f6702f652e49698a20be97c26b2e<>Initialize member variables in AsyncTestCase.__init__ instead of setUp to avoid masking the real error in _stack_context() if run() throws an exception.<>2907.43<>5
1281736143<>33fe4a4e9090ea0fa48f14d6ee849c81d439a124<>Fix another link to 1.0.1<>2886.14<>5
1281721910<>0ece9ed61f9fb94f68e44ea3a32fd82d7bd80c02<>Check in symlink to tornado package in website directory<>2915.01<>5
1281721837<>d8b265dd8a7da0621ec134d0fb98c8d401dda6e0<>Update links to 1.0.1 release<>2947.93<>5
1281719966<>bbc1ef1288c3b58f51b493217e4bd9dac04fde67<>Test case for secure cookie change<>2907.05<>5
1281719908<>a770a7cf6c2b0a4703cf29f419c400266fee1530<>Check for far-future timestamps in secure cookies.<>2910.68<>5
1281684863<>8d607129d9bd13da2a76d3a2acc656b0122e1e5f<>Add future import to fix tests on 2.5<>2874.54<>5
1281551680<>db3d021921fd7f55ccb018f165f634e332646ced<>Add a mention of on_connection_close to the html docs. Add a warning about proxies keeping connections open.<>2933.85<>5
1281474018<>41c14b82c41de817c0b4ab7a4e721f32cb71ac54<>Remove the ability to pre-bind parameters in stack_context.wrap.<>2962.05<>5
1281473852<>9d4444e341f4fc16fc9373526fe95bbf0c5a930f<>Reindent everything to 4 spaces.<>2921.37<>5
1281473513<>02d07def3ac3e9f553a9d69e5f63029aed29b50a<>StackContext should not re-wrap previously-wrapped callbacks.<>2848.12<>5
1281389612<>cd888f2f00228d8154c3ec043a1488dad5e07803<>Be less picky about line endings in headers in httpclient.<>3043.74<>5
1281388353<>00ce7d4d996ff4c5e19748a5582142fa53de33cd<>Add a simple main function to httpclient.py for manual testing<>3037.92<>5
1281387708<>fef1129b1668853fd854345a3b3ba3fcfd306ad0<>The periodic call to multi_socket_all needs to be followed by _finish_pending_request or else those requests won't be finished until after the next one is started.<>3061.16<>5
1281136144<>91c1bcba8ff213adcca8d8769ea7cc6b7f702023<>Record more detailed timing information from AsyncHTTPClient, and make it available as HTTPResponse.time_info.<>3035.61<>5
1281125534<>98d4126169836f498b892345137dbffa92024b9a<>When login_url is absolute, use an absolute url for the next redirect.<>3035.24<>5
1280972862<>ae3c35454787d0e5c071e9485872f9390a8bd406<>Use the right IOLoop in AsyncHTTPClient's PeriodicCallback<>3034.88<>5
1280968927<>e5bd0c066afee37609156d1ac465057a726afcd4<>Use POST instead of GET for OpenID check_authentication.<>3173.69<>5
1280968824<>becb5f270336ad972b23f2e703de677f8ece30b1<>Suppress libcurl's magic "Expect: 100-continue" behavior.<>3002.14<>5
1280968220<>8995f5a0f93717e27e01fd1de2e7ab8f54782276<>Add a brute-force workaround for the class of libcurl bugs that cause file descriptors or timeouts to get silently dropped. (the old fdset/perform implementation of AsycnHTTPClient had a similar workaround).<>2997.04<>5
1280955634<>0875b784d10927629eccc4b371f10cd16753f401<>Fix a typo in docstring<>3015.08<>5
1280948525<>2aa8927314d8bfd2e190d04bdd7642b85983411f<>Parse form bodies on PUT as well as POST.<>2968.37<>5
1280871345<>805ac65dc85e6c0f90d880135219fc88ceb31ed4<>Work around the "MySQL server has gone away" issue by closing and reopening connections that have been idle for too long.<>2994.73<>5
1280870484<>9a083095ffa709fc0531a7deb2d16e149b4ebd37<>Use the more portable multiprocessing.cpu_count() to detect the number of cpus where available (python 2.6).<>3060.54<>5
1280535773<>8c17e79bdd115c708dad6429e031dc2a4b7eb3bd<>Add a workaround for missing multi.socket_action on older versions of pycurl.<>3030.07<>5
1280533633<>293d15d55993282863904af5621b83ed7532a43d<>Only catch pycurl.error, not all Exceptions around a call to multi.socket_action.<>3029.04<>5
1280524897<>252cb1c00b999e05b0f0041829bdbbf9905b6617<>Docstring updates<>3057.12<>5
1280455710<>6df410aa53261f56d6ec0aa336c9578c246277f8<>Fix a StackContext-related bug that was causing exceptions in callbacks to result in timeouts instead of making wait() re-throw the exception. Add a test to verify that this works.<>3029.21<>5
1280455273<>b260c92d17eba13403ec4a40edba8aa12055bc7a<>Add __future__ import for python2.5 compatibility<>3031.29<>5
1280455206<>66f94d2c13ce501027106df7449d48485a132820<>Update test_ioloop to use AsyncTestCase. Rename it to ioloop_test and make other stylistic changes for consistency.<>3027.38<>5
1280454798<>15e5bf08ed8ba620d3118816722e3ecad175b916<>Add a test framework for IOLoop-based async code<>3037.28<>5
1280448220<>28adce306aa583e92a5245bee7f449345e4e5cc9<>Make all internal imports of tornado modules absolute<>3017.03<>5
1280171040<>83864d60198c001cbe53fad657a42c2a7777ad1b<>Add an initialize() method to RequestHandler for use by subclasses.<>3005.28<>5
1280170145<>dbfdf46c94dfe0d1900c459b1cdef3f26ba5e5be<>Remove unused transforms parameter to RequestHandler.__init__. Transforms are actually passed in via _execute.<>3010.80<>5
1279913708<>721e25d0acc68d751073261bec150ac12a9f88ab<>Introduce StackContext, a way to automatically manage exception handling and other stack-related state for asynchronous callbacks. This means that it is no longer necessary to wrap everything in RequestHandler.async_callback.<>3060.41<>5
1279908776<>94f073b7a209d04b463ea3098ab89bbabb8ba7ca<>Remove the old AsyncHTTPClient (fdset) and make AsyncHTTPClient2 (socket_action) the standard.<>3333.29<>5
1279842981<>eb5b3d8df7a305ac1ffa0a12c813e5d7ee4d6cd3<>Set version number to 1.0<>3205.89<>5
1279842980<>d90ba2e0da31a8f12b0930a8c6b9c3ef35697a69<>Remove old release tarballs and redirect previous urls to github<>3480.21<>5
1279836805<>22f452569cabcbfb5b396e01d3708437cd267571<>Move download links to github<>3233.65<>5
1279834147<>0bb985a8d4f1d8be46e06107ac0e8ecb206cfc3b<>Remove websocket.py. The websocket protocol has changed in incompatible ways (and is still not yet final), so the version implemented in this module is not compatible with current browsers. This module may be reintroduced in the future when we have an implementation of the new protocol.<>3268.97<>5
1279832861<>7a288245dc49589f84c45d25fbe4320185cae7d0<>Update installation instructions.<>3277.40<>5
1279646725<>2c89b89536bbfa081745336bb5ab5465c448cb8a<>Accept None (i.e. unmatched optional groups) when extracting parameters from the path.<>3288.59<>5
1279593582<>ad104ffb412dbbf66da0bb67d5e48d8907a7b17c<>When no json library is found, don't throw an exception unless json functionality is used, to make the simplejson dependency optional for python 2.5 users.<>3257.18<>5
1279570168<>ea032b6c9c8dd5ff370057a73a762d4a7af1e897<>Check for EINTR in a more flexible way for compatibility with older pythons and poll implementations.<>3290.56<>5
1279156336<>7a30f9f6eac9aa0cf295b078695156776fd050ce<>Fix typo in support for multiple ui_method/ui_module containers<>3319.99<>5
1279150852<>c78ab55dc07a137b8eee1f8e09857102bcb19e98<>Better timeout handling in AsyncHTTPClient2. Tornado and libcurl may use different clock functions, which can cause timeouts to be delayed (in some cases until the next fetch is started). This change resynchronizes the schedule after each timeout call.<>3311.32<>5
1279122246<>64d8d4e5080b4ee75b842b77eaf4c3deef9a8f42<>Fix small bug in database set up.<>3251.85<>5
1279009732<>e2181b035b216c60bd1b67736ca334562c0e9c84<>Make iteration over sql fields clearer<>3249.46<>5
1279009561<>a9090a97f49dbcb93653c259d831e5124a154574<>Remove unused imports and variables<>3297.53<>5
1278724512<>b42c61c88ebabbd20ba3bb6d797ff73249ab2b07<>In AsyncHTTPClient2, disable IPv6 for versions of libcurl with the socket-reopening bug (i.e. <= 7.21.0). (this can be overridden if needed with a prepare_curl_callback)<>3321.22<>5
1278706063<>557da3db1c912039bda9d0e54717e4bd23af8c9c<>Unquote percent escapes in captured groups in the path component of the URI, to be more consistent with our handling of query parameters.<>3302.34<>5
1278705421<>455eb75b18afbe625c8a2fe97c1a9888ef09ed50<>Revert "Parse percent escapes in the path component of the uri, to be more"<>3336.83<>5
1278638863<>7b80c2f4db226d6fa3a7f3dfa59277da1d642f91<>Parse percent escapes in the path component of the uri, to be more consistent with our handling of query parameters (especially important when capturing groups are used in the URLSpec regex).<>3297.64<>5
1278634460<>a7dc5bc4b463c90c41355c9d8d54e82fd39cee5f<>Consolidate the various HTTP header dictionary classes into one, which includes better handling of headers with repeated values (e.g. Set-Cookie)<>3346.55<>5
1278629564<>e98735bf4b35688aadeaffbfe1fc6ad636ebc318<>Disable preforking by default in HTTPServer.start().<>3790.52<>5
1277743966<>2ac7426855dd06ee6daad69985d6ad5f62b26437<>UTF8-encode more user-supplied strings in httpclient (headers and user-agent)<>3768.69<>5
1277593226<>52c378f7f8bcddbffa521bec93d02b61425f062b<>Update the set of active file descriptors immediately after calling perform instead of after running user callbacks, since those callbacks might have started using file descriptors that were closed by curl in perform().<>4041.96<>5
1277590575<>33c3f8d28bfda17e100a5d4f77880bd017e56807<>Include the HTTPResponse object as an attribute of HTTPError<>3765.59<>5
1277341290<>60ef8d5d909d25f4c1c5e35bef199b0799cd264e<>Remove unused "overwrite" argument to options.parse_config_file<>3776.49<>5
1277137767<>e7654cda9cc288201d8db116225e45212eaf597b<>Fix typo in comment<>3737.93<>5
1277002540<>1ba0161e384eba2ec65a9cd5f5f4a677f7e98bd0<>Add a second implementation of AsyncHTTPClient, using a new libcurl api.<>3755.90<>5
1276901959<>df0d88eb8d3eef5f2fe351676ef1500e115e3131<>Close wsgi responses correctly - the close method, if present, will be on the result of self.wsgi_application() and not on the list of output we're building up.<>4106.39<>5
1276206597<>39ac6d169a36a54bb1f6b9bf1fdebb5c9da96e09<>In the libcurl file descriptor limit hack, log to both stderr and logging.error since they may got to different places and one may be more visible than the other.<>3738.01<>5
1276022923<>27171cde844065591b160e1a1193f563cd0f4e57<>Catch and log exceptions from user callbacks in AsyncHTTPClient.<>3775.51<>5
1275896639<>b8271f94434208646eeec9cf33da703d97c5364e<>Fix missing import<>4138.38<>5
1275287972<>d1e145039c40b0b50d8dac63c3ebaf53b8b5c8fa<>Optionally allow nonstandard http methods to be used in httpclient.<>4117.46<>5
1275287972<>d5a3d8a027306426c9d722219f52b71cb6816244<>Changed it so one can access the StringIO buffer<>3767.10<>5
1275287972<>6f6c95054fd98998aa47bd1dbed3c1e9a81b33dd<>Clear the close_callback set on the IOStream by RequestHandlers in finish(), so that the close_callback does not prevent garbage collection of the handlers.<>3772.60<>5
1275287962<>5d430b100abaae34f9241af0d21e86622715d5a7<>Close the socket on uncaught exceptions from iostream handlers.<>3748.80<>5
1275287930<>2b0684028a9ca38318ce5038fa611e7274576e22<>Improve parsing of multipart/form-data headers.<>3847.11<>5
1275287930<>982554e710344b498887020071b921a3e63a17ac<>Added RequestHandler.get_arguments(), which does the same normalization as get_argument() but returns a list for repeated arguments.<>3322.19<>5
1275092759<>548bd70d7ba3463331911225d33cfa8f706bdbd5<>Update documentation for WebSocketHandler<>3320.55<>5
1275092212<>70a377088a2a589cb1433a508fc6ecec3c053c18<>Revert "websockets: continue listening for messages after parsing completion"<>3312.97<>5
1274823410<>7f8725c718e2614536bf48638b103f1fca033ba1<>Allow StaticFileHandler subclasses to set additional headers on the response<>3351.61<>5
1274812842<>57a9ac031a86aa1389144ea06638b5550d525b3e<>Don't try to compute max() of an empty sequence (which throws an exception)<>3808.52<>5
1274753191<>d6002cafa15847cf4eee96832a96382113901e36<>Add a hacky workaround for libcurl's FD_SETSIZE bug. It's ugly, but better than undefined behavior.<>3303.33<>5
1274388603<>b9a9ccc38841fcb9f8486e0d2854d570c34fe4c8<>Make it possible to override template_path at the handler level<>3323.61<>5
1274063706<>0c363662462e0408ba10bc2fb831066cf27fea63<>Use a lambda instead of functools.partial for pycurl.HEADERFUNCTION. Older versions of pycurl (including 7.16.2.1, which is the recommended version for Mac OS X 10.5) only work with real functions, not objects with a __call__ method like functools.partial.<>3317.44<>5
1273456474<>e8dec4d0b0431c4826188a0ac2d550cc0b01deaa<>Merge remote branch 'dlo/master'<>3579.52<>5
1273456309<>f0a3d8950b497b03755cdc15f3a456526956cb63<>Translate </ to <\/ in json output to avoid issues with the string "</script>".<>3314.05<>5
1273455966<>26af9e40e012dc6005a59921e6f066f352707733<>Support additional keyword arguments on cookies (to be handled by the underlying stdlib Cookie module)<>3314.11<>5
1273014305<>9ea5f8a277db96557ae7867375c7db4d8c5f633a<>websockets: continue listening for messages after parsing completion<>3322.70<>5
1272673720<>00ad92f3982b7cb6f4634186b98219816cc5dac0<>Allow for missing "expires" field in facebook session, which can happen if offline_access is granted.<>3351.82<>5
1272522465<>339f08bdbd2a1a32c873431a9fab0415c35b3467<>Correcting a grammatical error (attribute -> attributes).<>3325.07<>5
1272324450<>808473910a1467ae88d034b592212142bee38278<>UIModule.css_files returns CSS files, not Javascript files<>3339.75<>5
1272223638<>bbdf207637e4b035d0882619f642a3ae32a04fca<>Updating base Twitter url<>3306.98<>5
1271977961<>0fcef4e2376626a2d961931243ab0a828be956d2<>Clear itimer signals in autoreload so the combination of autoreload and ioloop.set_blocking_log_threshold doesn't cause the new process to get killed.<>3303.88<>5
1271884678<>9f7c9a38ff4d07fc79101bb05809cecd2efb8d6c<>Use escape.utf8() instead of .encode('utf-8') so we don't double-encode<>3344.30<>5
1271883425<>c87e84f068706eca9e078937c8ff5857a72b8331<>cStringIO's constructor uses a 16-bit encoding when given a unicode string. This is inconsistent with its write method, which encodes all strings as ascii (and rejects unicode strings iff they have any non-ascii characters). This change uses utf-8 as the default encoding when constructing cStringIO objects in tornado.<>3483.37<>5
1271876264<>b686d6d44617d2dc7df54e8144cadab93ea4c060<>Add an option to log a stack trace any time the ioloop is blocked for more than a specified amount of time.<>3305.72<>5
1271803233<>ca8002fa9f8182504e117f11c289fabe544f1a50<>Send all logging to the root logger instead of per-module loggers. This undoes the effect of http://github.com/facebook/tornado/commit/e391fd289ed085671344504cc5b1fa84f5a3c774<>3341.23<>5
1271722040<>40ac8d362a2f9d0f076ea1ba4d4ccec0b8ee274a<>Fix header parsing in httpclient for headers whose value contains ':'<>3795.15<>5
1271701203<>b8a28243437892a0802fba5a8a95ab1b0f6f5b2d<>Better HTTP header parsing: Allow (and strip) any amount of leading and trailing whitespace around header values instead of just a single space. Such whitespace is legal but appears to be uncommon (and nginx apparently normalizes everything to a single space) http://tools.ietf.org/html/rfc2616#page-31<>3358.04<>5
1271700186<>43e02a2d88d67fdc8da532c60b13125af11590e4<>Add a closed flag to AsyncHTTPClient so that a scheduled perform callback won't cause an exception after the client is closed.<>3353.48<>5
1271113599<>fc00b61751bc5be9505db03408db93a9cd00f7f0<>Use the original request's protocol as the openid realm instead of hard-coding http.<>3357.39<>5
1270684474<>62bc2e40fd24d5389aa7da66cabab6246abd6eec<>Add support for reading translation from gettext .mo files instead of CSV.<>3326.99<>5
1270502476<>002ba2c1801e963a9cfaf3f023d464c12ae16a42<>Log a warning when multiple handlers have the same name.<>3365.19<>5
1270495404<>b5365d8c015b11a26b5ac6f29a40cd4d59e550e3<>Make options.__getattr__ raise AttributeError instead of Error for consistency with standard attribute lookups (so getattr(options, 'foo', None) works if no option 'foo' has been defined).<>3314.77<>5
1270234059<>218dd1edc86e329e6c12f26d8fa253fd56205b73<>Escape double quotes in addition to angle brackets and ampersands.<>3362.10<>5
1270233656<>e520b21ed297cb92706356e6a0877df02205564c<>Adding for the ability of ui-modules to add something at the end of the body of a document.<>3367.60<>5
1270233138<>794685b892fa0214cc9ed95f365d63979d2a11e1<>Merge remote branch 'mgenti/master'<>3346.17<>5
1270075049<>5f4413bec42dcccce2d85f1421b49218fc5d6712<>Return a write method from start_response, as required by the wsgi spec.<>3345.90<>5
1269956417<>c33709a0ec4acf786d8ee843f8f3fbd520f59068<>When using the select based IOLoop, select can throw an error if based to many socket. This does not have an errno<>3337.85<>5
1269711046<>32a31f4e8ed2385a71b228d605c15ec47ce4d85d<>Don't try to colorize log output on terminals that don't support it<>3331.55<>5
1269644104<>a4ba918180ca292cc2f67a6793c8563cec0d1ac3<>Make add_handlers (for multiple hostnames) usable with static_path (which forces the creation of a wildcard handler) by maintaining a sensible order for handler groups.<>3326.94<>5
1269558577<>6326f82715e67316c0ca5012bc6397080f764eb7<>Add a warning about the experimental status of our win32 support<>3341.61<>5
1269558009<>7b458119c4b90c25bf8f9d51964653fbbe5ba104<>Be consistent in platform checks: use os.name == 'nt' everywhere, replacing uses of os.name == 'posix' and sys.platform.startswith('win')<>3311.40<>5
1269557958<>064cc4693d2bec86a6fc2eec84c90aa097b6bbfb<>Make ioloop test runnable on unix (chmod +x and add #! line), and remove hard-coded PYTHONPATH manipulations. Add a small readme for tests.<>3364.66<>5
1269443643<>3e1d57b2bde20d1d4dbbac4ab1ba64bac333e2e1<>Fix for raising an exception; Fix for waking loop; Added test<>3364.88<>5
1269437123<>73fbe2843dfbc950f2264676f9d3f054fef39217<>Merge branch 'master' of git://github.com/facebook/tornado<>3789.73<>5
1269392000<>e391fd289ed085671344504cc5b1fa84f5a3c774<>Use per-module loggers instead of the root logger.<>3331.12<>5
1269390674<>e340491473498e7b67fd0e9e2e2a31d6b16ee20e<>Add __slots__ to ioloop._Timeout to reduce memory overhead when there are many pending timeouts.<>3370.50<>5
1269354586<>9f4c6af84ac58b903cb500249bb20bac13b87d62<>Implementing suggested changes<>3315.99<>5
1269354274<>ae7f90bf5b2146cdec2a3da41bb7dc4cb14c3f85<>Merge remote branch 'upstream/master'<>3373.48<>5
1269300905<>33a587b0d5dc22c4f124734acca904759123a453<>Don't put wsgi response headers in a dictionary to support repeated headers with the same value (mainly important for Set-Cookie)<>3310.95<>5
1269112842<>7fda8c5d381b293d8c8b632b7dd007d8533ba9a0<>Don't set the etag header if the handler already did it.<>3347.41<>5
1269022856<>bce36a7c1aa9d2eef490a87745d3eda7282af7d1<>Add a callback to handle headers in httpclient as they come in, so they will be available for data handled by streaming_callback.<>3323.58<>5
1268944069<>70fb42d6a0b5e4fa2eed4d3aa4c795b957798e19<>Add a close method to AsyncHTTPClient.<>3334.42<>5
1268878953<>03308b1a7dad63d5ff12155d097fb6ee110a4cf3<>add a template_loader application setting for using custom template loaders. a slight refactoring of TemplateLoader's load method to expose some internals. also, add a reset method to the loader that's called in debug mode to flush the template cache.<>3330.00<>5
1268877097<>8359c05ca061ba012805e7ba74da1f9dde73941d<>Support named groups in url pattern regexes. Note that either all or none of the groups to be passed to the handler must be named.<>3356.86<>5
1268876912<>fca7c831341b864916c6c97bdbdb2f95d95b2c12<>Allow more than two consecutive curlies to appear in templates (and use the innermost). This was previously a syntax error in the generated python.<>3882.16<>5
1268875743<>8c096b231ccf3285b5384bb9b03b24a4a4821bd7<>Combine repeated headers with the same name into a single comma-separated string http://www.w3.org/Protocols/HTTP/1.0/spec.html#Message-Headers<>3378.42<>5
1268863157<>40ce72c1c6339da37d0081c1e5ec35cce0ee8a89<>Replace all tabs with spaces.<>3383.22<>5
1268536106<>6d070f77c2a694ba5739e50203b7f88170783ed1<>updated the gitignore to include files generated on installation<>3346.78<>5
1268257236<>6704dc99a073ed7f6c30400d4bc7dd875f345df5<>win32 needs to open the files as binary<>3384.03<>5
1268257190<>bec0552eff1160c601c3c96adaf03bc78d9845d8<>Trying to better re-use code<>3378.86<>5
1268257078<>248c57809fe62af118aee451d82ec14a7939d8e5<>Merge remote branch 'upstream/master'<>3368.19<>5
1268155043<>d2ca9ad61850dd716ba07fb2a5c7636d1e0edbcb<>Fix bug with IOLoop's 'waker' pipe which rendered it ineffective on linux and mac (where pipes are unidirectional) and caused high cpu usage on solaris (where pipes are bidirectional). Thanks to Jari Ahonen for finding the bug.<>3894.26<>5
1267994872<>45f76c518eaf032c40fd39cc1384577742e5dd4d<>In finish(), test if chunk is None rather than using truthiness to decide whether to call write().<>3362.26<>5
1267735173<>8637a738ef1bd3d4236f64329d4956b641edc1a6<>Set the close-on-exec flag on file descriptors used by IOLoop (epoll/kqueue and pipe) so that long-lived autoreloading processes don't leak file descriptors.<>3359.58<>5
1267732338<>f4359bc12864f0c5dd5d4f92403c8c19c34e5f8c<>Use a WeakKeyDictionary instead of a regular dictionary to associate IOLoop and AsyncHTTPClients. This prevents leaks of memory and file descriptors when one process (in my case a unit test runner) create many IOLoop/AsyncHTTPClient pairs.<>3348.29<>5
1267672485<>d42334e3197680e988805c8201fcc6f09abb1366<>Allow subclasses of IOLoop to override the default logging of uncaught exceptions in callbacks.<>3335.73<>5
1267665768<>a0af68cc04aeb68cc98b8452524c4bece108b0cf<>Ensure that self.io_loop is set in HTTPServer.start(), so that HTTPServer.stop can clean up correctly.<>3376.98<>5
1267499884<>62cdb36b6c97100bbee827b2fd73bd74e4b72a64<>Revamp logging configuration.<>3358.76<>5
1267230981<>61f0fafe4bc8d5aa077767ef6c3dcebd9acfc34b<>Call the close() method on the wsgi response object if it exists. This is required by the WSGI spec, and cherrypy leaks memory without it.<>3364.73<>5
1267222089<>f6266ba8064bbd5e0a73fa3b921624fd9ad551f0<>Add SERVER_PROTOCOL variable to wsgi environment. This turns out to be necessary for using cherrypy in a tornado WSGIContainer.<>3361.70<>5
1267207887<>1ae186a504224e9f6cf5375b56f8e26e4774e2a0<>Add exc_info parameter to start_response() in WSGIContainer.<>3351.52<>5
1267141748<>c5627d2f1613f6bf60c826bfbb84eae08f1c98e6<>Work around an odd error I occasionally see in autoreload (which causes autoreload to loop endlessly without restarting the process)<>3370.81<>5
1267058231<>f9cda8634bf80bf6978bb443561ae9304e476fee<>Add a workaround for a bug in os.execv when used on Mac OS X versions prior to 10.6 when there are multiple threads in the process.<>3359.23<>5
1267053519<>010271d7eca811f1540c8eda20d3d2d3c06feb10<>Always reraise KeyboardInterrupt and SystemExit whenever IOLoop tries to swallow exceptions.<>3336.00<>5
1266353603<>15ceda22784752436f96d7af254705010177ae0c<>Fix ioloop._KQueue to work correctly when listening for both read and write.<>3756.84<>5
1265394297<>ef83f4b6cafabbc3183db061c03faf5cf58d6808<>Support passing in cookie value directly in cases where you have to parse the value from other sources (e.g., from the URL for Flash requests). Also fix documentation error for Facebook Connect.<>3346.67<>5
1265318323<>7ffb44237fdd655a7650805dd51f126b5bfd8b8a<>Don't set content-length in StaticFileHandler unless we're actually sending the content. Some browsers get confused by this (e.g. the version of webkit embedded in fluid, but not the version used in chrome).<>3869.33<>5
1265270529<>c1be85fcfe3d5a841be3bfe99b0c7b714a0dd4db<>Add backwards compatability for secure cookie reading<>3460.81<>5
1265269880<>4daeb8d880204f5baa64fc958654da9dff60ae0e<>Simplify JavaScript path ordering patch<>3370.64<>5
1265240945<>a34dc422e25fbfd8704e652ff787e87a385f2f6d<>Import setuptools if it's available.<>3331.33<>5
1265240812<>ae1ed23421ffefa27fac765003cca41026bb971d<>Making sure StaticFileHandlers get first, if not, a catch all handler would break the static handlers.<>3339.66<>5
1265228324<>3e9a285af0a7c4f3c7fa4a512bd9f6191995194b<>Include cookie name in signature so that a value signed for use in one cookie can't be used in another. Note that this invalidates all existing signed cookies.<>3365.76<>5
1265228248<>efbc2e09b9e9fc28f3919f44df0c14c1bef2b41c<>using os specific path seperator<>3377.19<>5
1265227869<>8aae3263dd9ec9271d27a1b0aa4f04e8d6278d12<>Fix for maintaining script inclusion order<>3376.37<>5
1265227676<>0984e008c96a5157755e00765ee41532b01a65a1<>Added the ability to stop an HTTPServer. Mostly for unittesting.<>3492.27<>5
1265227603<>74f75616c15c225e1bf717f96c93bc67af5e5422<>Stop parsing arguments after --<>3861.28<>5
1265227503<>20361993368b87c607d450484d32bc305dbd2146<>Fix EINTR exception handling for non-english locales.<>3375.26<>5
1265227017<>8186101e6530dcc025b714a7e8ee3026f5fa3665<>Set headers earlier in StaticFileHandler, so we return the correct content-type with 304 results (instead of always returning text/html)<>3371.82<>5
1265226572<>77eb5867e1473d3e575cc314277b3746947c2958<>Add static_url_prefix setting to allow serving of static files somewhere other than /static/<>3362.47<>5
1265212981<>123771a096b228e869028c848e44e9d32456c4a9<>Added support for running Tornado on win32<>3834.33<>5
1264725860<>e30e28bcfb9a8880bc1889c425e36f1c1476e930<>Add a hook to allow applications to modify the curl objects directly.<>3351.69<>5
1264667302<>b6ad0f6323a4b67f6aa38f004af88f683cba343b<>Merge branch 'master' of git://github.com/bdarnell/tornado<>3345.33<>5
1264664772<>a2adfa1f997e6ad731c0d8da81dfd9831e4d4999<>allow connect and request timeouts of zero<>3356.35<>5
1264664117<>47db027764c32e097353f1119a80c04b6b0d0b79<>use self.headers for cases where no headers were passed in<>3348.53<>5
1264194591<>a1991136fdab2700c627cb94ac8f9d4db9cc5dca<>Make parse_command_line initialize logging even when there are non-option arguments.<>3343.50<>5
1264194513<>adcc1039942ce756a1eb9ebf872d0b7483cbefa1<>Merge branch 'master' of git://github.com/facebook/tornado<>3771.49<>5
1263843579<>1e291eb5092d232d84be5914429808aa24c9ee9d<>Add HTML 5 WebSocket support (see http://bret.appspot.com/entry/web-sockets-in-tornado)<>3376.44<>5
1263791544<>fb66140dce8e002ffc10e5d6985df9e3e3f9225e<>Fix httpclient / epoll interaction errors, per http://groups.google.com/group/python-tornado/browse_thread/thread/276059a076593266. Thanks everyone for the patch and discussion.<>3336.05<>5
1263616062<>57ec818a3f8ab56dec1b6cf585fa7c8c4d6ab80a<>Catch both IOError and OSError in another place.<>3366.40<>5
1263609720<>8c2429dbd3472d651a03839bd2568d30b1ed7c8d<>Catch IOError in addition to OSError in IOLoop.remove_handler (friendfeed's epoll module throws OSError, while the one in the standard library throws IOError)<>3363.23<>5
1263467278<>7e3ace860790c80ef2170ede1ef57e5955727515<>fb demo fix<>3357.85<>5
1263248247<>c436d7aa8df246dcb9e70a6a16fe558618c60d13<>Fix new connection close handler for WSGI handlers<>3851.38<>5
1263239601<>9107b6be2bffe4bcaf8cd47cf79c6d792cdf71d4<>Add reverse_url to RequestHandler class as well<>3370.24<>5
1263236543<>7014417608d03e7af2c7aba58ba358d8657a24a2<>Merge remote branch 'bdarnell/master'<>3368.11<>5
1263234701<>e4c6eec2114d2d95e48762dc8099b364e0a4e23c<>Use time indepdent compare for secure cookie.<>3899.87<>5
1262919971<>1ea5df5e6f44bb3b98c830535319a92c386cda93<>Add a method to RequestHandler that can be used to detect when the connection has been closed by the client.<>3461.97<>5
1262919227<>d877a65d471f5a52ea7109897d6c4294de6f5cb4<>Add a kqueue-based implementation of IOLoop for BSD/Mac systems.<>3858.67<>5
1262051700<>52d20a0dafe207a1f8da03b2be73b0682209b1c2<>Don't try to write to a stream that was closed out from under us. This should get rid of all the "exception after headers written" spam in our logs.<>3889.22<>5
1262050025<>6ee22230f8e657591ef3cd5d3dda8e9b36125786<>Add httpclient support for the delete method.<>3878.17<>5
1261011697<>3ab63905aa3801b0ab11becb145366964a18e896<>If IOLoop.stop is called before the loop is running, make the next call to IOLoop.start return immediately, so that one call each to start and stop will result in the loop not running rather than running infinitely, even if the call to stop happens first.<>3872.15<>5
1260832886<>22d840ed1d3728dedd2344f1194b1f89f20cdd83<>Added kwargs to get_error_html in the RequestHandler so that downstream actors can render or otherwise use the exception object thrown. This is a backwards-incompatible change for anyone who has overridden get_error_html().<>3903.50<>5
1260407238<>4381df04e70452e3ebf15c925031f477da0a6c30<>Use empty dictionary instead of None as default for kwargs<>3847.66<>5
1260406744<>1823a772c08aa0f3f218f733bf98b7bf094e2ef9<>Fix missed variable rename<>3879.17<>5
1260405859<>df5c994ae0d2961f3607759e8525872bca94d43f<>Add Application.reverse_url, which can generate a url to a handler by name. This minimizes repetition of url patterns for links and redirects.<>3873.94<>5
1260400988<>9ade70501e2103dcbadc0918acc4fc195593ea86<>Merge branch 'master' of git://github.com/facebook/tornado<>3910.36<>5
1260352130<>b3d98c4a369e50eddb0411af9174b232f8b6ad28<>Add basic error checking so you can't add a server to the IOLoop twice<>3781.73<>5
1260351905<>8d4dde80e85a9d34631c68746fa0ff4372880792<>Typo in error message<>3909.02<>5
1260347043<>6fb90ae694190fcedc48d9fb98b02325826d783e<>Pre-forking implementation so a single Tornado server can utilize all CPU cores<>4052.56<>5
1260291362<>1da2b3c5c65c23f97433f9ce33fc1a70d21c4d27<>Add gzip Content-Encoding support with 'gzip' application option<>3831.05<>5
1260231439<>41a94730959d641e6c2c765ca631645327805c5a<>Add REMOTE_ADDR to WSGIContainer<>3914.54<>5
1260230008<>ce20498adb28f65d120e8daa3f3d2fa50aed9361<>Merge branch 'master' of http://github.com/facebook/tornado<>3909.06<>5
1260229636<>400d2c9f80d0e3c9652bf8df0c9d35b54cba459e<>Make WSGIContainer._environ public and static, so it can be used to adapt tornado requests to WSGI environments without a full WSGIContainer.<>3901.63<>5
1260178086<>41e46d97f5648e241f04051e3ed12bd095c04d4c<>Fix transform headers bug<>3873.15<>5
1260070610<>c50d9b8c789eb1914f31bd4dc7adbf1383c8fdb1<>Ignore XSRF cookie check when X-Requested-With XMLHttpRequest header is present<>3911.85<>5
1259870272<>5fc06caffe9a362a526e6c5480a2ebdd174eb29f<>Add a FallbackHandler class to allow use of other applications (e.g. tornado.wsgi.WSGIContainer) from within a tornado.web.Application to facilitate migration from other web frameworks.<>3926.01<>5
1259087258<>595ffa1975835c82ef21b4cfd8bc5076c292e828<>Add support for Squid proxy headers<>4221.09<>5
1256720423<>7546f8d3b21cc31ed1ec679fd093be4cb9156e51<>Ask for more Facebook Connect fields by default<>3919.32<>5
1254813230<>b5c6ccb312c21a653e29e449801ec3e8dad2dea4<>Initial support for SSL (thanks to Dan McDougall for suggesting this and code samples)<>3927.52<>5
1254454909<>718c1816e13ac71ad9cb88b597b82df41ff35db9<>Missing website images<>3943.08<>5
1254454889<>4e0a8433d9519a78fa255a1f76a01100bcc8ae43<>Fix embedded CSS bug<>4125.93<>5
1254347796<>681d4d2fabaa3df89bdb43213e7e13c917cebf40<>Add links to FB, Twitter, FF on web site<>3864.14<>5
1254297660<>b32b6b4b0435e974db8990f6cc6cf9b8daed9952<>Bug fix<>3839.13<>5
1254295960<>aa836cdf3952d52efc68201872b3a0053aca33ad<>CSS/JS embeds after files<>3875.56<>5
1253731577<>571dd056d226109592d2e05225a4c360cdc31a31<>add address param to listen<>4229.96<>5
1253551113<>50528c010ae06ff14d7c9ea2e682de6549ba4c8f<>Typo in PeriodicCallback<>3799.43<>5
1253242390<>d6e9cd5a116fe640dffe019079900c80c13673de<>New 0.2 distribution from the past week's bug fixes<>3898.52<>5
1253242052<>11503326a6ed78907aee462fc07ef0b9cdb0c8a2<>Turn on auto-reloading when 'debug' setting is given<>3828.01<>5
1253234806<>c4f682d4fef08cffb4156d9f19f2e62ccb355024<>Bug in locale.py and increase poll time for autoreloader<>3888.76<>5
1253167182<>6e1cb0ddf45c968e74db570c6c0499cb0ff321e4<>add streaming_callback option to httpclient<>3900.29<>5
1253090998<>237944d5241aedc2a281c7a17cbb08a3f18c5a2a<>Rename auto-reload module<>3922.76<>5
1253089752<>be71a24f1ae9223558152b61b9b93a0635d1a0a2<>Experimental module auto-reloading on modification<>3898.38<>5
1252977006<>dd6cadf2776ab2afec484cb7cf366f730e174647<>Auto-reconnect on MySQL connection failur<>4122.52<>5
1252975245<>f524cc6ad5b216ac42fe7e12410bddedad4a2abd<>Add gitignore file<>3905.21<>5
1252957387<>016dee1e9659297ddcaf298ae7ee1e26812e5504<>use correct module<>3848.94<>5
1252951707<>c59cf2ab0657e56ffae9908f6f651cbf893dd21c<>make logout link work<>3899.63<>5
1252946724<>2be82a07b38e8c64cb066cea158e38350c07749c<>Fix multipart/form-data for WSGIApplication<>3877.56<>5
1252946256<>91d90b2ff1c7e4901ff197a503af1732c2909953<>Get rid of unnecessary/inconsistent mixin<>3853.42<>5
1252876435<>82a2de536ae92f26f2cc89c6945fc759be0aabf9<>Add addslash and removeslash decorators for, e.g., redirecting '/dir' to '/dir/'<>3857.99<>5
1252869976<>37e671203620c8b030412666fd03283fad9fcd44<>Two minor typos<>3815.71<>5
1252865997<>8ca616088cfb26ff19fcc6f359d654fef905b8da<>Add initial WSGI container support for running other frameworks on Tornado's HTTP server<>4250.09<>5
1252772703<>9c51d01b123fed12907e7f3a5f85d19525de3196<>Don't reference Exception.message due to deprecation in Python 2.6<>3910.38<>5
1252694588<>6b07e69551f045e4632660ed20a2c66606cb92d4<>documentation typos<>3871.15<>5
1252669653<>9e24ae162d024e4049b8811d7ca19e319c20021d<>s/Google Code/GitHub<>3879.21<>5
1252618768<>f6798502befee7fa5c66696dac31b443bbb5a3ff<>Merge branch 'master' of git@github.com:facebook/tornado<>3914.79<>5
1252618763<>cdcfb26316845294178707bb235cee0ce953e8eb<>make sign out clickable, ignoring automatic redirect for now<>3871.70<>5
1252617873<>72707599e8da89bba125df14ed454562224fc9fb<>Merge branch 'master' of git://github.com/jaybaird/tornado<>3885.36<>5
1252617023<>e0526867ca0fe0e2839b46acc597fa1509150bc5<>typo<>3881.56<>5
1252615273<>41ea6da5f5cc79721614430bd0a3bcb4bb0a8251<>both links work, but this one seems canonical<>3874.28<>5
1252614279<>2fd2ad6d42f66efc6565231d08b29bdf92f257d8<>remove cases where intern is used. This will prevent a DoS via memory starvation if a lot of requests are sent using random headers<>3898.17<>5
1252609296<>19c8610eee0b669298984786083a318439e594f7<>typo<>4051.48<>5
1252608567<>2e1e2a79826999bd9d20cf4c5b60e4bce8930ad7<>Add python-dev to apt-get command per http://groups.google.com/group/python-tornado/browse_thread/thread/d88de85aa33193a7<>3873.41<>5
1252607729<>e48e2b1129be390fca684635f6f232fe26adb63b<>typo<>3885.09<>5
1252606316<>e997ac0ad9133a9768996ff3c7fe415922c9302a<>Merge branch 'master' of github.com:facebook/tornado<>3898.74<>5
1252606299<>01405d0b08e91f0ffed0a7a41af9f96e3542381a<>typos<>3846.50<>5
1252606168<>6794fced8023bcc5783589554dbd6f9db7274d51<>Merge branch 'master' of git@github.com:facebook/tornado<>3869.68<>5
1252606161<>f431c9e59701bd7d841d9401fda1895b2456ae4e<>updated tarball<>3861.80<>5
1252605146<>d9d3e9cafb016df407e15121c2390d707fb26253<>fix README<>3895.80<>5
1252604839<>e197a479bef594614e1a10a04e7b33b420005efc<>escape more<>3889.39<>5
1252604288<>e4d56d91839f74896c24cf52c987b5a82cdce849<>typo<>3816.39<>5
1252603492<>71a44bc082ab6f09d3b948f11bb6fa1585a36424<>Another typo (thanks, Ben)<>4119.32<>5
1252600189<>9a8bd2fb6fd6279be16d6f0a2e57e49fe1b98f8f<>Add prerequisites to Tornado docs<>3897.72<>5
1252570604<>98a6bd9ac795809ef2c4f7b7152d527e0f852d6c<>Fixed typo (thanks Casey)<>3857.96<>5
1252569187<>efd4666dfbb000ad067c2aab4b67a57d60ebbeb3<>No favicon for Tornado web site<>3864.81<>5
1252569051<>2afa97349330d1a224a7e4fdce0dcdf760222a8b<>Move Tornado project to Github<>3865.00<>5
1252473318<>07e5e8c43d5cec87aca862276f296af58695d520<>Wrote initial README file<><>5
1252472484<>11de50a83acb07ab3a4439b38f0153444a124381<>Created project<><>5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment