Merge pull request #882 from collinanderson/whitespace

clean whitespace
This commit is contained in:
Berker Peksag 2014-09-10 17:07:32 +03:00
commit 257e2228ae
32 changed files with 120 additions and 139 deletions

View File

@ -60,7 +60,7 @@ test suite on your branch before submitting a pull request.
Make sure you include relevant updates or additions to documentation
when creating or modifying features.
Write clean code.
Write clean code.
Pull requests descriptions should be as clear as possible and include a
reference to all the issues that they address.
@ -147,8 +147,8 @@ benoitc.
### How can I become a maintainer?
* Step 1: learn the component inside out
* Step 2: make yourself useful by contributing code, bugfixes, support etc.
* Step 1: learn the component inside out
* Step 2: make yourself useful by contributing code, bugfixes, support etc.
* Step 3: volunteer on the irc channel (#gunicorn@freenode)
Don't forget: being a maintainer is a time investment. Make sure you
@ -160,8 +160,8 @@ maintainer to make a difference on the project!
It is every maintainer's responsibility to:
* 1) Expose a clear roadmap for improving their component.
* 2) Deliver prompt feedback and decisions on pull requests.
* 3) Be available to anyone with questions, bug reports, criticism etc. on their component. This includes irc, github requests and the mailing list.
* 2) Deliver prompt feedback and decisions on pull requests.
* 3) Be available to anyone with questions, bug reports, criticism etc. on their component. This includes irc, github requests and the mailing list.
* 4) Make sure their component respects the philosophy, design and roadmap of the project.
### How is this process changed?

View File

@ -52,7 +52,7 @@ After installing Gunicorn you will have access to the command line script
Commonly Used Arguments
+++++++++++++++++++++++
* ``-c CONFIG, --config=CONFIG`` - Specify the path to a `config file`_ or
* ``-c CONFIG, --config=CONFIG`` - Specify the path to a `config file`_ or
python module.
* ``-b BIND, --bind=BIND`` - Specify a server socket to bind. Server sockets
can be any of ``$(HOST)``, ``$(HOST):$(PORT)``, or ``unix:$(PATH)``.
@ -147,7 +147,7 @@ Instrumentation
---------------
Gunicorn provides an optional instrumentation of the arbiter and
workers using the statsD_ protocol over UDP. Thanks to the
workers using the statsD_ protocol over UDP. Thanks to the
`gunicorn.instrument.statsd` module, Gunicorn becomes a statsD client
The use of UDP cleanly isolates Gunicorn from the receiving end of the statsD
metrics so that instrumentation does not cause Gunicorn to be held up by a slow

View File

@ -15,5 +15,5 @@
<!-- Exclude github CNAME file -->
<filter action="drop" type="wildcard" pattern="*CNAME" />
</site>

View File

