Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: benoitc/gunicorn
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 20.0.4
Choose a base ref
...
head repository: benoitc/gunicorn
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 20.1.0
Choose a head ref

Commits on May 31, 2019

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    13c5d72 View commit details
  2. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    93d2687 View commit details
  3. Docs.

    rcoup committed May 31, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    000236a View commit details

Commits on Jul 16, 2019

  1. Various code improvements contributed by dilyanpalauzov.

    These were originally based on 19.9.0 code and were rebased
    with conflicts resolved.
    
    Fixed #1690.
    
    Co-Authored-By: dilyanpalauzov <git-dpa@aegee.org>
    Signed-off-by: Brett Randall <javabrett@gmail.com>
    javabrett and dilyanpalauzov committed Jul 16, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    b014fa7 View commit details

Commits on Nov 26, 2019

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    ff1dbfe View commit details

Commits on Nov 28, 2019

  1. Enable pycodestyle

    tnir committed Nov 28, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    ed90163 View commit details

Commits on Dec 3, 2019

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    9c147f6 View commit details
  2. Merge pull request #2210 from benoitc/update-maintainers

    Add Brett Randall to MAINTAINERS
    tilgovi authored Dec 3, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    91e9dcb View commit details
  3. Bumped py3 min version in setup.py to 3.5 (was 3.4).

    Signed-off-by: Brett Randall <javabrett@gmail.com>
    javabrett authored and benoitc committed Dec 3, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    4ef01b1 View commit details

Commits on Dec 14, 2019

  1. Fix sample command syntax highlighting in run.rst

    Extra `:` was causing the syntax highlighting to mess up, resulting in the docs containing the `..code-block:: text` markup
    tahnok authored and berkerpeksag committed Dec 14, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    5a57d59 View commit details

Commits on Dec 15, 2019

  1. Update FAQ - Workers Silently Killed.

    monobaila authored and benoitc committed Dec 15, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    cfc93ad View commit details

Commits on Dec 30, 2019

  1. add os.path.abspath() in dirname generation of the reloader

    Otherwise adding a watcher for a file located in the working directory generates an empty dirname, resulting in the following error:
    inotify.calls.InotifyError: Call failed (should not be -1): (-1) ERRNO=(0)
    
    Caused by the fact that we call inotify with an empty path
    mikaeldusenne committed Dec 30, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    e5310d1 View commit details
  2. Merge pull request #1784 from tnir/1599-pycodestyle-ci

    Enable pycodestyle
    tilgovi authored Dec 30, 2019
    Copy the full SHA
    e636bf8 View commit details
  3. Merge pull request #2227 from mikaeldusenne/hotfix/empty-dirname-inotify

    add os.path.abspath() in dirname generation of the reloader
    tilgovi authored Dec 30, 2019

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    57fbbce View commit details

Commits on Jan 1, 2020

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    7cce20e View commit details
  2. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    2ec7493 View commit details
  3. Merge pull request #2228 from benoitc/no-universal-wheel

    Don't build universal wheel, as Python 2 support has been removed
    javabrett authored Jan 1, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    1e0ab52 View commit details
  4. Merge pull request #2229 from benoitc/docs-3-5-min

    Updated requires Python to >= 3.5
    javabrett authored Jan 1, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    9c1438f View commit details

Commits on Jan 4, 2020

  1. Use socket.sendfile() instead of os.sendfile().

    Fixes #2223.
    
    Unfortunately, eventlet doesn't implement GreenSocket.sendfile, so we have to do it for it.
    
    Add gevent and eventlet to tox.ini and add tests to make sure we can at least import the workers. Some tests that this actually functions would be nice...
    
    Update the gevent and eventlet setup extras to require the versions that are enforced in their worker modules.
    jamadden committed Jan 4, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    2d40e6d View commit details

Commits on Jan 6, 2020

  1. Merge pull request #2230 from benoitc/issue2223

    Use socket.sendfile() instead of os.sendfile().
    jamadden authored Jan 6, 2020
    2

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    abc621b View commit details

