<spanid="evennia-server-webserver"></span><h1>evennia.server.webserver<aclass="headerlink"href="#module-evennia.server.webserver"title="Permalink to this headline">¶</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 Evennia’s 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 <aclass="reference external"href="http://github.com/clemesha/twisted-wsgi-django">http://github.com/clemesha/twisted-wsgi-django</a> for
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.server.webserver.</code><codeclass="sig-name descname">LockableThreadPool</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#LockableThreadPool"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.LockableThreadPool"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">__init__</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#LockableThreadPool.__init__"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.LockableThreadPool.__init__"title="Permalink to this definition">¶</a></dt>
<dd><p>Create a new threadpool.</p>
<p>@param minthreads: minimum number of threads in the pool
@type minthreads: L{int}</p>
<p>@param maxthreads: maximum number of threads in the pool
@type maxthreads: L{int}</p>
<p>@param name: The name to give this threadpool; visible in log messages.
<codeclass="sig-name descname">lock</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#LockableThreadPool.lock"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.LockableThreadPool.lock"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">callInThread</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">func</span></em>, <emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#LockableThreadPool.callInThread"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.LockableThreadPool.callInThread"title="Permalink to this definition">¶</a></dt>
<dd><p>called in the main reactor thread. Makes sure the pool
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.server.webserver.</code><codeclass="sig-name descname">HTTPChannelWithXForwardedFor</code><aclass="reference internal"href="../_modules/evennia/server/webserver.html#HTTPChannelWithXForwardedFor"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.HTTPChannelWithXForwardedFor"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">allHeadersReceived</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#HTTPChannelWithXForwardedFor.allHeadersReceived"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.HTTPChannelWithXForwardedFor.allHeadersReceived"title="Permalink to this definition">¶</a></dt>
<dd><p>Check to see if this is a reverse proxied connection.</p>
<codeclass="sig-name descname">getChild</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">path</span></em>, <emclass="sig-param"><spanclass="n">request</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#EvenniaReverseProxyResource.getChild"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.EvenniaReverseProxyResource.getChild"title="Permalink 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
<codeclass="sig-name descname">render</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">request</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#EvenniaReverseProxyResource.render"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.EvenniaReverseProxyResource.render"title="Permalink to this definition">¶</a></dt>
<dd><p>Render a request by forwarding it to the proxied server.</p>
<ddclass="field-even"><p><em>not_done (char)</em>– Indicator to note request not yet finished.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dlclass="py class">
<dtid="evennia.server.webserver.DjangoWebRoot">
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.server.webserver.</code><codeclass="sig-name descname">DjangoWebRoot</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">pool</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#DjangoWebRoot"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.DjangoWebRoot"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">__init__</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">pool</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#DjangoWebRoot.__init__"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.DjangoWebRoot.__init__"title="Permalink to this definition">¶</a></dt>
<dd><p>Setup the django+twisted resource.</p>
<dlclass="field-list simple">
<dtclass="field-odd">Parameters</dt>
<ddclass="field-odd"><p><strong>pool</strong> (<em>ThreadPool</em>) – The twisted threadpool.</p>
<codeclass="sig-name descname">empty_threadpool</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#DjangoWebRoot.empty_threadpool"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.DjangoWebRoot.empty_threadpool"title="Permalink to this definition">¶</a></dt>
<dd><p>Converts our _pending_requests list of deferreds into a DeferredList</p>
<dlclass="field-list simple">
<dtclass="field-odd">Returns</dt>
<ddclass="field-odd"><p><em>deflist (DeferredList)</em>– Contains all deferreds of pending requests.</p>
<codeclass="sig-name descname">getChild</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">path</span></em>, <emclass="sig-param"><spanclass="n">request</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#DjangoWebRoot.getChild"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.DjangoWebRoot.getChild"title="Permalink to this definition">¶</a></dt>
<dd><p>To make things work we nudge the url tree to make this the
<p>This class will only log http requests if settings.DEBUG is True.</p>
<dlclass="py attribute">
<dtid="evennia.server.webserver.Website.noisy">
<codeclass="sig-name descname">noisy</code><emclass="property"> = False</em><aclass="headerlink"href="#evennia.server.webserver.Website.noisy"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">logPrefix</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#Website.logPrefix"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.Website.logPrefix"title="Permalink to this definition">¶</a></dt>
<dd><p>How to be named in logs</p>
</dd></dl>
<dlclass="py method">
<dtid="evennia.server.webserver.Website.log">
<codeclass="sig-name descname">log</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">request</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#Website.log"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.Website.log"title="Permalink to this definition">¶</a></dt>
<dd><p>Conditional logging</p>
</dd></dl>
</dd></dl>
<dlclass="py class">
<dtid="evennia.server.webserver.WSGIWebServer">
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.server.webserver.</code><codeclass="sig-name descname">WSGIWebServer</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">pool</span></em>, <emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#WSGIWebServer"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.WSGIWebServer"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">__init__</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">pool</span></em>, <emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#WSGIWebServer.__init__"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.WSGIWebServer.__init__"title="Permalink to this definition">¶</a></dt>
<dd><p>This just stores the threadpool.</p>
<dlclass="field-list simple">
<dtclass="field-odd">Parameters</dt>
<ddclass="field-odd"><ulclass="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>
<codeclass="sig-name descname">startService</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#WSGIWebServer.startService"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.WSGIWebServer.startService"title="Permalink to this definition">¶</a></dt>
<dd><p>Start the pool after the service starts.</p>
<codeclass="sig-name descname">stopService</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#WSGIWebServer.stopService"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.WSGIWebServer.stopService"title="Permalink to this definition">¶</a></dt>
<dd><p>Safely stop the pool after the service stops.</p>
<codeclass="sig-name descname">directoryListing</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/server/webserver.html#PrivateStaticRoot.directoryListing"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.server.webserver.PrivateStaticRoot.directoryListing"title="Permalink to this definition">¶</a></dt>
<dd><p>Return a resource that generates an HTML listing of the
directory this path represents.</p>
<p>@return: A resource that renders the directory to HTML.