@ -291,7 +291,7 @@ class Encoder:
# Something is seriously wrong if we get to here
return text.encode(ENC_ASCII, 'ignore')
#end def NarrowText
def MaybeNarrowPath(self, text):
""" Paths may be allowed to stay wide """
if self._widefiles:
@ -484,7 +484,7 @@ class URL(object):
""" Do encoding and canonicalization on a URL string """
if not loc:
return loc
# Let the encoder try to narrow it
narrow = encoder.NarrowText(loc, None)
@ -545,7 +545,7 @@ class URL(object):
def Validate(self, base_url, allow_fragment):
""" Verify the data in this URL is well-formed, and override if not. """
assert type(base_url) == types.StringType
# Test (and normalize) the ref
if not self.loc:
output.Warn('Empty URL')
@ -611,7 +611,7 @@ class URL(object):
def Log(self, prefix='URL', level=3):
""" Dump the contents, empty or not, to the log. """
out = prefix + ':'
for attribute in self.__slots__:
value = getattr(self, attribute)
if not value:
@ -636,7 +636,7 @@ class URL(object):
value = str(value)
value = xml.sax.saxutils.escape(value)
out = out + (' <%s>%s</%s>\n' % (attribute, value, attribute))
out = out + SITEURL_XML_SUFFIX
file.write(out)
#end def WriteXML
@ -709,7 +709,7 @@ class Filter:
""" Process the URL, as above. """
if (not url) or (not url.loc):
return None
if self._wildcard:
if fnmatch.fnmatchcase(url.loc, self._wildcard):
return self._pass
@ -738,7 +738,7 @@ class InputURL:
if not ValidateAttributes('URL', attributes,
('href', 'lastmod', 'changefreq', 'priority')):
return
url = URL()
for attr in attributes.keys():
if attr == 'href':
@ -749,7 +749,7 @@ class InputURL:
if not url.loc:
output.Error('Url entries must have an href attribute.')
return
self._url = url
output.Log('Input: From URL "%s"' % self._url.loc, 2)
#end def __init__
@ -775,7 +775,7 @@ class InputURLList:
if not ValidateAttributes('URLLIST', attributes, ('path', 'encoding')):
return
self._path = attributes.get('path')
self._encoding = attributes.get('encoding', ENC_UTF8)
if self._path:
@ -808,7 +808,7 @@ class InputURLList:
line = line.strip()
if (not line) or line[0] == '#':
continue
# Split the line on space
url = URL()
cols = line.split(' ')
@ -1156,7 +1156,7 @@ class InputSitemap(xml.sax.handler.ContentHandler):
"""
class _ContextBase(object):
"""Base class for context handlers in our SAX processing. A context
handler is a class that is responsible for understanding one level of
depth in the XML schema. The class knows what sub-tags are allowed,
@ -1165,7 +1165,7 @@ class InputSitemap(xml.sax.handler.ContentHandler):
This base class is the API filled in by specific context handlers,
all defined below.
"""
def __init__(self, subtags):
"""Initialize with a sequence of the sub-tags that would be valid in
this context."""
@ -1209,18 +1209,18 @@ class InputSitemap(xml.sax.handler.ContentHandler):
#end class _ContextBase
class _ContextUrlSet(_ContextBase):
"""Context handler for the document node in a Sitemap."""
def __init__(self):
InputSitemap._ContextBase.__init__(self, ('url',))
#end def __init__
#end class _ContextUrlSet
class _ContextUrl(_ContextBase):
"""Context handler for a URL node in a Sitemap."""
def __init__(self, consumer):
"""Initialize this context handler with the callable consumer that
wants our URLs."""
@ -1241,7 +1241,7 @@ class InputSitemap(xml.sax.handler.ContentHandler):
self._consumer(self._url, False)
self._url = None
#end def Close
def Return(self, result):
"""A value context has closed, absorb the data it gave us."""
assert self._url
@ -1251,9 +1251,9 @@ class InputSitemap(xml.sax.handler.ContentHandler):
#end class _ContextUrl
class _ContextSitemapIndex(_ContextBase):
"""Context handler for the document node in an index file."""
def __init__(self):
InputSitemap._ContextBase.__init__(self, ('sitemap',))
self._loclist = [] # List of accumulated Sitemap URLs
@ -1271,7 +1271,7 @@ class InputSitemap(xml.sax.handler.ContentHandler):
self._loclist = []
return temp
#end def Close
def Return(self, result):
"""Getting a new loc URL, add it to the collection."""
if result:
@ -1280,9 +1280,9 @@ class InputSitemap(xml.sax.handler.ContentHandler):
#end class _ContextSitemapIndex
class _ContextSitemap(_ContextBase):
"""Context handler for a Sitemap entry in an index file."""
def __init__(self):
InputSitemap._ContextBase.__init__(self, ('loc', 'lastmod'))
self._loc = None # The URL to the Sitemap
@ -1310,10 +1310,10 @@ class InputSitemap(xml.sax.handler.ContentHandler):
#end class _ContextSitemap
class _ContextValue(_ContextBase):
"""Context handler for a single value. We return just the value. The
higher level context has to remember what tag led into us."""
def __init__(self):
InputSitemap._ContextBase.__init__(self, ())
self._text = None
@ -1355,7 +1355,7 @@ class InputSitemap(xml.sax.handler.ContentHandler):
if not ValidateAttributes('SITEMAP', attributes, ['path']):
return
# Init the first file path
path = attributes.get('path')
if path:
@ -1388,7 +1388,7 @@ class InputSitemap(xml.sax.handler.ContentHandler):
self._contexts_idx = [InputSitemap._ContextSitemapIndex(),
InputSitemap._ContextSitemap(),
InputSitemap._ContextValue()]
self._contexts_stm = [InputSitemap._ContextUrlSet(),
InputSitemap._ContextUrl(consumer),
InputSitemap._ContextValue()]
@ -1408,7 +1408,7 @@ class InputSitemap(xml.sax.handler.ContentHandler):
def _ProcessFile(self, path):
"""Do per-file reading/parsing/consuming for the file path passed in."""
assert path
# Open our file
(frame, file) = OpenFileForRead(path, 'SITEMAP')
if not file:

View File

@ -1,7 +1,7 @@
Changelog - 2010
================
0.12.0 / 2010-12-22
0.12.0 / 2010-12-22
-------------------
- Add support for logging configuration using a ini file.
@ -18,7 +18,7 @@ Changelog - 2010
- Fix setpgrp issue, can now be launched via ubuntu upstart
- Set the number of workers to zero on WINCH
0.11.2 / 2010-10-30
0.11.2 / 2010-10-30
-------------------
* Add SERVER_SOFTWARE to the os.environ
@ -30,7 +30,7 @@ Changelog - 2010
* Fix HUP with Paster applications
* Fix readline in wsgi.input
0.11.1 / 2010-09-02
0.11.1 / 2010-09-02
-------------------
* Implement max-requests feature to prevent memory leaks.
@ -41,7 +41,7 @@ Changelog - 2010
* Fix the default proc name internal setting.
* Workaround to prevent Gevent worker to segfault on MacOSX.
0.11.0 / 2010-08-12
0.11.0 / 2010-08-12
-------------------
* Improve dramatically performances of Gevent and Eventlet workers
@ -49,7 +49,7 @@ Changelog - 2010
* Drop Server and Date headers in start_response when provided.
* Fix latency issue in async workers
0.10.1 / 2010-08-06
0.10.1 / 2010-08-06
-------------------
* Improve gevent's workers. Add "egg:gunicorn#gevent_wsgi" worker using
@ -63,7 +63,7 @@ Changelog - 2010
* Exit more quietly
* Fix gevent dns issue
0.10.0 / 2010-07-08
0.10.0 / 2010-07-08
-------------------
* New HTTP parser.
@ -84,7 +84,7 @@ Changelog - 2010
* Internal refactoring and various bug fixes.
* New documentation website.
0.9.1 / 2010-05-26
0.9.1 / 2010-05-26
------------------
* Support https via X-Forwarded-Protocol or X-Forwarded-Ssl headers
@ -92,7 +92,7 @@ Changelog - 2010
* Remove -d options which was used instead of -D for daemon.
* Fix umask in unix socket
0.9.0 / 2010-05-24
0.9.0 / 2010-05-24
------------------
* Added *when_ready* hook. Called just after the server is started
@ -104,7 +104,7 @@ Changelog - 2010
* Fix reexec
* Documentation improvements
0.8.1 / 2010-04-29
0.8.1 / 2010-04-29
------------------
* Fix builtins import in config
@ -112,14 +112,14 @@ Changelog - 2010
* Fix Tornado WSGI support
* Delay application loading until after processing all configuration
0.8.0 / 2010-04-22
0.8.0 / 2010-04-22
------------------
* Refactored Worker management for better async support. Now use the -k option
to set the type of request processing to use
* Added support for Tornado_
0.7.2 / 2010-04-15
0.7.2 / 2010-04-15
------------------
* Added --spew option to help debugging (installs a system trace hook)
@ -131,7 +131,7 @@ Changelog - 2010
* Fix bug when responses have no body.
0.7.0 / 2010-03-26
0.7.0 / 2010-03-26
------------------
* Added support for Eventlet_ and Gevent_ based workers.
@ -140,19 +140,19 @@ Changelog - 2010
* Fix SIGWINCH on OpenBSD_
* Fix `PEP 333`_ compliance for the write callable.
0.6.5 / 2010-03-11
0.6.5 / 2010-03-11
------------------
* Fix pidfile handling
* Fix Exception Error
0.6.4 / 2010-03-08
0.6.4 / 2010-03-08
------------------
* Use cStringIO for performance when possible.
* Fix worker freeze when a remote connection closes unexpectedly.
0.6.3 / 2010-03-07
0.6.3 / 2010-03-07
------------------
* Make HTTP parsing faster.
@ -168,7 +168,7 @@ Changelog - 2010
* Improved performance when sending responses.
* Workers are now murdered by age (the oldest is killed first).
0.6.1 / 2010-02-24
0.6.1 / 2010-02-24
------------------
* Added gunicorn config file support for Django admin command
@ -182,7 +182,7 @@ Changelog - 2010
* Change privilege switch behavior. We now work like NGINX, master keeps the
permissions, new uid/gid permissions are only set for workers.
0.5.1 / 2010-02-22
0.5.1 / 2010-02-22
------------------
* Fix umask

View File

@ -1,19 +1,19 @@
Changelog - 2011
================
0.13.4 / 2011-09-23
0.13.4 / 2011-09-23
-------------------
- fix util.closerange function used to prevent leaking fds on python 2.5
(typo)
0.13.3 / 2011-09-19
0.13.3 / 2011-09-19
-------------------
- refactor gevent worker
- prevent leaking fds on reexec
- fix inverted request_time computation
0.13.2 / 2011-09-17
0.13.2 / 2011-09-17
-------------------
- Add support for Tornado 2.0 in tornado worker
@ -25,12 +25,12 @@ Changelog - 2011
- Fix sendfile support
- Fix Django reloading
0.13.1 / 2011-08-22
0.13.1 / 2011-08-22
-------------------
- Fix unix socket. log argument was missing.
0.13.0 / 2011-08-22
0.13.0 / 2011-08-22
-------------------
- Improve logging: allows file-reopening and add access log file
@ -58,7 +58,7 @@ Changelog - 2011
- Fix django localisation
- Compatible with gevent 0.14dev
0.12.1 / 2011-03-23
0.12.1 / 2011-03-23
-------------------
- Add "on_starting" hook. This hook can be used to set anything before

View File

@ -31,5 +31,3 @@ Issue Tracking
Bug reports, enhancement requests and tasks generally go in the `Github
issue tracker <http://github.com/benoitc/gunicorn/issues>`_.

View File

@ -68,4 +68,3 @@ texinfo_documents = [
u'Benoit Chesneau', 'Gunicorn', 'One line description of project.',
'Miscellaneous'),
]

View File

@ -90,8 +90,8 @@ may be either threads or processes, wake up at the same time to handle a new
request. Since only one handler will receive the request, the others will have
been awakened for no reaon, wasting CPU cycles. At this time, Gunicorn does not
implement any IPC solution for coordinating between worker processes. You may
experience high load due to this problem when using many workers or threads.
However `a work has been started <https://github.com/benoitc/gunicorn/issues/792>`_
experience high load due to this problem when using many workers or threads.
However `a work has been started <https://github.com/benoitc/gunicorn/issues/792>`_
to remove this issue.
.. _worker_class: configure.html#worker-class
@ -100,7 +100,7 @@ to remove this issue.
Why I don't see any logs in the console?
----------------------------------------
Since the version R19, Gunicorn doesn't log by default in the console.
Since the version R19, Gunicorn doesn't log by default in the console.
To watch the logs in the console you now need to use the option ``--log-file=-``.
Kernel Parameters

View File

@ -940,4 +940,3 @@ statsd_host
* ``None``
host:port of the statsd server to log to

View File

@ -76,14 +76,14 @@ master process. It renames its .pid file to .oldbin (e.g.
which in turn starts a new master process and the new worker processes::
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20844 benoitc 20 0 54808 11m 3352 S 0.0 0.1 0:00.36 gunicorn: master [test:app]
20849 benoitc 20 0 54808 9.9m 1500 S 0.0 0.1 0:00.02 gunicorn: worker [test:app]
20850 benoitc 20 0 54808 9.9m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
20851 benoitc 20 0 54808 9.9m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
20854 benoitc 20 0 55748 12m 3348 S 0.0 0.2 0:00.35 gunicorn: master [test:app]
20859 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
20860 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.00 gunicorn: worker [test:app]
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20844 benoitc 20 0 54808 11m 3352 S 0.0 0.1 0:00.36 gunicorn: master [test:app]
20849 benoitc 20 0 54808 9.9m 1500 S 0.0 0.1 0:00.02 gunicorn: worker [test:app]
20850 benoitc 20 0 54808 9.9m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
20851 benoitc 20 0 54808 9.9m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
20854 benoitc 20 0 55748 12m 3348 S 0.0 0.2 0:00.35 gunicorn: master [test:app]
20859 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
20860 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.00 gunicorn: worker [test:app]
20861 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
At this point, two instances of gunicorn are running, handling the
@ -106,8 +106,8 @@ If an update is successful and you want to keep the new server, send
the TERM signal to the old master process to leave only the new server
running::
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20854 benoitc 20 0 55748 12m 3348 S 0.0 0.2 0:00.45 gunicorn: master [test:app]
20859 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.02 gunicorn: worker [test:app]
20860 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.02 gunicorn: worker [test:app]
20861 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20854 benoitc 20 0 55748 12m 3348 S 0.0 0.2 0:00.45 gunicorn: master [test:app]
20859 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.02 gunicorn: worker [test:app]
20860 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.02 gunicorn: worker [test:app]
20861 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]

View File

@ -8,7 +8,7 @@
#
# Single quoting is generally necessary for shell escape semantics.
#
# This file is part of gunicorn released under the MIT license.
# This file is part of gunicorn released under the MIT license.
# See the NOTICE for more information.
def load(arg):
@ -22,4 +22,3 @@ def load(arg):
start_response(status, response_headers)
return iter([data])
return app

View File

@ -17,17 +17,17 @@
</script>
<![endif]-->
</head>
<body>
<header id="top">
<h1>test app</h1>
</header>
{% block content %}{% endblock %}
<footer></footer>
{% block content %}{% endblock %}
<footer></footer>
</body>
</html>

View File

@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2
True
"""}

