evennia/docs/0.x/api/evennia.server.webserver.html
2023-12-20 19:10:09 +01:00

332 lines
No EOL
24 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>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>evennia.server.webserver &#8212; Evennia 0.9.5 documentation</title>
<link rel="stylesheet" href="../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"processClass": "tex2jax_process|mathjax_process|math|output_area"}})</script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<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="nav-item nav-item-0"><a href="../index.html">Evennia 0.9.5</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="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 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 id="evennia.server.webserver.LockableThreadPool">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.webserver.</code><code class="sig-name descname">LockableThreadPool</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#LockableThreadPool"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.LockableThreadPool" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.python.threadpool.ThreadPool</span></code></p>
<p>Threadpool that can be locked from accepting new requests.</p>
<dl class="py method">
<dt id="evennia.server.webserver.LockableThreadPool.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#LockableThreadPool.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.LockableThreadPool.__init__" title="Permalink 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 id="evennia.server.webserver.LockableThreadPool.lock">
<code class="sig-name descname">lock</code><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">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.LockableThreadPool.lock" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.server.webserver.LockableThreadPool.callInThread">
<code class="sig-name descname">callInThread</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">func</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#LockableThreadPool.callInThread"><span class="viewcode-link">[source]</span></a><a class="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
is not locked before continuing.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.server.webserver.HTTPChannelWithXForwardedFor">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.webserver.</code><code class="sig-name descname">HTTPChannelWithXForwardedFor</code><a class="reference internal" href="../_modules/evennia/server/webserver.html#HTTPChannelWithXForwardedFor"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.HTTPChannelWithXForwardedFor" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.web.http.HTTPChannel</span></code></p>
<p>HTTP xforward class</p>
<dl class="py method">
<dt id="evennia.server.webserver.HTTPChannelWithXForwardedFor.allHeadersReceived">
<code class="sig-name descname">allHeadersReceived</code><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">[source]</span></a><a class="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>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.server.webserver.EvenniaReverseProxyResource">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.webserver.</code><code class="sig-name descname">EvenniaReverseProxyResource</code><span class="sig-paren">(</span><em class="sig-param">host</em>, <em class="sig-param">port</em>, <em class="sig-param">path</em>, <em class="sig-param">reactor=&lt;twisted.internet.epollreactor.EPollReactor object&gt;</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#EvenniaReverseProxyResource"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.EvenniaReverseProxyResource" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.web.proxy.ReverseProxyResource</span></code></p>
<dl class="py method">
<dt id="evennia.server.webserver.EvenniaReverseProxyResource.getChild">
<code class="sig-name descname">getChild</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">request</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#EvenniaReverseProxyResource.getChild"><span class="viewcode-link">[source]</span></a><a class="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
path at the end.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</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</dt>
<dd class="field-even"><p><em>resource (EvenniaReverseProxyResource)</em> A proxy resource.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.webserver.EvenniaReverseProxyResource.render">
<code class="sig-name descname">render</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#EvenniaReverseProxyResource.render"><span class="viewcode-link">[source]</span></a><a class="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>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>request</strong> (<em>Request</em>) Incoming request.</p>
</dd>
<dt class="field-even">Returns</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 id="evennia.server.webserver.DjangoWebRoot">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.webserver.</code><code class="sig-name descname">DjangoWebRoot</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">pool</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#DjangoWebRoot"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.DjangoWebRoot" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.web.resource.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 id="evennia.server.webserver.DjangoWebRoot.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">pool</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#DjangoWebRoot.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.DjangoWebRoot.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Setup the django+twisted resource.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</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 id="evennia.server.webserver.DjangoWebRoot.empty_threadpool">
<code class="sig-name descname">empty_threadpool</code><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">[source]</span></a><a class="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>
<dl class="field-list simple">
<dt class="field-odd">Returns</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 id="evennia.server.webserver.DjangoWebRoot.getChild">
<code class="sig-name descname">getChild</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">request</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#DjangoWebRoot.getChild"><span class="viewcode-link">[source]</span></a><a class="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
root.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</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 id="evennia.server.webserver.Website">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.webserver.</code><code class="sig-name descname">Website</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">resource</span></em>, <em class="sig-param"><span class="n">requestFactory</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#Website"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.Website" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.web.server.Site</span></code></p>
<p>This class will only log http requests if settings.DEBUG is True.</p>
<dl class="py attribute">
<dt id="evennia.server.webserver.Website.noisy">
<code class="sig-name descname">noisy</code><em class="property"> = False</em><a class="headerlink" href="#evennia.server.webserver.Website.noisy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.server.webserver.Website.logPrefix">
<code class="sig-name descname">logPrefix</code><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">[source]</span></a><a class="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>
<dl class="py method">
<dt id="evennia.server.webserver.Website.log">
<code class="sig-name descname">log</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">request</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#Website.log"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.Website.log" title="Permalink to this definition"></a></dt>
<dd><p>Conditional logging</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.server.webserver.WSGIWebServer">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.webserver.</code><code class="sig-name descname">WSGIWebServer</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">pool</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#WSGIWebServer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.WSGIWebServer" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.application.internet.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 id="evennia.server.webserver.WSGIWebServer.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">pool</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#WSGIWebServer.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.WSGIWebServer.__init__" title="Permalink to this definition"></a></dt>
<dd><p>This just stores the threadpool.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</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 id="evennia.server.webserver.WSGIWebServer.startService">
<code class="sig-name descname">startService</code><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">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.WSGIWebServer.startService" title="Permalink to this definition"></a></dt>
<dd><p>Start the pool after the service starts.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.webserver.WSGIWebServer.stopService">
<code class="sig-name descname">stopService</code><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">[source]</span></a><a class="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>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.server.webserver.PrivateStaticRoot">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.webserver.</code><code class="sig-name descname">PrivateStaticRoot</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">path</span></em>, <em class="sig-param"><span class="n">defaultType</span><span class="o">=</span><span class="default_value">'text/html'</span></em>, <em class="sig-param"><span class="n">ignoredExts</span><span class="o">=</span><span class="default_value">()</span></em>, <em class="sig-param"><span class="n">registry</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">allowExt</span><span class="o">=</span><span class="default_value">0</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/webserver.html#PrivateStaticRoot"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.webserver.PrivateStaticRoot" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.web.static.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 id="evennia.server.webserver.PrivateStaticRoot.directoryListing">
<code class="sig-name descname">directoryListing</code><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">[source]</span></a><a class="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>&#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 navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div 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" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
<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">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
<a href="https://discord.gg/NecFePw">Discord</a> -
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
</li>
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="../../1.0-dev/api/evennia.server.webserver.html">1.0-dev (develop branch)</a></li>
<li><a href="evennia.server.webserver.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<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="nav-item nav-item-0"><a href="../index.html">Evennia 0.9.5</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 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>