mirror of
https://github.com/evennia/evennia.git
synced 2026-04-03 06:27:17 +02:00
Updated HTML docs
This commit is contained in:
parent
87191ef0c4
commit
801df95026
1203 changed files with 7193 additions and 30090 deletions
|
|
@ -30,7 +30,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.conf</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -321,6 +320,7 @@
|
|||
<li><a href="../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -338,7 +338,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.conf</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="../../../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.db.models.fields.related_descriptors</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -1203,6 +1202,7 @@
|
|||
<li><a href="../../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1220,7 +1220,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="../../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.db.models.fields.related_descriptors</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="../../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.db.models.manager</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -267,6 +266,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -284,7 +284,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.db.models.manager</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -30,7 +30,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="../../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.db.models.query_utils</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -402,6 +401,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -419,7 +419,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.db.models.query_utils</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -1,148 +0,0 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>django.utils.deconstruct — Evennia 1.0-dev 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>
|
||||
<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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.utils.deconstruct</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for django.utils.deconstruct</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">from</span> <span class="nn">importlib</span> <span class="kn">import</span> <span class="n">import_module</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">django.utils.version</span> <span class="kn">import</span> <span class="n">get_docs_version</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">deconstructible</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Class decorator that allows the decorated class to be serialized</span>
|
||||
<span class="sd"> by the migrations subsystem.</span>
|
||||
|
||||
<span class="sd"> The `path` kwarg specifies the import path.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">def</span> <span class="nf">decorator</span><span class="p">(</span><span class="n">klass</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="c1"># We capture the arguments to make returning them trivial</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">_constructor_args</span> <span class="o">=</span> <span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">obj</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">deconstruct</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Return a 3-tuple of class import path, positional arguments,</span>
|
||||
<span class="sd"> and keyword arguments.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># Fallback version</span>
|
||||
<span class="k">if</span> <span class="n">path</span><span class="p">:</span>
|
||||
<span class="n">module_name</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">rpartition</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">module_name</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="vm">__module__</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span>
|
||||
<span class="c1"># Make sure it's actually there and not an inner class</span>
|
||||
<span class="n">module</span> <span class="o">=</span> <span class="n">import_module</span><span class="p">(</span><span class="n">module_name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
||||
<span class="s2">"Could not find object </span><span class="si">%s</span><span class="s2"> in </span><span class="si">%s</span><span class="s2">.</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="s2">"Please note that you cannot serialize things like inner "</span>
|
||||
<span class="s2">"classes. Please move the object into the main module "</span>
|
||||
<span class="s2">"body to use migrations.</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="s2">"For more information, see "</span>
|
||||
<span class="s2">"https://docs.djangoproject.com/en/</span><span class="si">%s</span><span class="s2">/topics/migrations/#serializing-values"</span>
|
||||
<span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">module_name</span><span class="p">,</span> <span class="n">get_docs_version</span><span class="p">()))</span>
|
||||
<span class="k">return</span> <span class="p">(</span>
|
||||
<span class="n">path</span> <span class="ow">or</span> <span class="s1">'</span><span class="si">%s</span><span class="s1">.</span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__module__</span><span class="p">,</span> <span class="n">name</span><span class="p">),</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">_constructor_args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">_constructor_args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">klass</span><span class="o">.</span><span class="fm">__new__</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="fm">__new__</span><span class="p">)</span>
|
||||
<span class="n">klass</span><span class="o">.</span><span class="n">deconstruct</span> <span class="o">=</span> <span class="n">deconstruct</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">klass</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">decorator</span>
|
||||
<span class="k">return</span> <span class="n">decorator</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
|
||||
<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>
|
||||
<h3>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="deconstruct.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../../../0.9.5/index.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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.utils.deconstruct</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -30,7 +30,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="../../index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.utils.functional</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -499,6 +498,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -516,7 +516,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">django.utils.functional</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -533,6 +532,7 @@
|
|||
<li><a href="../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -550,7 +550,6 @@
|
|||
<li class="nav-item nav-item-1"><a href="index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.accounts.accounts</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -74,7 +73,7 @@
|
|||
<span class="n">SIGNAL_OBJECT_POST_PUPPET</span><span class="p">,</span>
|
||||
<span class="n">SIGNAL_OBJECT_POST_UNPUPPET</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.attributes</span> <span class="kn">import</span> <span class="n">NickHandler</span><span class="p">,</span> <span class="n">ModelAttributeBackend</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.attributes</span> <span class="kn">import</span> <span class="n">NickHandler</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.scripts.scripthandler</span> <span class="kn">import</span> <span class="n">ScriptHandler</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.commands.cmdsethandler</span> <span class="kn">import</span> <span class="n">CmdSetHandler</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.optionhandler</span> <span class="kn">import</span> <span class="n">OptionHandler</span>
|
||||
|
|
@ -82,7 +81,7 @@
|
|||
<span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
|
||||
<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">getrandbits</span>
|
||||
|
||||
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"DefaultAccount"</span><span class="p">,</span> <span class="s2">"DefaultGuest"</span><span class="p">)</span>
|
||||
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"DefaultAccount"</span><span class="p">,)</span>
|
||||
|
||||
<span class="n">_SESSIONS</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
|
|
@ -94,10 +93,10 @@
|
|||
|
||||
<span class="c1"># Create throttles for too many account-creations and login attempts</span>
|
||||
<span class="n">CREATION_THROTTLE</span> <span class="o">=</span> <span class="n">Throttle</span><span class="p">(</span>
|
||||
<span class="n">name</span><span class="o">=</span><span class="s1">'creation'</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CREATION_THROTTLE_LIMIT</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CREATION_THROTTLE_TIMEOUT</span>
|
||||
<span class="n">limit</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CREATION_THROTTLE_LIMIT</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CREATION_THROTTLE_TIMEOUT</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">LOGIN_THROTTLE</span> <span class="o">=</span> <span class="n">Throttle</span><span class="p">(</span>
|
||||
<span class="n">name</span><span class="o">=</span><span class="s1">'login'</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">LOGIN_THROTTLE_LIMIT</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">LOGIN_THROTTLE_TIMEOUT</span>
|
||||
<span class="n">limit</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">LOGIN_THROTTLE_LIMIT</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">LOGIN_THROTTLE_TIMEOUT</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
|
||||
|
|
@ -226,7 +225,7 @@
|
|||
<span class="sd"> - at_server_reload()</span>
|
||||
<span class="sd"> - at_server_shutdown()</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">objects</span> <span class="o">=</span> <span class="n">AccountManager</span><span class="p">()</span>
|
||||
|
||||
|
|
@ -241,7 +240,7 @@
|
|||
|
||||
<div class="viewcode-block" id="DefaultAccount.nicks"><a class="viewcode-back" href="../../../api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultAccount.nicks">[docs]</a> <span class="nd">@lazy_property</span>
|
||||
<span class="k">def</span> <span class="nf">nicks</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">NickHandler</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ModelAttributeBackend</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="n">NickHandler</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="DefaultAccount.sessions"><a class="viewcode-back" href="../../../api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultAccount.sessions">[docs]</a> <span class="nd">@lazy_property</span>
|
||||
<span class="k">def</span> <span class="nf">sessions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
|
|
@ -722,6 +721,9 @@
|
|||
<span class="p">)</span>
|
||||
<span class="n">Character</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">character_typeclass</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="s2">"location"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"location"</span><span class="p">]</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">START_LOCATION</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Create the character</span>
|
||||
<span class="n">character</span><span class="p">,</span> <span class="n">errs</span> <span class="o">=</span> <span class="n">Character</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
|
||||
<span class="n">character_key</span><span class="p">,</span>
|
||||
|
|
@ -1589,21 +1591,21 @@
|
|||
<span class="k">return</span> <span class="n">look_string</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="DefaultGuest"><a class="viewcode-back" href="../../../api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultGuest">[docs]</a><span class="k">class</span> <span class="nc">DefaultGuest</span><span class="p">(</span><span class="n">DefaultAccount</span><span class="p">):</span>
|
||||
<span class="k">class</span> <span class="nc">DefaultGuest</span><span class="p">(</span><span class="n">DefaultAccount</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> This class is used for guest logins. Unlike Accounts, Guests and</span>
|
||||
<span class="sd"> their characters are deleted after disconnection.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<div class="viewcode-block" id="DefaultGuest.create"><a class="viewcode-back" href="../../../api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultGuest.create">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Forwards request to cls.authenticate(); returns a DefaultGuest object</span>
|
||||
<span class="sd"> if one is available for use.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">authenticate</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="o">.</span><span class="n">authenticate</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="DefaultGuest.authenticate"><a class="viewcode-back" href="../../../api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultGuest.authenticate">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">authenticate</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Gets or creates a Guest account object.</span>
|
||||
|
|
@ -1675,9 +1677,9 @@
|
|||
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="n">errors</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">account</span><span class="p">,</span> <span class="n">errors</span></div>
|
||||
<span class="k">return</span> <span class="n">account</span><span class="p">,</span> <span class="n">errors</span>
|
||||
|
||||
<div class="viewcode-block" id="DefaultGuest.at_post_login"><a class="viewcode-back" href="../../../api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultGuest.at_post_login">[docs]</a> <span class="k">def</span> <span class="nf">at_post_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">at_post_login</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> In theory, guests only have one character regardless of which</span>
|
||||
<span class="sd"> MULTISESSION_MODE we're in. They don't get a choice.</span>
|
||||
|
|
@ -1689,9 +1691,9 @@
|
|||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_send_to_connect_channel</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"|G</span><span class="si">{key}</span><span class="s2"> connected|n"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">puppet_object</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_last_puppet</span><span class="p">)</span></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">puppet_object</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_last_puppet</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="DefaultGuest.at_server_shutdown"><a class="viewcode-back" href="../../../api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultGuest.at_server_shutdown">[docs]</a> <span class="k">def</span> <span class="nf">at_server_shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">at_server_shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> We repeat the functionality of `at_disconnect()` here just to</span>
|
||||
<span class="sd"> be on the safe side.</span>
|
||||
|
|
@ -1700,9 +1702,9 @@
|
|||
<span class="n">characters</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span>
|
||||
<span class="k">for</span> <span class="n">character</span> <span class="ow">in</span> <span class="n">characters</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">character</span><span class="p">:</span>
|
||||
<span class="n">character</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
|
||||
<span class="n">character</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
|
||||
<div class="viewcode-block" id="DefaultGuest.at_post_disconnect"><a class="viewcode-back" href="../../../api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultGuest.at_post_disconnect">[docs]</a> <span class="k">def</span> <span class="nf">at_post_disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="k">def</span> <span class="nf">at_post_disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Once having disconnected, destroy the guest's characters and</span>
|
||||
|
||||
|
|
@ -1716,7 +1718,7 @@
|
|||
<span class="k">for</span> <span class="n">character</span> <span class="ow">in</span> <span class="n">characters</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">character</span><span class="p">:</span>
|
||||
<span class="n">character</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1744,6 +1746,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1762,7 +1765,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.accounts.accounts</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.accounts.admin</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -432,6 +431,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -450,7 +450,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.accounts.admin</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.accounts.bots</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -646,6 +645,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -664,7 +664,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.accounts.bots</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.accounts.manager</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -256,6 +255,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -274,7 +274,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.accounts.manager</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.accounts.models</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -248,6 +247,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -266,7 +266,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.accounts.models</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.cmdhandler</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -894,6 +893,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -912,7 +912,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.cmdhandler</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.cmdparser</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -290,6 +289,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -308,7 +308,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.cmdparser</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.cmdset</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -400,14 +399,18 @@
|
|||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">perm</span> <span class="o">=</span> <span class="s2">"perm"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">permanent</span> <span class="k">else</span> <span class="s2">"non-perm"</span>
|
||||
<span class="n">options</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span>
|
||||
<span class="s2">"</span><span class="si">{}</span><span class="s2">:</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">opt</span><span class="p">,</span> <span class="s2">"T"</span> <span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"F"</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"no_exits"</span><span class="p">,</span> <span class="s2">"no_objs"</span><span class="p">,</span> <span class="s2">"no_channels"</span><span class="p">,</span> <span class="s2">"duplicates"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
||||
<span class="p">])</span>
|
||||
<span class="n">options</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="p">[</span>
|
||||
<span class="s2">"</span><span class="si">{}</span><span class="s2">:</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">opt</span><span class="p">,</span> <span class="s2">"T"</span> <span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"F"</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"no_exits"</span><span class="p">,</span> <span class="s2">"no_objs"</span><span class="p">,</span> <span class="s2">"no_channels"</span><span class="p">,</span> <span class="s2">"duplicates"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
||||
<span class="p">]</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">", "</span> <span class="o">+</span> <span class="n">options</span><span class="p">)</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"<CmdSet </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">mergetype</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">perm</span><span class="si">}</span><span class="s2">, prio </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">priority</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">>: "</span> <span class="o">+</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">commands</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">o</span><span class="p">:</span> <span class="n">o</span><span class="o">.</span><span class="n">key</span><span class="p">)])</span>
|
||||
<span class="k">return</span> <span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"<CmdSet </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">mergetype</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">perm</span><span class="si">}</span><span class="s2">, prio </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">priority</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">>: "</span>
|
||||
<span class="o">+</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">commands</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">o</span><span class="p">:</span> <span class="n">o</span><span class="o">.</span><span class="n">key</span><span class="p">)])</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -741,6 +744,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -759,7 +763,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.cmdset</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.cmdsethandler</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -373,7 +372,7 @@
|
|||
|
||||
<span class="k">if</span> <span class="n">mergelist</span><span class="p">:</span>
|
||||
<span class="c1"># current is a result of mergers</span>
|
||||
<span class="n">mergelist</span><span class="o">=</span><span class="s2">"+"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mergelist</span><span class="p">)</span>
|
||||
<span class="n">mergelist</span> <span class="o">=</span> <span class="s2">"+"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mergelist</span><span class="p">)</span>
|
||||
<span class="n">strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">" <Merged </span><span class="si">{</span><span class="n">mergelist</span><span class="si">}</span><span class="s2">>: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">current</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># current is a single cmdset</span>
|
||||
|
|
@ -721,6 +720,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -739,7 +739,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.cmdsethandler</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.command</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -126,15 +125,6 @@
|
|||
<span class="k">break</span>
|
||||
<span class="bp">cls</span><span class="o">.</span><span class="n">help_category</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">help_category</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># pre-prepare a help index entry for quicker lookup</span>
|
||||
<span class="bp">cls</span><span class="o">.</span><span class="n">search_index_entry</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="s2">"aliases"</span><span class="p">:</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">aliases</span><span class="p">),</span>
|
||||
<span class="s2">"category"</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">help_category</span><span class="p">,</span>
|
||||
<span class="s2">"text"</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="CommandMeta"><a class="viewcode-back" href="../../../api/evennia.commands.command.html#evennia.commands.cmdhandler.CommandMeta">[docs]</a><span class="k">class</span> <span class="nc">CommandMeta</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -561,6 +551,20 @@
|
|||
<span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_WIDTH</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Command.client_height"><a class="viewcode-back" href="../../../api/evennia.commands.command.html#evennia.commands.cmdhandler.Command.client_height">[docs]</a> <span class="k">def</span> <span class="nf">client_height</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Get the client screenheight for the session using this command.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> client height (int): The height (in characters) of the client window.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
|
||||
<span class="s2">"SCREENHEIGHT"</span><span class="p">,</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_HEIGHT</span><span class="p">}</span>
|
||||
<span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_HEIGHT</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Command.styled_table"><a class="viewcode-back" href="../../../api/evennia.commands.command.html#evennia.commands.cmdhandler.Command.styled_table">[docs]</a> <span class="k">def</span> <span class="nf">styled_table</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Create an EvTable styled by on user preferences.</span>
|
||||
|
|
@ -742,6 +746,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -760,7 +765,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.command</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.account</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -1121,6 +1120,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1139,7 +1139,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.account</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.admin</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -662,6 +661,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -680,7 +680,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.admin</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.batchprocess</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -888,6 +887,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -906,7 +906,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.batchprocess</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.building</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -2558,12 +2557,14 @@
|
|||
|
||||
<span class="k">def</span> <span class="nf">_format_options</span><span class="p">(</span><span class="n">cmdset</span><span class="p">):</span>
|
||||
<span class="sd">"""helper for cmdset-option display"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_truefalse</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">""</span>
|
||||
<span class="k">if</span> <span class="n">value</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">string</span><span class="si">}</span><span class="s2">: T"</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">string</span><span class="si">}</span><span class="s2">: F"</span>
|
||||
|
||||
<span class="n">options</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="n">_truefalse</span><span class="p">(</span><span class="n">opt</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="n">opt</span><span class="p">))</span>
|
||||
<span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"no_exits"</span><span class="p">,</span> <span class="s2">"no_objs"</span><span class="p">,</span> <span class="s2">"no_channels"</span><span class="p">,</span> <span class="s2">"duplicates"</span><span class="p">)</span>
|
||||
|
|
@ -2580,7 +2581,8 @@
|
|||
<span class="k">continue</span>
|
||||
<span class="n">options</span> <span class="o">=</span> <span class="n">_format_options</span><span class="p">(</span><span class="n">cmdset</span><span class="p">)</span>
|
||||
<span class="n">stored</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">path</span><span class="si">}</span><span class="s2"> [</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">] (</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">mergetype</span><span class="si">}</span><span class="s2">, prio </span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">priority</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span>
|
||||
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">path</span><span class="si">}</span><span class="s2"> [</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">] (</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">mergetype</span><span class="si">}</span><span class="s2">, prio </span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">priority</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">)"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">output</span><span class="p">[</span><span class="s2">"Stored Cmdset(s)"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">stored</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># this gets all components of the currently merged set</span>
|
||||
|
|
@ -2618,13 +2620,15 @@
|
|||
<span class="c1"># the resulting merged cmdset</span>
|
||||
<span class="n">options</span> <span class="o">=</span> <span class="n">_format_options</span><span class="p">(</span><span class="n">current_cmdset</span><span class="p">)</span>
|
||||
<span class="n">merged</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="sa">f</span><span class="s2">"<Current merged cmdset> (</span><span class="si">{</span><span class="n">current_cmdset</span><span class="o">.</span><span class="n">mergetype</span><span class="si">}</span><span class="s2"> prio </span><span class="si">{</span><span class="n">current_cmdset</span><span class="o">.</span><span class="n">priority</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">)"</span><span class="p">]</span>
|
||||
<span class="sa">f</span><span class="s2">"<Current merged cmdset> (</span><span class="si">{</span><span class="n">current_cmdset</span><span class="o">.</span><span class="n">mergetype</span><span class="si">}</span><span class="s2"> prio </span><span class="si">{</span><span class="n">current_cmdset</span><span class="o">.</span><span class="n">priority</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">)"</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="c1"># the merge stack</span>
|
||||
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">all_cmdsets</span><span class="p">:</span>
|
||||
<span class="n">options</span> <span class="o">=</span> <span class="n">_format_options</span><span class="p">(</span><span class="n">cmdset</span><span class="p">)</span>
|
||||
<span class="n">merged</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">path</span><span class="si">}</span><span class="s2"> [</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">] (</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">mergetype</span><span class="si">}</span><span class="s2"> prio </span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">priority</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span>
|
||||
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">path</span><span class="si">}</span><span class="s2"> [</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">] (</span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">mergetype</span><span class="si">}</span><span class="s2"> prio </span><span class="si">{</span><span class="n">cmdset</span><span class="o">.</span><span class="n">priority</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">)"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">output</span><span class="p">[</span><span class="s2">"Merged Cmdset(s)"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">merged</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># list the commands available to this object</span>
|
||||
|
|
@ -3885,6 +3889,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -3903,7 +3908,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.building</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.cmdset_account</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -144,6 +143,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -162,7 +162,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.cmdset_account</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.cmdset_character</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -159,6 +158,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -177,7 +177,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.cmdset_character</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.cmdset_session</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -85,6 +84,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -103,7 +103,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.cmdset_session</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.cmdset_unloggedin</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -94,6 +93,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -112,7 +112,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.cmdset_unloggedin</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.comms</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -875,7 +874,7 @@
|
|||
<span class="n">receiver</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"|n,</span><span class="si">{</span><span class="n">clr</span><span class="si">}</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">page</span><span class="o">.</span><span class="n">receivers</span><span class="p">])</span>
|
||||
<span class="k">if</span> <span class="n">sending</span><span class="p">:</span>
|
||||
<span class="n">template</span> <span class="o">=</span> <span class="n">to_template</span>
|
||||
<span class="n">sender</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">sender</span><span class="si">}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">multi_send</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="n">sender</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">sender</span><span class="si">}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">multi_send</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="n">receiver</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">receiver</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">multi_recv</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">" </span><span class="si">{</span><span class="n">receiver</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">template</span> <span class="o">=</span> <span class="n">from_template</span>
|
||||
|
|
@ -890,7 +889,6 @@
|
|||
<span class="n">receiver</span><span class="o">=</span><span class="n">receiver</span><span class="p">,</span>
|
||||
<span class="n">message</span><span class="o">=</span><span class="n">page</span><span class="o">.</span><span class="n">message</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="p">)</span>
|
||||
<span class="n">lastpages</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">listing</span><span class="p">)</span>
|
||||
|
||||
|
|
@ -1424,6 +1422,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1442,7 +1441,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.comms</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.general</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -421,10 +420,13 @@
|
|||
<span class="n">string</span> <span class="o">=</span> <span class="s2">"You are not carrying anything."</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">raw</span> <span class="k">as</span> <span class="n">raw_ansi</span>
|
||||
|
||||
<span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">styled_table</span><span class="p">(</span><span class="n">border</span><span class="o">=</span><span class="s2">"header"</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
|
||||
<span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span><span class="sa">f</span><span class="s2">"|C</span><span class="si">{</span><span class="n">item</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">|n"</span><span class="p">,</span>
|
||||
<span class="s2">"</span><span class="si">{}</span><span class="s2">|n"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">raw_ansi</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">),</span> <span class="n">width</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">))</span>
|
||||
<span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"|C</span><span class="si">{</span><span class="n">item</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">|n"</span><span class="p">,</span>
|
||||
<span class="s2">"</span><span class="si">{}</span><span class="s2">|n"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">raw_ansi</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">),</span> <span class="n">width</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">),</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">string</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"|wYou are carrying:</span><span class="se">\n</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div></div>
|
||||
|
||||
|
|
@ -795,6 +797,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -813,7 +816,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.general</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.help</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -54,14 +53,8 @@
|
|||
<span class="kn">from</span> <span class="nn">evennia.commands.command</span> <span class="kn">import</span> <span class="n">Command</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.help.models</span> <span class="kn">import</span> <span class="n">HelpEntry</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span><span class="p">,</span> <span class="n">evmore</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">ANSIString</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.eveditor</span> <span class="kn">import</span> <span class="n">EvEditor</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">string_suggestions</span><span class="p">,</span>
|
||||
<span class="n">class_from_module</span><span class="p">,</span>
|
||||
<span class="n">inherits_from</span><span class="p">,</span>
|
||||
<span class="n">format_grid</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">string_suggestions</span><span class="p">,</span> <span class="n">class_from_module</span>
|
||||
|
||||
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">)</span>
|
||||
<span class="n">HELP_MORE</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">HELP_MORE</span>
|
||||
|
|
@ -72,73 +65,8 @@
|
|||
<span class="n">_DEFAULT_WIDTH</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_WIDTH</span>
|
||||
<span class="n">_SEP</span> <span class="o">=</span> <span class="s2">"|C"</span> <span class="o">+</span> <span class="s2">"-"</span> <span class="o">*</span> <span class="n">_DEFAULT_WIDTH</span> <span class="o">+</span> <span class="s2">"|n"</span>
|
||||
|
||||
<span class="n">_LUNR</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_LUNR_EXCEPTION</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">HelpCategory</span><span class="p">:</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">search_index_entry</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">),</span>
|
||||
<span class="s2">"aliases"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||
<span class="s2">"category"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||
<span class="s2">"text"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Category: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">"</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="nb">str</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">help_search_with_index</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">candidate_entries</span><span class="p">,</span> <span class="n">suggestion_maxnum</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Lunr-powered fast index search and suggestion wrapper</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">global</span> <span class="n">_LUNR</span><span class="p">,</span> <span class="n">_LUNR_EXCEPTION</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_LUNR</span><span class="p">:</span>
|
||||
<span class="c1"># we have to delay-load lunr because it messes with logging if it's imported</span>
|
||||
<span class="c1"># before twisted's logging has been set up</span>
|
||||
<span class="kn">from</span> <span class="nn">lunr</span> <span class="kn">import</span> <span class="n">lunr</span> <span class="k">as</span> <span class="n">_LUNR</span>
|
||||
<span class="kn">from</span> <span class="nn">lunr.exceptions</span> <span class="kn">import</span> <span class="n">QueryParseError</span> <span class="k">as</span> <span class="n">_LUNR_EXCEPTION</span>
|
||||
|
||||
<span class="n">indx</span> <span class="o">=</span> <span class="p">[</span><span class="n">cnd</span><span class="o">.</span><span class="n">search_index_entry</span> <span class="k">for</span> <span class="n">cnd</span> <span class="ow">in</span> <span class="n">candidate_entries</span><span class="p">]</span>
|
||||
<span class="n">mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">indx</span><span class="p">[</span><span class="n">ix</span><span class="p">][</span><span class="s2">"key"</span><span class="p">]:</span> <span class="n">cand</span> <span class="k">for</span> <span class="n">ix</span><span class="p">,</span> <span class="n">cand</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">candidate_entries</span><span class="p">)}</span>
|
||||
|
||||
<span class="n">search_index</span> <span class="o">=</span> <span class="n">_LUNR</span><span class="p">(</span>
|
||||
<span class="n">ref</span><span class="o">=</span><span class="s2">"key"</span><span class="p">,</span>
|
||||
<span class="n">fields</span><span class="o">=</span><span class="p">[</span>
|
||||
<span class="p">{</span><span class="s2">"field_name"</span><span class="p">:</span> <span class="s2">"key"</span><span class="p">,</span> <span class="s2">"boost"</span><span class="p">:</span> <span class="mi">10</span><span class="p">},</span>
|
||||
<span class="p">{</span><span class="s2">"field_name"</span><span class="p">:</span> <span class="s2">"aliases"</span><span class="p">,</span> <span class="s2">"boost"</span><span class="p">:</span> <span class="mi">9</span><span class="p">},</span>
|
||||
<span class="p">{</span><span class="s2">"field_name"</span><span class="p">:</span> <span class="s2">"category"</span><span class="p">,</span> <span class="s2">"boost"</span><span class="p">:</span> <span class="mi">8</span><span class="p">},</span>
|
||||
<span class="p">{</span><span class="s2">"field_name"</span><span class="p">:</span> <span class="s2">"tags"</span><span class="p">,</span> <span class="s2">"boost"</span><span class="p">:</span> <span class="mi">5</span><span class="p">},</span>
|
||||
<span class="p">{</span><span class="s2">"field_name"</span><span class="p">:</span> <span class="s2">"text"</span><span class="p">,</span> <span class="s2">"boost"</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span>
|
||||
<span class="p">],</span>
|
||||
<span class="n">documents</span><span class="o">=</span><span class="n">indx</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">matches</span> <span class="o">=</span> <span class="n">search_index</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">query</span><span class="p">)[:</span><span class="n">suggestion_maxnum</span><span class="p">]</span>
|
||||
<span class="k">except</span> <span class="n">_LUNR_EXCEPTION</span><span class="p">:</span>
|
||||
<span class="c1"># this is a user-input problem</span>
|
||||
<span class="n">matches</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
||||
<span class="c1"># matches (objs), suggestions (strs)</span>
|
||||
<span class="k">return</span> <span class="p">(</span>
|
||||
<span class="p">[</span><span class="n">mapping</span><span class="p">[</span><span class="n">match</span><span class="p">[</span><span class="s2">"ref"</span><span class="p">]]</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">matches</span><span class="p">],</span>
|
||||
<span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">match</span><span class="p">[</span><span class="s2">"ref"</span><span class="p">])</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">matches</span><span class="p">],</span> <span class="c1"># + f" (score {match['score']})") # good debug</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="CmdHelp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp">[docs]</a><span class="k">class</span> <span class="nc">CmdHelp</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="CmdHelp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp">[docs]</a><span class="k">class</span> <span class="nc">CmdHelp</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> View help or a list of topics</span>
|
||||
|
||||
|
|
@ -180,7 +108,7 @@
|
|||
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">help_more</span><span class="p">:</span>
|
||||
<span class="n">usemore</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"websocket"</span><span class="p">,</span> <span class="s2">"ajax/comet"</span><span class="p">,):</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"websocket"</span><span class="p">,</span> <span class="s2">"ajax/comet"</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_saved_webclient_options</span>
|
||||
<span class="k">if</span> <span class="n">options</span> <span class="ow">and</span> <span class="n">options</span><span class="p">[</span><span class="s2">"helppopup"</span><span class="p">]:</span>
|
||||
|
|
@ -210,49 +138,44 @@
|
|||
<span class="sd"> Returns the formatted string, ready to be sent.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">start</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">_SEP</span><span class="si">}</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"|CHelp for |w</span><span class="si">{</span><span class="n">title</span><span class="si">}</span><span class="s2">|n"</span> <span class="k">if</span> <span class="n">title</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="n">aliases</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s2">" |C(aliases: </span><span class="si">{}</span><span class="s2">|C)|n"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"|C,|n "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">"|w</span><span class="si">{</span><span class="n">ali</span><span class="si">}</span><span class="s2">|n"</span> <span class="k">for</span> <span class="n">ali</span> <span class="ow">in</span> <span class="n">aliases</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">aliases</span> <span class="k">else</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">help_text</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"</span><span class="se">\n</span><span class="si">{</span><span class="n">dedent</span><span class="p">(</span><span class="n">help_text</span><span class="o">.</span><span class="n">rstrip</span><span class="p">())</span><span class="si">}</span><span class="s2">"</span><span class="k">if</span> <span class="n">help_text</span> <span class="k">else</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">suggested</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s2">"</span><span class="se">\n\n</span><span class="s2">|CSuggested:|n </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">fill</span><span class="p">(</span><span class="s2">"|C,|n "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">"|w</span><span class="si">{</span><span class="n">sug</span><span class="si">}</span><span class="s2">|n"</span> <span class="k">for</span> <span class="n">sug</span> <span class="ow">in</span> <span class="n">suggested</span><span class="p">)))</span>
|
||||
<span class="k">if</span> <span class="n">suggested</span> <span class="k">else</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">end</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="se">\n</span><span class="si">{</span><span class="n">_SEP</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="n">string</span> <span class="o">=</span> <span class="n">_SEP</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="k">if</span> <span class="n">title</span><span class="p">:</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"|CHelp for |w</span><span class="si">%s</span><span class="s2">|n"</span> <span class="o">%</span> <span class="n">title</span>
|
||||
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" |C(aliases: </span><span class="si">%s</span><span class="s2">|C)|n"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">"|C,|n "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"|w</span><span class="si">%s</span><span class="s2">|n"</span> <span class="o">%</span> <span class="n">ali</span> <span class="k">for</span> <span class="n">ali</span> <span class="ow">in</span> <span class="n">aliases</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">help_text</span><span class="p">:</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">dedent</span><span class="p">(</span><span class="n">help_text</span><span class="o">.</span><span class="n">rstrip</span><span class="p">())</span>
|
||||
<span class="k">if</span> <span class="n">suggested</span><span class="p">:</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n\n</span><span class="s2">|CSuggested:|n "</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">fill</span><span class="p">(</span><span class="s2">"|C,|n "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"|w</span><span class="si">%s</span><span class="s2">|n"</span> <span class="o">%</span> <span class="n">sug</span> <span class="k">for</span> <span class="n">sug</span> <span class="ow">in</span> <span class="n">suggested</span><span class="p">))</span>
|
||||
<span class="n">string</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">_SEP</span>
|
||||
<span class="k">return</span> <span class="n">string</span></div>
|
||||
|
||||
<span class="k">return</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">start</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">aliases</span><span class="p">,</span> <span class="n">help_text</span><span class="p">,</span> <span class="n">suggested</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdHelp.format_help_list"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.format_help_list">[docs]</a> <span class="k">def</span> <span class="nf">format_help_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hdict_cmds</span><span class="p">,</span> <span class="n">hdict_db</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="CmdHelp.format_help_list"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.format_help_list">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">format_help_list</span><span class="p">(</span><span class="n">hdict_cmds</span><span class="p">,</span> <span class="n">hdict_db</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Output a category-ordered list. The input are the</span>
|
||||
<span class="sd"> pre-loaded help files for commands and database-helpfiles</span>
|
||||
<span class="sd"> respectively. You can override this method to return a</span>
|
||||
<span class="sd"> custom display of the list of commands and topics.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">category_clr</span> <span class="o">=</span> <span class="s2">"|w"</span>
|
||||
<span class="n">topic_clr</span> <span class="o">=</span> <span class="s2">"|G"</span>
|
||||
<span class="n">width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">()</span>
|
||||
<span class="n">grid</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">verbatim_elements</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">category</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">hdict_cmds</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">hdict_db</span><span class="o">.</span><span class="n">keys</span><span class="p">()))):</span>
|
||||
|
||||
<span class="n">category_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"-- </span><span class="si">{</span><span class="n">category</span><span class="o">.</span><span class="n">title</span><span class="p">()</span><span class="si">}</span><span class="s2"> "</span>
|
||||
<span class="n">grid</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||
<span class="n">ANSIString</span><span class="p">(</span>
|
||||
<span class="n">category_clr</span> <span class="o">+</span> <span class="n">category_str</span> <span class="o">+</span> <span class="s2">"-"</span> <span class="o">*</span> <span class="p">(</span><span class="n">width</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">category_str</span><span class="p">))</span> <span class="o">+</span> <span class="n">topic_clr</span>
|
||||
<span class="n">string</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="k">if</span> <span class="n">hdict_cmds</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">hdict_cmds</span><span class="o">.</span><span class="n">values</span><span class="p">()):</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">_SEP</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> |CCommand help entries|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">_SEP</span>
|
||||
<span class="k">for</span> <span class="n">category</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">hdict_cmds</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> |w</span><span class="si">%s</span><span class="s2">|n:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">category</span><span class="p">)</span><span class="o">.</span><span class="n">title</span><span class="p">())</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"|G"</span> <span class="o">+</span> <span class="n">fill</span><span class="p">(</span><span class="s2">"|C, |G"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">hdict_cmds</span><span class="p">[</span><span class="n">category</span><span class="p">])))</span> <span class="o">+</span> <span class="s2">"|n"</span>
|
||||
<span class="k">if</span> <span class="n">hdict_db</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span><span class="n">hdict_db</span><span class="o">.</span><span class="n">values</span><span class="p">()):</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">_SEP</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n\r</span><span class="s2"> |COther help entries|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">_SEP</span>
|
||||
<span class="k">for</span> <span class="n">category</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">hdict_db</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n\r</span><span class="s2"> |w</span><span class="si">%s</span><span class="s2">|n:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">category</span><span class="p">)</span><span class="o">.</span><span class="n">title</span><span class="p">())</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="p">(</span>
|
||||
<span class="s2">"|G"</span>
|
||||
<span class="o">+</span> <span class="n">fill</span><span class="p">(</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">topic</span><span class="p">)</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">hdict_db</span><span class="p">[</span><span class="n">category</span><span class="p">]])))</span>
|
||||
<span class="o">+</span> <span class="s2">"|n"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">verbatim_elements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">grid</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
||||
|
||||
<span class="n">entries</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">hdict_cmds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="p">,</span> <span class="p">[])</span> <span class="o">+</span> <span class="n">hdict_db</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="p">,</span> <span class="p">[])))</span>
|
||||
<span class="n">grid</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">entries</span><span class="p">)</span>
|
||||
|
||||
<span class="n">gridrows</span> <span class="o">=</span> <span class="n">format_grid</span><span class="p">(</span><span class="n">grid</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">,</span> <span class="n">verbatim_elements</span><span class="o">=</span><span class="n">verbatim_elements</span><span class="p">)</span>
|
||||
<span class="n">gridrows</span> <span class="o">=</span> <span class="n">ANSIString</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">gridrows</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">gridrows</span></div>
|
||||
<span class="k">return</span> <span class="n">string</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdHelp.check_show_help"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.check_show_help">[docs]</a> <span class="k">def</span> <span class="nf">check_show_help</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd</span><span class="p">,</span> <span class="n">caller</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -293,7 +216,7 @@
|
|||
<span class="sd"> False: the command shouldn't appear in the table.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="kc">True</span></div>
|
||||
<span class="k">return</span> <span class="n">cmd</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"view"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdHelp.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -326,8 +249,8 @@
|
|||
<span class="p">]</span>
|
||||
<span class="n">all_categories</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
|
||||
<span class="nb">set</span><span class="p">(</span>
|
||||
<span class="p">[</span><span class="n">HelpCategory</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">help_category</span><span class="p">)</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span><span class="p">]</span>
|
||||
<span class="o">+</span> <span class="p">[</span><span class="n">HelpCategory</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">help_category</span><span class="p">)</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span><span class="p">]</span>
|
||||
<span class="p">[</span><span class="n">cmd</span><span class="o">.</span><span class="n">help_category</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span><span class="p">]</span>
|
||||
<span class="o">+</span> <span class="p">[</span><span class="n">topic</span><span class="o">.</span><span class="n">help_category</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span><span class="p">]</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
|
|
@ -340,59 +263,92 @@
|
|||
<span class="c1"># system, but not be displayed in the table, or be displayed differently.</span>
|
||||
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">should_list_cmd</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">caller</span><span class="p">):</span>
|
||||
<span class="n">key</span> <span class="o">=</span> <span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">"auto_help_display_key"</span><span class="p">)</span> <span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
||||
<span class="n">key</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">"auto_help_display_key"</span><span class="p">)</span>
|
||||
<span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">hdict_cmd</span><span class="p">[</span><span class="n">cmd</span><span class="o">.</span><span class="n">help_category</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||
<span class="p">[</span><span class="n">hdict_topic</span><span class="p">[</span><span class="n">topic</span><span class="o">.</span><span class="n">help_category</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">key</span><span class="p">)</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span><span class="p">]</span>
|
||||
<span class="c1"># report back</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_help_list</span><span class="p">(</span><span class="n">hdict_cmd</span><span class="p">,</span> <span class="n">hdict_topic</span><span class="p">))</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="c1"># Try to access a particular help entry or category</span>
|
||||
<span class="n">entries</span> <span class="o">=</span> <span class="p">[</span><span class="n">cmd</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span> <span class="k">if</span> <span class="n">cmd</span><span class="p">]</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">HelpEntry</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="o">+</span> <span class="n">all_categories</span>
|
||||
<span class="c1"># Try to access a particular command</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">match_query</span> <span class="ow">in</span> <span class="p">[</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">query</span><span class="si">}</span><span class="s2">~1"</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">query</span><span class="si">}</span><span class="s2">*"</span><span class="p">]:</span>
|
||||
<span class="c1"># We first do an exact word-match followed by a start-by query</span>
|
||||
<span class="n">matches</span><span class="p">,</span> <span class="n">suggestions</span> <span class="o">=</span> <span class="n">help_search_with_index</span><span class="p">(</span>
|
||||
<span class="n">match_query</span><span class="p">,</span> <span class="n">entries</span><span class="p">,</span> <span class="n">suggestion_maxnum</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">suggestion_maxnum</span>
|
||||
<span class="c1"># build vocabulary of suggestions and rate them by string similarity.</span>
|
||||
<span class="n">suggestions</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">suggestion_maxnum</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">vocabulary</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="p">[</span><span class="n">cmd</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span> <span class="k">if</span> <span class="n">cmd</span><span class="p">]</span>
|
||||
<span class="o">+</span> <span class="p">[</span><span class="n">topic</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span><span class="p">]</span>
|
||||
<span class="o">+</span> <span class="n">all_categories</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">[</span><span class="n">vocabulary</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">aliases</span><span class="p">)</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span><span class="p">]</span>
|
||||
<span class="n">suggestions</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">sugg</span>
|
||||
<span class="k">for</span> <span class="n">sugg</span> <span class="ow">in</span> <span class="n">string_suggestions</span><span class="p">(</span>
|
||||
<span class="n">query</span><span class="p">,</span> <span class="nb">set</span><span class="p">(</span><span class="n">vocabulary</span><span class="p">),</span> <span class="n">cutoff</span><span class="o">=</span><span class="n">suggestion_cutoff</span><span class="p">,</span> <span class="n">maxnum</span><span class="o">=</span><span class="n">suggestion_maxnum</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">sugg</span> <span class="o">!=</span> <span class="n">query</span>
|
||||
<span class="p">]</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">suggestions</span><span class="p">:</span>
|
||||
<span class="n">suggestions</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">sugg</span> <span class="k">for</span> <span class="n">sugg</span> <span class="ow">in</span> <span class="n">vocabulary</span> <span class="k">if</span> <span class="n">sugg</span> <span class="o">!=</span> <span class="n">query</span> <span class="ow">and</span> <span class="n">sugg</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
|
||||
<span class="n">match</span> <span class="o">=</span> <span class="n">matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">match</span><span class="p">,</span> <span class="n">HelpCategory</span><span class="p">):</span>
|
||||
<span class="n">formatted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_list</span><span class="p">(</span>
|
||||
<span class="p">{</span>
|
||||
<span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="p">:</span> <span class="p">[</span>
|
||||
<span class="n">cmd</span><span class="o">.</span><span class="n">key</span>
|
||||
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span>
|
||||
<span class="k">if</span> <span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">cmd</span><span class="o">.</span><span class="n">help_category</span>
|
||||
<span class="p">]</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="p">:</span> <span class="p">[</span>
|
||||
<span class="n">topic</span><span class="o">.</span><span class="n">key</span>
|
||||
<span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span>
|
||||
<span class="k">if</span> <span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">topic</span><span class="o">.</span><span class="n">help_category</span>
|
||||
<span class="p">]</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">match</span><span class="p">,</span> <span class="s2">"evennia.commands.command.Command"</span><span class="p">):</span>
|
||||
<span class="n">formatted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_entry</span><span class="p">(</span>
|
||||
<span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">match</span><span class="o">.</span><span class="n">get_help</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">),</span>
|
||||
<span class="n">aliases</span><span class="o">=</span><span class="n">match</span><span class="o">.</span><span class="n">aliases</span><span class="p">,</span>
|
||||
<span class="n">suggested</span><span class="o">=</span><span class="n">suggestions</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">formatted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_entry</span><span class="p">(</span>
|
||||
<span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">match</span><span class="o">.</span><span class="n">entrytext</span><span class="p">,</span>
|
||||
<span class="n">aliases</span><span class="o">=</span><span class="n">match</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span>
|
||||
<span class="n">suggested</span><span class="o">=</span><span class="n">suggestions</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># try an exact command auto-help match</span>
|
||||
<span class="n">match</span> <span class="o">=</span> <span class="p">[</span><span class="n">cmd</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span> <span class="k">if</span> <span class="n">cmd</span> <span class="o">==</span> <span class="n">query</span><span class="p">]</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="n">formatted</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">match</span><span class="p">:</span>
|
||||
<span class="c1"># try an inexact match with prefixes stripped from query and cmds</span>
|
||||
<span class="n">_query</span> <span class="o">=</span> <span class="n">query</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">query</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">CMD_IGNORE_PREFIXES</span> <span class="k">else</span> <span class="n">query</span>
|
||||
|
||||
<span class="n">match</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">cmd</span>
|
||||
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span>
|
||||
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">cmd</span><span class="o">.</span><span class="n">_matchset</span>
|
||||
<span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="n">_query</span> <span class="ow">or</span> <span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">CMD_IGNORE_PREFIXES</span> <span class="ow">and</span> <span class="n">m</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="o">==</span> <span class="n">_query</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">match</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">cmd</span> <span class="o">=</span> <span class="n">match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">key</span> <span class="o">=</span> <span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">"auto_help_display_key"</span><span class="p">)</span> <span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</span>
|
||||
<span class="n">formatted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_entry</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="p">,</span> <span class="n">cmd</span><span class="o">.</span><span class="n">get_help</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">),</span> <span class="n">aliases</span><span class="o">=</span><span class="n">cmd</span><span class="o">.</span><span class="n">aliases</span><span class="p">,</span> <span class="n">suggested</span><span class="o">=</span><span class="n">suggestions</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="n">formatted</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="c1"># try an exact database help entry match</span>
|
||||
<span class="n">match</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">HelpEntry</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">find_topicmatch</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">match</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">formatted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_entry</span><span class="p">(</span>
|
||||
<span class="n">match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">entrytext</span><span class="p">,</span>
|
||||
<span class="n">aliases</span><span class="o">=</span><span class="n">match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span>
|
||||
<span class="n">suggested</span><span class="o">=</span><span class="n">suggestions</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="n">formatted</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="c1"># try to see if a category name was entered</span>
|
||||
<span class="k">if</span> <span class="n">query</span> <span class="ow">in</span> <span class="n">all_categories</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">format_help_list</span><span class="p">(</span>
|
||||
<span class="p">{</span>
|
||||
<span class="n">query</span><span class="p">:</span> <span class="p">[</span>
|
||||
<span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">"auto_help_display_key"</span><span class="p">)</span>
|
||||
<span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</span>
|
||||
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span>
|
||||
<span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">help_category</span> <span class="o">==</span> <span class="n">query</span>
|
||||
<span class="p">]</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span><span class="n">query</span><span class="p">:</span> <span class="p">[</span><span class="n">topic</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span> <span class="k">if</span> <span class="n">topic</span><span class="o">.</span><span class="n">help_category</span> <span class="o">==</span> <span class="n">query</span><span class="p">]},</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="c1"># no exact matches found. Just give suggestions.</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
||||
|
|
@ -473,10 +429,7 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"You have to define a topic!"</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
<span class="n">topicstrlist</span> <span class="o">=</span> <span class="n">topicstr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">";"</span><span class="p">)</span>
|
||||
<span class="n">topicstr</span><span class="p">,</span> <span class="n">aliases</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="n">topicstrlist</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">topicstrlist</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">topicstr</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="p">[],</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">topicstr</span><span class="p">,</span> <span class="n">aliases</span> <span class="o">=</span> <span class="p">(</span><span class="n">topicstrlist</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">topicstrlist</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">topicstr</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="p">[])</span>
|
||||
<span class="n">aliastxt</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"(aliases: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">aliases</span><span class="p">))</span> <span class="k">if</span> <span class="n">aliases</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="n">old_entry</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
|
|
@ -505,7 +458,7 @@
|
|||
<span class="n">helpentry</span> <span class="o">=</span> <span class="n">old_entry</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">helpentry</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_help_entry</span><span class="p">(</span>
|
||||
<span class="n">topicstr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
|
||||
<span class="n">topicstr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_editing_help</span> <span class="o">=</span> <span class="n">helpentry</span>
|
||||
|
||||
|
|
@ -613,6 +566,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -631,7 +585,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.help</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.muxcommand</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -337,6 +336,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -355,7 +355,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.muxcommand</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.syscommands</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -220,6 +219,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -238,7 +238,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.syscommands</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.system</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -435,9 +434,7 @@
|
|||
<span class="k">if</span> <span class="n">noecho</span><span class="p">:</span>
|
||||
<span class="n">prompt</span> <span class="o">=</span> <span class="s2">"..."</span> <span class="k">if</span> <span class="n">console</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">else</span> <span class="n">main_prompt</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">line</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">">>> </span><span class="si">{</span><span class="n">line</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">prompt</span> <span class="o">=</span> <span class="n">line</span> <span class="k">if</span> <span class="n">console</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">else</span> <span class="n">main_prompt</span>
|
||||
<span class="n">prompt</span> <span class="o">=</span> <span class="n">line</span> <span class="k">if</span> <span class="n">console</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">line</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">main_prompt</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="k">except</span> <span class="ne">SystemExit</span><span class="p">:</span>
|
||||
<span class="k">break</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|gClosing the Python console.|n"</span><span class="p">)</span>
|
||||
|
|
@ -998,7 +995,7 @@
|
|||
<span class="s2">"|wIn-Game time"</span><span class="p">,</span>
|
||||
<span class="s2">"|wReal time x </span><span class="si">%g</span><span class="s2">"</span> <span class="o">%</span> <span class="n">gametime</span><span class="o">.</span><span class="n">TIMEFACTOR</span><span class="p">,</span>
|
||||
<span class="n">align</span><span class="o">=</span><span class="s2">"l"</span><span class="p">,</span>
|
||||
<span class="n">width</span><span class="o">=</span><span class="mi">78</span><span class="p">,</span>
|
||||
<span class="n">width</span><span class="o">=</span><span class="mi">77</span><span class="p">,</span>
|
||||
<span class="n">border_top</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">epochtxt</span> <span class="o">=</span> <span class="s2">"Epoch (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">"from settings"</span> <span class="k">if</span> <span class="n">settings</span><span class="o">.</span><span class="n">TIME_GAME_EPOCH</span> <span class="k">else</span> <span class="s2">"server start"</span><span class="p">)</span>
|
||||
|
|
@ -1249,6 +1246,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1267,7 +1265,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.system</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -315,21 +314,8 @@
|
|||
|
||||
|
||||
<div class="viewcode-block" id="TestHelp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp">[docs]</a><span class="k">class</span> <span class="nc">TestHelp</span><span class="p">(</span><span class="n">CommandTest</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="TestHelp.setUp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
|
||||
<span class="c1"># we need to set up a logger here since lunr takes over the logger otherwise</span>
|
||||
<span class="kn">import</span> <span class="nn">logging</span>
|
||||
|
||||
<span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">ERROR</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestHelp.tearDown"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tearDown</span><span class="p">()</span>
|
||||
<span class="kn">import</span> <span class="nn">logging</span>
|
||||
|
||||
<span class="n">logging</span><span class="o">.</span><span class="n">disable</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">ERROR</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestHelp.test_help"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp.test_help">[docs]</a> <span class="k">def</span> <span class="nf">test_help</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">help</span><span class="o">.</span><span class="n">CmdHelp</span><span class="p">(),</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"Admin"</span><span class="p">,</span> <span class="n">cmdset</span><span class="o">=</span><span class="n">CharacterCmdSet</span><span class="p">())</span></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">help</span><span class="o">.</span><span class="n">CmdHelp</span><span class="p">(),</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"Command help entries"</span><span class="p">,</span> <span class="n">cmdset</span><span class="o">=</span><span class="n">CharacterCmdSet</span><span class="p">())</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestHelp.test_set_help"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp.test_set_help">[docs]</a> <span class="k">def</span> <span class="nf">test_set_help</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
|
|
@ -1026,8 +1012,11 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdSetHome</span><span class="p">(),</span> <span class="s2">"Obj = Room2"</span><span class="p">,</span> <span class="s2">"Home location of Obj was set to Room"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestBuilding.test_list_cmdsets"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_list_cmdsets">[docs]</a> <span class="k">def</span> <span class="nf">test_list_cmdsets</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdListCmdSets</span><span class="p">(),</span> <span class="s2">""</span><span class="p">,</span>
|
||||
<span class="s2">"<CmdSetHandler> stack:</span><span class="se">\n</span><span class="s2"> <CmdSet DefaultCharacter, Union, perm, prio 0>:"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
<span class="n">building</span><span class="o">.</span><span class="n">CmdListCmdSets</span><span class="p">(),</span>
|
||||
<span class="s2">""</span><span class="p">,</span>
|
||||
<span class="s2">"<CmdSetHandler> stack:</span><span class="se">\n</span><span class="s2"> <CmdSet DefaultCharacter, Union, perm, prio 0>:"</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdListCmdSets</span><span class="p">(),</span> <span class="s2">"NotFound"</span><span class="p">,</span> <span class="s2">"Could not find 'NotFound'"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestBuilding.test_typeclass"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_typeclass">[docs]</a> <span class="k">def</span> <span class="nf">test_typeclass</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
|
|
@ -1665,6 +1654,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1683,7 +1673,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.unloggedin</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -336,7 +335,6 @@
|
|||
<span class="s2"> |wquit|n - abort the connection</span>
|
||||
|
||||
<span class="s2">First create an account e.g. with |wcreate Anna c67jHL8p|n</span>
|
||||
<span class="s2">(If you have spaces in your name, use double quotes: |wcreate "Anna the Barbarian" c67jHL8p|n</span>
|
||||
<span class="s2">Next you can connect to the game: |wconnect Anna c67jHL8p|n</span>
|
||||
|
||||
<span class="s2">You can use the |wlook|n command if you want to see the connect screen again.</span>
|
||||
|
|
@ -564,6 +562,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -582,7 +581,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.unloggedin</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.comms.admin</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -190,6 +189,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -208,7 +208,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.comms.admin</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.comms.channelhandler</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -66,7 +65,7 @@
|
|||
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdset</span><span class="p">,</span> <span class="n">command</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdset</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.logger</span> <span class="kn">import</span> <span class="n">tail_log_file</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span>
|
||||
<span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
|
||||
|
|
@ -77,9 +76,9 @@
|
|||
<span class="n">_CHANNEL_HANDLER_CLASS</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_CHANNEL_COMMAND_CLASS</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_CHANNELDB</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ChannelCommand"><a class="viewcode-back" href="../../../api/evennia.comms.channelhandler.html#evennia.comms.channelhandler.ChannelCommand">[docs]</a><span class="k">class</span> <span class="nc">ChannelCommand</span><span class="p">(</span><span class="n">command</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="ChannelCommand"><a class="viewcode-back" href="../../../api/evennia.comms.channelhandler.html#evennia.comms.channelhandler.ChannelCommand">[docs]</a><span class="k">class</span> <span class="nc">ChannelCommand</span><span class="p">(</span><span class="n">_COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> {channelkey} channel</span>
|
||||
|
||||
|
|
@ -390,6 +389,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -408,7 +408,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.comms.channelhandler</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.comms.comms</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -889,6 +888,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -907,7 +907,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.comms.comms</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.comms.managers</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -482,6 +481,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -500,7 +500,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.comms.managers</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.comms.models</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -808,6 +807,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -826,7 +826,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.comms.models</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -1,958 +0,0 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>evennia.contrib.awsstorage.aws_s3_cdn — Evennia 1.0-dev 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>
|
||||
<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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.awsstorage.aws_s3_cdn</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for evennia.contrib.awsstorage.aws_s3_cdn</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">AWS Storage System</span>
|
||||
<span class="sd">The Right Honourable Reverend (trhr) 2020</span>
|
||||
|
||||
<span class="sd">ABOUT THIS PLUGIN:</span>
|
||||
|
||||
<span class="sd">This plugin migrates the Web-based portion of Evennia, namely images,</span>
|
||||
<span class="sd">javascript, and other items located inside staticfiles into Amazon AWS (S3) for hosting.</span>
|
||||
|
||||
<span class="sd">Files hosted on S3 are "in the cloud," and while your personal</span>
|
||||
<span class="sd">server may be sufficient for serving multimedia to a minimal number of users,</span>
|
||||
<span class="sd">the perfect use case for this plugin would be:</span>
|
||||
|
||||
<span class="sd">1) Servers supporting heavy web-based traffic (webclient, etc)</span>
|
||||
<span class="sd">2) With a sizable number of users</span>
|
||||
<span class="sd">3) Where the users are globally distributed</span>
|
||||
<span class="sd">4) Where multimedia files are served to users as a part of gameplay</span>
|
||||
|
||||
<span class="sd">Bottom line - if you're sending an image to a player every time they traverse a</span>
|
||||
<span class="sd">map, the bandwidth reduction will be substantial. If not, probably skip</span>
|
||||
<span class="sd">this one.</span>
|
||||
|
||||
<span class="sd">Note that storing and serving files via S3 is not technically free outside of</span>
|
||||
<span class="sd">Amazon's "free tier" offering, which you may or may not be eligible for;</span>
|
||||
<span class="sd">evennia's base install currently requires 1.5MB of storage space on S3,</span>
|
||||
<span class="sd">making the current total cost to install this plugin ~$0.0005 per year. If</span>
|
||||
<span class="sd">you have substantial media assets and intend to serve them to many users,</span>
|
||||
<span class="sd">caveat emptor on a total cost of ownership - check AWS's pricing structure.</span>
|
||||
|
||||
<span class="sd">See the ./README.md file for details and install instructions.</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">ImproperlyConfigured</span><span class="p">,</span>
|
||||
<span class="n">SuspiciousOperation</span><span class="p">,</span>
|
||||
<span class="n">SuspiciousFileOperation</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span> <span class="k">as</span> <span class="n">ev_settings</span>
|
||||
|
||||
<span class="k">if</span> <span class="p">(</span>
|
||||
<span class="ow">not</span> <span class="n">ev_settings</span><span class="o">.</span><span class="n">AWS_ACCESS_KEY_ID</span>
|
||||
<span class="ow">or</span> <span class="ow">not</span> <span class="n">ev_settings</span><span class="o">.</span><span class="n">AWS_SECRET_ACCESS_KEY</span>
|
||||
<span class="ow">or</span> <span class="ow">not</span> <span class="n">ev_settings</span><span class="o">.</span><span class="n">AWS_STORAGE_BUCKET_NAME</span>
|
||||
<span class="ow">or</span> <span class="ow">not</span> <span class="n">ev_settings</span><span class="o">.</span><span class="n">AWS_S3_REGION_NAME</span>
|
||||
<span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="n">ImproperlyConfigured</span><span class="p">(</span>
|
||||
<span class="p">(</span>
|
||||
<span class="s2">"You must add AWS-specific settings"</span>
|
||||
<span class="s2">"to mygame/server/conf/secret_settings.py to use this plugin."</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="s2">"mygame-evennia"</span> <span class="o">==</span> <span class="n">ev_settings</span><span class="o">.</span><span class="n">AWS_STORAGE_BUCKET_NAME</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">ImproperlyConfigured</span><span class="p">(</span>
|
||||
<span class="p">(</span>
|
||||
<span class="s2">"You must customize your AWS_STORAGE_BUCKET_NAME"</span>
|
||||
<span class="s2">"in mygame/server/conf/secret_settings.py;"</span>
|
||||
<span class="s2">"it must be unique among ALL other S3 users"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">io</span>
|
||||
<span class="kn">import</span> <span class="nn">mimetypes</span>
|
||||
<span class="kn">import</span> <span class="nn">os</span>
|
||||
<span class="kn">import</span> <span class="nn">posixpath</span>
|
||||
<span class="kn">import</span> <span class="nn">threading</span>
|
||||
<span class="kn">from</span> <span class="nn">gzip</span> <span class="kn">import</span> <span class="n">GzipFile</span>
|
||||
<span class="kn">from</span> <span class="nn">tempfile</span> <span class="kn">import</span> <span class="n">SpooledTemporaryFile</span>
|
||||
<span class="kn">from</span> <span class="nn">django.core.files.base</span> <span class="kn">import</span> <span class="n">File</span>
|
||||
<span class="kn">from</span> <span class="nn">django.core.files.storage</span> <span class="kn">import</span> <span class="n">Storage</span>
|
||||
<span class="kn">from</span> <span class="nn">django.utils.deconstruct</span> <span class="kn">import</span> <span class="n">deconstructible</span>
|
||||
<span class="kn">from</span> <span class="nn">django.utils.encoding</span> <span class="kn">import</span> <span class="n">filepath_to_uri</span><span class="p">,</span> <span class="n">force_bytes</span><span class="p">,</span> <span class="n">force_text</span><span class="p">,</span> <span class="n">smart_text</span>
|
||||
<span class="kn">from</span> <span class="nn">django.utils.timezone</span> <span class="kn">import</span> <span class="n">is_naive</span><span class="p">,</span> <span class="n">make_naive</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">django.utils.six.moves.urllib</span> <span class="kn">import</span> <span class="n">parse</span> <span class="k">as</span> <span class="n">urlparse</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">urllib</span> <span class="kn">import</span> <span class="n">parse</span> <span class="k">as</span> <span class="n">urlparse</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="kn">import</span> <span class="nn">boto3.session</span>
|
||||
<span class="kn">from</span> <span class="nn">boto3</span> <span class="kn">import</span> <span class="n">__version__</span> <span class="k">as</span> <span class="n">boto3_version</span>
|
||||
<span class="kn">from</span> <span class="nn">botocore.client</span> <span class="kn">import</span> <span class="n">Config</span>
|
||||
<span class="kn">from</span> <span class="nn">botocore.exceptions</span> <span class="kn">import</span> <span class="n">ClientError</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">ImproperlyConfigured</span><span class="p">(</span><span class="s2">"Couldn't load S3 bindings. </span><span class="si">%s</span><span class="s2"> Did you run 'pip install boto3?'"</span> <span class="o">%</span> <span class="n">e</span><span class="p">)</span>
|
||||
|
||||
<span class="n">boto3_version_info</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">([</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">boto3_version</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"."</span><span class="p">)])</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="setting"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.setting">[docs]</a><span class="k">def</span> <span class="nf">setting</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Helper function to get a Django setting by name. If setting doesn't exist</span>
|
||||
<span class="sd"> it will return a default.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> name (str): A Django setting name</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> The value of the setting variable by that name</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">ev_settings</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="safe_join"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.safe_join">[docs]</a><span class="k">def</span> <span class="nf">safe_join</span><span class="p">(</span><span class="n">base</span><span class="p">,</span> <span class="o">*</span><span class="n">paths</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Helper function, a version of django.utils._os.safe_join for S3 paths.</span>
|
||||
<span class="sd"> Joins one or more path components to the base path component</span>
|
||||
<span class="sd"> intelligently. Returns a normalized version of the final path.</span>
|
||||
<span class="sd"> The final path must be located inside of the base path component</span>
|
||||
<span class="sd"> (otherwise a ValueError is raised). Paths outside the base path</span>
|
||||
<span class="sd"> indicate a possible security sensitive operation.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> base (str): A path string to the base of the staticfiles</span>
|
||||
<span class="sd"> *paths (list): A list of paths as referenced from the base path</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> final_path (str): A joined path, base + filepath</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">base_path</span> <span class="o">=</span> <span class="n">force_text</span><span class="p">(</span><span class="n">base</span><span class="p">)</span>
|
||||
<span class="n">base_path</span> <span class="o">=</span> <span class="n">base_path</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span>
|
||||
<span class="n">paths</span> <span class="o">=</span> <span class="p">[</span><span class="n">force_text</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">]</span>
|
||||
|
||||
<span class="n">final_path</span> <span class="o">=</span> <span class="n">base_path</span> <span class="o">+</span> <span class="s2">"/"</span>
|
||||
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">:</span>
|
||||
<span class="n">_final_path</span> <span class="o">=</span> <span class="n">posixpath</span><span class="o">.</span><span class="n">normpath</span><span class="p">(</span><span class="n">posixpath</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">final_path</span><span class="p">,</span> <span class="n">path</span><span class="p">))</span>
|
||||
<span class="c1"># posixpath.normpath() strips the trailing /. Add it back.</span>
|
||||
<span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">_final_path</span> <span class="o">+</span> <span class="s2">"/"</span> <span class="o">==</span> <span class="n">final_path</span><span class="p">:</span>
|
||||
<span class="n">_final_path</span> <span class="o">+=</span> <span class="s2">"/"</span>
|
||||
<span class="n">final_path</span> <span class="o">=</span> <span class="n">_final_path</span>
|
||||
<span class="k">if</span> <span class="n">final_path</span> <span class="o">==</span> <span class="n">base_path</span><span class="p">:</span>
|
||||
<span class="n">final_path</span> <span class="o">+=</span> <span class="s2">"/"</span>
|
||||
|
||||
<span class="c1"># Ensure final_path starts with base_path and that the next character after</span>
|
||||
<span class="c1"># the base path is /.</span>
|
||||
<span class="n">base_path_len</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">base_path</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">final_path</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">base_path</span><span class="p">)</span> <span class="ow">or</span> <span class="n">final_path</span><span class="p">[</span><span class="n">base_path_len</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">"/"</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"the joined path is located outside of the base path"</span> <span class="s2">" component"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">final_path</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="check_location"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.check_location">[docs]</a><span class="k">def</span> <span class="nf">check_location</span><span class="p">(</span><span class="n">storage</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Helper function to make sure that the storage location is configured correctly.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> storage (Storage): A Storage object (Django)</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> ImproperlyConfigured: If the storage location is not configured correctly,</span>
|
||||
<span class="sd"> this is raised.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"/"</span><span class="p">):</span>
|
||||
<span class="n">correct</span> <span class="o">=</span> <span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">ImproperlyConfigured</span><span class="p">(</span>
|
||||
<span class="s2">"</span><span class="si">{}</span><span class="s2">.location cannot begin with a leading slash. Found '</span><span class="si">{}</span><span class="s2">'. Use '</span><span class="si">{}</span><span class="s2">' instead."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">storage</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="n">correct</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="lookup_env"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.lookup_env">[docs]</a><span class="k">def</span> <span class="nf">lookup_env</span><span class="p">(</span><span class="n">names</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Helper function for looking up names in env vars. Returns the first element found.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> names (str): A list of environment variables</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> value (str): The value of the found environment variable.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">value</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">value</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="get_available_overwrite_name"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.get_available_overwrite_name">[docs]</a><span class="k">def</span> <span class="nf">get_available_overwrite_name</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">max_length</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Helper function indicating files that will be overwritten during trunc.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> name (str): The name of the file</span>
|
||||
<span class="sd"> max_length (int): The maximum length of a filename</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> joined (path): A joined path including directory, file, and extension</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">max_length</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o"><=</span> <span class="n">max_length</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">name</span>
|
||||
|
||||
<span class="c1"># Adapted from Django</span>
|
||||
<span class="n">dir_name</span><span class="p">,</span> <span class="n">file_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">file_root</span><span class="p">,</span> <span class="n">file_ext</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span>
|
||||
<span class="n">truncation</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">-</span> <span class="n">max_length</span>
|
||||
|
||||
<span class="n">file_root</span> <span class="o">=</span> <span class="n">file_root</span><span class="p">[:</span><span class="o">-</span><span class="n">truncation</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">file_root</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">SuspiciousFileOperation</span><span class="p">(</span>
|
||||
<span class="s1">'aws-s3-cdn tried to truncate away entire filename "</span><span class="si">%s</span><span class="s1">". '</span>
|
||||
<span class="s2">"Please make sure that the corresponding file field "</span>
|
||||
<span class="s1">'allows sufficient "max_length".'</span> <span class="o">%</span> <span class="n">name</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dir_name</span><span class="p">,</span> <span class="s2">"</span><span class="si">{}{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">file_root</span><span class="p">,</span> <span class="n">file_ext</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageFile"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3StorageFile">[docs]</a><span class="nd">@deconstructible</span>
|
||||
<span class="k">class</span> <span class="nc">S3Boto3StorageFile</span><span class="p">(</span><span class="n">File</span><span class="p">):</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> The default file object used by the S3Boto3Storage backend.</span>
|
||||
<span class="sd"> This file implements file streaming using boto's multipart</span>
|
||||
<span class="sd"> uploading functionality. The file can be opened in read or</span>
|
||||
<span class="sd"> write mode.</span>
|
||||
<span class="sd"> This class extends Django's File class. However, the contained</span>
|
||||
<span class="sd"> data is only the data contained in the current buffer. So you</span>
|
||||
<span class="sd"> should not access the contained file object directly. You should</span>
|
||||
<span class="sd"> access the data via this class.</span>
|
||||
<span class="sd"> Warning: This file *must* be closed using the close() method in</span>
|
||||
<span class="sd"> order to properly write the file to S3. Be sure to close the file</span>
|
||||
<span class="sd"> in your application.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">buffer_size</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_FILE_BUFFER_SIZE"</span><span class="p">,</span> <span class="mi">5242880</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageFile.__init__"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3StorageFile.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">storage</span><span class="p">,</span> <span class="n">buffer_size</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Initializes the File object.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> name (str): The name of the file</span>
|
||||
<span class="sd"> mode (str): The access mode ('r' or 'w')</span>
|
||||
<span class="sd"> storage (Storage): The Django Storage object</span>
|
||||
<span class="sd"> buffer_size (int): The buffer size, for multipart uploads</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="s2">"r"</span> <span class="ow">in</span> <span class="n">mode</span> <span class="ow">and</span> <span class="s2">"w"</span> <span class="ow">in</span> <span class="n">mode</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Can't combine 'r' and 'w' in mode."</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_storage</span> <span class="o">=</span> <span class="n">storage</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_storage</span><span class="o">.</span><span class="n">location</span><span class="p">)</span> <span class="p">:]</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="o">=</span> <span class="n">mode</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_force_mode</span> <span class="o">=</span> <span class="p">(</span><span class="k">lambda</span> <span class="n">b</span><span class="p">:</span> <span class="n">b</span><span class="p">)</span> <span class="k">if</span> <span class="s2">"b"</span> <span class="ow">in</span> <span class="n">mode</span> <span class="k">else</span> <span class="n">force_text</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span> <span class="o">=</span> <span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="p">(</span><span class="n">storage</span><span class="o">.</span><span class="n">_encode_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="s2">"w"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">mode</span><span class="p">:</span>
|
||||
<span class="c1"># Force early RAII-style exception if object does not exist</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">load</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_is_dirty</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_raw_bytes_written</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_file</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_multipart</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="c1"># 5 MB is the minimum part size (if there is more than one part).</span>
|
||||
<span class="c1"># Amazon allows up to 10,000 parts. The default supports uploads</span>
|
||||
<span class="c1"># up to roughly 50 GB. Increase the part size to accommodate</span>
|
||||
<span class="c1"># for files larger than this.</span>
|
||||
<span class="k">if</span> <span class="n">buffer_size</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">buffer_size</span> <span class="o">=</span> <span class="n">buffer_size</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_write_counter</span> <span class="o">=</span> <span class="mi">0</span></div>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Helper property to return filesize</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">content_length</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_file</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Helper function to manage zipping and temporary files</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_file</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_file</span> <span class="o">=</span> <span class="n">SpooledTemporaryFile</span><span class="p">(</span>
|
||||
<span class="n">max_size</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_storage</span><span class="o">.</span><span class="n">max_memory_size</span><span class="p">,</span>
|
||||
<span class="n">suffix</span><span class="o">=</span><span class="s2">".S3Boto3StorageFile"</span><span class="p">,</span>
|
||||
<span class="nb">dir</span><span class="o">=</span><span class="n">setting</span><span class="p">(</span><span class="s2">"FILE_UPLOAD_TEMP_DIR"</span><span class="p">),</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="s2">"r"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_is_dirty</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">download_fileobj</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_file</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_file</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_storage</span><span class="o">.</span><span class="n">gzip</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">content_encoding</span> <span class="o">==</span> <span class="s2">"gzip"</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_file</span> <span class="o">=</span> <span class="n">GzipFile</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">,</span> <span class="n">fileobj</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_file</span><span class="p">,</span> <span class="n">mtime</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_file</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_set_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_file</span> <span class="o">=</span> <span class="n">value</span>
|
||||
|
||||
<span class="n">file</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">_get_file</span><span class="p">,</span> <span class="n">_set_file</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageFile.read"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3StorageFile.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Checks if file is in read mode; then continues to boto3 operation</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="s2">"r"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">"File was not opened in read mode."</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_force_mode</span><span class="p">(</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageFile.readline"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3StorageFile.readline">[docs]</a> <span class="k">def</span> <span class="nf">readline</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Checks if file is in read mode; then continues to boto3 operation</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="s2">"r"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">"File was not opened in read mode."</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_force_mode</span><span class="p">(</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">readline</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageFile.write"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3StorageFile.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Checks if file is in write mode or needs multipart handling,</span>
|
||||
<span class="sd"> then continues to boto3 operation.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="s2">"w"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="s2">"File was not opened in write mode."</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_is_dirty</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_multipart</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_multipart</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">initiate_multipart_upload</span><span class="p">(</span>
|
||||
<span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">_storage</span><span class="o">.</span><span class="n">_get_write_parameters</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffer_size</span> <span class="o"><=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer_file_size</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_flush_write_buffer</span><span class="p">()</span>
|
||||
<span class="n">bstr</span> <span class="o">=</span> <span class="n">force_bytes</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_raw_bytes_written</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">bstr</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">bstr</span><span class="p">)</span></div>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">_buffer_file_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">tell</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">SEEK_END</span><span class="p">)</span>
|
||||
<span class="n">length</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">tell</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">pos</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">length</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_flush_write_buffer</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Flushes the write buffer.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer_file_size</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_write_counter</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">part</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_multipart</span><span class="o">.</span><span class="n">Part</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_write_counter</span><span class="p">)</span>
|
||||
<span class="n">part</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">Body</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">truncate</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_create_empty_on_close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Attempt to create an empty file for this key when this File is closed if no bytes</span>
|
||||
<span class="sd"> have been written and no object already exists on S3 for this key.</span>
|
||||
<span class="sd"> This behavior is meant to mimic the behavior of Django's builtin FileSystemStorage,</span>
|
||||
<span class="sd"> where files are always created after they are opened in write mode:</span>
|
||||
<span class="sd"> f = storage.open("file.txt", mode="w")</span>
|
||||
<span class="sd"> f.close()</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> Exception: Raised if a 404 error occurs</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">assert</span> <span class="s2">"w"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span>
|
||||
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_bytes_written</span> <span class="o">==</span> <span class="mi">0</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Check if the object exists on the server; if so, don't do anything</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">load</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="n">ClientError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">err</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s2">"ResponseMetadata"</span><span class="p">][</span><span class="s2">"HTTPStatusCode"</span><span class="p">]</span> <span class="o">==</span> <span class="mi">404</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">Body</span><span class="o">=</span><span class="sa">b</span><span class="s2">""</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">_storage</span><span class="o">.</span><span class="n">_get_write_parameters</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageFile.close"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3StorageFile.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Manages file closing after multipart uploads</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_dirty</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_flush_write_buffer</span><span class="p">()</span>
|
||||
<span class="n">parts</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span><span class="s2">"ETag"</span><span class="p">:</span> <span class="n">part</span><span class="o">.</span><span class="n">e_tag</span><span class="p">,</span> <span class="s2">"PartNumber"</span><span class="p">:</span> <span class="n">part</span><span class="o">.</span><span class="n">part_number</span><span class="p">}</span>
|
||||
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_multipart</span><span class="o">.</span><span class="n">parts</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
||||
<span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_multipart</span><span class="o">.</span><span class="n">complete</span><span class="p">(</span><span class="n">MultipartUpload</span><span class="o">=</span><span class="p">{</span><span class="s2">"Parts"</span><span class="p">:</span> <span class="n">parts</span><span class="p">})</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_multipart</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_multipart</span><span class="o">.</span><span class="n">abort</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="s2">"w"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_bytes_written</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_create_empty_on_close</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_file</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_file</span> <span class="o">=</span> <span class="kc">None</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage">[docs]</a><span class="nd">@deconstructible</span>
|
||||
<span class="k">class</span> <span class="nc">S3Boto3Storage</span><span class="p">(</span><span class="n">Storage</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Amazon Simple Storage Service using Boto3</span>
|
||||
<span class="sd"> This storage backend supports opening files in read or write</span>
|
||||
<span class="sd"> mode and supports streaming(buffering) data in chunks to S3</span>
|
||||
<span class="sd"> when writing.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">default_content_type</span> <span class="o">=</span> <span class="s2">"application/octet-stream"</span>
|
||||
<span class="c1"># If config provided in init, signature_version and addressing_style settings/args are ignored.</span>
|
||||
<span class="n">config</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="c1"># used for looking up the access and secret key from env vars</span>
|
||||
<span class="n">access_key_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"AWS_S3_ACCESS_KEY_ID"</span><span class="p">,</span> <span class="s2">"AWS_ACCESS_KEY_ID"</span><span class="p">]</span>
|
||||
<span class="n">secret_key_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"AWS_S3_SECRET_ACCESS_KEY"</span><span class="p">,</span> <span class="s2">"AWS_SECRET_ACCESS_KEY"</span><span class="p">]</span>
|
||||
<span class="n">security_token_names</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"AWS_SESSION_TOKEN"</span><span class="p">,</span> <span class="s2">"AWS_SECURITY_TOKEN"</span><span class="p">]</span>
|
||||
<span class="n">security_token</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="n">access_key</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_ACCESS_KEY_ID"</span><span class="p">,</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_ACCESS_KEY_ID"</span><span class="p">,</span> <span class="s2">""</span><span class="p">))</span>
|
||||
<span class="n">secret_key</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_SECRET_ACCESS_KEY"</span><span class="p">,</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_SECRET_ACCESS_KEY"</span><span class="p">,</span> <span class="s2">""</span><span class="p">))</span>
|
||||
<span class="n">file_overwrite</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_FILE_OVERWRITE"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">object_parameters</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_OBJECT_PARAMETERS"</span><span class="p">,</span> <span class="p">{})</span>
|
||||
<span class="n">bucket_name</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_STORAGE_BUCKET_NAME"</span><span class="p">)</span>
|
||||
<span class="n">auto_create_bucket</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_AUTO_CREATE_BUCKET"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">default_acl</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_DEFAULT_ACL"</span><span class="p">,</span> <span class="s2">"public-read"</span><span class="p">)</span>
|
||||
<span class="n">bucket_acl</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_BUCKET_ACL"</span><span class="p">,</span> <span class="n">default_acl</span><span class="p">)</span>
|
||||
<span class="n">querystring_auth</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_QUERYSTRING_AUTH"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">querystring_expire</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_QUERYSTRING_EXPIRE"</span><span class="p">,</span> <span class="mi">3600</span><span class="p">)</span>
|
||||
<span class="n">signature_version</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_SIGNATURE_VERSION"</span><span class="p">)</span>
|
||||
<span class="n">reduced_redundancy</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_REDUCED_REDUNDANCY"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">location</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_LOCATION"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">encryption</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_ENCRYPTION"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">custom_domain</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_CUSTOM_DOMAIN"</span><span class="p">)</span>
|
||||
<span class="n">addressing_style</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_ADDRESSING_STYLE"</span><span class="p">)</span>
|
||||
<span class="n">secure_urls</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_SECURE_URLS"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">file_name_charset</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_FILE_NAME_CHARSET"</span><span class="p">,</span> <span class="s2">"utf-8"</span><span class="p">)</span>
|
||||
<span class="n">gzip</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_IS_GZIPPED"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">preload_metadata</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_PRELOAD_METADATA"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">gzip_content_types</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span>
|
||||
<span class="s2">"GZIP_CONTENT_TYPES"</span><span class="p">,</span>
|
||||
<span class="p">(</span>
|
||||
<span class="s2">"text/css"</span><span class="p">,</span>
|
||||
<span class="s2">"text/javascript"</span><span class="p">,</span>
|
||||
<span class="s2">"application/javascript"</span><span class="p">,</span>
|
||||
<span class="s2">"application/x-javascript"</span><span class="p">,</span>
|
||||
<span class="s2">"image/svg+xml"</span><span class="p">,</span>
|
||||
<span class="p">),</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">url_protocol</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_URL_PROTOCOL"</span><span class="p">,</span> <span class="s2">"http:"</span><span class="p">)</span>
|
||||
<span class="n">endpoint_url</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_ENDPOINT_URL"</span><span class="p">)</span>
|
||||
<span class="n">proxies</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_PROXIES"</span><span class="p">)</span>
|
||||
<span class="n">region_name</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_REGION_NAME"</span><span class="p">)</span>
|
||||
<span class="n">use_ssl</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_USE_SSL"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">verify</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_VERIFY"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">max_memory_size</span> <span class="o">=</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"AWS_S3_MAX_MEMORY_SIZE"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage.__init__"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">acl</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">bucket</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">settings</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Check if some of the settings we've provided as class attributes</span>
|
||||
<span class="sd"> need to be overwritten with values passed in here.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">settings</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
||||
|
||||
<span class="n">check_location</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Backward-compatibility: given the anteriority of the SECURE_URL setting</span>
|
||||
<span class="c1"># we fall back to https if specified in order to avoid the construction</span>
|
||||
<span class="c1"># of unsecure urls.</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">secure_urls</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">url_protocol</span> <span class="o">=</span> <span class="s2">"https:"</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_entries</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_bucket</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_connections</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">local</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">access_key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">secret_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_access_keys</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">security_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_security_token</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
|
||||
<span class="n">kwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="n">s3</span><span class="o">=</span><span class="p">{</span><span class="s2">"addressing_style"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">addressing_style</span><span class="p">},</span>
|
||||
<span class="n">signature_version</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">signature_version</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">boto3_version_info</span> <span class="o">>=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">):</span>
|
||||
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"proxies"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">proxies</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="n">Config</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__getstate__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||
<span class="n">state</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"_connections"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">state</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"_bucket"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">state</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__setstate__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
|
||||
<span class="n">state</span><span class="p">[</span><span class="s2">"_connections"</span><span class="p">]</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">local</span><span class="p">()</span>
|
||||
<span class="n">state</span><span class="p">[</span><span class="s2">"_bucket"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span> <span class="o">=</span> <span class="n">state</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">connection</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Creates the actual connection to S3</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">connection</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="p">,</span> <span class="s2">"connection"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">connection</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="n">boto3</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">Session</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span>
|
||||
<span class="s2">"s3"</span><span class="p">,</span>
|
||||
<span class="n">aws_access_key_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">access_key</span><span class="p">,</span>
|
||||
<span class="n">aws_secret_access_key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">secret_key</span><span class="p">,</span>
|
||||
<span class="n">aws_session_token</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">security_token</span><span class="p">,</span>
|
||||
<span class="n">region_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">region_name</span><span class="p">,</span>
|
||||
<span class="n">use_ssl</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">use_ssl</span><span class="p">,</span>
|
||||
<span class="n">endpoint_url</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">endpoint_url</span><span class="p">,</span>
|
||||
<span class="n">config</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">,</span>
|
||||
<span class="n">verify</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">verify</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Get the current bucket. If there is no current bucket object</span>
|
||||
<span class="sd"> create it.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_bucket</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_bucket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_or_create_bucket</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_bucket</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">entries</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Get the locally cached files for the bucket.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">preload_metadata</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_entries</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_entries</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_decode_name</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">key</span><span class="p">):</span> <span class="n">entry</span>
|
||||
<span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">Prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_entries</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_access_keys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Gets the access keys to use when accessing S3. If none is</span>
|
||||
<span class="sd"> provided in the settings then get them from the environment</span>
|
||||
<span class="sd"> variables.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">access_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">access_key</span> <span class="ow">or</span> <span class="n">lookup_env</span><span class="p">(</span><span class="n">S3Boto3Storage</span><span class="o">.</span><span class="n">access_key_names</span><span class="p">)</span>
|
||||
<span class="n">secret_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">secret_key</span> <span class="ow">or</span> <span class="n">lookup_env</span><span class="p">(</span><span class="n">S3Boto3Storage</span><span class="o">.</span><span class="n">secret_key_names</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">access_key</span><span class="p">,</span> <span class="n">secret_key</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_security_token</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Gets the security token to use when accessing S3. Get it from</span>
|
||||
<span class="sd"> the environment variables.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">security_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">security_token</span> <span class="ow">or</span> <span class="n">lookup_env</span><span class="p">(</span><span class="n">S3Boto3Storage</span><span class="o">.</span><span class="n">security_token_names</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">security_token</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_or_create_bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Retrieves a bucket if it exists, otherwise creates it.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">bucket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">Bucket</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">auto_create_bucket</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># Directly call head_bucket instead of bucket.load() because head_bucket()</span>
|
||||
<span class="c1"># fails on wrong region, while bucket.load() does not.</span>
|
||||
<span class="n">bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_bucket</span><span class="p">(</span><span class="n">Bucket</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">ClientError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">err</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s2">"ResponseMetadata"</span><span class="p">][</span><span class="s2">"HTTPStatusCode"</span><span class="p">]</span> <span class="o">==</span> <span class="mi">301</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">ImproperlyConfigured</span><span class="p">(</span>
|
||||
<span class="s2">"Bucket </span><span class="si">%s</span><span class="s2"> exists, but in a different "</span>
|
||||
<span class="s2">"region than we are connecting to. Set "</span>
|
||||
<span class="s2">"the region to connect to by setting "</span>
|
||||
<span class="s2">"AWS_S3_REGION_NAME to the correct region."</span> <span class="o">%</span> <span class="n">name</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">elif</span> <span class="n">err</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s2">"ResponseMetadata"</span><span class="p">][</span><span class="s2">"HTTPStatusCode"</span><span class="p">]</span> <span class="o">==</span> <span class="mi">404</span><span class="p">:</span>
|
||||
<span class="c1"># Notes: When using the us-east-1 Standard endpoint, you can create</span>
|
||||
<span class="c1"># buckets in other regions. The same is not true when hitting region specific</span>
|
||||
<span class="c1"># endpoints. However, when you create the bucket not in the same region, the</span>
|
||||
<span class="c1"># connection will fail all future requests to the Bucket after the creation</span>
|
||||
<span class="c1"># (301 Moved Permanently).</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># For simplicity, we enforce in S3Boto3Storage that any auto-created</span>
|
||||
<span class="c1"># bucket must match the region that the connection is for.</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Also note that Amazon specifically disallows "us-east-1" when passing bucket</span>
|
||||
<span class="c1"># region names; LocationConstraint *must* be blank to create in US Standard.</span>
|
||||
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">bucket_acl</span><span class="p">:</span>
|
||||
<span class="n">bucket_params</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"ACL"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">bucket_acl</span><span class="p">}</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">bucket_params</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">region_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">region_name</span>
|
||||
<span class="k">if</span> <span class="n">region_name</span> <span class="o">!=</span> <span class="s2">"us-east-1"</span><span class="p">:</span>
|
||||
<span class="n">bucket_params</span><span class="p">[</span><span class="s2">"CreateBucketConfiguration"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"LocationConstraint"</span><span class="p">:</span> <span class="n">region_name</span>
|
||||
<span class="p">}</span>
|
||||
<span class="n">bucket</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="o">**</span><span class="n">bucket_params</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">return</span> <span class="n">bucket</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_clean_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Cleans the name so that Windows style paths work</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># Normalize Windows style paths</span>
|
||||
<span class="n">clean_name</span> <span class="o">=</span> <span class="n">posixpath</span><span class="o">.</span><span class="n">normpath</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">,</span> <span class="s2">"/"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># os.path.normpath() can strip trailing slashes so we implement</span>
|
||||
<span class="c1"># a workaround here.</span>
|
||||
<span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">clean_name</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"/"</span><span class="p">):</span>
|
||||
<span class="c1"># Add a trailing slash as it was stripped.</span>
|
||||
<span class="n">clean_name</span> <span class="o">+=</span> <span class="s2">"/"</span>
|
||||
<span class="k">return</span> <span class="n">clean_name</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_normalize_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Normalizes the name so that paths like /path/to/ignored/../something.txt</span>
|
||||
<span class="sd"> work. We check to make sure that the path pointed to is not outside</span>
|
||||
<span class="sd"> the directory specified by the LOCATION setting.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">safe_join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">SuspiciousOperation</span><span class="p">(</span><span class="s2">"Attempted access to '</span><span class="si">%s</span><span class="s2">' denied."</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_encode_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">smart_text</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">file_name_charset</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_decode_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">force_text</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">file_name_charset</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_compress_content</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">):</span>
|
||||
<span class="sd">"""Gzip a given string content."""</span>
|
||||
<span class="n">content</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="n">zbuf</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">BytesIO</span><span class="p">()</span>
|
||||
<span class="c1"># The GZIP header has a modification time attribute (see http://www.zlib.org/rfc-gzip.html)</span>
|
||||
<span class="c1"># Each time a file is compressed it changes even if the other contents don't change</span>
|
||||
<span class="c1"># For S3 this defeats detection of changes using MD5 sums on gzipped files</span>
|
||||
<span class="c1"># Fixing the mtime at 0.0 at compression time avoids this problem</span>
|
||||
<span class="n">zfile</span> <span class="o">=</span> <span class="n">GzipFile</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">"wb"</span><span class="p">,</span> <span class="n">fileobj</span><span class="o">=</span><span class="n">zbuf</span><span class="p">,</span> <span class="n">mtime</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">zfile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">force_bytes</span><span class="p">(</span><span class="n">content</span><span class="o">.</span><span class="n">read</span><span class="p">()))</span>
|
||||
<span class="k">finally</span><span class="p">:</span>
|
||||
<span class="n">zfile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<span class="n">zbuf</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
<span class="c1"># Boto 2 returned the InMemoryUploadedFile with the file pointer replaced,</span>
|
||||
<span class="c1"># but Boto 3 seems to have issues with that. No need for fp.name in Boto3</span>
|
||||
<span class="c1"># so just returning the BytesIO directly</span>
|
||||
<span class="k">return</span> <span class="n">zbuf</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_open</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">"rb"</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Opens the file, if it exists.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">f</span> <span class="o">=</span> <span class="n">S3Boto3StorageFile</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">ClientError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">err</span><span class="o">.</span><span class="n">response</span><span class="p">[</span><span class="s2">"ResponseMetadata"</span><span class="p">][</span><span class="s2">"HTTPStatusCode"</span><span class="p">]</span> <span class="o">==</span> <span class="mi">404</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="s2">"File does not exist: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="c1"># Let it bubble up if it was some other error</span>
|
||||
<span class="k">return</span> <span class="n">f</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Stitches and cleans multipart uploads; normalizes file paths.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">cleaned_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="n">cleaned_name</span><span class="p">)</span>
|
||||
<span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_write_parameters</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">gzip</span>
|
||||
<span class="ow">and</span> <span class="n">params</span><span class="p">[</span><span class="s2">"ContentType"</span><span class="p">]</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">gzip_content_types</span>
|
||||
<span class="ow">and</span> <span class="s2">"ContentEncoding"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">params</span>
|
||||
<span class="p">):</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_compress_content</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
|
||||
<span class="n">params</span><span class="p">[</span><span class="s2">"ContentEncoding"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"gzip"</span>
|
||||
|
||||
<span class="n">encoded_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_encode_name</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="p">(</span><span class="n">encoded_name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">preload_metadata</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_entries</span><span class="p">[</span><span class="n">encoded_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">obj</span>
|
||||
|
||||
<span class="n">content</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">SEEK_SET</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">ExtraArgs</span><span class="o">=</span><span class="n">params</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">cleaned_name</span>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage.delete"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage.delete">[docs]</a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Deletes a file from S3.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_encode_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_entries</span><span class="p">:</span>
|
||||
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_entries</span><span class="p">[</span><span class="n">name</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage.exists"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage.exists">[docs]</a> <span class="k">def</span> <span class="nf">exists</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Checks if file exists.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">entries</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_object</span><span class="p">(</span><span class="n">Bucket</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">,</span> <span class="n">Key</span><span class="o">=</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">except</span> <span class="n">ClientError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">False</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage.listdir"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage.listdir">[docs]</a> <span class="k">def</span> <span class="nf">listdir</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Translational function to go from S3 file paths to the format</span>
|
||||
<span class="sd"> Django's listdir expects.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="c1"># The path needs to end with a slash, but if the root is empty, leave</span>
|
||||
<span class="c1"># it.</span>
|
||||
<span class="k">if</span> <span class="n">path</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">path</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"/"</span><span class="p">):</span>
|
||||
<span class="n">path</span> <span class="o">+=</span> <span class="s2">"/"</span>
|
||||
|
||||
<span class="n">directories</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">files</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">paginator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">get_paginator</span><span class="p">(</span><span class="s2">"list_objects"</span><span class="p">)</span>
|
||||
<span class="n">pages</span> <span class="o">=</span> <span class="n">paginator</span><span class="o">.</span><span class="n">paginate</span><span class="p">(</span><span class="n">Bucket</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">,</span> <span class="n">Delimiter</span><span class="o">=</span><span class="s2">"/"</span><span class="p">,</span> <span class="n">Prefix</span><span class="o">=</span><span class="n">path</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">page</span> <span class="ow">in</span> <span class="n">pages</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">page</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"CommonPrefixes"</span><span class="p">,</span> <span class="p">()):</span>
|
||||
<span class="n">directories</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">posixpath</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">entry</span><span class="p">[</span><span class="s2">"Prefix"</span><span class="p">],</span> <span class="n">path</span><span class="p">))</span>
|
||||
<span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">page</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"Contents"</span><span class="p">,</span> <span class="p">()):</span>
|
||||
<span class="n">files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">posixpath</span><span class="o">.</span><span class="n">relpath</span><span class="p">(</span><span class="n">entry</span><span class="p">[</span><span class="s2">"Key"</span><span class="p">],</span> <span class="n">path</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">directories</span><span class="p">,</span> <span class="n">files</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage.size"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage.size">[docs]</a> <span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Gets the filesize of a remote file.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="p">:</span>
|
||||
<span class="n">entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">entry</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">entry</span><span class="o">.</span><span class="n">size</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="s2">"size"</span><span class="p">)</span> <span class="k">else</span> <span class="n">entry</span><span class="o">.</span><span class="n">content_length</span>
|
||||
<span class="k">return</span> <span class="mi">0</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_encode_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span><span class="o">.</span><span class="n">content_length</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_write_parameters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="n">params</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">encryption</span><span class="p">:</span>
|
||||
<span class="n">params</span><span class="p">[</span><span class="s2">"ServerSideEncryption"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"AES256"</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">reduced_redundancy</span><span class="p">:</span>
|
||||
<span class="n">params</span><span class="p">[</span><span class="s2">"StorageClass"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"REDUCED_REDUNDANCY"</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_acl</span><span class="p">:</span>
|
||||
<span class="n">params</span><span class="p">[</span><span class="s2">"ACL"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_acl</span>
|
||||
|
||||
<span class="n">_type</span><span class="p">,</span> <span class="n">encoding</span> <span class="o">=</span> <span class="n">mimetypes</span><span class="o">.</span><span class="n">guess_type</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">content_type</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="s2">"content_type"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">content_type</span> <span class="o">=</span> <span class="n">content_type</span> <span class="ow">or</span> <span class="n">_type</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_content_type</span>
|
||||
|
||||
<span class="n">params</span><span class="p">[</span><span class="s2">"ContentType"</span><span class="p">]</span> <span class="o">=</span> <span class="n">content_type</span>
|
||||
<span class="k">if</span> <span class="n">encoding</span><span class="p">:</span>
|
||||
<span class="n">params</span><span class="p">[</span><span class="s2">"ContentEncoding"</span><span class="p">]</span> <span class="o">=</span> <span class="n">encoding</span>
|
||||
|
||||
<span class="n">params</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_object_parameters</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">params</span>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage.get_object_parameters"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage.get_object_parameters">[docs]</a> <span class="k">def</span> <span class="nf">get_object_parameters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Returns a dictionary that is passed to file upload. Override this</span>
|
||||
<span class="sd"> method to adjust this on a per-object basis to set e.g ContentDisposition.</span>
|
||||
<span class="sd"> By default, returns the value of AWS_S3_OBJECT_PARAMETERS.</span>
|
||||
<span class="sd"> Setting ContentEncoding will prevent objects from being automatically gzipped.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_parameters</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage.get_modified_time"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage.get_modified_time">[docs]</a> <span class="k">def</span> <span class="nf">get_modified_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Returns an (aware) datetime object containing the last modified time if</span>
|
||||
<span class="sd"> USE_TZ is True, otherwise returns a naive datetime in the local timezone.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="n">entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">entries</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="c1"># only call self.bucket.Object() if the key is not found</span>
|
||||
<span class="c1"># in the preloaded metadata.</span>
|
||||
<span class="k">if</span> <span class="n">entry</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">entry</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_encode_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">setting</span><span class="p">(</span><span class="s2">"USE_TZ"</span><span class="p">):</span>
|
||||
<span class="c1"># boto3 returns TZ aware timestamps</span>
|
||||
<span class="k">return</span> <span class="n">entry</span><span class="o">.</span><span class="n">last_modified</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">make_naive</span><span class="p">(</span><span class="n">entry</span><span class="o">.</span><span class="n">last_modified</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage.modified_time"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage.modified_time">[docs]</a> <span class="k">def</span> <span class="nf">modified_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""Returns a naive datetime object containing the last modified time.</span>
|
||||
<span class="sd"> If USE_TZ=False then get_modified_time will return a naive datetime</span>
|
||||
<span class="sd"> so we just return that, else we have to localize and strip the tz</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">mtime</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_modified_time</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">mtime</span> <span class="k">if</span> <span class="n">is_naive</span><span class="p">(</span><span class="n">mtime</span><span class="p">)</span> <span class="k">else</span> <span class="n">make_naive</span><span class="p">(</span><span class="n">mtime</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_strip_signing_parameters</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Boto3 does not currently support generating URLs that are unsigned. Instead we</span>
|
||||
<span class="sd"> take the signed URLs and strip any querystring params related to signing and expiration.</span>
|
||||
<span class="sd"> Note that this may end up with URLs that are still invalid, especially if params are</span>
|
||||
<span class="sd"> passed in that only work with signed URLs, e.g. response header params.</span>
|
||||
<span class="sd"> The code attempts to strip all query parameters that match names of known parameters</span>
|
||||
<span class="sd"> from v2 and v4 signatures, regardless of the actual signature version used.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">split_url</span> <span class="o">=</span> <span class="n">urlparse</span><span class="o">.</span><span class="n">urlsplit</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
|
||||
<span class="n">qs</span> <span class="o">=</span> <span class="n">urlparse</span><span class="o">.</span><span class="n">parse_qsl</span><span class="p">(</span><span class="n">split_url</span><span class="o">.</span><span class="n">query</span><span class="p">,</span> <span class="n">keep_blank_values</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">blacklist</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"x-amz-algorithm"</span><span class="p">,</span>
|
||||
<span class="s2">"x-amz-credential"</span><span class="p">,</span>
|
||||
<span class="s2">"x-amz-date"</span><span class="p">,</span>
|
||||
<span class="s2">"x-amz-expires"</span><span class="p">,</span>
|
||||
<span class="s2">"x-amz-signedheaders"</span><span class="p">,</span>
|
||||
<span class="s2">"x-amz-signature"</span><span class="p">,</span>
|
||||
<span class="s2">"x-amz-security-token"</span><span class="p">,</span>
|
||||
<span class="s2">"awsaccesskeyid"</span><span class="p">,</span>
|
||||
<span class="s2">"expires"</span><span class="p">,</span>
|
||||
<span class="s2">"signature"</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
<span class="n">filtered_qs</span> <span class="o">=</span> <span class="p">((</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">qs</span> <span class="k">if</span> <span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">blacklist</span><span class="p">)</span>
|
||||
<span class="c1"># Note: Parameters that did not have a value in the original query string will have</span>
|
||||
<span class="c1"># an '=' sign appended to it, e.g ?foo&bar becomes ?foo=&bar=</span>
|
||||
<span class="n">joined_qs</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"="</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">keyval</span><span class="p">)</span> <span class="k">for</span> <span class="n">keyval</span> <span class="ow">in</span> <span class="n">filtered_qs</span><span class="p">)</span>
|
||||
<span class="n">split_url</span> <span class="o">=</span> <span class="n">split_url</span><span class="o">.</span><span class="n">_replace</span><span class="p">(</span><span class="n">query</span><span class="o">=</span><span class="s2">"&"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">joined_qs</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">split_url</span><span class="o">.</span><span class="n">geturl</span><span class="p">()</span>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage.url"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage.url">[docs]</a> <span class="k">def</span> <span class="nf">url</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">parameters</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">expire</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Returns the URL of a remotely-hosted file</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># Preserve the trailing slash after normalizing the path.</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_normalize_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">custom_domain</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">{}</span><span class="s2">//</span><span class="si">{}</span><span class="s2">/</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url_protocol</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">custom_domain</span><span class="p">,</span> <span class="n">filepath_to_uri</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">expire</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">expire</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">querystring_expire</span>
|
||||
|
||||
<span class="n">params</span> <span class="o">=</span> <span class="n">parameters</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">parameters</span> <span class="k">else</span> <span class="p">{}</span>
|
||||
<span class="n">params</span><span class="p">[</span><span class="s2">"Bucket"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">name</span>
|
||||
<span class="n">params</span><span class="p">[</span><span class="s2">"Key"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_encode_name</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">url</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">generate_presigned_url</span><span class="p">(</span>
|
||||
<span class="s2">"get_object"</span><span class="p">,</span> <span class="n">Params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">ExpiresIn</span><span class="o">=</span><span class="n">expire</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">querystring_auth</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">url</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_strip_signing_parameters</span><span class="p">(</span><span class="n">url</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3Storage.get_available_name"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.aws_s3_cdn.html#evennia.contrib.awsstorage.aws_s3_cdn.S3Boto3Storage.get_available_name">[docs]</a> <span class="k">def</span> <span class="nf">get_available_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""Overwrite existing file with the same name."""</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">file_overwrite</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">get_available_overwrite_name</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">max_length</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_available_name</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">max_length</span><span class="p">)</span></div></div>
|
||||
</pre></div>
|
||||
|
||||
<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>
|
||||
<h3>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="aws_s3_cdn.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../../../../0.9.5/index.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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.awsstorage.aws_s3_cdn</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,696 +0,0 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>evennia.contrib.awsstorage.tests — Evennia 1.0-dev 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>
|
||||
<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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.awsstorage.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for evennia.contrib.awsstorage.tests</h1><div class="highlight"><pre>
|
||||
<span></span><span class="kn">from</span> <span class="nn">unittest</span> <span class="kn">import</span> <span class="n">skipIf</span>
|
||||
<span class="kn">from</span> <span class="nn">django.test</span> <span class="kn">import</span> <span class="n">override_settings</span>
|
||||
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
||||
<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="kn">import</span> <span class="n">ImproperlyConfigured</span>
|
||||
<span class="kn">from</span> <span class="nn">django.core.files.base</span> <span class="kn">import</span> <span class="n">ContentFile</span>
|
||||
<span class="kn">from</span> <span class="nn">django.test</span> <span class="kn">import</span> <span class="n">TestCase</span>
|
||||
<span class="kn">from</span> <span class="nn">django.utils.timezone</span> <span class="kn">import</span> <span class="n">is_aware</span><span class="p">,</span> <span class="n">utc</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">datetime</span><span class="o">,</span> <span class="nn">gzip</span><span class="o">,</span> <span class="nn">pickle</span><span class="o">,</span> <span class="nn">threading</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">botocore.exceptions</span> <span class="kn">import</span> <span class="n">ClientError</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.contrib.awsstorage</span> <span class="kn">import</span> <span class="n">aws_s3_cdn</span> <span class="k">as</span> <span class="n">s3boto3</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">django.utils.six.moves.urllib</span> <span class="kn">import</span> <span class="n">parse</span> <span class="k">as</span> <span class="n">urlparse</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">urllib</span> <span class="kn">import</span> <span class="n">parse</span> <span class="k">as</span> <span class="n">urlparse</span>
|
||||
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">unittest</span> <span class="kn">import</span> <span class="n">mock</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span> <span class="c1"># Python 3.2 and below</span>
|
||||
<span class="kn">import</span> <span class="nn">mock</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3TestCase"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3TestCase">[docs]</a><span class="k">class</span> <span class="nc">S3Boto3TestCase</span><span class="p">(</span><span class="n">TestCase</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="S3Boto3TestCase.setUp"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3TestCase.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">(</span><span class="n">access_key</span><span class="o">=</span><span class="s2">"foo"</span><span class="p">,</span> <span class="n">secret_key</span><span class="o">=</span><span class="s2">"bar"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests">[docs]</a><span class="k">class</span> <span class="nc">S3Boto3StorageTests</span><span class="p">(</span><span class="n">S3Boto3TestCase</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_clean_name"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_clean_name">[docs]</a> <span class="k">def</span> <span class="nf">test_clean_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the base case of _clean_name</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="s2">"path/to/somewhere"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"path/to/somewhere"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_clean_name_normalize"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_clean_name_normalize">[docs]</a> <span class="k">def</span> <span class="nf">test_clean_name_normalize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the normalization of _clean_name</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="s2">"path/to/../somewhere"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"path/somewhere"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_clean_name_trailing_slash"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_clean_name_trailing_slash">[docs]</a> <span class="k">def</span> <span class="nf">test_clean_name_trailing_slash</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the _clean_name when the path has a trailing slash</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="s2">"path/to/somewhere/"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"path/to/somewhere/"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_clean_name_windows"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_clean_name_windows">[docs]</a> <span class="k">def</span> <span class="nf">test_clean_name_windows</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the _clean_name when the path has a trailing slash</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_clean_name</span><span class="p">(</span><span class="s2">"path</span><span class="se">\\</span><span class="s2">to</span><span class="se">\\</span><span class="s2">somewhere"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"path/to/somewhere"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_pickle_with_bucket"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_pickle_with_bucket">[docs]</a> <span class="k">def</span> <span class="nf">test_pickle_with_bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test that the storage can be pickled with a bucket attached</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># Ensure the bucket has been used</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_bucket</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Can't pickle MagicMock, but you can't pickle a real Bucket object either</span>
|
||||
<span class="n">p</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="p">)</span>
|
||||
<span class="n">new_storage</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsInstance</span><span class="p">(</span><span class="n">new_storage</span><span class="o">.</span><span class="n">_connections</span><span class="p">,</span> <span class="n">threading</span><span class="o">.</span><span class="n">local</span><span class="p">)</span>
|
||||
<span class="c1"># Put the mock connection back in</span>
|
||||
<span class="n">new_storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">new_storage</span><span class="o">.</span><span class="n">_bucket</span><span class="p">)</span>
|
||||
<span class="n">new_storage</span><span class="o">.</span><span class="n">bucket</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">new_storage</span><span class="o">.</span><span class="n">_bucket</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_pickle_without_bucket"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_pickle_without_bucket">[docs]</a> <span class="k">def</span> <span class="nf">test_pickle_without_bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test that the storage can be pickled, without a bucket instance</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="c1"># Can't pickle a threadlocal</span>
|
||||
<span class="n">p</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="p">)</span>
|
||||
<span class="n">new_storage</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsInstance</span><span class="p">(</span><span class="n">new_storage</span><span class="o">.</span><span class="n">_connections</span><span class="p">,</span> <span class="n">threading</span><span class="o">.</span><span class="n">local</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_url_slashes"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_url_slashes">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_url_slashes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test URL generation.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">custom_domain</span> <span class="o">=</span> <span class="s2">"example.com"</span>
|
||||
|
||||
<span class="c1"># We expect no leading slashes in the path,</span>
|
||||
<span class="c1"># and trailing slashes should be preserved.</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">""</span><span class="p">),</span> <span class="s2">"https://example.com/"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">"path"</span><span class="p">),</span> <span class="s2">"https://example.com/path"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">"path/"</span><span class="p">),</span> <span class="s2">"https://example.com/path/"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">"path/1"</span><span class="p">),</span> <span class="s2">"https://example.com/path/1"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">"path/1/"</span><span class="p">),</span> <span class="s2">"https://example.com/path/1/"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_save">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test saving a file</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_storage_save.txt"</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">"new content"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">content</span><span class="p">,</span> <span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span><span class="s2">"ContentType"</span><span class="p">:</span> <span class="s2">"text/plain"</span><span class="p">,</span> <span class="s2">"ACL"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,}</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save_with_acl"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_save_with_acl">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save_with_acl</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test saving a file with user defined ACL.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_storage_save.txt"</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">"new content"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span> <span class="o">=</span> <span class="s2">"private"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">content</span><span class="p">,</span> <span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span><span class="s2">"ContentType"</span><span class="p">:</span> <span class="s2">"text/plain"</span><span class="p">,</span> <span class="s2">"ACL"</span><span class="p">:</span> <span class="s2">"private"</span><span class="p">,}</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_content_type"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_content_type">[docs]</a> <span class="k">def</span> <span class="nf">test_content_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test saving a file with a None content type.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_image.jpg"</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">"data"</span><span class="p">)</span>
|
||||
<span class="n">content</span><span class="o">.</span><span class="n">content_type</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">content</span><span class="p">,</span> <span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span><span class="s2">"ContentType"</span><span class="p">:</span> <span class="s2">"image/jpeg"</span><span class="p">,</span> <span class="s2">"ACL"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,}</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save_gzipped"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_save_gzipped">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save_gzipped</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test saving a gzipped file</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_storage_save.gz"</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">"I am gzip'd"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">content</span><span class="p">,</span>
|
||||
<span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span>
|
||||
<span class="s2">"ContentType"</span><span class="p">:</span> <span class="s2">"application/octet-stream"</span><span class="p">,</span>
|
||||
<span class="s2">"ContentEncoding"</span><span class="p">:</span> <span class="s2">"gzip"</span><span class="p">,</span>
|
||||
<span class="s2">"ACL"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save_gzip"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_save_gzip">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save_gzip</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test saving a file with gzip enabled.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">gzip</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_storage_save.css"</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">"I should be gzip'd"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">mock</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
|
||||
<span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span>
|
||||
<span class="s2">"ContentType"</span><span class="p">:</span> <span class="s2">"text/css"</span><span class="p">,</span>
|
||||
<span class="s2">"ContentEncoding"</span><span class="p">:</span> <span class="s2">"gzip"</span><span class="p">,</span>
|
||||
<span class="s2">"ACL"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">call_args</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">zfile</span> <span class="o">=</span> <span class="n">gzip</span><span class="o">.</span><span class="n">GzipFile</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">"rb"</span><span class="p">,</span> <span class="n">fileobj</span><span class="o">=</span><span class="n">content</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">zfile</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="sa">b</span><span class="s2">"I should be gzip'd"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save_gzip_twice"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_save_gzip_twice">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save_gzip_twice</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test saving the same file content twice with gzip enabled.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># Given</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">gzip</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_storage_save.css"</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">"I should be gzip'd"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># When</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="s2">"test_storage_save_2.css"</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Then</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">mock</span><span class="o">.</span><span class="n">ANY</span><span class="p">,</span>
|
||||
<span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span>
|
||||
<span class="s2">"ContentType"</span><span class="p">:</span> <span class="s2">"text/css"</span><span class="p">,</span>
|
||||
<span class="s2">"ContentEncoding"</span><span class="p">:</span> <span class="s2">"gzip"</span><span class="p">,</span>
|
||||
<span class="s2">"ACL"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">call_args</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">zfile</span> <span class="o">=</span> <span class="n">gzip</span><span class="o">.</span><span class="n">GzipFile</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s2">"rb"</span><span class="p">,</span> <span class="n">fileobj</span><span class="o">=</span><span class="n">content</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">zfile</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="sa">b</span><span class="s2">"I should be gzip'd"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_compress_content_len"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_compress_content_len">[docs]</a> <span class="k">def</span> <span class="nf">test_compress_content_len</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test that file returned by _compress_content() is readable.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">gzip</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">"I should be gzip'd"</span><span class="p">)</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_compress_content</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">content</span><span class="o">.</span><span class="n">read</span><span class="p">())</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_open_write"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_open_write">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_open_write</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test opening a file in write mode</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_open_for_writïng.txt"</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="s2">"new content"</span>
|
||||
|
||||
<span class="c1"># Set the encryption flag used for multipart uploads</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">encryption</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">reduced_redundancy</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span> <span class="o">=</span> <span class="s2">"public-read"</span>
|
||||
|
||||
<span class="n">file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="c1"># Set the name of the mock object</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">name</span>
|
||||
|
||||
<span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">initiate_multipart_upload</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">ACL</span><span class="o">=</span><span class="s2">"public-read"</span><span class="p">,</span>
|
||||
<span class="n">ContentType</span><span class="o">=</span><span class="s2">"text/plain"</span><span class="p">,</span>
|
||||
<span class="n">ServerSideEncryption</span><span class="o">=</span><span class="s2">"AES256"</span><span class="p">,</span>
|
||||
<span class="n">StorageClass</span><span class="o">=</span><span class="s2">"REDUCED_REDUNDANCY"</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># Save the internal file before closing</span>
|
||||
<span class="n">multipart</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">initiate_multipart_upload</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">multipart</span><span class="o">.</span><span class="n">parts</span><span class="o">.</span><span class="n">all</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="p">[</span><span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">(</span><span class="n">e_tag</span><span class="o">=</span><span class="s2">"123"</span><span class="p">,</span> <span class="n">part_number</span><span class="o">=</span><span class="mi">1</span><span class="p">)]</span>
|
||||
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<span class="n">multipart</span><span class="o">.</span><span class="n">Part</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="n">part</span> <span class="o">=</span> <span class="n">multipart</span><span class="o">.</span><span class="n">Part</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">part</span><span class="o">.</span><span class="n">upload</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">Body</span><span class="o">=</span><span class="n">content</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">))</span>
|
||||
<span class="n">multipart</span><span class="o">.</span><span class="n">complete</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
|
||||
<span class="n">MultipartUpload</span><span class="o">=</span><span class="p">{</span><span class="s2">"Parts"</span><span class="p">:</span> <span class="p">[{</span><span class="s2">"ETag"</span><span class="p">:</span> <span class="s2">"123"</span><span class="p">,</span> <span class="s2">"PartNumber"</span><span class="p">:</span> <span class="mi">1</span><span class="p">}]}</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_open_no_write"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_open_no_write">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_open_no_write</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test opening file in write mode and closing without writing.</span>
|
||||
|
||||
<span class="sd"> A file should be created as by obj.put(...).</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_open_no_write.txt"</span>
|
||||
|
||||
<span class="c1"># Set the encryption flag used for puts</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">encryption</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">reduced_redundancy</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span> <span class="o">=</span> <span class="s2">"public-read"</span>
|
||||
|
||||
<span class="n">file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">load</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="n">ClientError</span><span class="p">(</span>
|
||||
<span class="p">{</span><span class="s2">"Error"</span><span class="p">:</span> <span class="p">{},</span> <span class="s2">"ResponseMetadata"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"HTTPStatusCode"</span><span class="p">:</span> <span class="mi">404</span><span class="p">}},</span> <span class="s2">"head_bucket"</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># Set the name of the mock object</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">name</span>
|
||||
|
||||
<span class="c1"># Save the internal file before closing</span>
|
||||
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">load</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">()</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">put</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
|
||||
<span class="n">ACL</span><span class="o">=</span><span class="s2">"public-read"</span><span class="p">,</span>
|
||||
<span class="n">Body</span><span class="o">=</span><span class="sa">b</span><span class="s2">""</span><span class="p">,</span>
|
||||
<span class="n">ContentType</span><span class="o">=</span><span class="s2">"text/plain"</span><span class="p">,</span>
|
||||
<span class="n">ServerSideEncryption</span><span class="o">=</span><span class="s2">"AES256"</span><span class="p">,</span>
|
||||
<span class="n">StorageClass</span><span class="o">=</span><span class="s2">"REDUCED_REDUNDANCY"</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_open_no_overwrite_existing"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_open_no_overwrite_existing">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_open_no_overwrite_existing</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test opening an existing file in write mode and closing without writing.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_open_no_overwrite_existing.txt"</span>
|
||||
|
||||
<span class="c1"># Set the encryption flag used for puts</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">encryption</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">reduced_redundancy</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span> <span class="o">=</span> <span class="s2">"public-read"</span>
|
||||
|
||||
<span class="n">file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
|
||||
<span class="c1"># Set the name of the mock object</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">name</span>
|
||||
|
||||
<span class="c1"># Save the internal file before closing</span>
|
||||
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">load</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">()</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">put</span><span class="o">.</span><span class="n">assert_not_called</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_write_beyond_buffer_size"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_write_beyond_buffer_size">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_write_beyond_buffer_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test writing content that exceeds the buffer size</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_open_for_writïng_beyond_buffer_size.txt"</span>
|
||||
|
||||
<span class="c1"># Set the encryption flag used for multipart uploads</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">encryption</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">reduced_redundancy</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span> <span class="o">=</span> <span class="s2">"public-read"</span>
|
||||
|
||||
<span class="n">file</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="c1"># Set the name of the mock object</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">name</span>
|
||||
|
||||
<span class="c1"># Initiate the multipart upload</span>
|
||||
<span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">initiate_multipart_upload</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">ACL</span><span class="o">=</span><span class="s2">"public-read"</span><span class="p">,</span>
|
||||
<span class="n">ContentType</span><span class="o">=</span><span class="s2">"text/plain"</span><span class="p">,</span>
|
||||
<span class="n">ServerSideEncryption</span><span class="o">=</span><span class="s2">"AES256"</span><span class="p">,</span>
|
||||
<span class="n">StorageClass</span><span class="o">=</span><span class="s2">"REDUCED_REDUNDANCY"</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">multipart</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">initiate_multipart_upload</span><span class="o">.</span><span class="n">return_value</span>
|
||||
|
||||
<span class="c1"># Write content at least twice as long as the buffer size</span>
|
||||
<span class="n">written_content</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">counter</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">written_content</span><span class="p">)</span> <span class="o"><</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">file</span><span class="o">.</span><span class="n">buffer_size</span><span class="p">:</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="s2">"hello, aws </span><span class="si">{counter}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">counter</span><span class="o">=</span><span class="n">counter</span><span class="p">)</span>
|
||||
<span class="c1"># Write more than just a few bytes in each iteration to keep the</span>
|
||||
<span class="c1"># test reasonably fast</span>
|
||||
<span class="n">content</span> <span class="o">+=</span> <span class="s2">"*"</span> <span class="o">*</span> <span class="nb">int</span><span class="p">(</span><span class="n">file</span><span class="o">.</span><span class="n">buffer_size</span> <span class="o">/</span> <span class="mi">10</span><span class="p">)</span>
|
||||
<span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
|
||||
<span class="n">written_content</span> <span class="o">+=</span> <span class="n">content</span>
|
||||
<span class="n">counter</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
|
||||
<span class="c1"># Save the internal file before closing</span>
|
||||
<span class="n">multipart</span><span class="o">.</span><span class="n">parts</span><span class="o">.</span><span class="n">all</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">(</span><span class="n">e_tag</span><span class="o">=</span><span class="s2">"123"</span><span class="p">,</span> <span class="n">part_number</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span>
|
||||
<span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">(</span><span class="n">e_tag</span><span class="o">=</span><span class="s2">"456"</span><span class="p">,</span> <span class="n">part_number</span><span class="o">=</span><span class="mi">2</span><span class="p">),</span>
|
||||
<span class="p">]</span>
|
||||
<span class="n">file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertListEqual</span><span class="p">(</span><span class="n">multipart</span><span class="o">.</span><span class="n">Part</span><span class="o">.</span><span class="n">call_args_list</span><span class="p">,</span> <span class="p">[</span><span class="n">mock</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">mock</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="mi">2</span><span class="p">)])</span>
|
||||
<span class="n">part</span> <span class="o">=</span> <span class="n">multipart</span><span class="o">.</span><span class="n">Part</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">uploaded_content</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="n">args_list</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"Body"</span><span class="p">]</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">)</span> <span class="k">for</span> <span class="n">args_list</span> <span class="ow">in</span> <span class="n">part</span><span class="o">.</span><span class="n">upload</span><span class="o">.</span><span class="n">call_args_list</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">uploaded_content</span><span class="p">,</span> <span class="n">written_content</span><span class="p">)</span>
|
||||
<span class="n">multipart</span><span class="o">.</span><span class="n">complete</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
|
||||
<span class="n">MultipartUpload</span><span class="o">=</span><span class="p">{</span>
|
||||
<span class="s2">"Parts"</span><span class="p">:</span> <span class="p">[{</span><span class="s2">"ETag"</span><span class="p">:</span> <span class="s2">"123"</span><span class="p">,</span> <span class="s2">"PartNumber"</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span> <span class="p">{</span><span class="s2">"ETag"</span><span class="p">:</span> <span class="s2">"456"</span><span class="p">,</span> <span class="s2">"PartNumber"</span><span class="p">:</span> <span class="mi">2</span><span class="p">},]</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_auto_creating_bucket"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_auto_creating_bucket">[docs]</a> <span class="k">def</span> <span class="nf">test_auto_creating_bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">auto_create_bucket</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="n">Bucket</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">Bucket</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">Bucket</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">region_name</span> <span class="o">=</span> <span class="s2">"sa-east-1"</span>
|
||||
|
||||
<span class="n">Bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_bucket</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="n">ClientError</span><span class="p">(</span>
|
||||
<span class="p">{</span><span class="s2">"Error"</span><span class="p">:</span> <span class="p">{},</span> <span class="s2">"ResponseMetadata"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"HTTPStatusCode"</span><span class="p">:</span> <span class="mi">404</span><span class="p">}},</span> <span class="s2">"head_bucket"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_get_or_create_bucket</span><span class="p">(</span><span class="s2">"testbucketname"</span><span class="p">)</span>
|
||||
<span class="n">Bucket</span><span class="o">.</span><span class="n">create</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
|
||||
<span class="n">ACL</span><span class="o">=</span><span class="s2">"public-read"</span><span class="p">,</span> <span class="n">CreateBucketConfiguration</span><span class="o">=</span><span class="p">{</span><span class="s2">"LocationConstraint"</span><span class="p">:</span> <span class="s2">"sa-east-1"</span><span class="p">,}</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_auto_creating_bucket_with_acl"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_auto_creating_bucket_with_acl">[docs]</a> <span class="k">def</span> <span class="nf">test_auto_creating_bucket_with_acl</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">auto_create_bucket</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket_acl</span> <span class="o">=</span> <span class="s2">"public-read"</span>
|
||||
<span class="n">Bucket</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">Bucket</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">Bucket</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">region_name</span> <span class="o">=</span> <span class="s2">"sa-east-1"</span>
|
||||
|
||||
<span class="n">Bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_bucket</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="n">ClientError</span><span class="p">(</span>
|
||||
<span class="p">{</span><span class="s2">"Error"</span><span class="p">:</span> <span class="p">{},</span> <span class="s2">"ResponseMetadata"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"HTTPStatusCode"</span><span class="p">:</span> <span class="mi">404</span><span class="p">}},</span> <span class="s2">"head_bucket"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_get_or_create_bucket</span><span class="p">(</span><span class="s2">"testbucketname"</span><span class="p">)</span>
|
||||
<span class="n">Bucket</span><span class="o">.</span><span class="n">create</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
|
||||
<span class="n">ACL</span><span class="o">=</span><span class="s2">"public-read"</span><span class="p">,</span> <span class="n">CreateBucketConfiguration</span><span class="o">=</span><span class="p">{</span><span class="s2">"LocationConstraint"</span><span class="p">:</span> <span class="s2">"sa-east-1"</span><span class="p">,}</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_exists"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_exists">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_exists</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">"file.txt"</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">Bucket</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">,</span> <span class="n">Key</span><span class="o">=</span><span class="s2">"file.txt"</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_exists_false"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_exists_false">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_exists_false</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_object</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="n">ClientError</span><span class="p">(</span>
|
||||
<span class="p">{</span><span class="s2">"Error"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"Code"</span><span class="p">:</span> <span class="s2">"404"</span><span class="p">,</span> <span class="s2">"Message"</span><span class="p">:</span> <span class="s2">"Not Found"</span><span class="p">}},</span> <span class="s2">"HeadObject"</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">"file.txt"</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">Bucket</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">,</span> <span class="n">Key</span><span class="o">=</span><span class="s2">"file.txt"</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_exists_doesnt_create_bucket"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_exists_doesnt_create_bucket">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_exists_doesnt_create_bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">with</span> <span class="n">mock</span><span class="o">.</span><span class="n">patch</span><span class="o">.</span><span class="n">object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="p">,</span> <span class="s2">"_get_or_create_bucket"</span><span class="p">)</span> <span class="k">as</span> <span class="n">method</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">"file.txt"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">method</span><span class="o">.</span><span class="n">called</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_delete"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_delete">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="s2">"path/to/file.txt"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="s2">"path/to/file.txt"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">delete</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_listdir_base"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_listdir_base">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_listdir_base</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># Files:</span>
|
||||
<span class="c1"># some/path/1.txt</span>
|
||||
<span class="c1"># 2.txt</span>
|
||||
<span class="c1"># other/path/3.txt</span>
|
||||
<span class="c1"># 4.txt</span>
|
||||
<span class="n">pages</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"CommonPrefixes"</span><span class="p">:</span> <span class="p">[{</span><span class="s2">"Prefix"</span><span class="p">:</span> <span class="s2">"some"</span><span class="p">},</span> <span class="p">{</span><span class="s2">"Prefix"</span><span class="p">:</span> <span class="s2">"other"</span><span class="p">},],</span>
|
||||
<span class="s2">"Contents"</span><span class="p">:</span> <span class="p">[{</span><span class="s2">"Key"</span><span class="p">:</span> <span class="s2">"2.txt"</span><span class="p">},</span> <span class="p">{</span><span class="s2">"Key"</span><span class="p">:</span> <span class="s2">"4.txt"</span><span class="p">},],</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="n">paginator</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
|
||||
<span class="n">paginator</span><span class="o">.</span><span class="n">paginate</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">pages</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">get_paginator</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">paginator</span>
|
||||
|
||||
<span class="n">dirs</span><span class="p">,</span> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">paginator</span><span class="o">.</span><span class="n">paginate</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">Bucket</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">Delimiter</span><span class="o">=</span><span class="s2">"/"</span><span class="p">,</span> <span class="n">Prefix</span><span class="o">=</span><span class="s2">""</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">dirs</span><span class="p">,</span> <span class="p">[</span><span class="s2">"some"</span><span class="p">,</span> <span class="s2">"other"</span><span class="p">])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">files</span><span class="p">,</span> <span class="p">[</span><span class="s2">"2.txt"</span><span class="p">,</span> <span class="s2">"4.txt"</span><span class="p">])</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_listdir_subdir"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_listdir_subdir">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_listdir_subdir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># Files:</span>
|
||||
<span class="c1"># some/path/1.txt</span>
|
||||
<span class="c1"># some/2.txt</span>
|
||||
<span class="n">pages</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span><span class="s2">"CommonPrefixes"</span><span class="p">:</span> <span class="p">[{</span><span class="s2">"Prefix"</span><span class="p">:</span> <span class="s2">"some/path"</span><span class="p">},],</span> <span class="s2">"Contents"</span><span class="p">:</span> <span class="p">[{</span><span class="s2">"Key"</span><span class="p">:</span> <span class="s2">"some/2.txt"</span><span class="p">},],},</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="n">paginator</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
|
||||
<span class="n">paginator</span><span class="o">.</span><span class="n">paginate</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">pages</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_connections</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">get_paginator</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">paginator</span>
|
||||
|
||||
<span class="n">dirs</span><span class="p">,</span> <span class="n">files</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="s2">"some/"</span><span class="p">)</span>
|
||||
<span class="n">paginator</span><span class="o">.</span><span class="n">paginate</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">Bucket</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">Delimiter</span><span class="o">=</span><span class="s2">"/"</span><span class="p">,</span> <span class="n">Prefix</span><span class="o">=</span><span class="s2">"some/"</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">dirs</span><span class="p">,</span> <span class="p">[</span><span class="s2">"path"</span><span class="p">])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">files</span><span class="p">,</span> <span class="p">[</span><span class="s2">"2.txt"</span><span class="p">])</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_size"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_size">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">content_length</span> <span class="o">=</span> <span class="mi">4098</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"file.txt"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">size</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">obj</span><span class="o">.</span><span class="n">content_length</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_mtime"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_mtime">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_mtime</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># Test both USE_TZ cases</span>
|
||||
<span class="k">for</span> <span class="n">use_tz</span> <span class="ow">in</span> <span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
|
||||
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">(</span><span class="n">USE_TZ</span><span class="o">=</span><span class="n">use_tz</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_test_storage_mtime</span><span class="p">(</span><span class="n">use_tz</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_test_storage_mtime</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">use_tz</span><span class="p">):</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">last_modified</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">utc</span><span class="p">)</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"file.txt"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span>
|
||||
<span class="n">is_aware</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">modified_time</span><span class="p">(</span><span class="n">name</span><span class="p">)),</span>
|
||||
<span class="s2">"Naive datetime object expected from modified_time()"</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIs</span><span class="p">(</span>
|
||||
<span class="n">settings</span><span class="o">.</span><span class="n">USE_TZ</span><span class="p">,</span>
|
||||
<span class="n">is_aware</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">get_modified_time</span><span class="p">(</span><span class="n">name</span><span class="p">)),</span>
|
||||
<span class="s2">"</span><span class="si">{}</span><span class="s2"> datetime object expected from get_modified_time() when USE_TZ=</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="p">(</span><span class="s2">"Naive"</span><span class="p">,</span> <span class="s2">"Aware"</span><span class="p">)[</span><span class="n">settings</span><span class="o">.</span><span class="n">USE_TZ</span><span class="p">],</span> <span class="n">settings</span><span class="o">.</span><span class="n">USE_TZ</span>
|
||||
<span class="p">),</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_url"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_storage_url">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"test_storage_size.txt"</span>
|
||||
<span class="n">url</span> <span class="o">=</span> <span class="s2">"http://aws.amazon.com/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">name</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">generate_presigned_url</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">url</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s2">"bucket"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">url</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">generate_presigned_url</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="s2">"get_object"</span><span class="p">,</span>
|
||||
<span class="n">Params</span><span class="o">=</span><span class="p">{</span><span class="s2">"Bucket"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s2">"Key"</span><span class="p">:</span> <span class="n">name</span><span class="p">},</span>
|
||||
<span class="n">ExpiresIn</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">querystring_expire</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">custom_expire</span> <span class="o">=</span> <span class="mi">123</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">expire</span><span class="o">=</span><span class="n">custom_expire</span><span class="p">),</span> <span class="n">url</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">generate_presigned_url</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="s2">"get_object"</span><span class="p">,</span>
|
||||
<span class="n">Params</span><span class="o">=</span><span class="p">{</span><span class="s2">"Bucket"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s2">"Key"</span><span class="p">:</span> <span class="n">name</span><span class="p">},</span>
|
||||
<span class="n">ExpiresIn</span><span class="o">=</span><span class="n">custom_expire</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_generated_url_is_encoded"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_generated_url_is_encoded">[docs]</a> <span class="k">def</span> <span class="nf">test_generated_url_is_encoded</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">custom_domain</span> <span class="o">=</span> <span class="s2">"mock.cloudfront.net"</span>
|
||||
<span class="n">filename</span> <span class="o">=</span> <span class="s2">"whacky & filename.mp4"</span>
|
||||
<span class="n">url</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
|
||||
<span class="n">parsed_url</span> <span class="o">=</span> <span class="n">urlparse</span><span class="o">.</span><span class="n">urlparse</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">parsed_url</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="s2">"/whacky</span><span class="si">%20%</span><span class="s2">26</span><span class="si">%20f</span><span class="s2">ilename.mp4"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">generate_presigned_url</span><span class="o">.</span><span class="n">called</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_special_characters"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_special_characters">[docs]</a> <span class="k">def</span> <span class="nf">test_special_characters</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">custom_domain</span> <span class="o">=</span> <span class="s2">"mock.cloudfront.net"</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"ãlöhâ.jpg"</span>
|
||||
<span class="n">content</span> <span class="o">=</span> <span class="n">ContentFile</span><span class="p">(</span><span class="s2">"new content"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">content</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
|
||||
<span class="n">url</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
||||
<span class="n">parsed_url</span> <span class="o">=</span> <span class="n">urlparse</span><span class="o">.</span><span class="n">urlparse</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">parsed_url</span><span class="o">.</span><span class="n">path</span><span class="p">,</span> <span class="s2">"/%C3%A3l%C3%B6h%C3%A2.jpg"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_strip_signing_parameters"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_strip_signing_parameters">[docs]</a> <span class="k">def</span> <span class="nf">test_strip_signing_parameters</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">expected</span> <span class="o">=</span> <span class="s2">"http://bucket.s3-aws-region.amazonaws.com/foo/bar"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_strip_signing_parameters</span><span class="p">(</span>
|
||||
<span class="s2">"</span><span class="si">%s</span><span class="s2">?X-Amz-Date=12345678&X-Amz-Signature=Signature"</span> <span class="o">%</span> <span class="n">expected</span>
|
||||
<span class="p">),</span>
|
||||
<span class="n">expected</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_strip_signing_parameters</span><span class="p">(</span>
|
||||
<span class="s2">"</span><span class="si">%s</span><span class="s2">?expires=12345678&signature=Signature"</span> <span class="o">%</span> <span class="n">expected</span>
|
||||
<span class="p">),</span>
|
||||
<span class="n">expected</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_connection_threading"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_connection_threading">[docs]</a> <span class="nd">@skipIf</span><span class="p">(</span><span class="n">threading</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">"Test requires threading"</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">test_connection_threading</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">connections</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">thread_storage_connection</span><span class="p">():</span>
|
||||
<span class="n">connections</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">connection</span><span class="p">)</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">):</span>
|
||||
<span class="n">t</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">thread_storage_connection</span><span class="p">)</span>
|
||||
<span class="n">t</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<span class="n">t</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># Connection for each thread needs to be unique</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNot</span><span class="p">(</span><span class="n">connections</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">connections</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_location_leading_slash"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_location_leading_slash">[docs]</a> <span class="k">def</span> <span class="nf">test_location_leading_slash</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">msg</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s2">"S3Boto3Storage.location cannot begin with a leading slash. "</span>
|
||||
<span class="s2">"Found '/'. Use '' instead."</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="n">ImproperlyConfigured</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="n">msg</span><span class="p">):</span>
|
||||
<span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">(</span><span class="n">location</span><span class="o">=</span><span class="s2">"/"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_override_class_variable"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_override_class_variable">[docs]</a> <span class="k">def</span> <span class="nf">test_override_class_variable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">class</span> <span class="nc">MyStorage1</span><span class="p">(</span><span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">):</span>
|
||||
<span class="n">location</span> <span class="o">=</span> <span class="s2">"foo1"</span>
|
||||
|
||||
<span class="n">storage</span> <span class="o">=</span> <span class="n">MyStorage1</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="s2">"foo1"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">MyStorage2</span><span class="p">(</span><span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">):</span>
|
||||
<span class="n">location</span> <span class="o">=</span> <span class="s2">"foo2"</span>
|
||||
|
||||
<span class="n">storage</span> <span class="o">=</span> <span class="n">MyStorage2</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="s2">"foo2"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="S3Boto3StorageTests.test_override_init_argument"><a class="viewcode-back" href="../../../../api/evennia.contrib.awsstorage.tests.html#evennia.contrib.awsstorage.tests.S3Boto3StorageTests.test_override_init_argument">[docs]</a> <span class="k">def</span> <span class="nf">test_override_init_argument</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">storage</span> <span class="o">=</span> <span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">(</span><span class="n">location</span><span class="o">=</span><span class="s2">"foo1"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="s2">"foo1"</span><span class="p">)</span>
|
||||
<span class="n">storage</span> <span class="o">=</span> <span class="n">s3boto3</span><span class="o">.</span><span class="n">S3Boto3Storage</span><span class="p">(</span><span class="n">location</span><span class="o">=</span><span class="s2">"foo2"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">storage</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="s2">"foo2"</span><span class="p">)</span></div></div>
|
||||
</pre></div>
|
||||
|
||||
<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>
|
||||
<h3>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="tests.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../../../../0.9.5/index.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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.awsstorage.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.barter</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -964,6 +963,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -982,7 +982,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.barter</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.building_menu</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -1334,6 +1333,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1352,7 +1352,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.building_menu</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.chargen</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -261,6 +260,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -279,7 +279,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.chargen</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.clothing</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -811,6 +810,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -829,7 +829,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.clothing</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,397 +0,0 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>evennia.contrib.crafting.example_recipes — Evennia 1.0-dev 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>
|
||||
<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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.crafting.example_recipes</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for evennia.contrib.crafting.example_recipes</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">How to make a sword - example crafting tree for the crafting system.</span>
|
||||
|
||||
<span class="sd">See the `SwordSmithingBaseRecipe` in this module for an example of extendng the</span>
|
||||
<span class="sd">recipe with a mocked 'skill' system (just random chance in our case). The skill</span>
|
||||
<span class="sd">system used is game-specific but likely to be needed for most 'real' crafting</span>
|
||||
<span class="sd">systems.</span>
|
||||
|
||||
<span class="sd">Note that 'tools' are references to the tools used - they don't need to be in</span>
|
||||
<span class="sd">the inventory of the crafter. So when 'blast furnace' is given below, it is a</span>
|
||||
<span class="sd">reference to a blast furnace used, not suggesting the crafter is carrying it</span>
|
||||
<span class="sd">around with them.</span>
|
||||
|
||||
<span class="sd">## Sword crafting tree</span>
|
||||
|
||||
<span class="sd">::</span>
|
||||
|
||||
<span class="sd"> # base materials (consumables)</span>
|
||||
|
||||
<span class="sd"> iron ore, ash, sand, coal, oak wood, water, fur</span>
|
||||
|
||||
<span class="sd"> # base tools (marked with [T] for clarity and assumed to already exist)</span>
|
||||
|
||||
<span class="sd"> blast furnace[T], furnace[T], crucible[T], anvil[T],</span>
|
||||
<span class="sd"> hammer[T], knife[T], cauldron[T]</span>
|
||||
|
||||
<span class="sd"> # recipes for making a sword</span>
|
||||
|
||||
<span class="sd"> pig iron = iron ore + 2xcoal + blast furnace[T]</span>
|
||||
<span class="sd"> crucible_steel = pig iron + ash + sand + 2xcoal + crucible[T]</span>
|
||||
<span class="sd"> sword blade = crucible steel + hammer[T] + anvil[T] + furnace[T]</span>
|
||||
<span class="sd"> sword pommel = crucible steel + hammer[T] + anvil[T] + furnace[T]</span>
|
||||
<span class="sd"> sword guard = crucible steel + hammer[T] + anvil[T] + furnace[T]</span>
|
||||
|
||||
<span class="sd"> rawhide = fur + knife[T]</span>
|
||||
<span class="sd"> oak bark + cleaned oak wood = oak wood + knife[T]</span>
|
||||
<span class="sd"> leather = rawhide + oak bark + water + cauldron[T]</span>
|
||||
|
||||
<span class="sd"> sword handle = cleaned oak wood + knife[T]</span>
|
||||
|
||||
<span class="sd"> sword = sword blade + sword guard + sword pommel</span>
|
||||
<span class="sd"> + sword handle + leather + knife[T] + hammer[T] + furnace[T]</span>
|
||||
|
||||
<span class="sd">----</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">random</span>
|
||||
<span class="kn">from</span> <span class="nn">.crafting</span> <span class="kn">import</span> <span class="n">CraftingRecipe</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="PigIronRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.example_recipes.html#evennia.contrib.crafting.example_recipes.PigIronRecipe">[docs]</a><span class="k">class</span> <span class="nc">PigIronRecipe</span><span class="p">(</span><span class="n">CraftingRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Pig iron is a high-carbon result of melting iron in a blast furnace.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"pig iron"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"blast furnace"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"iron ore"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Pig Iron ingot"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"An ingot of crude pig iron."</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"pig iron"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="CrucibleSteelRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.example_recipes.html#evennia.contrib.crafting.example_recipes.CrucibleSteelRecipe">[docs]</a><span class="k">class</span> <span class="nc">CrucibleSteelRecipe</span><span class="p">(</span><span class="n">CraftingRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Mixing pig iron with impurities like ash and sand and melting it in a</span>
|
||||
<span class="sd"> crucible produces a medieval level of steel (like damascus steel).</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"crucible steel"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"crucible"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"pig iron"</span><span class="p">,</span> <span class="s2">"ash"</span><span class="p">,</span> <span class="s2">"sand"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Crucible steel ingot"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"An ingot of multi-colored crucible steel."</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"crucible steel"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">_SwordSmithingBaseRecipe</span><span class="p">(</span><span class="n">CraftingRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A parent for all metallurgy sword-creation recipes. Those have a chance to</span>
|
||||
<span class="sd"> failure but since steel is not lost in the process you can always try</span>
|
||||
<span class="sd"> again.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">success_message</span> <span class="o">=</span> <span class="s2">"Your smithing work bears fruit and you craft </span><span class="si">{outputs}</span><span class="s2">!"</span>
|
||||
<span class="n">failed_message</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s2">"You work and work but you are not happy with the result. You need to start over."</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">do_craft</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Making a sword blade takes skill. Here we emulate this by introducing a</span>
|
||||
<span class="sd"> random chance of failure (in a real game this could be a skill check</span>
|
||||
<span class="sd"> against a skill found on `self.crafter`). In this case you can always</span>
|
||||
<span class="sd"> start over since steel is not lost but can be re-smelted again for</span>
|
||||
<span class="sd"> another try.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> validated_inputs (list): all consumables/tools being used.</span>
|
||||
<span class="sd"> **kwargs: any extra kwargs passed during crafting.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> any: The result of the craft, or None if a failure.</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> Depending on if we return a crafting result from this</span>
|
||||
<span class="sd"> method or not, `success_message` or `failure_message`</span>
|
||||
<span class="sd"> will be echoed to the crafter.</span>
|
||||
|
||||
<span class="sd"> (for more control we could also message directly and raise</span>
|
||||
<span class="sd"> crafting.CraftingError to abort craft process on failure).</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span> <span class="o"><</span> <span class="mf">0.8</span><span class="p">:</span>
|
||||
<span class="c1"># 80% chance of success. This will spawn the sword and show</span>
|
||||
<span class="c1"># success-message.</span>
|
||||
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">do_craft</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># fail and show failed message</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SwordBladeRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.example_recipes.html#evennia.contrib.crafting.example_recipes.SwordBladeRecipe">[docs]</a><span class="k">class</span> <span class="nc">SwordBladeRecipe</span><span class="p">(</span><span class="n">_SwordSmithingBaseRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A [sword]blade requires hammering the steel out into shape using heat and</span>
|
||||
<span class="sd"> force. This also includes the tang, which is the base for the hilt (the</span>
|
||||
<span class="sd"> part of the sword you hold on to).</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"sword blade"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"hammer"</span><span class="p">,</span> <span class="s2">"anvil"</span><span class="p">,</span> <span class="s2">"furnace"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"crucible steel"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Sword blade"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"A long blade that may one day become a sword."</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"sword blade"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SwordPommelRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.example_recipes.html#evennia.contrib.crafting.example_recipes.SwordPommelRecipe">[docs]</a><span class="k">class</span> <span class="nc">SwordPommelRecipe</span><span class="p">(</span><span class="n">_SwordSmithingBaseRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> The pommel is the 'button' or 'ball' etc the end of the sword hilt, holding</span>
|
||||
<span class="sd"> it together.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"sword pommel"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"hammer"</span><span class="p">,</span> <span class="s2">"anvil"</span><span class="p">,</span> <span class="s2">"furnace"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"crucible steel"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Sword pommel"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"The pommel for a future sword."</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"sword pommel"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SwordGuardRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.example_recipes.html#evennia.contrib.crafting.example_recipes.SwordGuardRecipe">[docs]</a><span class="k">class</span> <span class="nc">SwordGuardRecipe</span><span class="p">(</span><span class="n">_SwordSmithingBaseRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> The guard stops the hand from accidentally sliding off the hilt onto the</span>
|
||||
<span class="sd"> sword's blade and also protects the hand when parrying.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"sword guard"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"hammer"</span><span class="p">,</span> <span class="s2">"anvil"</span><span class="p">,</span> <span class="s2">"furnace"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"crucible steel"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Sword guard"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"The cross-guard for a future sword."</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"sword guard"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="RawhideRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.example_recipes.html#evennia.contrib.crafting.example_recipes.RawhideRecipe">[docs]</a><span class="k">class</span> <span class="nc">RawhideRecipe</span><span class="p">(</span><span class="n">CraftingRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Rawhide is animal skin cleaned and stripped of hair.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"rawhide"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"knife"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"fur"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Rawhide"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"Animal skin, cleaned and with hair removed."</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"rawhide"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="OakBarkRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.example_recipes.html#evennia.contrib.crafting.example_recipes.OakBarkRecipe">[docs]</a><span class="k">class</span> <span class="nc">OakBarkRecipe</span><span class="p">(</span><span class="n">CraftingRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> The actual thing needed for tanning leather is Tannin, but we skip</span>
|
||||
<span class="sd"> the step of refining tannin from the bark and use the bark as-is.</span>
|
||||
|
||||
<span class="sd"> This produces two outputs - the bark and the cleaned wood.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"oak bark"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"knife"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"oak wood"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Oak bark"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"Bark of oak, stripped from the core wood."</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"oak bark"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Oak Wood (cleaned)"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"Oakwood core, stripped of bark."</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"cleaned oak wood"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="LeatherRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.example_recipes.html#evennia.contrib.crafting.example_recipes.LeatherRecipe">[docs]</a><span class="k">class</span> <span class="nc">LeatherRecipe</span><span class="p">(</span><span class="n">CraftingRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Leather is produced by tanning rawhide in a process traditionally involving</span>
|
||||
<span class="sd"> the chemical Tannin. Here we abbreviate this process a bit. Maybe a</span>
|
||||
<span class="sd"> 'tanning rack' tool should be required too ...</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"leather"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"cauldron"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"rawhide"</span><span class="p">,</span> <span class="s2">"oak bark"</span><span class="p">,</span> <span class="s2">"water"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Piece of Leather"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"A piece of leather."</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"leather"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SwordHandleRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.example_recipes.html#evennia.contrib.crafting.example_recipes.SwordHandleRecipe">[docs]</a><span class="k">class</span> <span class="nc">SwordHandleRecipe</span><span class="p">(</span><span class="n">CraftingRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> The handle is the part of the hilt between the guard and the pommel where</span>
|
||||
<span class="sd"> you hold the sword. It consists of wooden pieces around the steel tang. It</span>
|
||||
<span class="sd"> is wrapped in leather, but that will be added at the end.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"sword handle"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"knife"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"cleaned oak wood"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Sword handle"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"Two pieces of wood to be be fitted onto a sword's tang as its handle."</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"sword handle"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="SwordRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.example_recipes.html#evennia.contrib.crafting.example_recipes.SwordRecipe">[docs]</a><span class="k">class</span> <span class="nc">SwordRecipe</span><span class="p">(</span><span class="n">_SwordSmithingBaseRecipe</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A finished sword consists of a Blade ending in a non-sharp part called the</span>
|
||||
<span class="sd"> Tang. The cross Guard is put over the tang against the edge of the blade.</span>
|
||||
<span class="sd"> The Handle is put over the tang to give something easier to hold. The</span>
|
||||
<span class="sd"> Pommel locks everything in place. The handle is wrapped in leather</span>
|
||||
<span class="sd"> strips for better grip.</span>
|
||||
|
||||
<span class="sd"> This covers only a single 'sword' type.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"sword"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"hammer"</span><span class="p">,</span> <span class="s2">"furnace"</span><span class="p">,</span> <span class="s2">"knife"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"sword blade"</span><span class="p">,</span> <span class="s2">"sword guard"</span><span class="p">,</span> <span class="s2">"sword pommel"</span><span class="p">,</span> <span class="s2">"sword handle"</span><span class="p">,</span> <span class="s2">"leather"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Sword"</span><span class="p">,</span>
|
||||
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"A bladed weapon."</span><span class="p">,</span>
|
||||
<span class="c1"># setting the tag as well - who knows if one can make something from this too!</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"sword"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">}</span>
|
||||
<span class="c1"># obviously there would be other properties of a 'sword' added here</span>
|
||||
<span class="c1"># too, depending on how combat works in the your game!</span>
|
||||
<span class="p">]</span>
|
||||
<span class="c1"># this requires more precision</span>
|
||||
<span class="n">exact_consumable_order</span> <span class="o">=</span> <span class="kc">True</span></div>
|
||||
</pre></div>
|
||||
|
||||
<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>
|
||||
<h3>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="example_recipes.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../../../../0.9.5/index.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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.crafting.example_recipes</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,783 +0,0 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>evennia.contrib.crafting.tests — Evennia 1.0-dev 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>
|
||||
<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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.crafting.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for evennia.contrib.crafting.tests</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">Unit tests for the crafting system contrib.</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">unittest</span> <span class="kn">import</span> <span class="n">mock</span>
|
||||
<span class="kn">from</span> <span class="nn">anything</span> <span class="kn">import</span> <span class="n">Something</span>
|
||||
<span class="kn">from</span> <span class="nn">django.test</span> <span class="kn">import</span> <span class="n">override_settings</span>
|
||||
<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="kn">import</span> <span class="n">ObjectDoesNotExist</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">CommandTest</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">TestCase</span><span class="p">,</span> <span class="n">EvenniaTest</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_object</span>
|
||||
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">crafting</span><span class="p">,</span> <span class="n">example_recipes</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TestCraftUtils"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftUtils">[docs]</a><span class="k">class</span> <span class="nc">TestCraftUtils</span><span class="p">(</span><span class="n">TestCase</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test helper utils for crafting.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">maxDiff</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftUtils.test_load_recipes"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftUtils.test_load_recipes">[docs]</a> <span class="nd">@override_settings</span><span class="p">(</span><span class="n">CRAFT_RECIPE_MODULES</span><span class="o">=</span><span class="p">[])</span>
|
||||
<span class="k">def</span> <span class="nf">test_load_recipes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""This should only load the example module now"""</span>
|
||||
|
||||
<span class="n">crafting</span><span class="o">.</span><span class="n">_load_recipes</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
|
||||
<span class="n">crafting</span><span class="o">.</span><span class="n">_RECIPE_CLASSES</span><span class="p">,</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"crucible steel"</span><span class="p">:</span> <span class="n">example_recipes</span><span class="o">.</span><span class="n">CrucibleSteelRecipe</span><span class="p">,</span>
|
||||
<span class="s2">"leather"</span><span class="p">:</span> <span class="n">example_recipes</span><span class="o">.</span><span class="n">LeatherRecipe</span><span class="p">,</span>
|
||||
<span class="s2">"oak bark"</span><span class="p">:</span> <span class="n">example_recipes</span><span class="o">.</span><span class="n">OakBarkRecipe</span><span class="p">,</span>
|
||||
<span class="s2">"pig iron"</span><span class="p">:</span> <span class="n">example_recipes</span><span class="o">.</span><span class="n">PigIronRecipe</span><span class="p">,</span>
|
||||
<span class="s2">"rawhide"</span><span class="p">:</span> <span class="n">example_recipes</span><span class="o">.</span><span class="n">RawhideRecipe</span><span class="p">,</span>
|
||||
<span class="s2">"sword"</span><span class="p">:</span> <span class="n">example_recipes</span><span class="o">.</span><span class="n">SwordRecipe</span><span class="p">,</span>
|
||||
<span class="s2">"sword blade"</span><span class="p">:</span> <span class="n">example_recipes</span><span class="o">.</span><span class="n">SwordBladeRecipe</span><span class="p">,</span>
|
||||
<span class="s2">"sword guard"</span><span class="p">:</span> <span class="n">example_recipes</span><span class="o">.</span><span class="n">SwordGuardRecipe</span><span class="p">,</span>
|
||||
<span class="s2">"sword handle"</span><span class="p">:</span> <span class="n">example_recipes</span><span class="o">.</span><span class="n">SwordHandleRecipe</span><span class="p">,</span>
|
||||
<span class="s2">"sword pommel"</span><span class="p">:</span> <span class="n">example_recipes</span><span class="o">.</span><span class="n">SwordPommelRecipe</span><span class="p">,</span>
|
||||
<span class="p">},</span>
|
||||
<span class="p">)</span></div></div>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">_TestMaterial</span><span class="p">:</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipeBase"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipeBase">[docs]</a><span class="k">class</span> <span class="nc">TestCraftingRecipeBase</span><span class="p">(</span><span class="n">TestCase</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the parent recipe class.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipeBase.setUp"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipeBase.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">inp1</span> <span class="o">=</span> <span class="n">_TestMaterial</span><span class="p">(</span><span class="s2">"test1"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">inp2</span> <span class="o">=</span> <span class="n">_TestMaterial</span><span class="p">(</span><span class="s2">"test2"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">inp3</span> <span class="o">=</span> <span class="n">_TestMaterial</span><span class="p">(</span><span class="s2">"test3"</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"kw1"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">"kw2"</span><span class="p">:</span> <span class="mi">2</span><span class="p">}</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span> <span class="o">=</span> <span class="n">crafting</span><span class="o">.</span><span class="n">CraftingRecipeBase</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">inp1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">inp2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">inp3</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipeBase.test_msg"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipeBase.test_msg">[docs]</a> <span class="k">def</span> <span class="nf">test_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Test messaging to crafter"""</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"message"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="s2">"message"</span><span class="p">,</span> <span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">})</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipeBase.test_pre_craft"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipeBase.test_pre_craft">[docs]</a> <span class="k">def</span> <span class="nf">test_pre_craft</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Test validating hook"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">pre_craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">validated_inputs</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">inp1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">inp2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">inp3</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipeBase.test_pre_craft_fail"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipeBase.test_pre_craft_fail">[docs]</a> <span class="k">def</span> <span class="nf">test_pre_craft_fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Should rase error if validation fails"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">allow_craft</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="n">crafting</span><span class="o">.</span><span class="n">CraftingValidationError</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">pre_craft</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipeBase.test_craft_hook__succeed"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipeBase.test_craft_hook__succeed">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_hook__succeed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Test craft hook, the main access method."""</span>
|
||||
|
||||
<span class="n">expected_result</span> <span class="o">=</span> <span class="n">_TestMaterial</span><span class="p">(</span><span class="s2">"test_result"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">do_craft</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">(</span><span class="n">return_value</span><span class="o">=</span><span class="n">expected_result</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">allow_craft</span><span class="p">)</span>
|
||||
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># check result</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">expected_result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">do_craft</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="n">kw1</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">kw2</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># since allow_reuse is False, this usage should now be turned off</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">allow_craft</span><span class="p">)</span>
|
||||
<span class="c1"># trying to re-run again should fail since rerun is False</span>
|
||||
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="n">crafting</span><span class="o">.</span><span class="n">CraftingError</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipeBase.test_craft_hook__fail"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipeBase.test_craft_hook__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_hook__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Test failing the call"""</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">do_craft</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">(</span><span class="n">return_value</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># trigger exception</span>
|
||||
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="n">crafting</span><span class="o">.</span><span class="n">CraftingError</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">(</span><span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># reset and try again without exception</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">allow_craft</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div></div>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">_MockRecipe</span><span class="p">(</span><span class="n">crafting</span><span class="o">.</span><span class="n">CraftingRecipe</span><span class="p">):</span>
|
||||
<span class="n">name</span> <span class="o">=</span> <span class="s2">"testrecipe"</span>
|
||||
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"tool1"</span><span class="p">,</span> <span class="s2">"tool2"</span><span class="p">]</span>
|
||||
<span class="n">consumable_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"cons1"</span><span class="p">,</span> <span class="s2">"cons2"</span><span class="p">,</span> <span class="s2">"cons3"</span><span class="p">]</span>
|
||||
<span class="n">output_prototypes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Result1"</span><span class="p">,</span>
|
||||
<span class="s2">"prototype_key"</span><span class="p">:</span> <span class="s2">"resultprot"</span><span class="p">,</span>
|
||||
<span class="s2">"tags"</span><span class="p">:</span> <span class="p">[(</span><span class="s2">"result1"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe">[docs]</a><span class="nd">@override_settings</span><span class="p">(</span><span class="n">CRAFT_RECIPE_MODULES</span><span class="o">=</span><span class="p">[])</span>
|
||||
<span class="k">class</span> <span class="nc">TestCraftingRecipe</span><span class="p">(</span><span class="n">TestCase</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the CraftingRecipe class with one recipe</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">maxDiff</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.setUp"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">tool1</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"tool1"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"tool1"</span><span class="p">,</span> <span class="s2">"crafting_tool"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">tool2</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"tool2"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"tool2"</span><span class="p">,</span> <span class="s2">"crafting_tool"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cons1</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"cons1"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"cons1"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cons2</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"cons2"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"cons2"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cons3</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"cons3"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"cons3"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.tearDown"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="n">ObjectDoesNotExist</span><span class="p">:</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_error_format"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_error_format">[docs]</a> <span class="k">def</span> <span class="nf">test_error_format</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Test the automatic error formatter """</span>
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">msg</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{missing}</span><span class="s2">,</span><span class="si">{tools}</span><span class="s2">,</span><span class="si">{consumables}</span><span class="s2">,</span><span class="si">{inputs}</span><span class="s2">,</span><span class="si">{outputs}</span><span class="s2">"</span> <span class="s2">"</span><span class="si">{i0}</span><span class="s2">,</span><span class="si">{i1}</span><span class="s2">,</span><span class="si">{o0}</span><span class="s2">"</span>
|
||||
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"missing"</span><span class="p">:</span> <span class="s2">"foo"</span><span class="p">,</span>
|
||||
<span class="s2">"tools"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"bar"</span><span class="p">,</span> <span class="s2">"bar2"</span><span class="p">,</span> <span class="s2">"bar3"</span><span class="p">],</span>
|
||||
<span class="s2">"consumables"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"cons1"</span><span class="p">,</span> <span class="s2">"cons2"</span><span class="p">],</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="n">expected</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"missing"</span><span class="p">:</span> <span class="s2">"foo"</span><span class="p">,</span>
|
||||
<span class="s2">"i0"</span><span class="p">:</span> <span class="s2">"cons1"</span><span class="p">,</span>
|
||||
<span class="s2">"i1"</span><span class="p">:</span> <span class="s2">"cons2"</span><span class="p">,</span>
|
||||
<span class="s2">"i2"</span><span class="p">:</span> <span class="s2">"cons3"</span><span class="p">,</span>
|
||||
<span class="s2">"o0"</span><span class="p">:</span> <span class="s2">"Result1"</span><span class="p">,</span>
|
||||
<span class="s2">"tools"</span><span class="p">:</span> <span class="s2">"bar, bar2 and bar3"</span><span class="p">,</span>
|
||||
<span class="s2">"consumables"</span><span class="p">:</span> <span class="s2">"cons1 and cons2"</span><span class="p">,</span>
|
||||
<span class="s2">"inputs"</span><span class="p">:</span> <span class="s2">"cons1, cons2 and cons3"</span><span class="p">,</span>
|
||||
<span class="s2">"outputs"</span><span class="p">:</span> <span class="s2">"Result1"</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">_format_message</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">msg</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">expected</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft__success"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft__success">[docs]</a> <span class="k">def</span> <span class="nf">test_craft__success</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Test to create a result from the recipe"""</span>
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="s2">"Result1"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span> <span class="p">[</span><span class="s2">"result1"</span><span class="p">,</span> <span class="s2">"resultprot"</span><span class="p">])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">success_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">),</span> <span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">}</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are gone</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_seed__succcess"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_seed__succcess">[docs]</a> <span class="k">def</span> <span class="nf">test_seed__succcess</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Test seed helper classmethod"""</span>
|
||||
|
||||
<span class="c1"># needed for other dbs to pass seed</span>
|
||||
<span class="n">homeroom</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"HomeRoom"</span><span class="p">,</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># call classmethod directly</span>
|
||||
<span class="k">with</span> <span class="n">override_settings</span><span class="p">(</span><span class="n">DEFAULT_HOME</span><span class="o">=</span><span class="sa">f</span><span class="s2">"#</span><span class="si">{</span><span class="n">homeroom</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">"</span><span class="p">):</span>
|
||||
<span class="n">tools</span><span class="p">,</span> <span class="n">consumables</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="o">.</span><span class="n">seed</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># this should be a normal successful crafting</span>
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="o">*</span><span class="p">(</span><span class="n">tools</span> <span class="o">+</span> <span class="n">consumables</span><span class="p">))</span>
|
||||
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="s2">"Result1"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span> <span class="p">[</span><span class="s2">"result1"</span><span class="p">,</span> <span class="s2">"resultprot"</span><span class="p">])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">success_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">),</span> <span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">}</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are gone</span>
|
||||
<span class="k">for</span> <span class="n">cons</span> <span class="ow">in</span> <span class="n">consumables</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">cons</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="k">for</span> <span class="n">tool</span> <span class="ow">in</span> <span class="n">tools</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">tool</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_missing_tool__fail"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft_missing_tool__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_missing_tool__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Fail craft by missing tool2"""</span>
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">error_tool_missing_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">,</span> <span class="n">missing</span><span class="o">=</span><span class="s2">"tool2"</span><span class="p">),</span>
|
||||
<span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are still there</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_missing_cons__fail"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft_missing_cons__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_missing_cons__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Fail craft by missing cons3"""</span>
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">error_consumable_missing_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">,</span> <span class="n">missing</span><span class="o">=</span><span class="s2">"cons3"</span><span class="p">),</span>
|
||||
<span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are still there</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_missing_cons__always_consume__fail"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft_missing_cons__always_consume__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_missing_cons__always_consume__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Fail craft by missing cons3, with always-consume flag"""</span>
|
||||
|
||||
<span class="n">cons4</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"cons4"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"cons4"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="n">cons4</span><span class="p">)</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">consume_on_fail</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">error_consumable_missing_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">,</span> <span class="n">missing</span><span class="o">=</span><span class="s2">"cons3"</span><span class="p">),</span>
|
||||
<span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are deleted even though we failed</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># the extra should also be gone</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">cons4</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># but cons3 should be fine since it was not included</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain as normal</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_wrong_tool__fail"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft_wrong_tool__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_wrong_tool__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Fail craft by including a wrong tool"""</span>
|
||||
|
||||
<span class="n">wrong</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"wrong"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"wrongtool"</span><span class="p">,</span> <span class="s2">"crafting_tool"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="n">wrong</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">error_tool_excess_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">,</span> <span class="n">excess</span><span class="o">=</span><span class="n">wrong</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">)</span>
|
||||
<span class="p">),</span>
|
||||
<span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># make sure consumables are still there</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_tool_excess__fail"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft_tool_excess__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_tool_excess__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Fail by too many consumables"""</span>
|
||||
|
||||
<span class="c1"># note that this is a valid tag!</span>
|
||||
<span class="n">tool3</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"tool3"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"tool2"</span><span class="p">,</span> <span class="s2">"crafting_tool"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="p">,</span> <span class="n">tool3</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">error_tool_excess_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">,</span> <span class="n">excess</span><span class="o">=</span><span class="n">tool3</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">)</span>
|
||||
<span class="p">),</span>
|
||||
<span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are still there</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">tool3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_cons_excess__fail"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft_cons_excess__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_cons_excess__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Fail by too many consumables"""</span>
|
||||
|
||||
<span class="c1"># note that this is a valid tag!</span>
|
||||
<span class="n">cons4</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"cons4"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"cons3"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="p">,</span> <span class="n">cons4</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">error_consumable_excess_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">,</span> <span class="n">excess</span><span class="o">=</span><span class="n">cons4</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">)</span>
|
||||
<span class="p">),</span>
|
||||
<span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are still there</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">cons4</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_tool_excess__sucess"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft_tool_excess__sucess">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_tool_excess__sucess</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Allow too many consumables"""</span>
|
||||
|
||||
<span class="n">tool3</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"tool3"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"tool2"</span><span class="p">,</span> <span class="s2">"crafting_tool"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="p">,</span> <span class="n">tool3</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">exact_tools</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">success_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">),</span> <span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">}</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are gone</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_cons_excess__sucess"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft_cons_excess__sucess">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_cons_excess__sucess</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Allow too many consumables"""</span>
|
||||
|
||||
<span class="n">cons4</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"cons4"</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="s2">"cons3"</span><span class="p">,</span> <span class="s2">"crafting_material"</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="p">,</span> <span class="n">cons4</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">exact_consumables</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">success_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">),</span> <span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">}</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are gone</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_tool_order__fail"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft_tool_order__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_tool_order__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Strict tool-order recipe fail """</span>
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">exact_tool_order</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">error_tool_order_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">,</span> <span class="n">missing</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">)</span>
|
||||
<span class="p">),</span>
|
||||
<span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are still there</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_cons_order__fail"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftingRecipe.test_craft_cons_order__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_cons_order__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Strict tool-order recipe fail """</span>
|
||||
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">exact_consumable_order</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">craft</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
|
||||
<span class="n">recipe</span><span class="o">.</span><span class="n">error_consumable_order_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">,</span> <span class="n">missing</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">)</span>
|
||||
<span class="p">),</span>
|
||||
<span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"crafting"</span><span class="p">},</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure consumables are still there</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="c1"># make sure tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TestCraftSword"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftSword">[docs]</a><span class="k">class</span> <span class="nc">TestCraftSword</span><span class="p">(</span><span class="n">TestCase</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the `craft` function by crafting the example sword.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftSword.setUp"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftSword.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftSword.test_craft_sword"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftSword.test_craft_sword">[docs]</a> <span class="nd">@override_settings</span><span class="p">(</span><span class="n">CRAFT_RECIPE_MODULES</span><span class="o">=</span><span class="p">[],</span> <span class="n">DEFAULT_HOME</span><span class="o">=</span><span class="s2">"#999999"</span><span class="p">)</span>
|
||||
<span class="nd">@mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s2">"evennia.contrib.crafting.example_recipes.random"</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">test_craft_sword</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mockrandom</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Craft example sword. For the test, every crafting works.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># make sure every craft succeeds</span>
|
||||
<span class="n">mockrandom</span><span class="o">.</span><span class="n">random</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">(</span><span class="n">return_value</span><span class="o">=</span><span class="mf">0.2</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_co</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">tagkey</span><span class="p">,</span> <span class="n">is_tool</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="n">tagcat</span> <span class="o">=</span> <span class="s2">"crafting_tool"</span> <span class="k">if</span> <span class="n">is_tool</span> <span class="k">else</span> <span class="s2">"crafting_material"</span>
|
||||
<span class="k">return</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">[(</span><span class="n">tagkey</span><span class="p">,</span> <span class="n">tagcat</span><span class="p">)],</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_craft</span><span class="p">(</span><span class="n">recipe_name</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">):</span>
|
||||
<span class="sd">"""shortcut to shorten and return only one element"""</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">crafting</span><span class="o">.</span><span class="n">craft</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="n">recipe_name</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">result</span>
|
||||
|
||||
<span class="c1"># generate base materials</span>
|
||||
<span class="n">iron_ore1</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Iron ore ingot"</span><span class="p">,</span> <span class="s2">"iron ore"</span><span class="p">)</span>
|
||||
<span class="n">iron_ore2</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Iron ore ingot"</span><span class="p">,</span> <span class="s2">"iron ore"</span><span class="p">)</span>
|
||||
<span class="n">iron_ore3</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Iron ore ingot"</span><span class="p">,</span> <span class="s2">"iron ore"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">ash1</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of Ash"</span><span class="p">,</span> <span class="s2">"ash"</span><span class="p">)</span>
|
||||
<span class="n">ash2</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of Ash"</span><span class="p">,</span> <span class="s2">"ash"</span><span class="p">)</span>
|
||||
<span class="n">ash3</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of Ash"</span><span class="p">,</span> <span class="s2">"ash"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">sand1</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of sand"</span><span class="p">,</span> <span class="s2">"sand"</span><span class="p">)</span>
|
||||
<span class="n">sand2</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of sand"</span><span class="p">,</span> <span class="s2">"sand"</span><span class="p">)</span>
|
||||
<span class="n">sand3</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of sand"</span><span class="p">,</span> <span class="s2">"sand"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">coal01</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal02</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal03</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal04</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal05</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal06</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal07</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal08</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal09</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal10</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal11</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
<span class="n">coal12</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of coal"</span><span class="p">,</span> <span class="s2">"coal"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">oak_wood</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Pile of oak wood"</span><span class="p">,</span> <span class="s2">"oak wood"</span><span class="p">)</span>
|
||||
<span class="n">water</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Bucket of water"</span><span class="p">,</span> <span class="s2">"water"</span><span class="p">)</span>
|
||||
<span class="n">fur</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Bundle of Animal fur"</span><span class="p">,</span> <span class="s2">"fur"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># tools</span>
|
||||
<span class="n">blast_furnace</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Blast furnace"</span><span class="p">,</span> <span class="s2">"blast furnace"</span><span class="p">,</span> <span class="n">is_tool</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">furnace</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Smithing furnace"</span><span class="p">,</span> <span class="s2">"furnace"</span><span class="p">,</span> <span class="n">is_tool</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">crucible</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Smelting crucible"</span><span class="p">,</span> <span class="s2">"crucible"</span><span class="p">,</span> <span class="n">is_tool</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">anvil</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Smithing anvil"</span><span class="p">,</span> <span class="s2">"anvil"</span><span class="p">,</span> <span class="n">is_tool</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">hammer</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Smithing hammer"</span><span class="p">,</span> <span class="s2">"hammer"</span><span class="p">,</span> <span class="n">is_tool</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">knife</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Working knife"</span><span class="p">,</span> <span class="s2">"knife"</span><span class="p">,</span> <span class="n">is_tool</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">cauldron</span> <span class="o">=</span> <span class="n">_co</span><span class="p">(</span><span class="s2">"Cauldron"</span><span class="p">,</span> <span class="s2">"cauldron"</span><span class="p">,</span> <span class="n">is_tool</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># making pig iron</span>
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">iron_ore1</span><span class="p">,</span> <span class="n">coal01</span><span class="p">,</span> <span class="n">coal02</span><span class="p">,</span> <span class="n">blast_furnace</span><span class="p">]</span>
|
||||
<span class="n">pig_iron1</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"pig iron"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">iron_ore2</span><span class="p">,</span> <span class="n">coal03</span><span class="p">,</span> <span class="n">coal04</span><span class="p">,</span> <span class="n">blast_furnace</span><span class="p">]</span>
|
||||
<span class="n">pig_iron2</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"pig iron"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">iron_ore3</span><span class="p">,</span> <span class="n">coal05</span><span class="p">,</span> <span class="n">coal06</span><span class="p">,</span> <span class="n">blast_furnace</span><span class="p">]</span>
|
||||
<span class="n">pig_iron3</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"pig iron"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># making crucible steel</span>
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">pig_iron1</span><span class="p">,</span> <span class="n">ash1</span><span class="p">,</span> <span class="n">sand1</span><span class="p">,</span> <span class="n">coal07</span><span class="p">,</span> <span class="n">coal08</span><span class="p">,</span> <span class="n">crucible</span><span class="p">]</span>
|
||||
<span class="n">crucible_steel1</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"crucible steel"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">pig_iron2</span><span class="p">,</span> <span class="n">ash2</span><span class="p">,</span> <span class="n">sand2</span><span class="p">,</span> <span class="n">coal09</span><span class="p">,</span> <span class="n">coal10</span><span class="p">,</span> <span class="n">crucible</span><span class="p">]</span>
|
||||
<span class="n">crucible_steel2</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"crucible steel"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">pig_iron3</span><span class="p">,</span> <span class="n">ash3</span><span class="p">,</span> <span class="n">sand3</span><span class="p">,</span> <span class="n">coal11</span><span class="p">,</span> <span class="n">coal12</span><span class="p">,</span> <span class="n">crucible</span><span class="p">]</span>
|
||||
<span class="n">crucible_steel3</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"crucible steel"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># smithing</span>
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">crucible_steel1</span><span class="p">,</span> <span class="n">hammer</span><span class="p">,</span> <span class="n">anvil</span><span class="p">,</span> <span class="n">furnace</span><span class="p">]</span>
|
||||
<span class="n">sword_blade</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"sword blade"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">crucible_steel2</span><span class="p">,</span> <span class="n">hammer</span><span class="p">,</span> <span class="n">anvil</span><span class="p">,</span> <span class="n">furnace</span><span class="p">]</span>
|
||||
<span class="n">sword_pommel</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"sword pommel"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">crucible_steel3</span><span class="p">,</span> <span class="n">hammer</span><span class="p">,</span> <span class="n">anvil</span><span class="p">,</span> <span class="n">furnace</span><span class="p">]</span>
|
||||
<span class="n">sword_guard</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"sword guard"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># stripping fur</span>
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">fur</span><span class="p">,</span> <span class="n">knife</span><span class="p">]</span>
|
||||
<span class="n">rawhide</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"rawhide"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># making bark (tannin) and cleaned wood</span>
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">oak_wood</span><span class="p">,</span> <span class="n">knife</span><span class="p">]</span>
|
||||
<span class="n">oak_bark</span><span class="p">,</span> <span class="n">cleaned_oak_wood</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"oak bark"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># leathermaking</span>
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">rawhide</span><span class="p">,</span> <span class="n">oak_bark</span><span class="p">,</span> <span class="n">water</span><span class="p">,</span> <span class="n">cauldron</span><span class="p">]</span>
|
||||
<span class="n">leather</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"leather"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># sword handle</span>
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">cleaned_oak_wood</span><span class="p">,</span> <span class="n">knife</span><span class="p">]</span>
|
||||
<span class="n">sword_handle</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"sword handle"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># sword (order matters)</span>
|
||||
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="n">sword_blade</span><span class="p">,</span>
|
||||
<span class="n">sword_guard</span><span class="p">,</span>
|
||||
<span class="n">sword_pommel</span><span class="p">,</span>
|
||||
<span class="n">sword_handle</span><span class="p">,</span>
|
||||
<span class="n">leather</span><span class="p">,</span>
|
||||
<span class="n">knife</span><span class="p">,</span>
|
||||
<span class="n">hammer</span><span class="p">,</span>
|
||||
<span class="n">furnace</span><span class="p">,</span>
|
||||
<span class="p">]</span>
|
||||
<span class="n">sword</span> <span class="o">=</span> <span class="n">_craft</span><span class="p">(</span><span class="s2">"sword"</span><span class="p">,</span> <span class="o">*</span><span class="n">inputs</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">sword</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="s2">"Sword"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure all materials and intermediaries are deleted</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">iron_ore1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">iron_ore2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">iron_ore3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">ash1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">ash2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">ash3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">sand1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">sand2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">sand3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal01</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal02</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal03</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal04</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal05</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal06</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal07</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal08</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal09</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal10</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal11</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">coal12</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">oak_wood</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">water</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">fur</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">pig_iron1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">pig_iron2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">pig_iron3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">crucible_steel1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">crucible_steel2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">crucible_steel3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">sword_blade</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">sword_pommel</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">sword_guard</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">rawhide</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">oak_bark</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">leather</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNone</span><span class="p">(</span><span class="n">sword_handle</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># make sure all tools remain</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">blast_furnace</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">furnace</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">crucible</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">anvil</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">hammer</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">knife</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="n">cauldron</span><span class="p">)</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TestCraftCommand"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftCommand">[docs]</a><span class="nd">@mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s2">"evennia.contrib.crafting.crafting._load_recipes"</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">())</span>
|
||||
<span class="nd">@mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s2">"evennia.contrib.crafting.crafting._RECIPE_CLASSES"</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="p">{</span><span class="s2">"testrecipe"</span><span class="p">:</span> <span class="n">_MockRecipe</span><span class="p">})</span>
|
||||
<span class="nd">@override_settings</span><span class="p">(</span><span class="n">CRAFT_RECIPE_MODULES</span><span class="o">=</span><span class="p">[],</span> <span class="n">DEFAULT_HOME</span><span class="o">=</span><span class="s2">"#999999"</span><span class="p">)</span>
|
||||
<span class="k">class</span> <span class="nc">TestCraftCommand</span><span class="p">(</span><span class="n">CommandTest</span><span class="p">):</span>
|
||||
<span class="sd">"""Test the crafting command"""</span>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftCommand.setUp"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftCommand.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
|
||||
|
||||
<span class="n">tools</span><span class="p">,</span> <span class="n">consumables</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span>
|
||||
<span class="n">tool_kwargs</span><span class="o">=</span><span class="p">{</span><span class="s2">"location"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">},</span> <span class="n">consumable_kwargs</span><span class="o">=</span><span class="p">{</span><span class="s2">"location"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">}</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftCommand.test_craft__success"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftCommand.test_craft__success">[docs]</a> <span class="k">def</span> <span class="nf">test_craft__success</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="s2">"Successfully craft using command"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
<span class="n">crafting</span><span class="o">.</span><span class="n">CmdCraft</span><span class="p">(),</span>
|
||||
<span class="s2">"testrecipe from cons1, cons2, cons3 using tool1, tool2"</span><span class="p">,</span>
|
||||
<span class="n">_MockRecipe</span><span class="o">.</span><span class="n">success_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">),</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftCommand.test_craft__notools__failure"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftCommand.test_craft__notools__failure">[docs]</a> <span class="k">def</span> <span class="nf">test_craft__notools__failure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="s2">"Craft fail no tools"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
<span class="n">crafting</span><span class="o">.</span><span class="n">CmdCraft</span><span class="p">(),</span>
|
||||
<span class="s2">"testrecipe from cons1, cons2, cons3"</span><span class="p">,</span>
|
||||
<span class="n">_MockRecipe</span><span class="o">.</span><span class="n">error_tool_missing_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">,</span> <span class="n">missing</span><span class="o">=</span><span class="s2">"tool1"</span><span class="p">),</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestCraftCommand.test_craft__nocons__failure"><a class="viewcode-back" href="../../../../api/evennia.contrib.crafting.tests.html#evennia.contrib.crafting.tests.TestCraftCommand.test_craft__nocons__failure">[docs]</a> <span class="k">def</span> <span class="nf">test_craft__nocons__failure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
<span class="n">crafting</span><span class="o">.</span><span class="n">CmdCraft</span><span class="p">(),</span>
|
||||
<span class="s2">"testrecipe using tool1, tool2"</span><span class="p">,</span>
|
||||
<span class="n">_MockRecipe</span><span class="o">.</span><span class="n">error_consumable_missing_message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outputs</span><span class="o">=</span><span class="s2">"Result1"</span><span class="p">,</span> <span class="n">missing</span><span class="o">=</span><span class="s2">"cons1"</span><span class="p">),</span>
|
||||
<span class="p">)</span></div></div>
|
||||
</pre></div>
|
||||
|
||||
<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>
|
||||
<h3>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="tests.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../../../../0.9.5/index.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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.crafting.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.custom_gametime</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -376,6 +375,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -394,7 +394,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.custom_gametime</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.dice</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -329,6 +328,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -347,7 +347,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.dice</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.email_login</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -430,6 +429,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -448,7 +448,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.email_login</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.commands</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -848,6 +847,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -866,7 +866,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.commands</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.menu</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -421,6 +420,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -439,7 +439,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.menu</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.objects</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -1148,6 +1147,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1166,7 +1166,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.objects</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.room</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -307,6 +306,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -325,7 +325,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.room</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.state</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -375,6 +374,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -393,7 +393,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.state</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -216,11 +215,12 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"What do you want to say?"</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">""</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">"Hello!"</span><span class="p">,</span> <span class="s2">"You say: Hello!"</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">""</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"What do you want to whisper?"</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">"whisper"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">"Hi."</span><span class="p">,</span> <span class="s2">"You whisper: (Hi.)"</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">"whisper"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">"Hi."</span><span class="p">,</span> <span class="s2">"You whisper: Hi."</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">"whisper"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">"Hi."</span><span class="p">,</span> <span class="s2">"You whisper: Hi."</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">"whisper"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">"HELLO!"</span><span class="p">,</span> <span class="s2">"You shout: HELLO!"</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">"shout"</span><span class="p">)</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">"Hello"</span><span class="p">,</span> <span class="s2">"You say: Hello"</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">"say"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">"Hello"</span><span class="p">,</span> <span class="s2">"You shout: HELLO"</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">"shout"</span><span class="p">)</span></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">"Hello to obj"</span><span class="p">,</span> <span class="s2">"You say: Hello"</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">"say"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">CmdSpeak</span><span class="p">(),</span> <span class="s2">"Hello to obj"</span><span class="p">,</span> <span class="s2">"You shout: Hello"</span><span class="p">,</span> <span class="n">cmdstring</span><span class="o">=</span><span class="s2">"shout"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestEvscaperoomCommands.test_emote"><a class="viewcode-back" href="../../../../api/evennia.contrib.evscaperoom.tests.html#evennia.contrib.evscaperoom.tests.TestEvscaperoomCommands.test_emote">[docs]</a> <span class="k">def</span> <span class="nf">test_emote</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
|
|
@ -313,7 +313,7 @@
|
|||
<span class="n">dirname</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="vm">__file__</span><span class="p">),</span> <span class="s2">"states"</span><span class="p">)</span>
|
||||
<span class="n">states</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">imp</span><span class="p">,</span> <span class="n">module</span><span class="p">,</span> <span class="n">ispackage</span> <span class="ow">in</span> <span class="n">pkgutil</span><span class="o">.</span><span class="n">walk_packages</span><span class="p">(</span>
|
||||
<span class="n">path</span><span class="o">=</span><span class="p">[</span><span class="n">dirname</span><span class="p">],</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"evennia.contrib.evscaperoom.states."</span>
|
||||
<span class="n">path</span><span class="o">=</span><span class="p">[</span><span class="n">dirname</span><span class="p">],</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"evscaperoom.states."</span>
|
||||
<span class="p">):</span>
|
||||
<span class="n">mod</span> <span class="o">=</span> <span class="n">mod_import</span><span class="p">(</span><span class="n">module</span><span class="p">)</span>
|
||||
<span class="n">states</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span>
|
||||
|
|
@ -372,6 +372,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -390,7 +391,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.utils</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -262,6 +261,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -280,7 +280,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.evscaperoom.utils</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.extended_room</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -660,6 +659,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -678,7 +678,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.extended_room</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.fieldfill</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -783,6 +782,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -801,7 +801,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.fieldfill</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.gendersub</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -224,6 +223,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -242,7 +242,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.gendersub</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.health_bar</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -187,6 +186,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -205,7 +205,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.health_bar</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.callbackhandler</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -292,6 +291,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -310,7 +310,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.callbackhandler</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.commands</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -650,6 +649,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -668,7 +668,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.commands</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.eventfuncs</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -158,6 +157,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -176,7 +176,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.eventfuncs</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.scripts</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -735,6 +734,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -753,7 +753,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.scripts</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -610,6 +609,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -628,7 +628,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.typeclasses</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -986,6 +985,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1004,7 +1004,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.typeclasses</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.utils</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -330,6 +329,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -348,7 +348,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.ingame_python.utils</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.mail</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -426,6 +425,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -444,7 +444,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.mail</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.mapbuilder</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -569,6 +568,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -587,7 +587,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.mapbuilder</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.menu_login</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -321,6 +320,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -339,7 +339,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.menu_login</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.multidescer</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -337,6 +336,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -355,7 +355,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.multidescer</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.puzzles</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -881,6 +880,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -899,7 +899,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.puzzles</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.random_string_generator</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -421,6 +420,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -439,7 +439,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.random_string_generator</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.rplanguage</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -102,46 +101,21 @@
|
|||
<span class="sd"> Below is an example of "elvish", using "rounder" vowels and sounds:</span>
|
||||
|
||||
<span class="sd"> ```python</span>
|
||||
<span class="sd"> # vowel/consonant grammar possibilities</span>
|
||||
<span class="sd"> grammar = ("v vv vvc vcc vvcc cvvc vccv vvccv vcvccv vcvcvcc vvccvvcc "</span>
|
||||
<span class="sd"> "vcvvccvvc cvcvvcvvcc vcvcvvccvcvv")</span>
|
||||
|
||||
<span class="sd"> # all not in this group is considered a consonant</span>
|
||||
<span class="sd"> phonemes = "oi oh ee ae aa eh ah ao aw ay er ey ow ia ih iy " \</span>
|
||||
<span class="sd"> "oy ua uh uw y p b t d f v t dh s z sh zh ch jh k " \</span>
|
||||
<span class="sd"> "ng g m n l r w",</span>
|
||||
<span class="sd"> vowels = "eaoiuy"</span>
|
||||
|
||||
<span class="sd"> # you need a representative of all of the minimal grammars here, so if a</span>
|
||||
<span class="sd"> # grammar v exists, there must be atleast one phoneme available with only</span>
|
||||
<span class="sd"> # one vowel in it</span>
|
||||
<span class="sd"> phonemes = ("oi oh ee ae aa eh ah ao aw ay er ey ow ia ih iy "</span>
|
||||
<span class="sd"> "oy ua uh uw y p b t d f v t dh s z sh zh ch jh k "</span>
|
||||
<span class="sd"> "ng g m n l r w")</span>
|
||||
|
||||
<span class="sd"> # how much the translation varies in length compared to the original. 0 is</span>
|
||||
<span class="sd"> # smallest, higher values give ever bigger randomness (including removing</span>
|
||||
<span class="sd"> # short words entirely)</span>
|
||||
<span class="sd"> grammar = "v vv vvc vcc vvcc cvvc vccv vvccv vcvccv vcvcvcc vvccvvcc " \</span>
|
||||
<span class="sd"> "vcvvccvvc cvcvvcvvcc vcvcvvccvcvv",</span>
|
||||
<span class="sd"> word_length_variance = 1</span>
|
||||
|
||||
<span class="sd"> # if a proper noun (word starting with capitalized letter) should be</span>
|
||||
<span class="sd"> # translated or not. If not (default) it means e.g. names will remain</span>
|
||||
<span class="sd"> # unchanged across languages.</span>
|
||||
<span class="sd"> noun_translate = False</span>
|
||||
|
||||
<span class="sd"> # all proper nouns (words starting with a capital letter not at the beginning</span>
|
||||
<span class="sd"> # of a sentence) can have either a postfix or -prefix added at all times</span>
|
||||
<span class="sd"> noun_postfix = "'la"</span>
|
||||
|
||||
<span class="sd"> # words in dict will always be translated this way. The 'auto_translations'</span>
|
||||
<span class="sd"> # is instead a list or filename to file with words to use to help build a</span>
|
||||
<span class="sd"> # bigger dictionary by creating random translations of each word in the</span>
|
||||
<span class="sd"> # list *once* and saving the result for subsequent use.</span>
|
||||
<span class="sd"> manual_translations = {"the":"y'e", "we":"uyi", "she":"semi", "he":"emi",</span>
|
||||
<span class="sd"> "you": "do", 'me':'mi','i':'me', 'be':"hy'e", 'and':'y'}</span>
|
||||
|
||||
<span class="sd"> rplanguage.add_language(key="elvish", phonemes=phonemes, grammar=grammar,</span>
|
||||
<span class="sd"> word_length_variance=word_length_variance,</span>
|
||||
<span class="sd"> noun_translate=noun_translate,</span>
|
||||
<span class="sd"> noun_postfix=noun_postfix, vowels=vowels,</span>
|
||||
<span class="sd"> manual_translations=manual_translations,</span>
|
||||
<span class="sd"> manual_translations=manual_translations</span>
|
||||
<span class="sd"> auto_translations="my_word_file.txt")</span>
|
||||
|
||||
<span class="sd"> ```</span>
|
||||
|
|
@ -184,8 +158,7 @@
|
|||
<span class="n">_RE_FLAGS</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">UNICODE</span>
|
||||
<span class="n">_RE_GRAMMAR</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"vv|cc|v|c"</span><span class="p">,</span> <span class="n">_RE_FLAGS</span><span class="p">)</span>
|
||||
<span class="n">_RE_WORD</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\w+"</span><span class="p">,</span> <span class="n">_RE_FLAGS</span><span class="p">)</span>
|
||||
<span class="c1"># superfluous chars, except ` ... `</span>
|
||||
<span class="n">_RE_EXTRA_CHARS</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\s+(?!... )(?=\W)|[,.?;](?!.. )(?=[,?;]|\s+[,.?;])"</span><span class="p">,</span> <span class="n">_RE_FLAGS</span><span class="p">)</span>
|
||||
<span class="n">_RE_EXTRA_CHARS</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\s+(?=\W)|[,.?;](?=[,.?;]|\s+[,.?;])"</span><span class="p">,</span> <span class="n">_RE_FLAGS</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="LanguageError"><a class="viewcode-back" href="../../../api/evennia.contrib.rplanguage.html#evennia.contrib.rplanguage.LanguageError">[docs]</a><span class="k">class</span> <span class="nc">LanguageError</span><span class="p">(</span><span class="ne">RuntimeError</span><span class="p">):</span>
|
||||
|
|
@ -266,13 +239,9 @@
|
|||
<span class="sd"> 0 means a minimal variance, higher variance may mean words</span>
|
||||
<span class="sd"> have wildly varying length; this strongly affects how the</span>
|
||||
<span class="sd"> language "looks".</span>
|
||||
<span class="sd"> noun_translate (bool, optional): If a proper noun should be translated or</span>
|
||||
<span class="sd"> not. By default they will not, allowing for e.g. the names of characters</span>
|
||||
<span class="sd"> to be understandable. A 'noun' is identified as a capitalized word</span>
|
||||
<span class="sd"> *not at the start of a sentence*. This simple metric means that names</span>
|
||||
<span class="sd"> starting a sentence always will be translated (- but hey, maybe</span>
|
||||
<span class="sd"> the fantasy language just never uses a noun at the beginning of</span>
|
||||
<span class="sd"> sentences, who knows?)</span>
|
||||
<span class="sd"> noun_translate (bool, optional): If a proper noun, identified as a</span>
|
||||
<span class="sd"> capitalized word, should be translated or not. By default they</span>
|
||||
<span class="sd"> will not, allowing for e.g. the names of characters to be understandable.</span>
|
||||
<span class="sd"> noun_prefix (str, optional): A prefix to go before every noun</span>
|
||||
<span class="sd"> in this language (if any).</span>
|
||||
<span class="sd"> noun_postfix (str, optuonal): A postfix to go after every noun</span>
|
||||
|
|
@ -317,7 +286,7 @@
|
|||
<span class="c1"># {"vv": ["ea", "oh", ...], ...}</span>
|
||||
<span class="n">grammar2phonemes</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">phoneme</span> <span class="ow">in</span> <span class="n">phonemes</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\W"</span><span class="p">,</span> <span class="n">phoneme</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">"\W"</span><span class="p">,</span> <span class="n">phoneme</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="n">LanguageError</span><span class="p">(</span><span class="s2">"The phoneme '</span><span class="si">%s</span><span class="s2">' contains an invalid character"</span> <span class="o">%</span> <span class="n">phoneme</span><span class="p">)</span>
|
||||
<span class="n">gram</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"v"</span> <span class="k">if</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">vowels</span> <span class="k">else</span> <span class="s2">"c"</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">phoneme</span><span class="p">])</span>
|
||||
<span class="n">grammar2phonemes</span><span class="p">[</span><span class="n">gram</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">phoneme</span><span class="p">)</span>
|
||||
|
|
@ -325,7 +294,7 @@
|
|||
<span class="c1"># allowed grammar are grouped by length</span>
|
||||
<span class="n">gramdict</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">gram</span> <span class="ow">in</span> <span class="n">grammar</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\W|(!=[cv])"</span><span class="p">,</span> <span class="n">gram</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">"\W|(!=[cv])"</span><span class="p">,</span> <span class="n">gram</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="n">LanguageError</span><span class="p">(</span>
|
||||
<span class="s2">"The grammar '</span><span class="si">%s</span><span class="s2">' is invalid (only 'c' and 'v' are allowed)"</span> <span class="o">%</span> <span class="n">gram</span>
|
||||
<span class="p">)</span>
|
||||
|
|
@ -352,13 +321,7 @@
|
|||
<span class="c1"># use the corresponding length</span>
|
||||
<span class="n">structure</span> <span class="o">=</span> <span class="n">choice</span><span class="p">(</span><span class="n">grammar</span><span class="p">[</span><span class="n">wlen</span><span class="p">])</span>
|
||||
<span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">_RE_GRAMMAR</span><span class="o">.</span><span class="n">finditer</span><span class="p">(</span><span class="n">structure</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">new_word</span> <span class="o">+=</span> <span class="n">choice</span><span class="p">(</span><span class="n">grammar2phonemes</span><span class="p">[</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">()])</span>
|
||||
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span>
|
||||
<span class="s2">"Could not find a matching phoneme for the grammar "</span>
|
||||
<span class="sa">f</span><span class="s2">"'</span><span class="si">{</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">()</span><span class="si">}</span><span class="s2">'. Make there is at least one phoneme matching this "</span>
|
||||
<span class="s2">"combination of consonants and vowels."</span><span class="p">)</span>
|
||||
<span class="n">new_word</span> <span class="o">+=</span> <span class="n">choice</span><span class="p">(</span><span class="n">grammar2phonemes</span><span class="p">[</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">()])</span>
|
||||
<span class="n">translation</span><span class="p">[</span><span class="n">word</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">new_word</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">manual_translations</span><span class="p">:</span>
|
||||
|
|
@ -397,11 +360,6 @@
|
|||
<span class="n">word</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">()</span>
|
||||
<span class="n">lword</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># find out what preceeded this word</span>
|
||||
<span class="n">wpos</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<span class="n">preceeding</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">string</span><span class="p">[:</span><span class="n">wpos</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="n">start_sentence</span> <span class="o">=</span> <span class="n">preceeding</span><span class="o">.</span><span class="n">endswith</span><span class="p">((</span><span class="s2">"."</span><span class="p">,</span> <span class="s2">"!"</span><span class="p">,</span> <span class="s2">"?"</span><span class="p">))</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">preceeding</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)</span> <span class="o"><=</span> <span class="bp">self</span><span class="o">.</span><span class="n">level</span><span class="p">:</span>
|
||||
<span class="c1"># below level. Don't translate</span>
|
||||
<span class="n">new_word</span> <span class="o">=</span> <span class="n">word</span>
|
||||
|
|
@ -411,6 +369,11 @@
|
|||
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_word</span><span class="p">:</span>
|
||||
<span class="c1"># no dictionary translation. Generate one</span>
|
||||
|
||||
<span class="c1"># find out what preceeded this word</span>
|
||||
<span class="n">wpos</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<span class="n">preceeding</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">string</span><span class="p">[:</span><span class="n">wpos</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="n">start_sentence</span> <span class="o">=</span> <span class="n">preceeding</span><span class="o">.</span><span class="n">endswith</span><span class="p">((</span><span class="s2">"."</span><span class="p">,</span> <span class="s2">"!"</span><span class="p">,</span> <span class="s2">"?"</span><span class="p">))</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">preceeding</span>
|
||||
|
||||
<span class="c1"># make up translation on the fly. Length can</span>
|
||||
<span class="c1"># vary from un-translated word.</span>
|
||||
<span class="n">wlen</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span>
|
||||
|
|
@ -445,30 +408,24 @@
|
|||
<span class="k">break</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">word</span><span class="o">.</span><span class="n">istitle</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">start_sentence</span><span class="p">:</span>
|
||||
<span class="c1"># this is a noun. We miss nouns at the start of</span>
|
||||
<span class="c1"># sentences this way, but it's as good as we can get</span>
|
||||
<span class="c1"># with this simple analysis. Maybe the fantasy language</span>
|
||||
<span class="c1"># just don't consider nouns at the beginning of</span>
|
||||
<span class="c1"># sentences, who knows?</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">language</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"noun_translate"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
|
||||
<span class="c1"># don't translate what we identify as proper nouns (names)</span>
|
||||
<span class="n">new_word</span> <span class="o">=</span> <span class="n">word</span>
|
||||
<span class="n">title_word</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">start_sentence</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">language</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"noun_translate"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
|
||||
<span class="c1"># don't translate what we identify as proper nouns (names)</span>
|
||||
<span class="n">title_word</span> <span class="o">=</span> <span class="n">word</span>
|
||||
<span class="k">elif</span> <span class="n">new_word</span><span class="p">:</span>
|
||||
<span class="n">title_word</span> <span class="o">=</span> <span class="n">new_word</span>
|
||||
|
||||
<span class="c1"># add noun prefix and/or postfix</span>
|
||||
<span class="n">new_word</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{prefix}{word}{postfix}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">language</span><span class="p">[</span><span class="s2">"noun_prefix"</span><span class="p">],</span>
|
||||
<span class="n">word</span><span class="o">=</span><span class="n">new_word</span><span class="o">.</span><span class="n">capitalize</span><span class="p">(),</span>
|
||||
<span class="n">postfix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">language</span><span class="p">[</span><span class="s2">"noun_postfix"</span><span class="p">],</span>
|
||||
<span class="k">if</span> <span class="n">title_word</span><span class="p">:</span>
|
||||
<span class="c1"># Regardless of if we translate or not, we will add the custom prefix/postfixes</span>
|
||||
<span class="n">new_word</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s%s%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">language</span><span class="p">[</span><span class="s2">"noun_prefix"</span><span class="p">],</span>
|
||||
<span class="n">title_word</span><span class="o">.</span><span class="n">capitalize</span><span class="p">(),</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">language</span><span class="p">[</span><span class="s2">"noun_postfix"</span><span class="p">],</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">word</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">word</span><span class="o">.</span><span class="n">isupper</span><span class="p">():</span>
|
||||
<span class="c1"># keep LOUD words loud also when translated</span>
|
||||
<span class="n">new_word</span> <span class="o">=</span> <span class="n">new_word</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">start_sentence</span><span class="p">:</span>
|
||||
<span class="n">new_word</span> <span class="o">=</span> <span class="n">new_word</span><span class="o">.</span><span class="n">capitalize</span><span class="p">()</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">new_word</span>
|
||||
|
||||
<div class="viewcode-block" id="LanguageHandler.translate"><a class="viewcode-back" href="../../../api/evennia.contrib.rplanguage.html#evennia.contrib.rplanguage.LanguageHandler.translate">[docs]</a> <span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">language</span><span class="o">=</span><span class="s2">"default"</span><span class="p">):</span>
|
||||
|
|
@ -575,18 +532,19 @@
|
|||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">_LANGUAGE_HANDLER</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"language_storage"</span><span class="p">,</span> <span class="p">{}))</span></div>
|
||||
|
||||
|
||||
<span class="c1"># -----------------------------------------------------------------------------</span>
|
||||
<span class="c1"># ------------------------------------------------------------</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Whisper obscuration</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># This obsucration table is designed by obscuring certain vowels first,</span>
|
||||
<span class="c1"># following by consonants that tend to be more audible over long distances,</span>
|
||||
<span class="c1"># like s. Finally it does non-auditory replacements, like exclamation marks and</span>
|
||||
<span class="c1"># capitalized letters (assumed to be spoken louder) that may still give a user</span>
|
||||
<span class="c1"># some idea of the sentence structure. Then the word lengths are also</span>
|
||||
<span class="c1"># obfuscated and finally the whisper length itself.</span>
|
||||
<span class="c1"># This obsucration table is designed by obscuring certain</span>
|
||||
<span class="c1"># vowels first, following by consonants that tend to be</span>
|
||||
<span class="c1"># more audible over long distances, like s. Finally it</span>
|
||||
<span class="c1"># does non-auditory replacements, like exclamation marks</span>
|
||||
<span class="c1"># and capitalized letters (assumed to be spoken louder) that may still</span>
|
||||
<span class="c1"># give a user some idea of the sentence structure. Then the word</span>
|
||||
<span class="c1"># lengths are also obfuscated and finally the whisper # length itself.</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># ------------------------------------------------------------------------------</span>
|
||||
<span class="c1"># ------------------------------------------------------------</span>
|
||||
|
||||
|
||||
<span class="n">_RE_WHISPER_OBSCURE</span> <span class="o">=</span> <span class="p">[</span>
|
||||
|
|
@ -653,6 +611,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -671,7 +630,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.rplanguage</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.rpsystem</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -325,8 +324,7 @@
|
|||
<span class="sd"> the markers and a tuple (langname, saytext), where</span>
|
||||
<span class="sd"> langname can be None.</span>
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> evennia.contrib.rpsystem.LanguageError: If an invalid language was</span>
|
||||
<span class="sd"> specified.</span>
|
||||
<span class="sd"> rplanguage.LanguageError: If an invalid language was specified.</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> Note that no errors are raised if the wrong language identifier</span>
|
||||
|
|
@ -1692,6 +1690,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1710,7 +1709,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.rpsystem</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.security.auditing.outputs</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -127,6 +126,7 @@
|
|||
<li><a href="../../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -145,7 +145,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.security.auditing.outputs</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.security.auditing.server</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -316,6 +315,7 @@
|
|||
<li><a href="../../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -334,7 +334,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.security.auditing.server</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.security.auditing.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -181,6 +180,7 @@
|
|||
<li><a href="../../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -199,7 +199,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.security.auditing.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.simpledoor</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -239,6 +238,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -257,7 +257,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.simpledoor</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.slow_exit</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -211,6 +210,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -229,7 +229,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.slow_exit</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.talking_npc</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -200,6 +199,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -218,7 +218,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.talking_npc</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tree_select</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -644,6 +643,7 @@
|
|||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -662,7 +662,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tree_select</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.turnbattle.tb_basic</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -847,6 +846,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -865,7 +865,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.turnbattle.tb_basic</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.turnbattle.tb_equip</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -1205,6 +1204,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1223,7 +1223,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.turnbattle.tb_equip</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.turnbattle.tb_items</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -1524,6 +1523,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1542,7 +1542,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.turnbattle.tb_items</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.turnbattle.tb_magic</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -1446,6 +1445,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1464,7 +1464,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.turnbattle.tb_magic</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.turnbattle.tb_range</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -684,6 +683,7 @@
|
|||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> to_init (object): Object to initialize range field for.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> anchor_obj (object): Object to copy range values from, or None for a random object.</span>
|
||||
<span class="sd"> add_distance (int): Distance to put between to_init object and anchor object.</span>
|
||||
|
|
@ -1502,6 +1502,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1520,7 +1521,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.turnbattle.tb_range</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.bodyfunctions</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -133,6 +132,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -151,7 +151,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.bodyfunctions</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.cmdset_red_button</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -402,6 +401,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -420,7 +420,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.cmdset_red_button</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -1,157 +0,0 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>evennia.contrib.tutorial_examples.mirror — Evennia 1.0-dev 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>
|
||||
<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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.mirror</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for evennia.contrib.tutorial_examples.mirror</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">TutorialMirror</span>
|
||||
|
||||
<span class="sd">A simple mirror object to experiment with.</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultObject</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">is_iter</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">logger</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TutorialMirror"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_examples.mirror.html#evennia.contrib.tutorial_examples.mirror.TutorialMirror">[docs]</a><span class="k">class</span> <span class="nc">TutorialMirror</span><span class="p">(</span><span class="n">DefaultObject</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A simple mirror object that</span>
|
||||
<span class="sd"> - echoes back the description of the object looking at it</span>
|
||||
<span class="sd"> - echoes back whatever is being sent to its .msg - to the</span>
|
||||
<span class="sd"> sender, if given, otherwise to the location of the mirror.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<div class="viewcode-block" id="TutorialMirror.return_appearance"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_examples.mirror.html#evennia.contrib.tutorial_examples.mirror.TutorialMirror.return_appearance">[docs]</a> <span class="k">def</span> <span class="nf">return_appearance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> This formats the description of this object. Called by the 'look' command.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> looker (Object): Object doing the looking.</span>
|
||||
<span class="sd"> **kwargs (dict): Arbitrary, optional arguments for users</span>
|
||||
<span class="sd"> overriding the call (unused by default).</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">):</span>
|
||||
<span class="c1"># avoid infinite recursion by having two mirrors look at each other</span>
|
||||
<span class="k">return</span> <span class="s2">"The image of yourself stretches into infinity."</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> shows your reflection:</span><span class="se">\n</span><span class="si">{</span><span class="n">looker</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="si">}</span><span class="s2">"</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TutorialMirror.msg"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_examples.mirror.html#evennia.contrib.tutorial_examples.mirror.TutorialMirror.msg">[docs]</a> <span class="k">def</span> <span class="nf">msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">from_obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Simply override .msg to echo back to the messenger or to the current</span>
|
||||
<span class="sd"> location.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> text (str or tuple, optional): The message to send. This</span>
|
||||
<span class="sd"> is treated internally like any send-command, so its</span>
|
||||
<span class="sd"> value can be a tuple if sending multiple arguments to</span>
|
||||
<span class="sd"> the `text` oob command.</span>
|
||||
<span class="sd"> from_obj (obj or iterable)</span>
|
||||
<span class="sd"> given, at_msg_send will be called. This value will be</span>
|
||||
<span class="sd"> passed on to the protocol. If iterable, will execute hook</span>
|
||||
<span class="sd"> on all entities in it.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">text</span><span class="p">:</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="s2">"<silence>"</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> <span class="k">else</span> <span class="n">text</span>
|
||||
<span class="k">if</span> <span class="n">from_obj</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">from_obj</span><span class="p">):</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s1"> echoes back to you:</span><span class="se">\n</span><span class="s1">"</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s1">".'</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span><span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s1"> echoes back:</span><span class="se">\n</span><span class="s1">"</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s1">".'</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="p">])</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># no from_obj and no location, just log</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">.msg was called without from_obj and .location is None."</span><span class="p">)</span></div></div>
|
||||
</pre></div>
|
||||
|
||||
<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>
|
||||
<h3>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="mirror.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../../../../0.9.5/index.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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.mirror</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.red_button</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -234,6 +233,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -252,7 +252,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.red_button</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.red_button_scripts</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -352,6 +351,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -370,7 +370,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.red_button_scripts</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -138,6 +137,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -156,7 +156,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_examples.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_world.intro_menu</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -474,9 +473,8 @@
|
|||
<span class="s2">and the main window.</span>
|
||||
|
||||
<span class="s2">- Use |y<Return>|n (or click the arrow on the right) to send your input.</span>
|
||||
<span class="s2">- Use |yCtrl + <up/down-arrow>|n to step back and forth in your command-history.</span>
|
||||
<span class="s2">- Use |yCtrl + <Return>|n to add a new line to your input without sending.</span>
|
||||
<span class="s2">(Cmd instead of Ctrl-key on Macs)</span>
|
||||
<span class="s2">- Use |yShift + <up/down-arrow>|n to step back and forth in your command-history.</span>
|
||||
<span class="s2">- Use |yShift + <Return>|n to add a new line to your input without sending.</span>
|
||||
|
||||
<span class="s2">There is also some |wextra|n info to learn about customizing the webclient.</span>
|
||||
|
||||
|
|
@ -849,6 +847,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -867,7 +866,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_world.intro_menu</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_world.mob</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -111,7 +110,7 @@
|
|||
<span class="sd"> stationary (idling) until attacked.</span>
|
||||
<span class="sd"> aggressive: if set, will attack Characters in</span>
|
||||
<span class="sd"> the same room using whatever Weapon it</span>
|
||||
<span class="sd"> carries (see tutorial_world.objects.TutorialWeapon).</span>
|
||||
<span class="sd"> carries (see tutorial_world.objects.Weapon).</span>
|
||||
<span class="sd"> if unset, the mob will never engage in combat</span>
|
||||
<span class="sd"> no matter what.</span>
|
||||
<span class="sd"> hunting: if set, the mob will pursue enemies trying</span>
|
||||
|
|
@ -210,9 +209,9 @@
|
|||
<span class="sd"> be "ticked".</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> interval (int or None): The number of seconds</span>
|
||||
<span class="sd"> interval (int): The number of seconds</span>
|
||||
<span class="sd"> between ticks</span>
|
||||
<span class="sd"> hook_key (str or None): The name of the method</span>
|
||||
<span class="sd"> hook_key (str): The name of the method</span>
|
||||
<span class="sd"> (on this mob) to call every interval</span>
|
||||
<span class="sd"> seconds.</span>
|
||||
<span class="sd"> stop (bool, optional): Just stop the</span>
|
||||
|
|
@ -414,11 +413,16 @@
|
|||
<span class="k">return</span>
|
||||
|
||||
<span class="c1"># we use the same attack commands as defined in</span>
|
||||
<span class="c1"># tutorial_world.objects.TutorialWeapon, assuming that</span>
|
||||
<span class="c1"># tutorial_world.objects.Weapon, assuming that</span>
|
||||
<span class="c1"># the mob is given a Weapon to attack with.</span>
|
||||
<span class="n">attack_cmd</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">((</span><span class="s2">"thrust"</span><span class="p">,</span> <span class="s2">"pierce"</span><span class="p">,</span> <span class="s2">"stab"</span><span class="p">,</span> <span class="s2">"slash"</span><span class="p">,</span> <span class="s2">"chop"</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">attack_cmd</span><span class="p">,</span> <span class="n">target</span><span class="p">))</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">health</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># This is not an attackable target</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> found </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2"> had an `health` attribute of `None`."</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="c1"># analyze the current state</span>
|
||||
<span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">health</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="c1"># we reduced the target to <= 0 health. Move them to the</span>
|
||||
|
|
@ -503,6 +507,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -521,7 +526,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_world.mob</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_world.objects</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
|
|
@ -56,8 +55,8 @@
|
|||
<span class="sd">Obelisk</span>
|
||||
<span class="sd">LightSource</span>
|
||||
<span class="sd">CrumblingWall</span>
|
||||
<span class="sd">TutorialWeapon</span>
|
||||
<span class="sd">TutorialWeaponRack</span>
|
||||
<span class="sd">Weapon</span>
|
||||
<span class="sd">WeaponRack</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
|
||||
|
|
@ -833,7 +832,7 @@
|
|||
|
||||
<span class="c1"># -------------------------------------------------------------</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># TutorialWeapon - object type</span>
|
||||
<span class="c1"># Weapon - object type</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># A weapon is necessary in order to fight in the tutorial</span>
|
||||
<span class="c1"># world. A weapon (which here is assumed to be a bladed</span>
|
||||
|
|
@ -973,7 +972,7 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdAttack</span><span class="p">())</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TutorialWeapon"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.TutorialWeapon">[docs]</a><span class="k">class</span> <span class="nc">TutorialWeapon</span><span class="p">(</span><span class="n">TutorialObject</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="Weapon"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.Weapon">[docs]</a><span class="k">class</span> <span class="nc">Weapon</span><span class="p">(</span><span class="n">TutorialObject</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> This defines a bladed weapon.</span>
|
||||
|
||||
|
|
@ -985,7 +984,7 @@
|
|||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<div class="viewcode-block" id="TutorialWeapon.at_object_creation"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.TutorialWeapon.at_object_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="Weapon.at_object_creation"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.Weapon.at_object_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Called at first creation of the object"""</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">at_object_creation</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hit</span> <span class="o">=</span> <span class="mf">0.4</span> <span class="c1"># hit chance</span>
|
||||
|
|
@ -994,7 +993,7 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">magic</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">add_default</span><span class="p">(</span><span class="n">CmdSetWeapon</span><span class="p">,</span> <span class="n">permanent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TutorialWeapon.reset"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.TutorialWeapon.reset">[docs]</a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="Weapon.reset"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.Weapon.reset">[docs]</a> <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> When reset, the weapon is simply deleted, unless it has a place</span>
|
||||
<span class="sd"> to return to.</span>
|
||||
|
|
@ -1024,7 +1023,7 @@
|
|||
|
||||
<span class="n">WEAPON_PROTOTYPES</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"weapon"</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s2">"typeclass"</span><span class="p">:</span> <span class="s2">"evennia.contrib.tutorial_world.objects.TutorialWeapon"</span><span class="p">,</span>
|
||||
<span class="s2">"typeclass"</span><span class="p">:</span> <span class="s2">"evennia.contrib.tutorial_world.objects.Weapon"</span><span class="p">,</span>
|
||||
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Weapon"</span><span class="p">,</span>
|
||||
<span class="s2">"hit"</span><span class="p">:</span> <span class="mf">0.2</span><span class="p">,</span>
|
||||
<span class="s2">"parry"</span><span class="p">:</span> <span class="mf">0.2</span><span class="p">,</span>
|
||||
|
|
@ -1169,7 +1168,7 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdGetWeapon</span><span class="p">())</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TutorialWeaponRack"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.TutorialWeaponRack">[docs]</a><span class="k">class</span> <span class="nc">TutorialWeaponRack</span><span class="p">(</span><span class="n">TutorialObject</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="WeaponRack"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.WeaponRack">[docs]</a><span class="k">class</span> <span class="nc">WeaponRack</span><span class="p">(</span><span class="n">TutorialObject</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> This object represents a weapon store. When people use the</span>
|
||||
<span class="sd"> "get weapon" command on this rack, it will produce one</span>
|
||||
|
|
@ -1186,7 +1185,7 @@
|
|||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<div class="viewcode-block" id="TutorialWeaponRack.at_object_creation"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.TutorialWeaponRack.at_object_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="WeaponRack.at_object_creation"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.WeaponRack.at_object_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> called at creation</span>
|
||||
<span class="sd"> """</span>
|
||||
|
|
@ -1200,12 +1199,13 @@
|
|||
<span class="sd"> |wstab/thrust/pierce <target>|n - poke at the enemy. More damage but harder to hit.</span>
|
||||
<span class="sd"> |wslash/chop/bash <target>|n - swipe at the enemy. Less damage but easier to hit.</span>
|
||||
<span class="sd"> |wdefend/parry|n - protect yourself and make yourself harder to hit.)</span>
|
||||
<span class="sd"> """</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">no_more_weapons_msg</span> <span class="o">=</span> <span class="s2">"you find nothing else of use."</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">available_weapons</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"knife"</span><span class="p">,</span> <span class="s2">"dagger"</span><span class="p">,</span> <span class="s2">"sword"</span><span class="p">,</span> <span class="s2">"club"</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TutorialWeaponRack.produce_weapon"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.TutorialWeaponRack.produce_weapon">[docs]</a> <span class="k">def</span> <span class="nf">produce_weapon</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">caller</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="WeaponRack.produce_weapon"><a class="viewcode-back" href="../../../../api/evennia.contrib.tutorial_world.objects.html#evennia.contrib.tutorial_world.objects.WeaponRack.produce_weapon">[docs]</a> <span class="k">def</span> <span class="nf">produce_weapon</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">caller</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> This will produce a new weapon from the rack,</span>
|
||||
<span class="sd"> assuming the caller hasn't already gotten one. When</span>
|
||||
|
|
@ -1251,6 +1251,7 @@
|
|||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
|
|
@ -1269,7 +1270,6 @@
|
|||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.contrib.tutorial_world.objects</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue