evennia/docs/1.0-dev/api/evennia.scripts.html
2020-06-16 22:49:43 +02:00

1857 lines
No EOL
125 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 xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>evennia.scripts package &#8212; 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 documentation</a> &#187;</li>
<li class="nav-item nav-item-last"><a href="#">evennia.scripts package</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-evennia.scripts">
<span id="evennia-scripts-package"></span><h1>evennia.scripts package<a class="headerlink" href="#module-evennia.scripts" title="Permalink to this headline"></a></h1>
<p>This sub-package holds the Scripts system. Scripts are database
entities that can store data both in connection to Objects and Accounts
or globally. They may also have a timer-component to execute various
timed effects.</p>
<div class="section" id="subpackages">
<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline"></a></h2>
<div class="toctree-wrapper compound">
</div>
</div>
<div class="section" id="submodules">
<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline"></a></h2>
</div>
<div class="section" id="module-evennia.scripts.admin">
<span id="evennia-scripts-admin-module"></span><h2>evennia.scripts.admin module<a class="headerlink" href="#module-evennia.scripts.admin" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="evennia.scripts.admin.ScriptAttributeInline">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.admin.</code><code class="sig-name descname">ScriptAttributeInline</code><span class="sig-paren">(</span><em class="sig-param">parent_model</em>, <em class="sig-param">admin_site</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/admin.html#ScriptAttributeInline"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.admin.ScriptAttributeInline" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.typeclasses.html#evennia.typeclasses.admin.AttributeInline" title="evennia.typeclasses.admin.AttributeInline"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.typeclasses.admin.AttributeInline</span></code></a></p>
<p>Inline attribute tags.</p>
<dl class="method">
<dt id="evennia.scripts.admin.ScriptAttributeInline.media">
<em class="property">property </em><code class="sig-name descname">media</code><a class="headerlink" href="#evennia.scripts.admin.ScriptAttributeInline.media" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptAttributeInline.model">
<code class="sig-name descname">model</code><a class="headerlink" href="#evennia.scripts.admin.ScriptAttributeInline.model" title="Permalink to this definition"></a></dt>
<dd><p>alias of <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.models.ScriptDB_db_attributes</span></code></p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptAttributeInline.related_field">
<code class="sig-name descname">related_field</code><em class="property"> = 'scriptdb'</em><a class="headerlink" href="#evennia.scripts.admin.ScriptAttributeInline.related_field" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.scripts.admin.ScriptDBAdmin">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.admin.</code><code class="sig-name descname">ScriptDBAdmin</code><span class="sig-paren">(</span><em class="sig-param">model</em>, <em class="sig-param">admin_site</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/admin.html#ScriptDBAdmin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">django.contrib.admin.options.ModelAdmin</span></code></p>
<p>Displaying the main Script page.</p>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptDBAdmin.fieldsets">
<code class="sig-name descname">fieldsets</code><em class="property"> = ((None, {'fields': (('db_key', 'db_typeclass_path'), 'db_interval', 'db_repeats', 'db_start_delay', 'db_persistent', 'db_obj')}),)</em><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.fieldsets" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptDBAdmin.inlines">
<code class="sig-name descname">inlines</code><em class="property"> = [&lt;class 'evennia.scripts.admin.ScriptTagInline'&gt;, &lt;class 'evennia.scripts.admin.ScriptAttributeInline'&gt;]</em><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.inlines" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptDBAdmin.list_display">
<code class="sig-name descname">list_display</code><em class="property"> = ('id', 'db_key', 'db_typeclass_path', 'db_obj', 'db_interval', 'db_repeats', 'db_persistent')</em><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.list_display" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptDBAdmin.list_display_links">
<code class="sig-name descname">list_display_links</code><em class="property"> = ('id', 'db_key')</em><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.list_display_links" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptDBAdmin.list_select_related">
<code class="sig-name descname">list_select_related</code><em class="property"> = True</em><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.list_select_related" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.scripts.admin.ScriptDBAdmin.media">
<em class="property">property </em><code class="sig-name descname">media</code><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.media" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptDBAdmin.ordering">
<code class="sig-name descname">ordering</code><em class="property"> = ['db_obj', 'db_typeclass_path']</em><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.ordering" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptDBAdmin.raw_id_fields">
<code class="sig-name descname">raw_id_fields</code><em class="property"> = ('db_obj',)</em><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.raw_id_fields" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptDBAdmin.save_as">
<code class="sig-name descname">save_as</code><em class="property"> = True</em><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.save_as" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.scripts.admin.ScriptDBAdmin.save_model">
<code class="sig-name descname">save_model</code><span class="sig-paren">(</span><em class="sig-param">request</em>, <em class="sig-param">obj</em>, <em class="sig-param">form</em>, <em class="sig-param">change</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/admin.html#ScriptDBAdmin.save_model"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.save_model" title="Permalink to this definition"></a></dt>
<dd><p>Model-save hook.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>request</strong> (<em>Request</em>) Incoming request.</p></li>
<li><p><strong>obj</strong> (<em>Object</em>) Database object.</p></li>
<li><p><strong>form</strong> (<em>Form</em>) Form instance.</p></li>
<li><p><strong>change</strong> (<em>bool</em>) If this is a change or a new object.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptDBAdmin.save_on_top">
<code class="sig-name descname">save_on_top</code><em class="property"> = True</em><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.save_on_top" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptDBAdmin.search_fields">
<code class="sig-name descname">search_fields</code><em class="property"> = ['^db_key', 'db_typeclass_path']</em><a class="headerlink" href="#evennia.scripts.admin.ScriptDBAdmin.search_fields" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.scripts.admin.ScriptTagInline">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.admin.</code><code class="sig-name descname">ScriptTagInline</code><span class="sig-paren">(</span><em class="sig-param">parent_model</em>, <em class="sig-param">admin_site</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/admin.html#ScriptTagInline"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.admin.ScriptTagInline" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.typeclasses.html#evennia.typeclasses.admin.TagInline" title="evennia.typeclasses.admin.TagInline"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.typeclasses.admin.TagInline</span></code></a></p>
<p>Inline script tags.</p>
<dl class="method">
<dt id="evennia.scripts.admin.ScriptTagInline.media">
<em class="property">property </em><code class="sig-name descname">media</code><a class="headerlink" href="#evennia.scripts.admin.ScriptTagInline.media" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptTagInline.model">
<code class="sig-name descname">model</code><a class="headerlink" href="#evennia.scripts.admin.ScriptTagInline.model" title="Permalink to this definition"></a></dt>
<dd><p>alias of <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.models.ScriptDB_db_tags</span></code></p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.admin.ScriptTagInline.related_field">
<code class="sig-name descname">related_field</code><em class="property"> = 'scriptdb'</em><a class="headerlink" href="#evennia.scripts.admin.ScriptTagInline.related_field" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.scripts.manager">
<span id="evennia-scripts-manager-module"></span><h2>evennia.scripts.manager module<a class="headerlink" href="#module-evennia.scripts.manager" title="Permalink to this headline"></a></h2>
<p>The custom manager for Scripts.</p>
<dl class="class">
<dt id="evennia.scripts.manager.ScriptManager">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.manager.</code><code class="sig-name descname">ScriptManager</code><a class="reference internal" href="../_modules/evennia/scripts/manager.html#ScriptManager"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.manager.ScriptManager" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.manager.ScriptDBManager</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.typeclasses.managers.TypeclassManager</span></code></p>
</dd></dl>
</div>
<div class="section" id="module-evennia.scripts.models">
<span id="evennia-scripts-models-module"></span><h2>evennia.scripts.models module<a class="headerlink" href="#module-evennia.scripts.models" title="Permalink to this headline"></a></h2>
<p>Scripts are entities that perform some sort of action, either only
once or repeatedly. They can be directly linked to a particular
Evennia Object or be stand-alonw (in the latter case it is considered
a global script). Scripts can indicate both actions related to the
game world as well as pure behind-the-scenes events and effects.
Everything that has a time component in the game (i.e. is not
hard-coded at startup or directly created/controlled by players) is
handled by Scripts.</p>
<p>Scripts have to check for themselves that they should be applied at a
particular moment of time; this is handled by the is_valid() hook.
Scripts can also implement at_start and at_end hooks for preparing and
cleaning whatever effect they have had on the game object.</p>
<p>Common examples of uses of Scripts:</p>
<ul class="simple">
<li><p>Load the default cmdset to the account objects cmdhandler
when logging in.</p></li>
<li><p>Switch to a different state, such as entering a text editor,
start combat or enter a dark room.</p></li>
<li><p>Merge a new cmdset with the default one for changing which
commands are available at a particular time</p></li>
<li><p>Give the account/object a time-limited bonus/effect</p></li>
</ul>
<dl class="class">
<dt id="evennia.scripts.models.ScriptDB">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.models.</code><code class="sig-name descname">ScriptDB</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/models.html#ScriptDB"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.models.ScriptDB" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.typeclasses.html#evennia.typeclasses.models.TypedObject" title="evennia.typeclasses.models.TypedObject"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.typeclasses.models.TypedObject</span></code></a></p>
<p>The Script database representation.</p>
<dl class="simple">
<dt>The TypedObject supplies the following (inherited) properties:</dt><dd><p>key - main name
name - alias for key
typeclass_path - the path to the decorating typeclass
typeclass - auto-linked typeclass
date_created - time stamp of object creation
permissions - perm strings
dbref - #id of object
db - persistent attribute storage
ndb - non-persistent attribute storage</p>
</dd>
<dt>The ScriptDB adds the following properties:</dt><dd><p>desc - optional description of script
obj - the object the script is linked to, if any
account - the account the script is linked to (exclusive with obj)
interval - how often script should run
start_delay - if the script should start repeating right away
repeats - how many times the script should repeat
persistent - if script should survive a server reboot
is_active - bool if script is currently running</p>
</dd>
</dl>
<dl class="exception">
<dt id="evennia.scripts.models.ScriptDB.DoesNotExist">
<em class="property">exception </em><code class="sig-name descname">DoesNotExist</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.DoesNotExist" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">django.core.exceptions.ObjectDoesNotExist</span></code></p>
</dd></dl>
<dl class="exception">
<dt id="evennia.scripts.models.ScriptDB.MultipleObjectsReturned">
<em class="property">exception </em><code class="sig-name descname">MultipleObjectsReturned</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.MultipleObjectsReturned" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">django.core.exceptions.MultipleObjectsReturned</span></code></p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB._ScriptDB__get_obj">
<code class="sig-name descname">_ScriptDB__get_obj</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.scripts.models.ScriptDB._ScriptDB__get_obj" title="Permalink to this definition"></a></dt>
<dd><p>Property wrapper that homogenizes access to either the
db_account or db_obj field, using the same object property
name.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB._ScriptDB__set_obj">
<code class="sig-name descname">_ScriptDB__set_obj</code><span class="sig-paren">(</span><em class="sig-param">value</em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.scripts.models.ScriptDB._ScriptDB__set_obj" title="Permalink to this definition"></a></dt>
<dd><p>Set account or obj to their right database field. If
a dbref is given, assume ObjectDB.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB._is_deleted">
<code class="sig-name descname">_is_deleted</code><em class="property"> = False</em><a class="headerlink" href="#evennia.scripts.models.ScriptDB._is_deleted" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB._meta">
<code class="sig-name descname">_meta</code><em class="property"> = &lt;Options for ScriptDB&gt;</em><a class="headerlink" href="#evennia.scripts.models.ScriptDB._meta" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.account">
<em class="property">property </em><code class="sig-name descname">account</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.account" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for getting database field <cite>db_account</cite>.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_account">
<code class="sig-name descname">db_account</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_account" title="Permalink to this definition"></a></dt>
<dd><p>Accessor to the related object on the forward side of a many-to-one or
one-to-one (via ForwardOneToOneDescriptor subclass) relation.</p>
<p>In the example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Child</span><span class="p">(</span><span class="n">Model</span><span class="p">):</span>
<span class="n">parent</span> <span class="o">=</span> <span class="n">ForeignKey</span><span class="p">(</span><span class="n">Parent</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;children&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">Child.parent</span></code> is a <code class="docutils literal notranslate"><span class="pre">ForwardManyToOneDescriptor</span></code> instance.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_account_id">
<code class="sig-name descname">db_account_id</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_account_id" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_attributes">
<code class="sig-name descname">db_attributes</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_attributes" title="Permalink to this definition"></a></dt>
<dd><p>Accessor to the related objects manager on the forward and reverse sides of
a many-to-many relation.</p>
<p>In the example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Pizza</span><span class="p">(</span><span class="n">Model</span><span class="p">):</span>
<span class="n">toppings</span> <span class="o">=</span> <span class="n">ManyToManyField</span><span class="p">(</span><span class="n">Topping</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;pizzas&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">Pizza.toppings</span></code> and <code class="docutils literal notranslate"><span class="pre">Topping.pizzas</span></code> are <code class="docutils literal notranslate"><span class="pre">ManyToManyDescriptor</span></code>
instances.</p>
<p>Most of the implementation is delegated to a dynamically defined manager
class built by <code class="docutils literal notranslate"><span class="pre">create_forward_many_to_many_manager()</span></code> defined below.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_desc">
<code class="sig-name descname">db_desc</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_desc" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_interval">
<code class="sig-name descname">db_interval</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_interval" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_is_active">
<code class="sig-name descname">db_is_active</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_is_active" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_obj">
<code class="sig-name descname">db_obj</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_obj" title="Permalink to this definition"></a></dt>
<dd><p>Accessor to the related object on the forward side of a many-to-one or
one-to-one (via ForwardOneToOneDescriptor subclass) relation.</p>
<p>In the example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Child</span><span class="p">(</span><span class="n">Model</span><span class="p">):</span>
<span class="n">parent</span> <span class="o">=</span> <span class="n">ForeignKey</span><span class="p">(</span><span class="n">Parent</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;children&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">Child.parent</span></code> is a <code class="docutils literal notranslate"><span class="pre">ForwardManyToOneDescriptor</span></code> instance.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_obj_id">
<code class="sig-name descname">db_obj_id</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_obj_id" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_persistent">
<code class="sig-name descname">db_persistent</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_persistent" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_repeats">
<code class="sig-name descname">db_repeats</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_repeats" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_start_delay">
<code class="sig-name descname">db_start_delay</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_start_delay" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.db_tags">
<code class="sig-name descname">db_tags</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.db_tags" title="Permalink to this definition"></a></dt>
<dd><p>Accessor to the related objects manager on the forward and reverse sides of
a many-to-many relation.</p>
<p>In the example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Pizza</span><span class="p">(</span><span class="n">Model</span><span class="p">):</span>
<span class="n">toppings</span> <span class="o">=</span> <span class="n">ManyToManyField</span><span class="p">(</span><span class="n">Topping</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;pizzas&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">Pizza.toppings</span></code> and <code class="docutils literal notranslate"><span class="pre">Topping.pizzas</span></code> are <code class="docutils literal notranslate"><span class="pre">ManyToManyDescriptor</span></code>
instances.</p>
<p>Most of the implementation is delegated to a dynamically defined manager
class built by <code class="docutils literal notranslate"><span class="pre">create_forward_many_to_many_manager()</span></code> defined below.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.desc">
<em class="property">property </em><code class="sig-name descname">desc</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.desc" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for getting database field <cite>db_desc</cite>.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.get_next_by_db_date_created">
<code class="sig-name descname">get_next_by_db_date_created</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">field=&lt;django.db.models.fields.DateTimeField: db_date_created&gt;</em>, <em class="sig-param">is_next=True</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.scripts.models.ScriptDB.get_next_by_db_date_created" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.get_previous_by_db_date_created">
<code class="sig-name descname">get_previous_by_db_date_created</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">field=&lt;django.db.models.fields.DateTimeField: db_date_created&gt;</em>, <em class="sig-param">is_next=False</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.scripts.models.ScriptDB.get_previous_by_db_date_created" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.id">
<code class="sig-name descname">id</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.id" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for a deferred-loading field. When the value is read from this
object the first time, the query is executed.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.interval">
<em class="property">property </em><code class="sig-name descname">interval</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.interval" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for getting database field <cite>db_interval</cite>.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.is_active">
<em class="property">property </em><code class="sig-name descname">is_active</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.is_active" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for getting database field <cite>db_is_active</cite>.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.obj">
<em class="property">property </em><code class="sig-name descname">obj</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.obj" title="Permalink to this definition"></a></dt>
<dd><p>Property wrapper that homogenizes access to either the
db_account or db_obj field, using the same object property
name.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.object">
<em class="property">property </em><code class="sig-name descname">object</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.object" title="Permalink to this definition"></a></dt>
<dd><p>Property wrapper that homogenizes access to either the
db_account or db_obj field, using the same object property
name.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.objects">
<code class="sig-name descname">objects</code><em class="property"> = &lt;evennia.scripts.manager.ScriptDBManager object&gt;</em><a class="headerlink" href="#evennia.scripts.models.ScriptDB.objects" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.path">
<code class="sig-name descname">path</code><em class="property"> = 'evennia.scripts.models.ScriptDB'</em><a class="headerlink" href="#evennia.scripts.models.ScriptDB.path" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.persistent">
<em class="property">property </em><code class="sig-name descname">persistent</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.persistent" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for getting database field <cite>db_persistent</cite>.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.receiver_script_set">
<code class="sig-name descname">receiver_script_set</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.receiver_script_set" title="Permalink to this definition"></a></dt>
<dd><p>Accessor to the related objects manager on the forward and reverse sides of
a many-to-many relation.</p>
<p>In the example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Pizza</span><span class="p">(</span><span class="n">Model</span><span class="p">):</span>
<span class="n">toppings</span> <span class="o">=</span> <span class="n">ManyToManyField</span><span class="p">(</span><span class="n">Topping</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;pizzas&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">Pizza.toppings</span></code> and <code class="docutils literal notranslate"><span class="pre">Topping.pizzas</span></code> are <code class="docutils literal notranslate"><span class="pre">ManyToManyDescriptor</span></code>
instances.</p>
<p>Most of the implementation is delegated to a dynamically defined manager
class built by <code class="docutils literal notranslate"><span class="pre">create_forward_many_to_many_manager()</span></code> defined below.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.repeats">
<em class="property">property </em><code class="sig-name descname">repeats</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.repeats" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for getting database field <cite>db_repeats</cite>.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.sender_script_set">
<code class="sig-name descname">sender_script_set</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.sender_script_set" title="Permalink to this definition"></a></dt>
<dd><p>Accessor to the related objects manager on the forward and reverse sides of
a many-to-many relation.</p>
<p>In the example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Pizza</span><span class="p">(</span><span class="n">Model</span><span class="p">):</span>
<span class="n">toppings</span> <span class="o">=</span> <span class="n">ManyToManyField</span><span class="p">(</span><span class="n">Topping</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;pizzas&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">Pizza.toppings</span></code> and <code class="docutils literal notranslate"><span class="pre">Topping.pizzas</span></code> are <code class="docutils literal notranslate"><span class="pre">ManyToManyDescriptor</span></code>
instances.</p>
<p>Most of the implementation is delegated to a dynamically defined manager
class built by <code class="docutils literal notranslate"><span class="pre">create_forward_many_to_many_manager()</span></code> defined below.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.models.ScriptDB.start_delay">
<em class="property">property </em><code class="sig-name descname">start_delay</code><a class="headerlink" href="#evennia.scripts.models.ScriptDB.start_delay" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper for getting database field <cite>db_start_delay</cite>.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.models.ScriptDB.typename">
<code class="sig-name descname">typename</code><em class="property"> = 'SharedMemoryModelBase'</em><a class="headerlink" href="#evennia.scripts.models.ScriptDB.typename" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.scripts.monitorhandler">
<span id="evennia-scripts-monitorhandler-module"></span><h2>evennia.scripts.monitorhandler module<a class="headerlink" href="#module-evennia.scripts.monitorhandler" title="Permalink to this headline"></a></h2>
<p>Monitors - catch changes to model fields and Attributes.</p>
<p>The MONITOR_HANDLER singleton from this module offers the following
functionality:</p>
<ul class="simple">
<li><dl class="simple">
<dt>Field-monitor - track a objects specific database field and perform</dt><dd><p>an action whenever that field <em>changes</em> for whatever reason.</p>
</dd>
</dl>
</li>
<li><dl class="simple">
<dt>Attribute-monitor tracks an objects specific Attribute and perform</dt><dd><p>an action whenever that Attribute <em>changes</em> for whatever reason.</p>
</dd>
</dl>
</li>
</ul>
<dl class="class">
<dt id="evennia.scripts.monitorhandler.MonitorHandler">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.monitorhandler.</code><code class="sig-name descname">MonitorHandler</code><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler" title="Permalink 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>This is a resource singleton that allows for registering
callbacks for when a field or Attribute is updated (saved).</p>
<dl class="method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize the handler.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.add">
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">obj</em>, <em class="sig-param">fieldname</em>, <em class="sig-param">callback</em>, <em class="sig-param">idstring=''</em>, <em class="sig-param">persistent=False</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.add" title="Permalink to this definition"></a></dt>
<dd><p>Add monitoring to a given field or Attribute. A field must
be specified with the full db_* name or it will be assumed
to be an Attribute (so <cite>db_key</cite>, not just <cite>key</cite>).</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>obj</strong> (<em>Typeclassed Entity</em>) The entity on which to monitor a
field or Attribute.</p></li>
<li><p><strong>fieldname</strong> (<em>str</em>) Name of field (db_*) or Attribute to monitor.</p></li>
<li><p><strong>callback</strong> (<em>callable</em>) A callable on the form <a href="#id1"><span class="problematic" id="id2">`</span></a>callable(<a href="#id3"><span class="problematic" id="id4">**</span></a>kwargs),
where kwargs holds keys fieldname and obj.</p></li>
<li><p><strong>idstring</strong> (<em>str</em><em>, </em><em>optional</em>) An id to separate this monitor from other monitors
of the same field and object.</p></li>
<li><p><strong>persistent</strong> (<em>bool</em><em>, </em><em>optional</em>) If False, the monitor will survive
a server reload but not a cold restart. This is default.</p></li>
</ul>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><dl class="simple">
<dt>session (Session): If this keyword is given, the monitorhandler will</dt><dd><p>correctly analyze it and remove the monitor if after a reload/reboot
the session is no longer valid.</p>
</dd>
<dt>any (any): Any other kwargs are passed on to the callback. Remember that</dt><dd><p>all kwargs must be possible to pickle!</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.all">
<code class="sig-name descname">all</code><span class="sig-paren">(</span><em class="sig-param">obj=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.all" title="Permalink to this definition"></a></dt>
<dd><p>List all monitors or all monitors of a given object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>obj</strong> (<em>Object</em>) The object on which to list all monitors.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The handled monitors.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>monitors (list)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.at_update">
<code class="sig-name descname">at_update</code><span class="sig-paren">(</span><em class="sig-param">obj</em>, <em class="sig-param">fieldname</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.at_update"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.at_update" title="Permalink to this definition"></a></dt>
<dd><p>Called by the field as it saves.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.clear">
<code class="sig-name descname">clear</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.clear"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.clear" title="Permalink to this definition"></a></dt>
<dd><p>Delete all monitors.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.remove">
<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param">obj</em>, <em class="sig-param">fieldname</em>, <em class="sig-param">idstring=''</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.remove" title="Permalink to this definition"></a></dt>
<dd><p>Remove a monitor.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.restore">
<code class="sig-name descname">restore</code><span class="sig-paren">(</span><em class="sig-param">server_reload=True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.restore"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.restore" title="Permalink to this definition"></a></dt>
<dd><p>Restore our monitors after a reload. This is called
by the server process.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>server_reload</strong> (<em>bool</em><em>, </em><em>optional</em>) If this is False, it means
the server went through a cold reboot and all
non-persistent tickers must be killed.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.save">
<code class="sig-name descname">save</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.save"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.save" title="Permalink to this definition"></a></dt>
<dd><p>Store our monitors to the database. This is called
by the server process.</p>
<p>Since dbserialize cant handle defaultdicts, we convert to an
intermediary save format ((obj,fieldname, idstring, callback, kwargs), …)</p>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.scripts.monitorhandler._DA">
<code class="sig-prename descclassname">evennia.scripts.monitorhandler.</code><code class="sig-name descname">_DA</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.scripts.monitorhandler._DA" title="Permalink to this definition"></a></dt>
<dd><p>Implement delattr(self, name).</p>
</dd></dl>
<dl class="function">
<dt id="evennia.scripts.monitorhandler._GA">
<code class="sig-prename descclassname">evennia.scripts.monitorhandler.</code><code class="sig-name descname">_GA</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.scripts.monitorhandler._GA" title="Permalink to this definition"></a></dt>
<dd><p>Return getattr(self, name).</p>
</dd></dl>
<dl class="function">
<dt id="evennia.scripts.monitorhandler._SA">
<code class="sig-prename descclassname">evennia.scripts.monitorhandler.</code><code class="sig-name descname">_SA</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.scripts.monitorhandler._SA" title="Permalink to this definition"></a></dt>
<dd><p>Implement setattr(self, name, value).</p>
</dd></dl>
</div>
<div class="section" id="module-evennia.scripts.scripthandler">
<span id="evennia-scripts-scripthandler-module"></span><h2>evennia.scripts.scripthandler module<a class="headerlink" href="#module-evennia.scripts.scripthandler" title="Permalink to this headline"></a></h2>
<p>The script handler makes sure to check through all stored scripts to
make sure they are still relevant. A scripthandler is automatically
added to all game objects. You access it through the property
<cite>scripts</cite> on the game object.</p>
<dl class="class">
<dt id="evennia.scripts.scripthandler.ScriptHandler">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.scripthandler.</code><code class="sig-name descname">ScriptHandler</code><span class="sig-paren">(</span><em class="sig-param">obj</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripthandler.html#ScriptHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripthandler.ScriptHandler" title="Permalink 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>Implements the handler. This sits on each game object.</p>
<dl class="method">
<dt id="evennia.scripts.scripthandler.ScriptHandler.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">obj</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripthandler.html#ScriptHandler.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripthandler.ScriptHandler.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Set up internal state.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>obj</strong> (<em>Object</em>) A reference to the object this handler is
attached to.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripthandler.ScriptHandler.add">
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">scriptclass</em>, <em class="sig-param">key=None</em>, <em class="sig-param">autostart=True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripthandler.html#ScriptHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripthandler.ScriptHandler.add" title="Permalink to this definition"></a></dt>
<dd><p>Add a script to this object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>scriptclass</strong> (<em>Scriptclass</em><em>, </em><em>Script</em><em> or </em><em>str</em>) Either a class
object inheriting from DefaultScript, an instantiated
script object or a python path to such a class object.</p></li>
<li><p><strong>key</strong> (<em>str</em><em>, </em><em>optional</em>) Identifier for the script (often set
in script definition and listings)</p></li>
<li><p><strong>autostart</strong> (<em>bool</em><em>, </em><em>optional</em>) Start the script upon adding it.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripthandler.ScriptHandler.all">
<code class="sig-name descname">all</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripthandler.html#ScriptHandler.all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripthandler.ScriptHandler.all" title="Permalink to this definition"></a></dt>
<dd><p>Get all scripts stored in this handler.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripthandler.ScriptHandler.delete">
<code class="sig-name descname">delete</code><span class="sig-paren">(</span><em class="sig-param">key=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripthandler.html#ScriptHandler.delete"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripthandler.ScriptHandler.delete" title="Permalink to this definition"></a></dt>
<dd><p>Forcibly delete a script from this object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>key</strong> (<em>str</em><em>, </em><em>optional</em>) A script key or the path to a script (in the
latter case all scripts with this path will be deleted!)
If no key is given, delete <em>all</em> scripts on the object!</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripthandler.ScriptHandler.get">
<code class="sig-name descname">get</code><span class="sig-paren">(</span><em class="sig-param">key</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripthandler.html#ScriptHandler.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripthandler.ScriptHandler.get" title="Permalink to this definition"></a></dt>
<dd><p>Search scripts on this object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>key</strong> (<em>str</em>) Search criterion, the scripts key or dbref.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The found scripts matching <cite>key</cite>.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>scripts (list)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripthandler.ScriptHandler.start">
<code class="sig-name descname">start</code><span class="sig-paren">(</span><em class="sig-param">key</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripthandler.html#ScriptHandler.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripthandler.ScriptHandler.start" title="Permalink to this definition"></a></dt>
<dd><p>Find scripts and force-start them</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>key</strong> (<em>str</em>) The scripts key or dbref.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The number of started scripts found.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>nr_started (int)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripthandler.ScriptHandler.stop">
<code class="sig-name descname">stop</code><span class="sig-paren">(</span><em class="sig-param">key=None</em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.scripts.scripthandler.ScriptHandler.stop" title="Permalink to this definition"></a></dt>
<dd><p>Forcibly delete a script from this object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>key</strong> (<em>str</em><em>, </em><em>optional</em>) A script key or the path to a script (in the
latter case all scripts with this path will be deleted!)
If no key is given, delete <em>all</em> scripts on the object!</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripthandler.ScriptHandler.validate">
<code class="sig-name descname">validate</code><span class="sig-paren">(</span><em class="sig-param">init_mode=False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripthandler.html#ScriptHandler.validate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripthandler.ScriptHandler.validate" title="Permalink to this definition"></a></dt>
<dd><p>Runs a validation on this objects scripts only. This should
be called regularly to crank the wheels.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>init_mode</strong> (<em>str</em><em>, </em><em>optional</em>) <ul class="simple">
<li><p>This is used during server</p></li>
</ul>
<p>upstart and can have three values:
- <cite>False</cite> (no init mode). Called during run.
- <cite>“reset”</cite> - server reboot. Kill non-persistent scripts
- <cite>“reload”</cite> - server reload. Keep non-persistent scripts.</p>
</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.scripts.scripts">
<span id="evennia-scripts-scripts-module"></span><h2>evennia.scripts.scripts module<a class="headerlink" href="#module-evennia.scripts.scripts" title="Permalink to this headline"></a></h2>
<p>This module defines Scripts, out-of-character entities that can store
data both on themselves and on other objects while also having the
ability to run timers.</p>
<dl class="class">
<dt id="evennia.scripts.scripts.DefaultScript">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.scripts.</code><code class="sig-name descname">DefaultScript</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.ScriptBase</span></code></p>
<p>This is the base TypeClass for all Scripts. Scripts describe
events, timers and states in game, they can have a time component
or describe a state that changes under certain conditions.</p>
<dl class="exception">
<dt id="evennia.scripts.scripts.DefaultScript.DoesNotExist">
<em class="property">exception </em><code class="sig-name descname">DoesNotExist</code><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.DoesNotExist" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.DoesNotExist</span></code></p>
</dd></dl>
<dl class="exception">
<dt id="evennia.scripts.scripts.DefaultScript.MultipleObjectsReturned">
<em class="property">exception </em><code class="sig-name descname">MultipleObjectsReturned</code><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.MultipleObjectsReturned" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.MultipleObjectsReturned</span></code></p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.scripts.DefaultScript._meta">
<code class="sig-name descname">_meta</code><em class="property"> = &lt;Options for DefaultScript&gt;</em><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript._meta" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.at_idmapper_flush">
<code class="sig-name descname">at_idmapper_flush</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.at_idmapper_flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.at_idmapper_flush" title="Permalink to this definition"></a></dt>
<dd><p>If were flushing this object, make sure the LoopingCall is gone too</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.at_repeat">
<code class="sig-name descname">at_repeat</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.at_repeat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.at_repeat" title="Permalink to this definition"></a></dt>
<dd><p>Called repeatedly if this Script is set to repeat regularly.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>**kwargs</strong> (<em>dict</em>) Arbitrary, optional arguments for users
overriding the call (unused by default).</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.at_script_creation">
<code class="sig-name descname">at_script_creation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.at_script_creation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.at_script_creation" title="Permalink to this definition"></a></dt>
<dd><p>Only called once, when script is first created.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.at_server_reload">
<code class="sig-name descname">at_server_reload</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.at_server_reload"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.at_server_reload" title="Permalink to this definition"></a></dt>
<dd><p>This hook is called whenever the server is shutting down for
restart/reboot. If you want to, for example, save
non-persistent properties across a restart, this is the place
to do it.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.at_server_shutdown">
<code class="sig-name descname">at_server_shutdown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.at_server_shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.at_server_shutdown" title="Permalink to this definition"></a></dt>
<dd><p>This hook is called whenever the server is shutting down fully
(i.e. not for a restart).</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.at_start">
<code class="sig-name descname">at_start</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.at_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.at_start" title="Permalink to this definition"></a></dt>
<dd><p>Called whenever the script is started, which for persistent
scripts is at least once every server start. It will also be
called when starting again after a pause (such as after a
server reload)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>**kwargs</strong> (<em>dict</em>) Arbitrary, optional arguments for users
overriding the call (unused by default).</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.at_stop">
<code class="sig-name descname">at_stop</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.at_stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.at_stop" title="Permalink to this definition"></a></dt>
<dd><p>Called whenever when its time for this script to stop (either
because is_valid returned False or it runs out of iterations)</p>
<dl class="simple">
<dt>Args</dt><dd><dl class="simple">
<dt><a href="#id5"><span class="problematic" id="id6">**</span></a>kwargs (dict): Arbitrary, optional arguments for users</dt><dd><p>overriding the call (unused by default).</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.create">
<em class="property">classmethod </em><code class="sig-name descname">create</code><span class="sig-paren">(</span><em class="sig-param">key</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.create" title="Permalink to this definition"></a></dt>
<dd><p>Provides a passthrough interface to the utils.create_script() function.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>key</strong> (<em>str</em>) Name of the new object.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>A newly created object of the given typeclass.
errors (list): A list of errors in string form, if any.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>object (Object)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.force_repeat">
<code class="sig-name descname">force_repeat</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.force_repeat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.force_repeat" title="Permalink to this definition"></a></dt>
<dd><p>Fire a premature triggering of the script callback. This
will reset the timer and count down repeats as if the script
had fired normally.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.is_valid">
<code class="sig-name descname">is_valid</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.is_valid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.is_valid" title="Permalink to this definition"></a></dt>
<dd><p>Is called to check if the script is valid to run at this time.
Should return a boolean. The method is assumed to collect all
needed information from its related self.obj.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.scripts.DefaultScript.path">
<code class="sig-name descname">path</code><em class="property"> = 'evennia.scripts.scripts.DefaultScript'</em><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.path" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.pause">
<code class="sig-name descname">pause</code><span class="sig-paren">(</span><em class="sig-param">manual_pause=True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.pause"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.pause" title="Permalink to this definition"></a></dt>
<dd><p>This stops a running script and stores its active state.
It WILL NOT call the <cite>at_stop()</cite> hook.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.remaining_repeats">
<code class="sig-name descname">remaining_repeats</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.remaining_repeats"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.remaining_repeats" title="Permalink to this definition"></a></dt>
<dd><p>Get the number of returning repeats for limited Scripts.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><dl class="simple">
<dt>The number of repeats</dt><dd><p>remaining until the Script stops. Returns <cite>None</cite>
if it has unlimited repeats.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>remaining (int or <cite>None</cite>)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.reset_callcount">
<code class="sig-name descname">reset_callcount</code><span class="sig-paren">(</span><em class="sig-param">value=0</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.reset_callcount"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.reset_callcount" title="Permalink to this definition"></a></dt>
<dd><p>Reset the count of the number of calls done.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>value</strong> (<em>int</em><em>, </em><em>optional</em>) The repeat value to reset to. Default
is to set it all the way back to 0.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>This is only useful if repeats != 0.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.restart">
<code class="sig-name descname">restart</code><span class="sig-paren">(</span><em class="sig-param">interval=None</em>, <em class="sig-param">repeats=None</em>, <em class="sig-param">start_delay=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.restart"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.restart" title="Permalink to this definition"></a></dt>
<dd><p>Restarts an already existing/running Script from the
beginning, optionally using different settings. This will
first call the stop hooks, and then the start hooks again.
:param interval: Allows for changing the interval</p>
<blockquote>
<div><p>of the Script. Given in seconds. if <cite>None</cite>, will use the already stored interval.</p>
</div></blockquote>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>repeats</strong> (<em>int</em><em>, </em><em>optional</em>) The number of repeats. If unset, will
use the previous setting.</p></li>
<li><p><strong>start_delay</strong> (<em>bool</em><em>, </em><em>optional</em>) If we should wait <cite>interval</cite> seconds
before starting or not. If <cite>None</cite>, re-use the previous setting.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.start">
<code class="sig-name descname">start</code><span class="sig-paren">(</span><em class="sig-param">force_restart=False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.start" title="Permalink to this definition"></a></dt>
<dd><p>Called every time the script is started (for persistent
scripts, this is usually once every server start)</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>force_restart</strong> (<em>bool</em><em>, </em><em>optional</em>) Normally an already
started script will not be started again. if
<cite>force_restart=True</cite>, the script will always restart
the script, regardless of if it has started before.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><dl class="simple">
<dt>0 or 1 depending on if the script successfully</dt><dd><p>started or not. Used in counting.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>result (int)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.stop">
<code class="sig-name descname">stop</code><span class="sig-paren">(</span><em class="sig-param">kill=False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.stop" title="Permalink to this definition"></a></dt>
<dd><p>Called to stop the script from running. This also deletes the
script.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>kill</strong> (<em>bool</em><em>, </em><em>optional</em>) <ul class="simple">
<li><p>Stop the script without</p></li>
</ul>
<p>calling any relevant script hooks.</p>
</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><dl class="simple">
<dt>0 if the script failed to stop, 1 otherwise.</dt><dd><p>Used in counting.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>result (int)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.time_until_next_repeat">
<code class="sig-name descname">time_until_next_repeat</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.time_until_next_repeat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.time_until_next_repeat" title="Permalink to this definition"></a></dt>
<dd><p>Get time until the script fires it <cite>at_repeat</cite> hook again.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><dl class="simple">
<dt>Time in seconds until the script runs again.</dt><dd><p>If not a timed script, return <cite>None</cite>.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>next (int)</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>This hook is not used in any way by the scripts stepping
system; its only here for the user to be able to check in
on their scripts and when they will next be run.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.scripts.DefaultScript.typename">
<code class="sig-name descname">typename</code><em class="property"> = 'DefaultScript'</em><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.typename" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DefaultScript.unpause">
<code class="sig-name descname">unpause</code><span class="sig-paren">(</span><em class="sig-param">manual_unpause=True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DefaultScript.unpause"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DefaultScript.unpause" title="Permalink to this definition"></a></dt>
<dd><p>Restart a paused script. This WILL call the <cite>at_start()</cite> hook.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>manual_unpause</strong> (<em>bool</em><em>, </em><em>optional</em>) This is False if unpause is
called by the server reload/reset mechanism.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>True if unpause was triggered, False otherwise.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>result (bool)</p>
</dd>
<dt class="field-even">Raises</dt>
<dd class="field-even"><p><strong>RuntimeError</strong> If trying to automatically resart this script
(usually after a reset/reload), but it was manually paused,
and so should not the auto-unpaused.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.scripts.scripts.DoNothing">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.scripts.</code><code class="sig-name descname">DoNothing</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DoNothing"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DoNothing" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.scripts.scripts.DefaultScript" title="evennia.scripts.scripts.DefaultScript"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.DefaultScript</span></code></a></p>
<p>A script that does nothing. Used as default fallback.</p>
<dl class="exception">
<dt id="evennia.scripts.scripts.DoNothing.DoesNotExist">
<em class="property">exception </em><code class="sig-name descname">DoesNotExist</code><a class="headerlink" href="#evennia.scripts.scripts.DoNothing.DoesNotExist" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.DoesNotExist</span></code></p>
</dd></dl>
<dl class="exception">
<dt id="evennia.scripts.scripts.DoNothing.MultipleObjectsReturned">
<em class="property">exception </em><code class="sig-name descname">MultipleObjectsReturned</code><a class="headerlink" href="#evennia.scripts.scripts.DoNothing.MultipleObjectsReturned" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.MultipleObjectsReturned</span></code></p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.scripts.DoNothing._meta">
<code class="sig-name descname">_meta</code><em class="property"> = &lt;Options for DoNothing&gt;</em><a class="headerlink" href="#evennia.scripts.scripts.DoNothing._meta" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.DoNothing.at_script_creation">
<code class="sig-name descname">at_script_creation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#DoNothing.at_script_creation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.DoNothing.at_script_creation" title="Permalink to this definition"></a></dt>
<dd><p>Setup the script</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.scripts.DoNothing.path">
<code class="sig-name descname">path</code><em class="property"> = 'evennia.scripts.scripts.DoNothing'</em><a class="headerlink" href="#evennia.scripts.scripts.DoNothing.path" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.scripts.DoNothing.typename">
<code class="sig-name descname">typename</code><em class="property"> = 'DoNothing'</em><a class="headerlink" href="#evennia.scripts.scripts.DoNothing.typename" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.scripts.scripts.Store">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.scripts.</code><code class="sig-name descname">Store</code><span class="sig-paren">(</span><em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#Store"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.Store" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.scripts.scripts.DefaultScript" title="evennia.scripts.scripts.DefaultScript"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.DefaultScript</span></code></a></p>
<p>Simple storage script</p>
<dl class="exception">
<dt id="evennia.scripts.scripts.Store.DoesNotExist">
<em class="property">exception </em><code class="sig-name descname">DoesNotExist</code><a class="headerlink" href="#evennia.scripts.scripts.Store.DoesNotExist" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.DoesNotExist</span></code></p>
</dd></dl>
<dl class="exception">
<dt id="evennia.scripts.scripts.Store.MultipleObjectsReturned">
<em class="property">exception </em><code class="sig-name descname">MultipleObjectsReturned</code><a class="headerlink" href="#evennia.scripts.scripts.Store.MultipleObjectsReturned" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.MultipleObjectsReturned</span></code></p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.scripts.Store._meta">
<code class="sig-name descname">_meta</code><em class="property"> = &lt;Options for Store&gt;</em><a class="headerlink" href="#evennia.scripts.scripts.Store._meta" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="evennia.scripts.scripts.Store.at_script_creation">
<code class="sig-name descname">at_script_creation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/scripts.html#Store.at_script_creation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.scripts.Store.at_script_creation" title="Permalink to this definition"></a></dt>
<dd><p>Setup the script</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.scripts.Store.path">
<code class="sig-name descname">path</code><em class="property"> = 'evennia.scripts.scripts.Store'</em><a class="headerlink" href="#evennia.scripts.scripts.Store.path" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.scripts.Store.typename">
<code class="sig-name descname">typename</code><em class="property"> = 'Store'</em><a class="headerlink" href="#evennia.scripts.scripts.Store.typename" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.scripts.taskhandler">
<span id="evennia-scripts-taskhandler-module"></span><h2>evennia.scripts.taskhandler module<a class="headerlink" href="#module-evennia.scripts.taskhandler" title="Permalink to this headline"></a></h2>
<p>Module containing the task handler for Evennia deferred tasks, persistent or not.</p>
<dl class="class">
<dt id="evennia.scripts.taskhandler.TaskHandler">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.taskhandler.</code><code class="sig-name descname">TaskHandler</code><a class="reference internal" href="../_modules/evennia/scripts/taskhandler.html#TaskHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.taskhandler.TaskHandler" title="Permalink 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>A light singleton wrapper allowing to access permanent tasks.</p>
<p>When <cite>utils.delay</cite> is called, the task handler is used to create
the task. If <cite>utils.delay</cite> is called with <cite>persistent=True</cite>, the
task handler stores the new task and saves.</p>
<p>Its easier to access these tasks (should it be necessary) using
<cite>evennia.scripts.taskhandler.TASK_HANDLER</cite>, which contains one
instance of this class, and use its <cite>add</cite> and <cite>remove</cite> methods.</p>
<dl class="method">
<dt id="evennia.scripts.taskhandler.TaskHandler.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/taskhandler.html#TaskHandler.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.taskhandler.TaskHandler.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.taskhandler.TaskHandler.add">
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">timedelay</em>, <em class="sig-param">callback</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/taskhandler.html#TaskHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.taskhandler.TaskHandler.add" title="Permalink to this definition"></a></dt>
<dd><p>Add a new persistent task in the configuration.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>timedelay</strong> (<em>int</em><em> or </em><em>float</em>) time in sedconds before calling the callback.</p></li>
<li><p><strong>callback</strong> (<em>function</em><em> or </em><em>instance method</em>) the callback itself</p></li>
<li><p><strong>any</strong> (<em>any</em>) any additional positional arguments to send to the callback</p></li>
</ul>
</dd>
</dl>
<dl class="simple">
<dt>Kwargs:</dt><dd><p>persistent (bool, optional): persist the task (store it).
any (any): additional keyword arguments to send to the callback</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.taskhandler.TaskHandler.create_delays">
<code class="sig-name descname">create_delays</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/taskhandler.html#TaskHandler.create_delays"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.taskhandler.TaskHandler.create_delays" title="Permalink to this definition"></a></dt>
<dd><p>Create the delayed tasks for the persistent tasks.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This method should be automatically called when Evennia starts.</p>
</div>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.taskhandler.TaskHandler.do_task">
<code class="sig-name descname">do_task</code><span class="sig-paren">(</span><em class="sig-param">task_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/taskhandler.html#TaskHandler.do_task"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.taskhandler.TaskHandler.do_task" title="Permalink to this definition"></a></dt>
<dd><p>Execute the task (call its callback).</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>task_id</strong> (<em>int</em>) a valid task ID.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This will also remove it from the list of current tasks.</p>
</div>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.taskhandler.TaskHandler.load">
<code class="sig-name descname">load</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/taskhandler.html#TaskHandler.load"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.taskhandler.TaskHandler.load" title="Permalink to this definition"></a></dt>
<dd><p>Load from the ServerConfig.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This should be automatically called when Evennia starts.
It populates <cite>self.tasks</cite> according to the ServerConfig.</p>
</div>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.taskhandler.TaskHandler.remove">
<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param">task_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/taskhandler.html#TaskHandler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.taskhandler.TaskHandler.remove" title="Permalink to this definition"></a></dt>
<dd><p>Remove a persistent task without executing it.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>task_id</strong> (<em>int</em>) an existing task ID.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>A non-persistent task doesnt have a task_id, it is not stored
in the TaskHandler.</p>
</div>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.taskhandler.TaskHandler.save">
<code class="sig-name descname">save</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/taskhandler.html#TaskHandler.save"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.taskhandler.TaskHandler.save" title="Permalink to this definition"></a></dt>
<dd><p>Save the tasks in ServerConfig.</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.scripts.tests">
<span id="evennia-scripts-tests-module"></span><h2>evennia.scripts.tests module<a class="headerlink" href="#module-evennia.scripts.tests" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="evennia.scripts.tests.TestScript">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.tests.</code><code class="sig-name descname">TestScript</code><span class="sig-paren">(</span><em class="sig-param">methodName='runTest'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tests.html#TestScript"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tests.TestScript" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.utils.html#evennia.utils.test_resources.EvenniaTest" title="evennia.utils.test_resources.EvenniaTest"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.utils.test_resources.EvenniaTest</span></code></a></p>
<dl class="method">
<dt id="evennia.scripts.tests.TestScript.test_create">
<code class="sig-name descname">test_create</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tests.html#TestScript.test_create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tests.TestScript.test_create" title="Permalink to this definition"></a></dt>
<dd><p>Check the script can be created via the convenience method.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.scripts.tests.TestScriptDB">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.tests.</code><code class="sig-name descname">TestScriptDB</code><span class="sig-paren">(</span><em class="sig-param">methodName='runTest'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tests.html#TestScriptDB"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tests.TestScriptDB" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">unittest.case.TestCase</span></code></p>
<p>Check the singleton/static ScriptDB object works correctly</p>
<dl class="method">
<dt id="evennia.scripts.tests.TestScriptDB.setUp">
<code class="sig-name descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tests.html#TestScriptDB.setUp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tests.TestScriptDB.setUp" title="Permalink to this definition"></a></dt>
<dd><p>Hook method for setting up the test fixture before exercising it.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tests.TestScriptDB.tearDown">
<code class="sig-name descname">tearDown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tests.html#TestScriptDB.tearDown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tests.TestScriptDB.tearDown" title="Permalink to this definition"></a></dt>
<dd><p>Hook method for deconstructing the test fixture after testing it.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tests.TestScriptDB.test_delete">
<code class="sig-name descname">test_delete</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tests.html#TestScriptDB.test_delete"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tests.TestScriptDB.test_delete" title="Permalink to this definition"></a></dt>
<dd><p>Check the script is removed from the database</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tests.TestScriptDB.test_deleted_script_fails_start">
<code class="sig-name descname">test_deleted_script_fails_start</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tests.html#TestScriptDB.test_deleted_script_fails_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tests.TestScriptDB.test_deleted_script_fails_start" title="Permalink to this definition"></a></dt>
<dd><p>Would it ever be necessary to start a deleted script?</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tests.TestScriptDB.test_deleted_script_is_invalid">
<code class="sig-name descname">test_deleted_script_is_invalid</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tests.html#TestScriptDB.test_deleted_script_is_invalid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tests.TestScriptDB.test_deleted_script_is_invalid" title="Permalink to this definition"></a></dt>
<dd><p>Can deleted scripts be said to be valid?</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tests.TestScriptDB.test_double_delete">
<code class="sig-name descname">test_double_delete</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tests.html#TestScriptDB.test_double_delete"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tests.TestScriptDB.test_double_delete" title="Permalink to this definition"></a></dt>
<dd><p>What should happen? Isnt it already deleted?</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-evennia.scripts.tickerhandler">
<span id="evennia-scripts-tickerhandler-module"></span><h2>evennia.scripts.tickerhandler module<a class="headerlink" href="#module-evennia.scripts.tickerhandler" title="Permalink to this headline"></a></h2>
<p>TickerHandler</p>
<p>This implements an efficient Ticker which uses a subscription
model to tick subscribed objects at regular intervals.</p>
<p>The ticker mechanism is used by importing and accessing
the instantiated TICKER_HANDLER instance in this module. This
instance is run by the server; it will save its status across
server reloads and be started automaticall on boot.</p>
<p>Example:</p>
<dl>
<dt><a href="#id7"><span class="problematic" id="id8">``</span></a><a href="#id9"><span class="problematic" id="id10">`</span></a>python</dt><dd><p>from evennia.scripts.tickerhandler import TICKER_HANDLER</p>
<p># call tick myobj.at_tick(<a href="#id11"><span class="problematic" id="id12">*</span></a>args, <a href="#id13"><span class="problematic" id="id14">**</span></a>kwargs) every 15 seconds
TICKER_HANDLER.add(15, myobj.at_tick, <a href="#id15"><span class="problematic" id="id16">*</span></a>args, <a href="#id17"><span class="problematic" id="id18">**</span></a>kwargs)</p>
</dd>
</dl>
<p><a href="#id19"><span class="problematic" id="id20">``</span></a><a href="#id21"><span class="problematic" id="id22">`</span></a></p>
<p>You supply the interval to tick and a callable to call regularly with
any extra args/kwargs. The callable should either be a stand-alone
function in a module <em>or</em> the method on a <em>typeclassed</em> entity (that
is, on an object that can be safely and stably returned from the
database). Functions that are dynamically created or sits on
in-memory objects cannot be used by the tickerhandler (there is no way
to reference them safely across reboots and saves).</p>
<p>The handler will transparently set
up and add new timers behind the scenes to tick at given intervals,
using a TickerPool - all callables with the same interval will share
the interval ticker.</p>
<p>To remove:</p>
<dl class="simple">
<dt><a href="#id23"><span class="problematic" id="id24">``</span></a><a href="#id25"><span class="problematic" id="id26">`</span></a>python</dt><dd><p>TICKER_HANDLER.remove(15, myobj.at_tick)</p>
</dd>
</dl>
<p><a href="#id27"><span class="problematic" id="id28">``</span></a><a href="#id29"><span class="problematic" id="id30">`</span></a></p>
<p>Both interval and callable must be given since a single object can be subscribed
to many different tickers at the same time. You can also supply <cite>idstring</cite>
as an identifying string if you ever want to tick the callable at the same interval
but with different arguments (args/kwargs are not used for identifying the ticker). There
is also <cite>persistent=False</cite> if you dont want to make a ticker that dont survive a reload.
If either or both <cite>idstring</cite> or <cite>persistent</cite> has been changed from their defaults, they
must be supplied to the <cite>TICKER_HANDLER.remove</cite> call to properly identify the ticker
to remove.</p>
<p>The TickerHandlers functionality can be overloaded by modifying the
Ticker class and then changing TickerPool and TickerHandler to use the
custom classes</p>
<p><a href="#id31"><span class="problematic" id="id32">``</span></a><a href="#id33"><span class="problematic" id="id34">`</span></a>python
class MyTicker(Ticker):</p>
<blockquote>
<div><p># [doing custom stuff]</p>
</div></blockquote>
<dl class="simple">
<dt>class MyTickerPool(TickerPool):</dt><dd><p>ticker_class = MyTicker</p>
</dd>
<dt>class MyTickerHandler(TickerHandler):</dt><dd><p>ticker_pool_class = MyTickerPool</p>
</dd>
</dl>
<p><a href="#id35"><span class="problematic" id="id36">``</span></a><a href="#id37"><span class="problematic" id="id38">`</span></a></p>
<p>If one wants to duplicate TICKER_HANDLERs auto-saving feature in
a custom handler one can make a custom <cite>AT_STARTSTOP_MODULE</cite> entry to
call the handlers <cite>save()</cite> and <cite>restore()</cite> methods when the server reboots.</p>
<dl class="class">
<dt id="evennia.scripts.tickerhandler.Ticker">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.tickerhandler.</code><code class="sig-name descname">Ticker</code><span class="sig-paren">(</span><em class="sig-param">interval</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker" title="Permalink 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>Represents a repeatedly running task that calls
hooks repeatedly. Overload <cite>_callback</cite> to change the
way it operates.</p>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.Ticker.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">interval</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Set up the ticker</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>interval</strong> (<em>int</em>) The stepping interval.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.Ticker._callback">
<code class="sig-name descname">_callback</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker._callback"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker._callback" title="Permalink to this definition"></a></dt>
<dd><p>This will be called repeatedly every <cite>self.interval</cite> seconds.
<cite>self.subscriptions</cite> contain tuples of (obj, args, kwargs) for
each subscribing object.</p>
<p>If overloading, this callback is expected to handle all
subscriptions when it is triggered. It should not return
anything and should not traceback on poorly designed hooks.
The callback should ideally work under &#64;inlineCallbacks so it
can yield appropriately.</p>
<p>The _hook_key, which is passed down through the handler via
kwargs is used here to identify which hook method to call.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.Ticker.add">
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">store_key</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker.add" title="Permalink to this definition"></a></dt>
<dd><p>Sign up a subscriber to this ticker.
:param store_key: Unique storage hash for this ticker subscription.
:type store_key: str
:param args: Arguments to call the hook method with.
:type args: any, optional</p>
<dl class="simple">
<dt>Kwargs:</dt><dd><dl class="simple">
<dt>_start_delay (int): If set, this will be</dt><dd><p>used to delay the start of the trigger instead of
<cite>interval</cite>.</p>
</dd>
</dl>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.Ticker.remove">
<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param">store_key</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker.remove" title="Permalink to this definition"></a></dt>
<dd><p>Unsubscribe object from this ticker</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>store_key</strong> (<em>str</em>) Unique store key.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.Ticker.stop">
<code class="sig-name descname">stop</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker.stop" title="Permalink to this definition"></a></dt>
<dd><p>Kill the Task, regardless of subscriptions.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.Ticker.validate">
<code class="sig-name descname">validate</code><span class="sig-paren">(</span><em class="sig-param">start_delay=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker.validate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker.validate" title="Permalink to this definition"></a></dt>
<dd><p>Start/stop the task depending on how many subscribers we have
using it.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>start_delay</strong> (<em>int</em>) Time to way before starting.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.scripts.tickerhandler.TickerHandler">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.tickerhandler.</code><code class="sig-name descname">TickerHandler</code><span class="sig-paren">(</span><em class="sig-param">save_name='ticker_storage'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler" title="Permalink 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>The Tickerhandler maintains a pool of tasks for subscribing
objects to various tick rates. The pool maintains creation
instructions and and re-applies them at a server restart.</p>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerHandler.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">save_name='ticker_storage'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize handler</p>
<dl class="simple">
<dt>save_name (str, optional): The name of the ServerConfig</dt><dd><p>instance to store the handler state persistently.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerHandler._get_callback">
<code class="sig-name descname">_get_callback</code><span class="sig-paren">(</span><em class="sig-param">callback</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler._get_callback"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler._get_callback" title="Permalink to this definition"></a></dt>
<dd><p>Analyze callback and determine its consituents</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>callback</strong> (<em>function</em><em> or </em><em>method</em>) This is either a stand-alone
function or class method on a typeclassed entitye (that is,
an entity that can be saved to the database).</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><dl class="simple">
<dt>This is a tuple of the form <cite>(obj, path, callfunc)</cite>,</dt><dd><p>where <cite>obj</cite> is the database object the callback is defined on
if its a method (otherwise <cite>None</cite>) and vice-versa, <cite>path</cite> is
the python-path to the stand-alone function (<cite>None</cite> if a method).
The <cite>callfunc</cite> is either the name of the method to call or the
callable function object itself.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>ret (tuple)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerHandler._store_key">
<code class="sig-name descname">_store_key</code><span class="sig-paren">(</span><em class="sig-param">obj</em>, <em class="sig-param">path</em>, <em class="sig-param">interval</em>, <em class="sig-param">callfunc</em>, <em class="sig-param">idstring=''</em>, <em class="sig-param">persistent=True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler._store_key"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler._store_key" title="Permalink to this definition"></a></dt>
<dd><p>Tries to create a store_key for the object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>obj</strong> (<em>Object</em><em>, </em><em>tuple</em><em> or </em><em>None</em>) Subscribing object if any. If a tuple, this is
a packed_obj tuple from dbserialize.</p></li>
<li><p><strong>path</strong> (<em>str</em><em> or </em><em>None</em>) Python-path to callable, if any.</p></li>
<li><p><strong>interval</strong> (<em>int</em>) Ticker interval.</p></li>
<li><p><strong>callfunc</strong> (<em>callable</em><em> or </em><em>str</em>) This is either the callable function or
the name of the method to call. Note that the callable is never
stored in the key; that is uniquely identified with the python-path.</p></li>
<li><p><strong>idstring</strong> (<em>str</em><em>, </em><em>optional</em>) Additional separator between
different subscription types.</p></li>
<li><p><strong>persistent</strong> (<em>bool</em><em>, </em><em>optional</em>) If this ticker should survive a system
shutdown or not.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><dl class="simple">
<dt>A tuple <a href="#id39"><span class="problematic" id="id40">`</span></a>(packed_obj, methodname, outpath, interval,</dt><dd><p>idstring, persistent)` that uniquely identifies the
ticker. Here, <cite>packed_obj</cite> is the unique string representation of the
object or <cite>None</cite>. The <cite>methodname</cite> is the string name of the method on
<cite>packed_obj</cite> to call, or <cite>None</cite> if <cite>packed_obj</cite> is unset. <cite>path</cite> is
the Python-path to a non-method callable, or <cite>None</cite>. Finally, <cite>interval</cite>
<cite>idstring</cite> and <cite>persistent</cite> are integers, strings and bools respectively.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>store_key (tuple)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerHandler.add">
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">interval=60</em>, <em class="sig-param">callback=None</em>, <em class="sig-param">idstring=''</em>, <em class="sig-param">persistent=True</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.add" title="Permalink to this definition"></a></dt>
<dd><p>Add subscription to tickerhandler</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>interval</strong> (<em>int</em><em>, </em><em>optional</em>) Interval in seconds between calling
<cite>callable(*args, **kwargs)</cite></p></li>
<li><p><strong>callable</strong> (<em>callable function</em><em> or </em><em>method</em><em>, </em><em>optional</em>) This
should either be a stand-alone function or a method on a
typeclassed entity (that is, one that can be saved to the
database).</p></li>
<li><p><strong>idstring</strong> (<em>str</em><em>, </em><em>optional</em>) Identifier for separating
this ticker-subscription from others with the same
interval. Allows for managing multiple calls with
the same time interval and callback.</p></li>
<li><p><strong>persistent</strong> (<em>bool</em><em>, </em><em>optional</em>) A ticker will always survive
a server reload. If this is unset, the ticker will be
deleted by a server shutdown.</p></li>
<li><p><strong>kwargs</strong> (<em>args</em><em>,</em>) These will be passed into the
callback every time it is called. This must be data possible
to pickle!</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><dl class="simple">
<dt>The immutable store-key for this ticker. This can</dt><dd><p>be stored and passed into <cite>.remove(store_key=store_key)</cite> later to
easily stop this ticker later.</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>store_key (tuple)</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The callback will be identified by type and stored either as
as combination of serialized database object + methodname or
as a python-path to the module + funcname. These strings will
be combined iwth <cite>interval</cite> and <cite>idstring</cite> to define a
unique storage key for saving. These must thus all be supplied
when wanting to modify/remove the ticker later.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerHandler.all">
<code class="sig-name descname">all</code><span class="sig-paren">(</span><em class="sig-param">interval=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.all" title="Permalink to this definition"></a></dt>
<dd><p>Get all subscriptions.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>interval</strong> (<em>int</em>) Limit match to tickers with this interval.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><dl class="simple">
<dt>If <cite>interval</cite> was given, this is a list of</dt><dd><p>tickers using that interval.</p>
</dd>
<dt>tickerpool_layout (dict): If <cite>interval</cite> was <em>not</em> given,</dt><dd><p>this is a dict {interval1: [ticker1, ticker2, …], …}</p>
</dd>
</dl>
</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>tickers (list)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerHandler.all_display">
<code class="sig-name descname">all_display</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.all_display"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.all_display" title="Permalink to this definition"></a></dt>
<dd><p>Get all tickers on an easily displayable form.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A list of all storekeys</p>
</dd>
<dt class="field-even">Return type</dt>
<dd class="field-even"><p>tickers (dict)</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerHandler.clear">
<code class="sig-name descname">clear</code><span class="sig-paren">(</span><em class="sig-param">interval=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.clear"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.clear" title="Permalink to this definition"></a></dt>
<dd><p>Stop/remove tickers from handler.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>interval</strong> (<em>int</em>) Only stop tickers with this interval.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>This is the only supported way to kill tickers related to
non-db objects.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerHandler.remove">
<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param">interval=60</em>, <em class="sig-param">callback=None</em>, <em class="sig-param">idstring=''</em>, <em class="sig-param">persistent=True</em>, <em class="sig-param">store_key=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.remove" title="Permalink to this definition"></a></dt>
<dd><p>Remove ticker subscription from handler.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>interval</strong> (<em>int</em><em>, </em><em>optional</em>) Interval of ticker to remove.</p></li>
<li><p><strong>callback</strong> (<em>callable function</em><em> or </em><em>method</em>) Either a function or
the method of a typeclassed object.</p></li>
<li><p><strong>idstring</strong> (<em>str</em><em>, </em><em>optional</em>) Identifier id of ticker to remove.</p></li>
<li><p><strong>persistent</strong> (<em>bool</em><em>, </em><em>optional</em>) Whether this ticker is persistent or not.</p></li>
<li><p><strong>store_key</strong> (<em>str</em><em>, </em><em>optional</em>) If given, all other kwargs are ignored and only
this is used to identify the ticker.</p></li>
</ul>
</dd>
<dt class="field-even">Raises</dt>
<dd class="field-even"><p><strong>KeyError</strong> If no matching ticker was found to remove.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The store-key is normally built from the interval/callback/idstring/persistent values;
but if the <cite>store_key</cite> is explicitly given, this is used instead.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerHandler.restore">
<code class="sig-name descname">restore</code><span class="sig-paren">(</span><em class="sig-param">server_reload=True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.restore"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.restore" title="Permalink to this definition"></a></dt>
<dd><p>Restore ticker_storage from database and re-initialize the
handler from storage. This is triggered by the server at
restart.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>server_reload</strong> (<em>bool</em><em>, </em><em>optional</em>) If this is False, it means
the server went through a cold reboot and all
non-persistent tickers must be killed.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerHandler.save">
<code class="sig-name descname">save</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.save"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.save" title="Permalink to this definition"></a></dt>
<dd><p>Save ticker_storage as a serialized string into a temporary
ServerConf field. Whereas saving is done on the fly, if called
by server when it shuts down, the current timer of each ticker
will be saved so it can start over from that point.</p>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.tickerhandler.TickerHandler.ticker_pool_class">
<code class="sig-name descname">ticker_pool_class</code><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.ticker_pool_class" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="#evennia.scripts.tickerhandler.TickerPool" title="evennia.scripts.tickerhandler.TickerPool"><code class="xref py py-class docutils literal notranslate"><span class="pre">TickerPool</span></code></a></p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="evennia.scripts.tickerhandler.TickerPool">
<em class="property">class </em><code class="sig-prename descclassname">evennia.scripts.tickerhandler.</code><code class="sig-name descname">TickerPool</code><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerPool"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool" title="Permalink 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>This maintains a pool of
<cite>evennia.scripts.scripts.ExtendedLoopingCall</cite> tasks for calling
subscribed objects at given times.</p>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerPool.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerPool.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize the pool.</p>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerPool.add">
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">store_key</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerPool.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool.add" title="Permalink to this definition"></a></dt>
<dd><p>Add new ticker subscriber.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>store_key</strong> (<em>str</em>) Unique storage hash.</p></li>
<li><p><strong>args</strong> (<em>any</em><em>, </em><em>optional</em>) Arguments to send to the hook method.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerPool.remove">
<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param">store_key</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerPool.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool.remove" title="Permalink to this definition"></a></dt>
<dd><p>Remove subscription from pool.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>store_key</strong> (<em>str</em>) Unique storage hash to remove</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="evennia.scripts.tickerhandler.TickerPool.stop">
<code class="sig-name descname">stop</code><span class="sig-paren">(</span><em class="sig-param">interval=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerPool.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool.stop" title="Permalink to this definition"></a></dt>
<dd><p>Stop all scripts in pool. This is done at server reload since
restoring the pool will automatically re-populate the pool.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>interval</strong> (<em>int</em><em>, </em><em>optional</em>) Only stop tickers with this
interval.</p>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="evennia.scripts.tickerhandler.TickerPool.ticker_class">
<code class="sig-name descname">ticker_class</code><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool.ticker_class" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="#evennia.scripts.tickerhandler.Ticker" title="evennia.scripts.tickerhandler.Ticker"><code class="xref py py-class docutils literal notranslate"><span class="pre">Ticker</span></code></a></p>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="evennia.scripts.tickerhandler._GA">
<code class="sig-prename descclassname">evennia.scripts.tickerhandler.</code><code class="sig-name descname">_GA</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.scripts.tickerhandler._GA" title="Permalink to this definition"></a></dt>
<dd><p>Return getattr(self, name).</p>
</dd></dl>
<dl class="function">
<dt id="evennia.scripts.tickerhandler._SA">
<code class="sig-prename descclassname">evennia.scripts.tickerhandler.</code><code class="sig-name descname">_SA</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.scripts.tickerhandler._SA" title="Permalink to this definition"></a></dt>
<dd><p>Implement setattr(self, name, value).</p>
</dd></dl>
</div>
</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>
<p><h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">evennia.scripts package</a><ul>
<li><a class="reference internal" href="#subpackages">Subpackages</a></li>
<li><a class="reference internal" href="#submodules">Submodules</a></li>
<li><a class="reference internal" href="#module-evennia.scripts.admin">evennia.scripts.admin module</a></li>
<li><a class="reference internal" href="#module-evennia.scripts.manager">evennia.scripts.manager module</a></li>
<li><a class="reference internal" href="#module-evennia.scripts.models">evennia.scripts.models module</a></li>
<li><a class="reference internal" href="#module-evennia.scripts.monitorhandler">evennia.scripts.monitorhandler module</a></li>
<li><a class="reference internal" href="#module-evennia.scripts.scripthandler">evennia.scripts.scripthandler module</a></li>
<li><a class="reference internal" href="#module-evennia.scripts.scripts">evennia.scripts.scripts module</a></li>
<li><a class="reference internal" href="#module-evennia.scripts.taskhandler">evennia.scripts.taskhandler module</a></li>
<li><a class="reference internal" href="#module-evennia.scripts.tests">evennia.scripts.tests module</a></li>
<li><a class="reference internal" href="#module-evennia.scripts.tickerhandler">evennia.scripts.tickerhandler module</a></li>
</ul>
</li>
</ul>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.scripts.rst.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div>
<h3>Versions</h3>
<ul>
<li><a href="evennia.scripts.html">1.0-dev (develop branch)</a></li>
<li><a href="../../0.9.1/api/evennia.scripts.html">0.9.1 (master 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 documentation</a> &#187;</li>
<li class="nav-item nav-item-last"><a href="#">evennia.scripts package</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.4.4.
</div>
</body>
</html>