evennia/docs/latest/api/evennia.server.webserver.html
Evennia docbuilder action 243d596662 Updated HTML docs.
2025-08-15 18:14:21 +00:00

432 lines
No EOL
36 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>evennia.server.webserver &#8212; Evennia latest documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d75fae25" />
<link rel="stylesheet" type="text/css" href="../_static/nature.css?v=279e0f84" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=e4a91a55" />
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="evennia.server.game_index_client" href="evennia.server.game_index_client.html" />
<link rel="prev" title="evennia.server.validators" href="evennia.server.validators.html" />
</head><body>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.server.game_index_client.html" title="evennia.server.game_index_client"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.server.validators.html" title="evennia.server.validators"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.server.html" accesskey="U">evennia.server</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.server.webserver</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.server.webserver">
<span id="evennia-server-webserver"></span><h1>evennia.server.webserver<a class="headerlink" href="#module-evennia.server.webserver" title="Link to this heading"></a></h1>
<p>This implements resources for Twisted webservers using the WSGI
interface of Django. This alleviates the need of running e.g. an
Apache server to serve Evennias web presence (although you could do
that too if desired).</p>
<p>The actual servers are started inside server.py as part of the Evennia
application.</p>
<p>(Lots of thanks to <a class="reference external" href="http://github.com/clemesha/twisted-wsgi-django">http://github.com/clemesha/twisted-wsgi-django</a> for
a great example/aid on how to do this.)</p>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.server.webserver.LockableThreadPool">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.server.webserver.</span></span><span class="sig-name descname"><span class="pre">LockableThreadPool</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#LockableThreadPool"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.LockableThreadPool" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">ThreadPool</span></code></p>
<p>Threadpool that can be locked from accepting new requests.</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.LockableThreadPool.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#LockableThreadPool.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.LockableThreadPool.__init__" title="Link to this definition"></a></dt>
<dd><p>Create a new threadpool.</p>
<p>&#64;param minthreads: minimum number of threads in the pool
&#64;type minthreads: L{int}</p>
<p>&#64;param maxthreads: maximum number of threads in the pool
&#64;type maxthreads: L{int}</p>
<p>&#64;param name: The name to give this threadpool; visible in log messages.
&#64;type name: native L{str}</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.LockableThreadPool.lock">
<span class="sig-name descname"><span class="pre">lock</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#LockableThreadPool.lock"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.LockableThreadPool.lock" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.LockableThreadPool.callInThread">
<span class="sig-name descname"><span class="pre">callInThread</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">func</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#LockableThreadPool.callInThread"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.LockableThreadPool.callInThread" title="Link to this definition"></a></dt>
<dd><p>called in the main reactor thread. Makes sure the pool
is not locked before continuing.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.server.webserver.HTTPChannelWithXForwardedFor">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.server.webserver.</span></span><span class="sig-name descname"><span class="pre">HTTPChannelWithXForwardedFor</span></span><a class="reference internal" href="../_modules/evennia/server/webserver.html#HTTPChannelWithXForwardedFor"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.HTTPChannelWithXForwardedFor" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">HTTPChannel</span></code></p>
<p>HTTP xforward class</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.HTTPChannelWithXForwardedFor.allHeadersReceived">
<span class="sig-name descname"><span class="pre">allHeadersReceived</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#HTTPChannelWithXForwardedFor.allHeadersReceived"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.HTTPChannelWithXForwardedFor.allHeadersReceived" title="Link to this definition"></a></dt>
<dd><p>Check to see if this is a reverse proxied connection.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.server.webserver.EvenniaReverseProxyResource">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.server.webserver.</span></span><span class="sig-name descname"><span class="pre">EvenniaReverseProxyResource</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reactor=&lt;twisted.internet.epollreactor.EPollReactor</span> <span class="pre">object&gt;</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#EvenniaReverseProxyResource"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.EvenniaReverseProxyResource" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">ReverseProxyResource</span></code></p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.EvenniaReverseProxyResource.getChild">
<span class="sig-name descname"><span class="pre">getChild</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#EvenniaReverseProxyResource.getChild"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.EvenniaReverseProxyResource.getChild" title="Link to this definition"></a></dt>
<dd><p>Create and return a proxy resource with the same proxy configuration
as this one, except that its path also contains the segment given by
path at the end.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>path</strong> (<em>str</em>) Url path.</p></li>
<li><p><strong>request</strong> (<em>Request object</em>) Incoming request.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>resource (EvenniaReverseProxyResource)</em> A proxy resource.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.EvenniaReverseProxyResource.render">
<span class="sig-name descname"><span class="pre">render</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#EvenniaReverseProxyResource.render"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.EvenniaReverseProxyResource.render" title="Link to this definition"></a></dt>
<dd><p>Render a request by forwarding it to the proxied server.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>request</strong> (<em>Request</em>) Incoming request.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>not_done (char)</em> Indicator to note request not yet finished.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.server.webserver.DjangoWebRoot">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.server.webserver.</span></span><span class="sig-name descname"><span class="pre">DjangoWebRoot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pool</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#DjangoWebRoot"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.DjangoWebRoot" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Resource</span></code></p>
<p>This creates a web root (/) that Django
understands by tweaking the way
child instances are recognized.</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.DjangoWebRoot.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pool</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#DjangoWebRoot.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.DjangoWebRoot.__init__" title="Link to this definition"></a></dt>
<dd><p>Setup the django+twisted resource.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>pool</strong> (<em>ThreadPool</em>) The twisted threadpool.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.DjangoWebRoot.empty_threadpool">
<span class="sig-name descname"><span class="pre">empty_threadpool</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#DjangoWebRoot.empty_threadpool"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.DjangoWebRoot.empty_threadpool" title="Link to this definition"></a></dt>
<dd><p>Converts our _pending_requests list of deferreds into a DeferredList</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p><em>deflist (DeferredList)</em> Contains all deferreds of pending requests.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.DjangoWebRoot.getChild">
<span class="sig-name descname"><span class="pre">getChild</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#DjangoWebRoot.getChild"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.DjangoWebRoot.getChild" title="Link to this definition"></a></dt>
<dd><p>To make things work we nudge the url tree to make this the
root.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>path</strong> (<em>str</em>) Url path.</p></li>
<li><p><strong>request</strong> (<em>Request object</em>) Incoming request.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>We make sure to save the request queue so
that we can safely kill the threadpool
on a server reload.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.server.webserver.Website">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.server.webserver.</span></span><span class="sig-name descname"><span class="pre">Website</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">resource</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">requestFactory</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#Website"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.Website" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Site</span></code></p>
<p>This class will only log http requests if settings.DEBUG is True.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.server.webserver.Website.noisy">
<span class="sig-name descname"><span class="pre">noisy</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">False</span></em><a class="headerlink" href="#evennia.server.webserver.Website.noisy" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.Website.logPrefix">
<span class="sig-name descname"><span class="pre">logPrefix</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#Website.logPrefix"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.Website.logPrefix" title="Link to this definition"></a></dt>
<dd><p>How to be named in logs</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.Website.log">
<span class="sig-name descname"><span class="pre">log</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#Website.log"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.Website.log" title="Link to this definition"></a></dt>
<dd><p>Conditional logging</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.server.webserver.WSGIWebServer">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.server.webserver.</span></span><span class="sig-name descname"><span class="pre">WSGIWebServer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pool</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#WSGIWebServer"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.WSGIWebServer" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">TCPServer</span></code></p>
<p>This is a WSGI webserver. It makes sure to start
the threadpool after the service itself started,
so as to register correctly with the twisted daemon.</p>
<p>call with WSGIWebServer(threadpool, port, wsgi_resource)</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.WSGIWebServer.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pool</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#WSGIWebServer.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.WSGIWebServer.__init__" title="Link to this definition"></a></dt>
<dd><p>This just stores the threadpool.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>pool</strong> (<em>ThreadPool</em>) The twisted threadpool.</p></li>
<li><p><strong>args</strong> (<em>any</em>) Passed on to the TCPServer.</p></li>
<li><p><strong>kwargs</strong> (<em>any</em>) Passed on to the TCPServer.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.WSGIWebServer.startService">
<span class="sig-name descname"><span class="pre">startService</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#WSGIWebServer.startService"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.WSGIWebServer.startService" title="Link to this definition"></a></dt>
<dd><p>Start the pool after the service starts.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.WSGIWebServer.stopService">
<span class="sig-name descname"><span class="pre">stopService</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#WSGIWebServer.stopService"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.WSGIWebServer.stopService" title="Link to this definition"></a></dt>
<dd><p>Safely stop the pool after the service stops.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.server.webserver.PrivateStaticRoot">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.server.webserver.</span></span><span class="sig-name descname"><span class="pre">PrivateStaticRoot</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">defaultType</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'text/html'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignoredExts</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Sequence</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">()</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">registry</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Registry</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allowExt</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Literal</span><span class="p"><span class="pre">[</span></span><span class="m"><span class="pre">0</span></span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#PrivateStaticRoot"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.PrivateStaticRoot" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">File</span></code></p>
<p>This overrides the default static file resource so as to not make the
directory listings public (that is, if you go to /media or /static you
wont see an index of all static/media files on the server).</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.webserver.PrivateStaticRoot.directoryListing">
<span class="sig-name descname"><span class="pre">directoryListing</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#PrivateStaticRoot.directoryListing"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.webserver.PrivateStaticRoot.directoryListing" title="Link to this definition"></a></dt>
<dd><p>Return a resource that generates an HTML listing of the
directory this path represents.</p>
<p>&#64;return: A resource that renders the directory to HTML.
&#64;rtype: L{DirectoryLister}</p>
</dd></dl>
</dd></dl>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo of Evennia"/>
</a></p>
<search id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
<h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">evennia.server.webserver</a><ul>
<li><a class="reference internal" href="#evennia.server.webserver.LockableThreadPool"><code class="docutils literal notranslate"><span class="pre">LockableThreadPool</span></code></a><ul>
<li><a class="reference internal" href="#evennia.server.webserver.LockableThreadPool.__init__"><code class="docutils literal notranslate"><span class="pre">LockableThreadPool.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.webserver.LockableThreadPool.lock"><code class="docutils literal notranslate"><span class="pre">LockableThreadPool.lock()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.webserver.LockableThreadPool.callInThread"><code class="docutils literal notranslate"><span class="pre">LockableThreadPool.callInThread()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.server.webserver.HTTPChannelWithXForwardedFor"><code class="docutils literal notranslate"><span class="pre">HTTPChannelWithXForwardedFor</span></code></a><ul>
<li><a class="reference internal" href="#evennia.server.webserver.HTTPChannelWithXForwardedFor.allHeadersReceived"><code class="docutils literal notranslate"><span class="pre">HTTPChannelWithXForwardedFor.allHeadersReceived()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.server.webserver.EvenniaReverseProxyResource"><code class="docutils literal notranslate"><span class="pre">EvenniaReverseProxyResource</span></code></a><ul>
<li><a class="reference internal" href="#evennia.server.webserver.EvenniaReverseProxyResource.getChild"><code class="docutils literal notranslate"><span class="pre">EvenniaReverseProxyResource.getChild()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.webserver.EvenniaReverseProxyResource.render"><code class="docutils literal notranslate"><span class="pre">EvenniaReverseProxyResource.render()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.server.webserver.DjangoWebRoot"><code class="docutils literal notranslate"><span class="pre">DjangoWebRoot</span></code></a><ul>
<li><a class="reference internal" href="#evennia.server.webserver.DjangoWebRoot.__init__"><code class="docutils literal notranslate"><span class="pre">DjangoWebRoot.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.webserver.DjangoWebRoot.empty_threadpool"><code class="docutils literal notranslate"><span class="pre">DjangoWebRoot.empty_threadpool()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.webserver.DjangoWebRoot.getChild"><code class="docutils literal notranslate"><span class="pre">DjangoWebRoot.getChild()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.server.webserver.Website"><code class="docutils literal notranslate"><span class="pre">Website</span></code></a><ul>
<li><a class="reference internal" href="#evennia.server.webserver.Website.noisy"><code class="docutils literal notranslate"><span class="pre">Website.noisy</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.webserver.Website.logPrefix"><code class="docutils literal notranslate"><span class="pre">Website.logPrefix()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.webserver.Website.log"><code class="docutils literal notranslate"><span class="pre">Website.log()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.server.webserver.WSGIWebServer"><code class="docutils literal notranslate"><span class="pre">WSGIWebServer</span></code></a><ul>
<li><a class="reference internal" href="#evennia.server.webserver.WSGIWebServer.__init__"><code class="docutils literal notranslate"><span class="pre">WSGIWebServer.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.webserver.WSGIWebServer.startService"><code class="docutils literal notranslate"><span class="pre">WSGIWebServer.startService()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.webserver.WSGIWebServer.stopService"><code class="docutils literal notranslate"><span class="pre">WSGIWebServer.stopService()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.server.webserver.PrivateStaticRoot"><code class="docutils literal notranslate"><span class="pre">PrivateStaticRoot</span></code></a><ul>
<li><a class="reference internal" href="#evennia.server.webserver.PrivateStaticRoot.directoryListing"><code class="docutils literal notranslate"><span class="pre">PrivateStaticRoot.directoryListing()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.server.validators.html"
title="previous chapter">evennia.server.validators</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.server.game_index_client.html"
title="next chapter">evennia.server.game_index_client</a></p>
</div>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.server.webserver.md.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
<li><a href="https://github.com/evennia/evennia">Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li>
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Doc Versions</h3>
<ul>
<li>
<a href="https://www.evennia.com/docs/latest/index.html">latest (main branch)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/5.x/index.html">v5.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/4.x/index.html">v4.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/3.x/index.html">v3.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/2.x/index.html">v2.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/1.x/index.html">v1.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/0.x/index.html">v0.9.5 branch (outdated)</a>
</li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.server.game_index_client.html" title="evennia.server.game_index_client"
>next</a> |</li>
<li class="right" >
<a href="evennia.server.validators.html" title="evennia.server.validators"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.server.html" >evennia.server</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.server.webserver</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2024, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
</div>
</body>
</html>