View File

@ -17,17 +17,17 @@
</script>
<![endif]-->
</head>
<body>
<header id="top">
<h1>test app</h1>
</header>
{% block content %}{% endblock %}
<footer></footer>
{% block content %}{% endblock %}
<footer></footer>
</body>
</html>

View File

@ -20,4 +20,3 @@ Another way to test that 1 + 1 is equal to 2.
>>> 1 + 1 == 2
True
"""}

View File

@ -92,7 +92,7 @@ def use_setuptools(
try:
import pkg_resources
except ImportError:
return do_download()
return do_download()
try:
pkg_resources.require("setuptools>="+version); return
except pkg_resources.VersionConflict, e:
@ -268,9 +268,3 @@ if __name__=='__main__':
update_md5(sys.argv[2:])
else:
main(sys.argv[1:])

View File

@ -62,4 +62,3 @@ formatter = generic
[formatter_generic]
format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%S

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

View File

@ -36,4 +36,3 @@ app = Application([
(r"/", MainHandler),
(r"/longpoll", LongPollHandler)
])

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -
#
# This file is part of gunicorn released under the MIT license.
# This file is part of gunicorn released under the MIT license.
# See the NOTICE for more information.
#
# Example code from Eventlet sources

View File

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<!-- idea and code swiped from
<!-- idea and code swiped from
http://assorted.svn.sourceforge.net/viewvc/assorted/real-time-plotter/trunk/src/rtp.html?view=markup -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script src="http://people.iola.dk/olau/flot/jquery.flot.js"></script>
@ -9,7 +9,7 @@ http://assorted.svn.sourceforge.net/viewvc/assorted/real-time-plotter/trunk/src/
window.onload = function() {
var data = {};
var s = new WebSocket("ws://%(HTTP_HOST)s/data");
s.onopen = function() {
s.onopen = function() {
//alert('open');
s.send('hi');
};

View File

@ -87,8 +87,8 @@ class WebSocketWSGI(object):
"Sec-WebSocket-Version: %s\r\n"
"Sec-WebSocket-Accept: %s\r\n\r\n"
% (
environ.get('HTTP_ORIGIN'),
environ.get('HTTP_HOST'),
environ.get('HTTP_ORIGIN'),
environ.get('HTTP_HOST'),
ws.path,
version,
base64.b64encode(sha1(key + WS_KEY).digest())
@ -99,8 +99,8 @@ class WebSocketWSGI(object):
handshake_reply += (
"WebSocket-Origin: %s\r\n"
"WebSocket-Location: ws://%s%s\r\n\r\n" % (
environ.get('HTTP_ORIGIN'),
environ.get('HTTP_HOST'),
environ.get('HTTP_ORIGIN'),
environ.get('HTTP_HOST'),
ws.path))
sock.sendall(handshake_reply)
@ -194,7 +194,7 @@ class WebSocket(object):
"""
f = {'fin' : 0,
'opcode' : 0,
'opcode' : 0,
'mask' : 0,
'hlen' : 2,
'length' : 0,
@ -343,10 +343,10 @@ class WebSocket(object):
raise ValueError("Don't understand how to parse this type of message: %r" % buf)
self._buf = buf
return msgs
def send(self, message):
"""Send a message to the browser.
"""Send a message to the browser.
*message* should be convertable to a string; unicode objects should be
encodable as utf-8. Raises socket.error with errno of 32
(broken pipe) if the socket has already been closed by the client."""
@ -364,8 +364,8 @@ class WebSocket(object):
self._sendlock.put(t)
def wait(self):
"""Waits for and deserializes messages.
"""Waits for and deserializes messages.
Returns a single message; the oldest not yet processed. If the client
has already closed the connection, returns None. This is different
from normal socket behavior because the empty string is a valid
@ -415,7 +415,7 @@ class WebSocket(object):
import os
import random
def handle(ws):
""" This is the websocket handler function. Note that we
""" This is the websocket handler function. Note that we
can dispatch based on path in here, too."""
if ws.path == '/echo':
while True:
@ -423,19 +423,19 @@ def handle(ws):
if m is None:
break
ws.send(m)
elif ws.path == '/data':
for i in xrange(10000):
ws.send("0 %s %s\n" % (i, random.random()))
eventlet.sleep(0.1)
wsapp = WebSocketWSGI(handle)
def app(environ, start_response):
""" This resolves to the web page or the websocket depending on
the path."""
if environ['PATH_INFO'] == '/' or environ['PATH_INFO'] == "":
data = open(os.path.join(
os.path.dirname(__file__),
os.path.dirname(__file__),
'websocket.html')).read()
data = data % environ
start_response('200 OK', [('Content-Type', 'text/html'),
@ -443,4 +443,3 @@ def app(environ, start_response):
return [data]
else:
return wsapp(environ, start_response)

View File

@ -6,7 +6,7 @@ import time
max_mem = 100000
class MemoryWatch(threading.Thread):
def __init__(self, server, max_mem):
super(MemoryWatch, self).__init__()
self.daemon = True
@ -21,17 +21,17 @@ class MemoryWatch(threading.Thread):
return -1
used_mem = sum(int(x) for x in out.split('\n')[1:])
return used_mem
def run(self):
while True:
for (pid, worker) in list(self.server.WORKERS.items()):
if self.memory_usage(pid) > self.max_mem:
self.server.log.info("Pid %s killed (memory usage > %s)",
self.server.log.info("Pid %s killed (memory usage > %s)",
pid, self.max_mem)
self.server.kill_worker(pid, signal.SIGTERM)
time.sleep(self.timeout)
def when_ready(server):
mw = MemoryWatch(server, max_mem)

View File

@ -75,7 +75,7 @@ class Statsd(Logger):
self.histogram(metric, value)
else:
pass
# Log to parent logger only if there is something to say
if msg is not None and len(msg) > 0:
Logger.log(self, lvl, msg, *args, **kwargs)

View File

@ -1 +0,0 @@

View File

@ -1 +0,0 @@

View File

@ -207,11 +207,11 @@ def test_cli_overrides_config_module():
t.eq(app.cfg.proc_name, "fooey")
def test_default_config_file():
default_config = os.path.join(os.path.abspath(os.getcwd()),
default_config = os.path.join(os.path.abspath(os.getcwd()),
'gunicorn.conf.py')
with open(default_config, 'w+') as default:
default.write("bind='0.0.0.0:9090'")
t.eq(config.get_default_config_file(), default_config)
with AltArgs(["prog_name"]):

View File

@ -58,4 +58,3 @@ def test_readline_buffer_loaded_with_size():
t.eq(body.readline(2), b"\n")
t.eq(body.readline(2), b"de")
t.eq(body.readline(2), b"f")

View File

@ -35,13 +35,13 @@ class SSLTestCase(TestCase):
self.assertEquals(CertFile.section, 'Ssl')
self.assertEquals(CertFile.cli, ['--certfile'])
self.assertEquals(CertFile.default, None)
self.assertTrue(issubclass(SSLVersion, Setting))
self.assertEquals(SSLVersion.name, 'ssl_version')
self.assertEquals(SSLVersion.section, 'Ssl')
self.assertEquals(SSLVersion.cli, ['--ssl-version'])
self.assertEquals(SSLVersion.default, ssl.PROTOCOL_TLSv1)
self.assertTrue(issubclass(CACerts, Setting))
self.assertEquals(CACerts.name, 'ca_certs')
self.assertEquals(CACerts.section, 'Ssl')
@ -55,7 +55,7 @@ class SSLTestCase(TestCase):
self.assertEquals(SuppressRaggedEOFs.cli, ['--suppress-ragged-eofs'])
self.assertEquals(SuppressRaggedEOFs.action, 'store_true')
self.assertEquals(SuppressRaggedEOFs.default, True)
self.assertTrue(issubclass(DoHandshakeOnConnect, Setting))
self.assertEquals(DoHandshakeOnConnect.name, 'do_handshake_on_connect')
self.assertEquals(DoHandshakeOnConnect.section, 'Ssl')
@ -65,7 +65,7 @@ class SSLTestCase(TestCase):
if sys.version_info >= (2, 7):
self.assertTrue(issubclass(Ciphers, Setting))
self.assertTrue(issubclass(Ciphers, Setting))
self.assertEquals(Ciphers.name, 'ciphers')
self.assertEquals(Ciphers.section, 'Ssl')
self.assertEquals(Ciphers.cli, ['--ciphers'])

View File

@ -62,7 +62,7 @@ def test_instrument():
t.eq(logger.sock.msgs[0], "gunicorn.test:666|g")
t.eq(sio.getvalue(), "Blah\n") # log is unchanged
logger.sock.reset()
# Debug logging also supports metrics
logger.debug("", extra={"mtype": "gauge", "metric": "gunicorn.debug", "value": 667})
t.eq(logger.sock.msgs[0], "gunicorn.debug:667|g")

View File

@ -7,5 +7,5 @@
envlist = py26, py27, py33, pypy
[testenv]
commands = py.test tests/
commands = py.test tests/
deps = pytest