Commits on Jan 10, 2020

  1. remove version from the Server header

    while we still want to know which server is running to ease operation, the version was giving too much information on the installation, so let's remove it.
    benoitc committed Jan 10, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    2f944c9 View commit details
  2. fix SERVER_SOFTWARE property

    WSGI spec requires the SERVER_SOFTWARE property containing the name and version. This change fix it and separate the version header from SERVER_SOFTWARE property. We expose the SERVER variable so custom installations can change it in one place without looking much when needed.
    benoitc committed Jan 10, 2020
    1

    Unverified

    This user has not yet uploaded their public signing key.
    Copy the full SHA
    dcfd0f0 View commit details
  3. remove trailing new line

    benoitc committed Jan 10, 2020
    Copy the full SHA
    f74f926 View commit details

Commits on Jan 11, 2020

  1. Merge pull request #2233 from benoitc/remove-version-in-server-header

    remove version from the Server header
    benoitc authored Jan 11, 2020
    Copy the full SHA
    e4e20f2 View commit details

Commits on Jan 13, 2020

  1. Added a set of pip requirements files to cover the examples in exampl…

    …es/frameworks.
    
    Signed-off-by: Brett Randall <javabrett@gmail.com>
    javabrett committed Jan 13, 2020
    Copy the full SHA
    c1bea68 View commit details

Commits on Jan 17, 2020

  1. Merge pull request #2238 from benoitc/examples-frameworks-requirements

    Added pip requirements files for examples/frameworks
    javabrett authored Jan 17, 2020
    Copy the full SHA
    77f33d6 View commit details

Commits on Jan 19, 2020

  1. Updated setup Development Status metadata to 5 - Production/Stable (w…

    …as 4 - Beta).
    
    Signed-off-by: Brett Randall <javabrett@gmail.com>
    javabrett committed Jan 19, 2020
    Copy the full SHA
    9219da5 View commit details

Commits on Jan 20, 2020

  1. Merge pull request #2243 from benoitc/pep301-development-status

    Updated Development Status 5 - Production/Stable
    javabrett authored Jan 20, 2020
    Copy the full SHA
    73ae195 View commit details

Commits on Jan 29, 2020

  1. Remove dead code: find_library and _findWalk_ldpath

    Kevin Michel committed Jan 29, 2020
    Copy the full SHA
    287916a View commit details

Commits on Jan 30, 2020

  1. Add milliseconds option to request_time in access_log (#2218)

    Add milliseconds option to request_time in access_log
    Anmar85 authored Jan 30, 2020
    Copy the full SHA
    d307045 View commit details
  2. Add documentation for the $PORT environment variable

    Kevin Michel committed Jan 30, 2020
    Copy the full SHA
    c82996f View commit details

Commits on Jan 31, 2020

  1. Document how environment variables impact configuration

    Kevin Michel committed Jan 31, 2020
    Copy the full SHA
    a648f8a View commit details
  2. Copy the full SHA
    83b78e0 View commit details
  3. Replace and run the sitemap generator

    This replaces the very old sitemap generator which was over 2kloc and
    only compatible with Python 2.
    
    According to the stored lastmod, the generator wasn't used since 2010.
    
    The minimal replacement script scan the static site for html files and
    uses git to deduce the last modification date of each page.
    
    The sitemap xmlns version was updated to the latest 0.9 from
    sitemaps.org .
    
    The index page was given a higher priority since the other pages
    are just redirects to the index with anchors.
    
    The output file is pretty printed to help with diffs.
    
    Static assets (css, images...) aren't listed in the sitemap anymore.
    Kevin Michel committed Jan 31, 2020
    Copy the full SHA
    93bcf5a View commit details
  4. Merge pull request #2254 from kmichel-sereema/remove-dead-code-find-l…

    …ibrary
    
    Remove dead code: find_library and _findWalk_ldpath
    tilgovi authored Jan 31, 2020
    Copy the full SHA
    f09d609 View commit details
  5. Merge pull request #2253 from kmichel-sereema/2247-document-environme…

    …nt-variables
    
    Document environment variables and $PORT
    tilgovi authored Jan 31, 2020
    Copy the full SHA
    7d8c92f View commit details

Commits on Feb 2, 2020

  1. Fix issues #2133 and #2244

    Start reloader after loading the WSGI app.
    trendels committed Feb 2, 2020
    Copy the full SHA
    27d1e98 View commit details
  2. Validate directory before watching it with inotify

    Fixes this exception that is raised when the inotify-based reloader is used in
    combination with the `--chdir` option:
    
        inotify.calls.InotifyError: Call failed (should not be -1): (-1) ERRNO=(0)
    trendels committed Feb 2, 2020
    Copy the full SHA
    f39b065 View commit details

Commits on Feb 13, 2020

  1. Set max_accept on gevent worker-class to 1 when workers > 1

    We've had really terrible tail latencies with gevent and gunicorn under load.
    
    Inspecting our services with strace we see the following:
    
    ```
    23:11:01.651529 accept4(5, {sa_family=AF_UNIX}, [110->2], SOCK_CLOEXEC) = 223 <0.000015>
    ..{18 successful calls to accept4}...
    23:11:01.652590 accept4(5, {sa_family=AF_UNIX}, [110->2], SOCK_CLOEXEC) = 249 <0.000010>
    23:11:01.652647 accept4(5, 0x7ffcd46c09d0, [110], SOCK_CLOEXEC) = -1 EAGAIN (Resource temporarily unavailable) <0.000012>
    23:11:01.657622 getsockname(5, {sa_family=AF_UNIX, sun_path="/run/gunicorn/gunicorn.sock"}, [110->30]) = 0 <0.000009>
    23:11:01.657682 recvfrom(223, "XXX"..., 8192, 0, NULL, NULL) = 511 <0.000011>
    ..{16 calls to recvfrom}...
    23:11:01.740726 recvfrom(243, "XXX"..., 8192, 0, NULL, NULL) = 511 <0.000012>
    23:11:01.746074 getsockname(5, {sa_family=AF_UNIX, sun_path="/run/gunicorn/gunicorn.sock"}, [110->30]) = 0 <0.000013>
    23:11:01.746153 recvfrom(246, "XXX"..., 8192, 0, NULL, NULL) = 511 <0.000014>
    23:11:01.751540 getsockname(5, {sa_family=AF_UNIX, sun_path="/run/gunicorn/gunicorn.sock"}, [110->30]) = 0 <0.000010>
    23:11:01.751599 recvfrom(249, "XXX"..., 8192, 0, NULL, NULL) = 511 <0.000013>
    ```
    
    Notice we see a flury of 20 `accept4`s followed by 20 calls to to `recvfrom`.  Each call to `recvfrom` happens 5ms after the previous,
    so the last `recvfrom` is called ~100ms after the call to `accept4` for that fd.
    
    gevent suggest setting `max_accept` to a lower value when there's multiple working processes on the same listening socket: https://github.com/gevent/gevent/blob/785b7b5546fcd0a184ea954f5d358539c530d95f/src/gevent/baseserver.py#L89-L102
    gevent sets `max_accept` to `1` when `wsgi.multiprocess` is True: https://github.com/gevent/gevent/blob/9d27d269ed01a7e752966caa7a6f85d773780a1a/src/gevent/pywsgi.py#L1470-L1472
    gunicorn does in fact set this when the number of workers is > 1: https://github.com/benoitc/gunicorn/blob/e4e20f273e95f505277a8dadf390bbdd162cfff4/gunicorn/http/wsgi.py#L73
    and this gets passed to `gevent.pywsgi.WSGIServer`: https://github.com/benoitc/gunicorn/blob/e4e20f273e95f505277a8dadf390bbdd162cfff4/gunicorn/workers/ggevent.py#L67-L75
    However, when `worker-class` is `gevent` we directly create a `gevent.server.StreamServer`: https://github.com/benoitc/gunicorn/blob/e4e20f273e95f505277a8dadf390bbdd162cfff4/gunicorn/workers/ggevent.py#L77-L78
    
    Fixing this dropped the p50 response time on an especially probelmatic benchmark from 250ms to 115ms.
    Roy Williams committed Feb 13, 2020
    Copy the full SHA
    f145e90 View commit details

Commits on Feb 25, 2020

  1. Do not raise and crash worker on ENOTCONN error

    A couple of socket operations can fail with ENOTCONN error if the
    other side of the connection is not connected anymore. In that case,
    let's not crash the whole worker and give a chance to accept new
    connections.
    
    In my case, the operation that sometimes fails is a "getpeername()",
    which was introduced in b07532b
    (v19.8.0). Someone in #1913
    metionned that v19.7.1 was working fine so it matches.
    
    Fixes #1913
    JordanP committed Feb 25, 2020
    Copy the full SHA
    f8b1e84 View commit details

Commits on Mar 1, 2020

  1. Fix simple typo: convertable -> convertible

    There is a small typo in examples/websocket/gevent_websocket.py, examples/websocket/websocket.py.
    Should read `convertible` rather than `convertable`.
    timgates42 committed Mar 1, 2020
    Copy the full SHA
    f626830 View commit details
  2. Merge pull request #2282 from timgates42/bugfix_typo_convertible

    Fix simple typo: convertable -> convertible
    jamadden authored Mar 1, 2020
    Copy the full SHA
    9157152 View commit details

Commits on Mar 3, 2020

  1. Merge pull request #2266 from lyft/fix_max_accept_in_gevent

    Set `max_accept` on `gevent` worker-class to 1 when workers > 1
    jamadden authored Mar 3, 2020
    Copy the full SHA
    46b2cff View commit details

Commits on Mar 6, 2020

  1. Merge pull request #2257 from kmichel-sereema/replace-sitemap-generator

    Replace and run the sitemap generator
    benoitc authored Mar 6, 2020
    Copy the full SHA
    8cb2bd2 View commit details

Commits on Mar 11, 2020

  1. Update gthread.py

    upgrade gthread worker when behind load balancer
    dekexu authored Mar 11, 2020
    Copy the full SHA
    3bf9319 View commit details
  2. Merge pull request #1 from dekexu/dekexu-patch-1

    Update gthread.py
    dekexu authored Mar 11, 2020
    Copy the full SHA
    0896392 View commit details

Commits on Mar 16, 2020

  1. Document --timeout 0

    di committed Mar 16, 2020
    Copy the full SHA
    57b8cdf View commit details

Commits on Apr 10, 2020

  1. Copy the full SHA
    7896057 View commit details

Commits on Apr 20, 2020

  1. Merge pull request #2304 from closeio/fix-gevent-loop-exit

    Exit async keepalive request loop when self.alive is False
    tilgovi authored Apr 20, 2020
    Copy the full SHA
    bf14a0f View commit details
  2. Copy the full SHA
    8c5613b View commit details
Showing with 1,487 additions and 3,090 deletions.
  1. +1 −0 .pylintrc
  2. +14 −14 .travis.yml
  3. +1 −0 MAINTAINERS
  4. +0 −35 NOTICE
  5. +1 −1 README.rst
  6. +6 −0 appveyor.yml
  7. +13 −11 docs/gunicorn_ext.py
  8. +1 −1 docs/site/index.html
  9. +33 −72 docs/site/sitemap.xml
  10. +0 −19 docs/sitemap_config.xml
  11. +37 −2,184 docs/sitemap_gen.py
  12. +121 −0 docs/source/2019-news.rst
  13. +54 −0 docs/source/2020-news.rst
  14. +54 −0 docs/source/2021-news.rst
  15. +28 −10 docs/source/configure.rst
  16. +5 −5 docs/source/deploy.rst
  17. +1 −1 docs/source/design.rst
  18. +27 −0 docs/source/faq.rst
  19. +30 −24 docs/source/install.rst
  20. +40 −111 docs/source/news.rst
  21. +6 −3 docs/source/run.rst
  22. +485 −331 docs/source/settings.rst
  23. +5 −0 examples/frameworks/requirements.txt
  24. +1 −0 examples/frameworks/requirements_cherryapp.txt
  25. +1 −0 examples/frameworks/requirements_flaskapp.txt
  26. +1 −0 examples/frameworks/requirements_pyramidapp.txt
  27. +1 −0 examples/frameworks/requirements_tornadoapp.txt
  28. +1 −0 examples/frameworks/requirements_webpyapp.txt
  29. +3 −5 examples/websocket/gevent_websocket.py
  30. +3 −5 examples/websocket/websocket.py
  31. +3 −2 gunicorn/__init__.py
  32. +7 −0 gunicorn/__main__.py
  33. +6 −3 gunicorn/app/base.py
  34. +13 −4 gunicorn/app/wsgiapp.py
  35. +11 −5 gunicorn/arbiter.py
  36. +101 −33 gunicorn/config.py
  37. +36 −35 gunicorn/glogging.py
  38. +17 −29 gunicorn/http/message.py
  39. +3 −2 gunicorn/http/parser.py
  40. +4 −15 gunicorn/http/wsgi.py
  41. +1 −0 gunicorn/instrument/statsd.py
  42. +1 −1 gunicorn/pidfile.py
  43. +4 −2 gunicorn/reloader.py
  44. +8 −38 gunicorn/util.py
  45. +15 −11 gunicorn/workers/base.py
  46. +10 −8 gunicorn/workers/base_async.py
  47. +48 −13 gunicorn/workers/geventlet.py
  48. +3 −19 gunicorn/workers/ggevent.py
  49. +19 −16 gunicorn/workers/gthread.py
  50. +2 −0 gunicorn/workers/gtornado.py
  51. +10 −6 gunicorn/workers/sync.py
  52. +1 −1 gunicorn/workers/workertmp.py
  53. +2 −0 requirements_test.txt
  54. +0 −3 setup.cfg
  55. +13 −6 setup.py
  56. +1 −0 tests/config/test_cfg_with_wsgi_app.py
  57. +1 −1 tests/t.py
  58. +76 −0 tests/test_config.py
  59. +68 −0 tests/test_reload.py
  60. +3 −3 tests/treq.py
  61. 0 tests/workers/__init__.py
  62. +7 −0 tests/workers/test_geventlet.py
  63. +7 −0 tests/workers/test_ggevent.py
  64. +12 −2 tox.ini
1 change: 1 addition & 0 deletions .pylintrc
Original file line number Diff line number Diff line change
@@ -34,6 +34,7 @@ disable=
no-staticmethod-decorator,
not-callable,
protected-access,
raise-missing-from,
redefined-outer-name,
too-few-public-methods,
too-many-arguments,
28 changes: 14 additions & 14 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
sudo: false
language: python
matrix:
include:
- python: 3.8
env: TOXENV=lint
dist: xenial
sudo: true
- python: 3.8
env: TOXENV=docs-lint
- python: 3.5
env: TOXENV=py35
- python: 3.6
env: TOXENV=py36
- python: 3.7
env: TOXENV=py37
dist: xenial
sudo: true
- python: pypy3
env: TOXENV=pypy3
dist: xenial
- python: 3.8
env: TOXENV=py38
- python: 3.9
env: TOXENV=py39
- python: pypy3
env:
- TOXENV=pypy3
# Embedded c-ares takes a long time to build and
# as-of 2020-01-04 there are no PyPy3 manylinux
# wheels for gevent on PyPI.
- GEVENTSETUP_EMBED_CARES=no
dist: xenial
sudo: true
- python: 3.8
env: TOXENV=docs-lint
dist: xenial
sudo: true
install: pip install tox
install: pip install -U tox coverage
# TODO: https://github.com/tox-dev/tox/issues/149
script: tox --recreate
after_success:
- if [ -f .coverage ]; then coverage report ; fi
cache:
directories:
- .tox
1 change: 1 addition & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ Konstantin Kapustin <sirkonst@gmail.com>
Randall Leeds <randall.leeds@gmail.com>
Berker Peksağ <berker.peksag@gmail.com>
Jason Madden <jason@nextthought.com>
Brett Randall <javabrett@gmail.com>

Alumni
======
35 changes: 0 additions & 35 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -82,41 +82,6 @@ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

doc/sitemap_gen.py
------------------
Under BSD License :

Copyright (c) 2004, 2005, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.

* Neither the name of Google Inc. nor the names of its contributors
may be used to endorse or promote products derived from this
software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


util/unlink.py
--------------
2 changes: 1 addition & 1 deletion README.rst
Original file line number Diff line number Diff line change
@@ -23,7 +23,7 @@ Feel free to join us in `#gunicorn`_ on Freenode_.
Documentation
-------------

The documentation is hosted at http://docs.gunicorn.org.
The documentation is hosted at https://docs.gunicorn.org.

Installation
------------
6 changes: 6 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
@@ -9,11 +9,17 @@ environment:
PYTHON: "C:\\Python36-x64"
- TOXENV: py37
PYTHON: "C:\\Python37-x64"
- TOXENV: py38
PYTHON: "C:\\Python38-x64"
- TOXENV: py39
PYTHON: "C:\\Python39-x64"
matrix:
allow_failures:
- TOXENV: py35
- TOXENV: py36
- TOXENV: py37
- TOXENV: py38
- TOXENV: py39
init: SET "PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
install:
- pip install tox
24 changes: 13 additions & 11 deletions docs/gunicorn_ext.py
Original file line number Diff line number Diff line change
@@ -50,27 +50,29 @@ def format_settings(app):
def fmt_setting(s):
if callable(s.default):
val = inspect.getsource(s.default)
val = "\n".join(" %s" % l for l in val.splitlines())
val = " ::\n\n" + val
val = "\n".join(" %s" % line for line in val.splitlines())
val = "\n\n.. code-block:: python\n\n" + val
elif s.default == '':
val = "``(empty string)``"
val = "``''``"
else:
val = "``%s``" % s.default
val = "``%r``" % s.default

if s.cli and s.meta:
args = ["%s %s" % (arg, s.meta) for arg in s.cli]
cli = ', '.join(args)
cli = " or ".join("``%s %s``" % (arg, s.meta) for arg in s.cli)
elif s.cli:
cli = ", ".join(s.cli)
cli = " or ".join("``%s``" % arg for arg in s.cli)
else:
cli = ""

out = []
out.append(".. _%s:\n" % s.name.replace("_", "-"))
out.append("%s" % s.name)
out.append("~" * len(s.name))
out.append("``%s``" % s.name)
out.append("~" * (len(s.name) + 4))
out.append("")
if s.cli:
out.append("* ``%s``" % cli)
out.append("* %s" % val)
out.append("**Command line:** %s" % cli)
out.append("")
out.append("**Default:** %s" % val)
out.append("")
out.append(s.desc)
out.append("")
2 changes: 1 addition & 1 deletion docs/site/index.html
Original file line number Diff line number Diff line change
@@ -16,7 +16,7 @@
<div class="logo-div">
<div class="latest">
Latest version: <strong><a
href="https://docs.gunicorn.org/en/stable/">20.0.3</a></strong>
href="https://docs.gunicorn.org/en/stable/">20.0.4</a></strong>
</div>

<div class="logo"><img src="images/logo.jpg" ></div>
105 changes: 33 additions & 72 deletions docs/site/sitemap.xml
Original file line number Diff line number Diff line change
@@ -1,112 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.google.com/schemas/sitemap/0.84"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84
http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://gunicorn.org/</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<lastmod>2019-11-27T00:02:48+01:00</lastmod>
<priority>1.0</priority>
</url>
<url>
<loc>http://gunicorn.org/configuration.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<loc>http://gunicorn.org/community.html</loc>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/configure.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
</url>
<url>
<loc>http://gunicorn.org/css/</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
</url>
<url>
<loc>http://gunicorn.org/css/index.css</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<loc>http://gunicorn.org/configuration.html</loc>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/css/style.css</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<loc>http://gunicorn.org/configure.html</loc>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/deploy.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/deployment.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/design.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/faq.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
</url>
<url>
<loc>http://gunicorn.org/images/</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
</url>
<url>
<loc>http://gunicorn.org/images/gunicorn.png</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
</url>
<url>
<loc>http://gunicorn.org/images/large_gunicorn.png</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
</url>
<url>
<loc>http://gunicorn.org/images/logo.png</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
</url>
<url>
<loc>http://gunicorn.org/index.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/install.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/installation.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/news.html</loc>
<lastmod>2010-07-08T19:57:19Z</lastmod>
<priority>0.5000</priority>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/run.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/tuning.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>http://gunicorn.org/usage.html</loc>
<lastmod>2010-07-01T05:14:22Z</lastmod>
<priority>0.5000</priority>
<lastmod>2012-10-04T00:43:15+05:45</lastmod>
<priority>0.5</priority>
</url>
</urlset>
19 changes: 0 additions & 19 deletions docs/sitemap_config.xml

This file was deleted.

Loading