evennia/docs/api/evennia.prototypes.prototypes.html
Evennia docbuilder action 971eab282b Updated HTML docs.
2025-08-15 16:53:30 +00:00

694 lines
No EOL
65 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

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

<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>evennia.prototypes.prototypes &#8212; Evennia latest documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d75fae25" />
<link rel="stylesheet" type="text/css" href="../_static/nature.css?v=279e0f84" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=e4a91a55" />
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="evennia.prototypes.spawner" href="evennia.prototypes.spawner.html" />
<link rel="prev" title="evennia.prototypes.protfuncs" href="evennia.prototypes.protfuncs.html" />
</head><body>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.prototypes.spawner.html" title="evennia.prototypes.spawner"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.prototypes.protfuncs.html" title="evennia.prototypes.protfuncs"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.prototypes.html" accesskey="U">evennia.prototypes</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.prototypes.prototypes</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.prototypes.prototypes">
<span id="evennia-prototypes-prototypes"></span><h1>evennia.prototypes.prototypes<a class="headerlink" href="#module-evennia.prototypes.prototypes" title="Link to this heading"></a></h1>
<p>Handling storage of prototypes, both database-based ones (DBPrototypes) and those defined in modules
(Read-only prototypes). Also contains utility functions, formatters and manager functions.</p>
<dl class="py exception">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.PermissionError">
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">PermissionError</span></span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#PermissionError"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.PermissionError" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">RuntimeError</span></code></p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.ValidationError">
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">ValidationError</span></span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#ValidationError"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.ValidationError" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">RuntimeError</span></code></p>
<p>Raised on prototype validation errors</p>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.homogenize_prototype">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">homogenize_prototype</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prototype</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">custom_keys</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#homogenize_prototype"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.homogenize_prototype" title="Link to this definition"></a></dt>
<dd><p>Homogenize the more free-form prototype supported pre Evennia 0.7 into the stricter form.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>prototype</strong> (<em>dict</em>) Prototype.</p></li>
<li><p><strong>custom_keys</strong> (<em>list</em><em>, </em><em>optional</em>) Custom keys which should not be interpreted as attrs, beyond
the default reserved keys.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><p><em>homogenized (dict)</em> </p>
<dl class="simple">
<dt>Prototype where all non-identified keys grouped as attributes and other</dt><dd><p>homogenizations like adding missing prototype_keys and setting a default typeclass.</p>
</dd>
</dl>
</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.load_module_prototypes">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">load_module_prototypes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">mod_or_prototypes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">override</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#load_module_prototypes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.load_module_prototypes" title="Link to this definition"></a></dt>
<dd><p>Load module prototypes. Also prototype-dicts passed directly to this function are considered
module prototypes (they are impossible to change) but will have a module of None.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>*mod_or_prototypes</strong> (<em>module</em><em> or </em><em>dict</em>) Each arg should be a separate module or
prototype-dict to load. If none are given, <strong>settings.PROTOTYPE_MODULES</strong> will be used.</p></li>
<li><p><strong>override</strong> (<em>bool</em><em>, </em><em>optional</em>) If prototypes should override existing ones already loaded.
Disabling this can allow for injecting prototypes into the system dynamically while
still allowing same prototype-keys to be overridden from settings (even though settings
is usually loaded before dynamic loading).</p></li>
</ul>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This is called (without arguments) by <strong>evennia.__init__</strong> as Evennia initializes. Its
important to do this late so as to not interfere with evennia initialization. But it can
also be used later to add more prototypes to the library on the fly. This is requried
before a module-based prototype can be accessed by prototype-key.</p>
</div>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DBPrototypeCache">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">DBPrototypeCache</span></span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#DBPrototypeCache"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.DBPrototypeCache" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Cache DB-stored prototypes; it can still be slow to initially load 1000s of
prototypes, due to having to deserialize all prototype-dicts, but after the
first time the cache will be populated and things will be fast.</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DBPrototypeCache.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#DBPrototypeCache.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.DBPrototypeCache.__init__" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DBPrototypeCache.get">
<span class="sig-name descname"><span class="pre">get</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">db_prot_id</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#DBPrototypeCache.get"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.DBPrototypeCache.get" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DBPrototypeCache.add">
<span class="sig-name descname"><span class="pre">add</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">db_prot_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prototype</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#DBPrototypeCache.add"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.DBPrototypeCache.add" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DBPrototypeCache.remove">
<span class="sig-name descname"><span class="pre">remove</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">db_prot_id</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#DBPrototypeCache.remove"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.DBPrototypeCache.remove" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DBPrototypeCache.clear">
<span class="sig-name descname"><span class="pre">clear</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#DBPrototypeCache.clear"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.DBPrototypeCache.clear" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DBPrototypeCache.replace">
<span class="sig-name descname"><span class="pre">replace</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">all_data</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#DBPrototypeCache.replace"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.DBPrototypeCache.replace" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DbPrototype">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">DbPrototype</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#DbPrototype"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.DbPrototype" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript" title="evennia.scripts.scripts.DefaultScript"><code class="xref py py-class docutils literal notranslate"><span class="pre">DefaultScript</span></code></a></p>
<p>This stores a single prototype, in an Attribute <strong>prototype</strong>.</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DbPrototype.at_script_creation">
<span class="sig-name descname"><span class="pre">at_script_creation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#DbPrototype.at_script_creation"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.DbPrototype.at_script_creation" title="Link to this definition"></a></dt>
<dd><p>Only called once, when script is first created.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DbPrototype.prototype">
<em class="property"><span class="k"><span class="pre">property</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">prototype</span></span><a class="headerlink" href="#evennia.prototypes.prototypes.DbPrototype.prototype" title="Link to this definition"></a></dt>
<dd><p>Make sure to decouple from db!</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DbPrototype.DoesNotExist">
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">DoesNotExist</span></span><a class="headerlink" href="#evennia.prototypes.prototypes.DbPrototype.DoesNotExist" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.DoesNotExist" title="evennia.scripts.scripts.DefaultScript.DoesNotExist"><code class="xref py py-class docutils literal notranslate"><span class="pre">DoesNotExist</span></code></a></p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DbPrototype.MultipleObjectsReturned">
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">MultipleObjectsReturned</span></span><a class="headerlink" href="#evennia.prototypes.prototypes.DbPrototype.MultipleObjectsReturned" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.MultipleObjectsReturned" title="evennia.scripts.scripts.DefaultScript.MultipleObjectsReturned"><code class="xref py py-class docutils literal notranslate"><span class="pre">MultipleObjectsReturned</span></code></a></p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DbPrototype.path">
<span class="sig-name descname"><span class="pre">path</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'evennia.prototypes.prototypes.DbPrototype'</span></em><a class="headerlink" href="#evennia.prototypes.prototypes.DbPrototype.path" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.DbPrototype.typename">
<span class="sig-name descname"><span class="pre">typename</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'DbPrototype'</span></em><a class="headerlink" href="#evennia.prototypes.prototypes.DbPrototype.typename" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.save_prototype">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">save_prototype</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prototype</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#save_prototype"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.save_prototype" title="Link to this definition"></a></dt>
<dd><p>Create/Store a prototype persistently.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>prototype</strong> (<em>dict</em>) The prototype to save. A <strong>prototype_key</strong> key is
required.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>prototype (dict or None)</em> The prototype stored using the given kwargs, None if deleting.</p>
</dd>
<dt class="field-odd">Raises<span class="colon">:</span></dt>
<dd class="field-odd"><p><a class="reference internal" href="#evennia.prototypes.prototypes.ValidationError" title="evennia.prototypes.prototypes.ValidationError"><strong>prototypes.ValidationError</strong></a> If prototype does not validate.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>No edit/spawn locks will be checked here - if this function is called the caller
is expected to have valid permissions.</p>
</div>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.create_prototype">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">create_prototype</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prototype</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.prototypes.prototypes.create_prototype" title="Link to this definition"></a></dt>
<dd><p>Create/Store a prototype persistently.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>prototype</strong> (<em>dict</em>) The prototype to save. A <strong>prototype_key</strong> key is
required.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>prototype (dict or None)</em> The prototype stored using the given kwargs, None if deleting.</p>
</dd>
<dt class="field-odd">Raises<span class="colon">:</span></dt>
<dd class="field-odd"><p><a class="reference internal" href="#evennia.prototypes.prototypes.ValidationError" title="evennia.prototypes.prototypes.ValidationError"><strong>prototypes.ValidationError</strong></a> If prototype does not validate.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>No edit/spawn locks will be checked here - if this function is called the caller
is expected to have valid permissions.</p>
</div>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.delete_prototype">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">delete_prototype</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prototype_key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">caller</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#delete_prototype"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.delete_prototype" title="Link to this definition"></a></dt>
<dd><p>Delete a stored prototype</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>key</strong> (<em>str</em>) The persistent prototype to delete.</p></li>
<li><p><strong>caller</strong> (<em>Account</em><em> or </em><em>Object</em><em>, </em><em>optionsl</em>) Caller aiming to delete a prototype.
Note that no locks will be checked if**caller** is not passed.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>success (bool)</em> If deletion worked or not.</p>
</dd>
<dt class="field-odd">Raises<span class="colon">:</span></dt>
<dd class="field-odd"><p><a class="reference internal" href="#evennia.prototypes.prototypes.PermissionError" title="evennia.prototypes.prototypes.PermissionError"><strong>PermissionError</strong></a> If edit lock was not passed or deletion failed for some other reason.</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.search_prototype">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">search_prototype</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">key</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tags</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">require_single</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">return_iterators</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">no_db</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#search_prototype"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.search_prototype" title="Link to this definition"></a></dt>
<dd><p>Find prototypes based on key and/or tags, or all prototypes.</p>
<dl class="field-list simple">
<dt class="field-odd">Keyword Arguments<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>key</strong> (<em>str</em>) An exact or partial key to query for.</p></li>
<li><p><strong>tags</strong> (<em>str</em><em> or </em><em>list</em>) Tag key or keys to query for. These
will always be applied with the db_protototype
tag category.</p></li>
<li><p><strong>require_single</strong> (<em>bool</em>) If set, raise KeyError if the result
was not found or if there are multiple matches.</p></li>
<li><p><strong>return_iterators</strong> (<em>bool</em>) Optimized return for large numbers of db-prototypes.
If set, separate returns of module based prototypes and paginate
the db-prototype return.</p></li>
<li><p><strong>no_db</strong> (<em>bool</em>) Optimization. If set, skip querying for database-generated prototypes and only
include module-based prototypes. This can lead to a dramatic speedup since
module-prototypes are static and require no db-lookup.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><p><em>matches (list)</em> </p>
<dl class="simple">
<dt>Default return, all found prototype dicts. Empty list if</dt><dd><p>no match was found. Note that if neither <strong>key</strong> nor <strong>tags</strong>
were given, <em>all</em> available prototypes will be returned.</p>
</dd>
<dt>list, queryset: If <strong>return_iterators</strong> are found, this is a list of</dt><dd><p>module-based prototypes followed by a queryset of
db-prototypes.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-odd">Raises<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>KeyError</strong> If <strong>require_single</strong> is True and there are 0 or &gt;1 matches.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The available prototypes is a combination of those supplied in
PROTOTYPE_MODULES and those stored in the database. Note that if
tags are given and the prototype has no tags defined, it will not
be found as a match.</p>
</div>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.search_objects_with_prototype">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">search_objects_with_prototype</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prototype_key</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#search_objects_with_prototype"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.search_objects_with_prototype" title="Link to this definition"></a></dt>
<dd><p>Retrieve all object instances created by a given prototype.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>prototype_key</strong> (<em>str</em>) The exact (and unique) prototype identifier to query for.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>matches (Queryset)</em> All matching objects spawned from this prototype.</p>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.PrototypeEvMore">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">PrototypeEvMore</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">caller</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">session</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#PrototypeEvMore"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.PrototypeEvMore" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.utils.evmore.html#evennia.utils.evmore.EvMore" title="evennia.utils.evmore.EvMore"><code class="xref py py-class docutils literal notranslate"><span class="pre">EvMore</span></code></a></p>
<p>Listing 1000+ prototypes can be very slow. So we customize EvMore to
display an EvTable per paginated page rather than to try creating an
EvTable for the entire dataset and then paginate it.</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.PrototypeEvMore.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">caller</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">session</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#PrototypeEvMore.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.PrototypeEvMore.__init__" title="Link to this definition"></a></dt>
<dd><p>Store some extra properties on the EvMore class</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.PrototypeEvMore.init_pages">
<span class="sig-name descname"><span class="pre">init_pages</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">inp</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#PrototypeEvMore.init_pages"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.PrototypeEvMore.init_pages" title="Link to this definition"></a></dt>
<dd><p>This will be initialized with a tuple (mod_prototype_list, paginated_db_query)
and we must handle these separately since they cannot be paginated in the same
way. We will build the prototypes so that the db-prototypes come first (they
are likely the most volatile), followed by the mod-prototypes.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.PrototypeEvMore.prototype_paginator">
<span class="sig-name descname"><span class="pre">prototype_paginator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pageno</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#PrototypeEvMore.prototype_paginator"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.PrototypeEvMore.prototype_paginator" title="Link to this definition"></a></dt>
<dd><p>The listing is separated in db/mod prototypes, so we need to figure out which
one to pick based on the page number. Also, pageno starts from 0.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.PrototypeEvMore.page_formatter">
<span class="sig-name descname"><span class="pre">page_formatter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">page</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#PrototypeEvMore.page_formatter"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.PrototypeEvMore.page_formatter" title="Link to this definition"></a></dt>
<dd><p>Input is a queryset page from django.Paginator</p>
</dd></dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.list_prototypes">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">list_prototypes</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">caller</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">key</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tags</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_non_use</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">show_non_edit</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">session</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#list_prototypes"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.list_prototypes" title="Link to this definition"></a></dt>
<dd><p>Collate a list of found prototypes based on search criteria and access.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>caller</strong> (<em>Account</em><em> or </em><em>Object</em>) The object requesting the list.</p></li>
<li><p><strong>key</strong> (<em>str</em><em>, </em><em>optional</em>) Exact or partial prototype key to query for.</p></li>
<li><p><strong>tags</strong> (<em>str</em><em> or </em><em>list</em><em>, </em><em>optional</em>) Tag key or keys to query for.</p></li>
<li><p><strong>show_non_use</strong> (<em>bool</em><em>, </em><em>optional</em>) Show also prototypes the caller may not use.</p></li>
<li><p><strong>show_non_edit</strong> (<em>bool</em><em>, </em><em>optional</em>) Show also prototypes the caller may not edit.</p></li>
<li><p><strong>session</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a><em>, </em><em>optional</em>) If given, this is used for display formatting.</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>PrototypeEvMore</em> An EvMore subclass optimized for prototype listings.
None: If no matches were found. In this case the caller has already been notified.</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.validate_prototype">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">validate_prototype</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prototype</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">protkey</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">protparents</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">is_prototype_base</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strict</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">_flags</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#validate_prototype"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.validate_prototype" title="Link to this definition"></a></dt>
<dd><p>Run validation on a prototype, checking for inifinite regress.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>prototype</strong> (<em>dict</em>) Prototype to validate.</p></li>
<li><p><strong>protkey</strong> (<em>str</em><em>, </em><em>optional</em>) The name of the prototype definition. If not given, the prototype
dict needs to have the <strong>prototype_key</strong> field set.</p></li>
<li><p><strong>protparents</strong> (<em>dict</em><em>, </em><em>optional</em>) Additional prototype-parents, supposedly provided specifically
for this prototype. If given, matching parents will first be taken from this
dict rather than from the global set of prototypes found via settings/database.</p></li>
<li><p><strong>is_prototype_base</strong> (<em>bool</em><em>, </em><em>optional</em>) We are trying to create a new object <em>based on this
object</em>. This means we cant allow mixin-style prototypes without typeclass/parent
etc.</p></li>
<li><p><strong>strict</strong> (<em>bool</em><em>, </em><em>optional</em>) If unset, dont require needed keys, only check against infinite
recursion etc.</p></li>
<li><p><strong>_flags</strong> (<em>dict</em><em>, </em><em>optional</em>) Internal work dict that should not be set externally.</p></li>
</ul>
</dd>
<dt class="field-even">Raises<span class="colon">:</span></dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>RuntimeError</strong> If prototype has invalid structure.</p></li>
<li><p><strong>RuntimeWarning</strong> If prototype has issues that would make it unsuitable to build an object
with (it may still be useful as a mix-in prototype).</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.protfunc_parser">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">protfunc_parser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">available_functions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">testing</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stacktrace</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">caller</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raise_errors</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#protfunc_parser"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.protfunc_parser" title="Link to this definition"></a></dt>
<dd><p>Parse a prototype value string for a protfunc and process it.</p>
<p>Available protfuncs are specified as callables in one of the modules of
<strong>settings.PROTFUNC_MODULES</strong>, or specified on the command line.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>value</strong> (<em>any</em>) The value to test for a parseable protfunc. Only strings will be parsed for
protfuncs, all other types are returned as-is.</p></li>
<li><p><strong>available_functions</strong> (<em>dict</em><em>, </em><em>optional</em>) Mapping of name:protfunction to use for this parsing.
If not set, use default sources.</p></li>
<li><p><strong>stacktrace</strong> (<em>bool</em><em>, </em><em>optional</em>) If set, print the stack parsing process of the protfunc-parser.</p></li>
<li><p><strong>raise_errors</strong> (<em>bool</em><em>, </em><em>optional</em>) Raise explicit errors from malformed/not found protfunc
calls.</p></li>
</ul>
</dd>
<dt class="field-even">Keyword Arguments<span class="colon">:</span></dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>session</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) Passed to protfunc. Session of the entity spawning the prototype.</p></li>
<li><p><strong>protototype</strong> (<em>dict</em>) Passed to protfunc. The dict this protfunc is a part of.</p></li>
<li><p><strong>current_key</strong> (<em>str</em>) Passed to protfunc. The key in the prototype that will hold this value.</p></li>
<li><p><strong>caller</strong> (<em>Object</em><em> or </em><em>Account</em>) This is necessary for certain protfuncs that perform object
searches and have to check permissions.</p></li>
<li><p><strong>any</strong> (<em>any</em>) Passed on to the protfunc.</p></li>
</ul>
</dd>
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p><em>any</em> A structure to replace the string on the prototype leve. Note
that FunctionParser functions $funcname(<a href="#id1"><span class="problematic" id="id2">*</span></a>args, <a href="#id3"><span class="problematic" id="id4">**</span></a>kwargs) can return any
data type to insert into the prototype.</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.format_available_protfuncs">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">format_available_protfuncs</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#format_available_protfuncs"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.format_available_protfuncs" title="Link to this definition"></a></dt>
<dd><p>Get all protfuncs in a pretty-formatted form.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>clr</strong> (<em>str</em><em>, </em><em>optional</em>) What coloration tag to use.</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.prototype_to_str">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">prototype_to_str</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prototype</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#prototype_to_str"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.prototype_to_str" title="Link to this definition"></a></dt>
<dd><p>Format a prototype to a nice string representation.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>prototype</strong> (<em>dict</em>) The prototype.</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.check_permission">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">check_permission</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prototype_key</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">action</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#check_permission"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.check_permission" title="Link to this definition"></a></dt>
<dd><p>Helper function to check access to actions on given prototype.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>prototype_key</strong> (<em>str</em>) The prototype to affect.</p></li>
<li><p><strong>action</strong> (<em>str</em>) One of “spawn” or “edit”.</p></li>
<li><p><strong>default</strong> (<em>str</em>) If action is unknown or prototype has no locks</p></li>
</ul>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>passes (bool)</em> If permission for action is granted or not.</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.init_spawn_value">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">init_spawn_value</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">validator</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">caller</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prototype</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">protfunc_raise_errors</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#init_spawn_value"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.init_spawn_value" title="Link to this definition"></a></dt>
<dd><p>Analyze the prototype value and produce a value useful at the point of spawning.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>value</strong> (<em>any</em>) <p>This can be:
callable - will be called as callable()
(callable, (args,)) - will be called as callable(<a href="#id5"><span class="problematic" id="id6">*</span></a>args)
other - will be assigned depending on the variable type
validator (callable, optional): If given, this will be called with the value to</p>
<blockquote>
<div><p>check and guarantee the outcome is of a given type.</p>
</div></blockquote>
<dl class="simple">
<dt>caller (Object or Account): This is necessary for certain protfuncs that perform object</dt><dd><p>searches and have to check permissions.</p>
</dd>
</dl>
<p>prototype (dict): Prototype this is to be used for. Necessary for certain protfuncs.</p>
</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>any (any)</em> The (potentially pre-processed value to use for this prototype key)</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.value_to_obj_or_any">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">value_to_obj_or_any</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#value_to_obj_or_any"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.value_to_obj_or_any" title="Link to this definition"></a></dt>
<dd><p>Convert value(s) to Object if possible, otherwise keep original value</p>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.prototypes.value_to_obj">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.prototypes.</span></span><span class="sig-name descname"><span class="pre">value_to_obj</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">force</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#value_to_obj"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.prototypes.value_to_obj" title="Link to this definition"></a></dt>
<dd><p>Always convert value(s) to Object, or None</p>
</dd></dl>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo of Evennia"/>
</a></p>
<search id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
<h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">evennia.prototypes.prototypes</a><ul>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.PermissionError"><code class="docutils literal notranslate"><span class="pre">PermissionError</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.ValidationError"><code class="docutils literal notranslate"><span class="pre">ValidationError</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.homogenize_prototype"><code class="docutils literal notranslate"><span class="pre">homogenize_prototype()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.load_module_prototypes"><code class="docutils literal notranslate"><span class="pre">load_module_prototypes()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DBPrototypeCache"><code class="docutils literal notranslate"><span class="pre">DBPrototypeCache</span></code></a><ul>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DBPrototypeCache.__init__"><code class="docutils literal notranslate"><span class="pre">DBPrototypeCache.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DBPrototypeCache.get"><code class="docutils literal notranslate"><span class="pre">DBPrototypeCache.get()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DBPrototypeCache.add"><code class="docutils literal notranslate"><span class="pre">DBPrototypeCache.add()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DBPrototypeCache.remove"><code class="docutils literal notranslate"><span class="pre">DBPrototypeCache.remove()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DBPrototypeCache.clear"><code class="docutils literal notranslate"><span class="pre">DBPrototypeCache.clear()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DBPrototypeCache.replace"><code class="docutils literal notranslate"><span class="pre">DBPrototypeCache.replace()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DbPrototype"><code class="docutils literal notranslate"><span class="pre">DbPrototype</span></code></a><ul>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DbPrototype.at_script_creation"><code class="docutils literal notranslate"><span class="pre">DbPrototype.at_script_creation()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DbPrototype.prototype"><code class="docutils literal notranslate"><span class="pre">DbPrototype.prototype</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DbPrototype.DoesNotExist"><code class="docutils literal notranslate"><span class="pre">DbPrototype.DoesNotExist</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DbPrototype.MultipleObjectsReturned"><code class="docutils literal notranslate"><span class="pre">DbPrototype.MultipleObjectsReturned</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DbPrototype.path"><code class="docutils literal notranslate"><span class="pre">DbPrototype.path</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.DbPrototype.typename"><code class="docutils literal notranslate"><span class="pre">DbPrototype.typename</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.save_prototype"><code class="docutils literal notranslate"><span class="pre">save_prototype()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.create_prototype"><code class="docutils literal notranslate"><span class="pre">create_prototype()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.delete_prototype"><code class="docutils literal notranslate"><span class="pre">delete_prototype()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.search_prototype"><code class="docutils literal notranslate"><span class="pre">search_prototype()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.search_objects_with_prototype"><code class="docutils literal notranslate"><span class="pre">search_objects_with_prototype()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.PrototypeEvMore"><code class="docutils literal notranslate"><span class="pre">PrototypeEvMore</span></code></a><ul>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.PrototypeEvMore.__init__"><code class="docutils literal notranslate"><span class="pre">PrototypeEvMore.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.PrototypeEvMore.init_pages"><code class="docutils literal notranslate"><span class="pre">PrototypeEvMore.init_pages()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.PrototypeEvMore.prototype_paginator"><code class="docutils literal notranslate"><span class="pre">PrototypeEvMore.prototype_paginator()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.PrototypeEvMore.page_formatter"><code class="docutils literal notranslate"><span class="pre">PrototypeEvMore.page_formatter()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.list_prototypes"><code class="docutils literal notranslate"><span class="pre">list_prototypes()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.validate_prototype"><code class="docutils literal notranslate"><span class="pre">validate_prototype()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.protfunc_parser"><code class="docutils literal notranslate"><span class="pre">protfunc_parser()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.format_available_protfuncs"><code class="docutils literal notranslate"><span class="pre">format_available_protfuncs()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.prototype_to_str"><code class="docutils literal notranslate"><span class="pre">prototype_to_str()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.check_permission"><code class="docutils literal notranslate"><span class="pre">check_permission()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.init_spawn_value"><code class="docutils literal notranslate"><span class="pre">init_spawn_value()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.value_to_obj_or_any"><code class="docutils literal notranslate"><span class="pre">value_to_obj_or_any()</span></code></a></li>
<li><a class="reference internal" href="#evennia.prototypes.prototypes.value_to_obj"><code class="docutils literal notranslate"><span class="pre">value_to_obj()</span></code></a></li>
</ul>
</li>
</ul>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.prototypes.protfuncs.html"
title="previous chapter">evennia.prototypes.protfuncs</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.prototypes.spawner.html"
title="next chapter">evennia.prototypes.spawner</a></p>
</div>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.prototypes.prototypes.md.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
<li><a href="https://github.com/evennia/evennia">Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li>
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Doc Versions</h3>
<ul>
<li>
<a href="https://www.evennia.com/docs/latest/index.html">latest (main branch)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/5.x/index.html">v5.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/4.x/index.html">v4.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/3.x/index.html">v3.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/2.x/index.html">v2.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/1.x/index.html">v1.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/0.x/index.html">v0.9.5 branch (outdated)</a>
</li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.prototypes.spawner.html" title="evennia.prototypes.spawner"
>next</a> |</li>
<li class="right" >
<a href="evennia.prototypes.protfuncs.html" title="evennia.prototypes.protfuncs"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.prototypes.html" >evennia.prototypes</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.prototypes.prototypes</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2024, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
</div>
</body>
</html>