evennia/docs/latest/api/evennia.scripts.tickerhandler.html
Evennia docbuilder action 243d596662 Updated HTML docs.
2025-08-15 18:14:21 +00:00

540 lines
No EOL
41 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

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

<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>evennia.scripts.tickerhandler &#8212; Evennia latest documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d75fae25" />
<link rel="stylesheet" type="text/css" href="../_static/nature.css?v=279e0f84" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=e4a91a55" />
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="evennia.server" href="evennia.server.html" />
<link rel="prev" title="evennia.scripts.taskhandler" href="evennia.scripts.taskhandler.html" />
</head><body>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.server.html" title="evennia.server"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.scripts.taskhandler.html" title="evennia.scripts.taskhandler"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.scripts.html" accesskey="U">evennia.scripts</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.scripts.tickerhandler</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.scripts.tickerhandler">
<span id="evennia-scripts-tickerhandler"></span><h1>evennia.scripts.tickerhandler<a class="headerlink" href="#module-evennia.scripts.tickerhandler" title="Link to this heading"></a></h1>
<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>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">evennia.scripts.tickerhandler</span><span class="w"> </span><span class="kn">import</span> <span class="n">TICKER_HANDLER</span>
<span class="c1"># call tick myobj.at_tick(*args, **kwargs) every 15 seconds</span>
<span class="n">TICKER_HANDLER</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span> <span class="n">myobj</span><span class="o">.</span><span class="n">at_tick</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</pre></div>
</div>
<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>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">TICKER_HANDLER</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span> <span class="n">myobj</span><span class="o">.</span><span class="n">at_tick</span><span class="p">)</span>
</pre></div>
</div>
<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 <strong>idstring</strong>
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 <strong>persistent=False</strong> if you dont want to make a ticker that dont survive a reload.
If either or both <strong>idstring</strong> or <strong>persistent</strong> has been changed from their defaults, they
must be supplied to the <strong>TICKER_HANDLER.remove</strong> 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>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">MyTicker</span><span class="p">(</span><span class="n">Ticker</span><span class="p">):</span>
<span class="c1"># [doing custom stuff]</span>
<span class="k">class</span><span class="w"> </span><span class="nc">MyTickerPool</span><span class="p">(</span><span class="n">TickerPool</span><span class="p">):</span>
<span class="n">ticker_class</span> <span class="o">=</span> <span class="n">MyTicker</span>
<span class="k">class</span><span class="w"> </span><span class="nc">MyTickerHandler</span><span class="p">(</span><span class="n">TickerHandler</span><span class="p">):</span>
<span class="n">ticker_pool_class</span> <span class="o">=</span> <span class="n">MyTickerPool</span>
</pre></div>
</div>
<p>If one wants to duplicate TICKER_HANDLERs auto-saving feature in
a custom handler one can make a custom <strong>AT_STARTSTOP_MODULE</strong> entry to
call the handlers <strong>save()</strong> and <strong>restore()</strong> methods when the server reboots.</p>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.Ticker">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.scripts.tickerhandler.</span></span><span class="sig-name descname"><span class="pre">Ticker</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">interval</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Represents a repeatedly running task that calls
hooks repeatedly. Overload <strong>_callback</strong> to change the
way it operates.</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.Ticker.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">interval</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker.__init__" title="Link to this definition"></a></dt>
<dd><p>Set up the ticker</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>interval</strong> (<em>int</em>) The stepping interval.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.Ticker.validate">
<span class="sig-name descname"><span class="pre">validate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">start_delay</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker.validate"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker.validate" title="Link 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<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>start_delay</strong> (<em>int</em><em>, </em><em>optional</em>) Time to way before starting.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.Ticker.add">
<span class="sig-name descname"><span class="pre">add</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">store_key</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker.add"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker.add" title="Link 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="field-list simple">
<dt class="field-odd">Keyword Arguments<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>_start_delay</strong> (<em>int</em>) If set, this will be
used to delay the start of the trigger instead of
<strong>interval</strong>.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.Ticker.remove">
<span class="sig-name descname"><span class="pre">remove</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">store_key</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#Ticker.remove"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker.remove" title="Link to this definition"></a></dt>
<dd><p>Unsubscribe object from this ticker</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>store_key</strong> (<em>str</em>) Unique store key.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.Ticker.stop">
<span class="sig-name descname"><span class="pre">stop</span></span><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"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.Ticker.stop" title="Link to this definition"></a></dt>
<dd><p>Kill the Task, regardless of subscriptions.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerPool">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.scripts.tickerhandler.</span></span><span class="sig-name descname"><span class="pre">TickerPool</span></span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerPool"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>This maintains a pool of
<strong>evennia.scripts.scripts.ExtendedLoopingCall</strong> tasks for calling
subscribed objects at given times.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerPool.ticker_class">
<span class="sig-name descname"><span class="pre">ticker_class</span></span><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool.ticker_class" title="Link 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>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerPool.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerPool.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool.__init__" title="Link to this definition"></a></dt>
<dd><p>Initialize the pool.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerPool.add">
<span class="sig-name descname"><span class="pre">add</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">store_key</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerPool.add"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool.add" title="Link to this definition"></a></dt>
<dd><p>Add new ticker subscriber.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>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="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerPool.remove">
<span class="sig-name descname"><span class="pre">remove</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">store_key</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerPool.remove"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool.remove" title="Link to this definition"></a></dt>
<dd><p>Remove subscription from pool.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></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="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerPool.stop">
<span class="sig-name descname"><span class="pre">stop</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">interval</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerPool.stop"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerPool.stop" title="Link 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<span class="colon">:</span></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>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerHandler">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.scripts.tickerhandler.</span></span><span class="sig-name descname"><span class="pre">TickerHandler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">save_name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'ticker_storage'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>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="py attribute">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerHandler.ticker_pool_class">
<span class="sig-name descname"><span class="pre">ticker_pool_class</span></span><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.ticker_pool_class" title="Link 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>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerHandler.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">save_name</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'ticker_storage'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.__init__" title="Link 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="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerHandler.save">
<span class="sig-name descname"><span class="pre">save</span></span><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"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.save" title="Link 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="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerHandler.restore">
<span class="sig-name descname"><span class="pre">restore</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">server_reload</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.restore"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.restore" title="Link 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<span class="colon">:</span></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="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerHandler.add">
<span class="sig-name descname"><span class="pre">add</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">interval</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">60</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">idstring</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">persistent</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.add"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.add" title="Link to this definition"></a></dt>
<dd><p>Add subscription to tickerhandler</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>*args</strong> Will be passed into the callback every time its called. This must be
data possible to pickle.</p>
</dd>
<dt class="field-even">Keyword Arguments<span class="colon">:</span></dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>interval</strong> (<em>int</em>) Interval in seconds between calling
<strong>callable(*args, **kwargs)</strong></p></li>
<li><p><strong>callable</strong> (<em>callable function</em><em> or </em><em>method</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>) 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>) 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>called.</strong> (<em>**kwargs Will be passed into the callback every time it is</em>) This must be data possible to pickle.</p></li>
</ul>
</dd>
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p><p><em>store_key (tuple)</em> </p>
<dl class="simple">
<dt>The immutable store-key for this ticker. This can</dt><dd><p>be stored and passed into <strong>.remove(store_key=store_key)</strong> later to
easily stop this ticker later.</p>
</dd>
</dl>
</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 <strong>interval</strong> and <strong>idstring</strong> 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="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerHandler.remove">
<span class="sig-name descname"><span class="pre">remove</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">interval</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">60</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">callback</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">idstring</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">persistent</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">store_key</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.remove"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.remove" title="Link to this definition"></a></dt>
<dd><p>Remove ticker subscription from handler.</p>
<dl class="field-list simple">
<dt class="field-odd">Keyword Arguments<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>interval</strong> (<em>int</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>) Identifier id of ticker to remove.</p></li>
<li><p><strong>persistent</strong> (<em>bool</em>) Whether this ticker is persistent or not.</p></li>
<li><p><strong>store_key</strong> (<em>str</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<span class="colon">:</span></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 <strong>store_key</strong> is explicitly given, this is used instead.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerHandler.clear">
<span class="sig-name descname"><span class="pre">clear</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">interval</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.clear"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.clear" title="Link to this definition"></a></dt>
<dd><p>Stop/remove tickers from handler.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></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>
<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="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerHandler.all">
<span class="sig-name descname"><span class="pre">all</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">interval</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/tickerhandler.html#TickerHandler.all"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.all" title="Link to this definition"></a></dt>
<dd><p>Get all ticker subscriptions.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>interval</strong> (<em>int</em><em>, </em><em>optional</em>) Limit match to tickers with this interval.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p><em>list or dict</em> If <strong>interval</strong> was given, this is a list of tickers using that interval.
If <strong>interval</strong> was <em>not</em> given, this is a dict
<strong>{interval1: [ticker1, ticker2, …], …}</strong></p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.tickerhandler.TickerHandler.all_display">
<span class="sig-name descname"><span class="pre">all_display</span></span><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"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.tickerhandler.TickerHandler.all_display" title="Link 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<span class="colon">:</span></dt>
<dd class="field-odd"><p><em>tickers (dict)</em> A list of all storekeys</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo of Evennia"/>
</a></p>
<search id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
<h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">evennia.scripts.tickerhandler</a><ul>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.Ticker"><code class="docutils literal notranslate"><span class="pre">Ticker</span></code></a><ul>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.Ticker.__init__"><code class="docutils literal notranslate"><span class="pre">Ticker.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.Ticker.validate"><code class="docutils literal notranslate"><span class="pre">Ticker.validate()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.Ticker.add"><code class="docutils literal notranslate"><span class="pre">Ticker.add()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.Ticker.remove"><code class="docutils literal notranslate"><span class="pre">Ticker.remove()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.Ticker.stop"><code class="docutils literal notranslate"><span class="pre">Ticker.stop()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerPool"><code class="docutils literal notranslate"><span class="pre">TickerPool</span></code></a><ul>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerPool.ticker_class"><code class="docutils literal notranslate"><span class="pre">TickerPool.ticker_class</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerPool.__init__"><code class="docutils literal notranslate"><span class="pre">TickerPool.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerPool.add"><code class="docutils literal notranslate"><span class="pre">TickerPool.add()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerPool.remove"><code class="docutils literal notranslate"><span class="pre">TickerPool.remove()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerPool.stop"><code class="docutils literal notranslate"><span class="pre">TickerPool.stop()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerHandler"><code class="docutils literal notranslate"><span class="pre">TickerHandler</span></code></a><ul>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerHandler.ticker_pool_class"><code class="docutils literal notranslate"><span class="pre">TickerHandler.ticker_pool_class</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerHandler.__init__"><code class="docutils literal notranslate"><span class="pre">TickerHandler.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerHandler.save"><code class="docutils literal notranslate"><span class="pre">TickerHandler.save()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerHandler.restore"><code class="docutils literal notranslate"><span class="pre">TickerHandler.restore()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerHandler.add"><code class="docutils literal notranslate"><span class="pre">TickerHandler.add()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerHandler.remove"><code class="docutils literal notranslate"><span class="pre">TickerHandler.remove()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerHandler.clear"><code class="docutils literal notranslate"><span class="pre">TickerHandler.clear()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerHandler.all"><code class="docutils literal notranslate"><span class="pre">TickerHandler.all()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.tickerhandler.TickerHandler.all_display"><code class="docutils literal notranslate"><span class="pre">TickerHandler.all_display()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.scripts.taskhandler.html"
title="previous chapter">evennia.scripts.taskhandler</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.server.html"
title="next chapter">evennia.server</a></p>
</div>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.scripts.tickerhandler.md.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
<li><a href="https://github.com/evennia/evennia">Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li>
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Doc Versions</h3>
<ul>
<li>
<a href="https://www.evennia.com/docs/latest/index.html">latest (main branch)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/5.x/index.html">v5.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/4.x/index.html">v4.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/3.x/index.html">v3.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/2.x/index.html">v2.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/1.x/index.html">v1.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/0.x/index.html">v0.9.5 branch (outdated)</a>
</li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.server.html" title="evennia.server"
>next</a> |</li>
<li class="right" >
<a href="evennia.scripts.taskhandler.html" title="evennia.scripts.taskhandler"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.scripts.html" >evennia.scripts</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.scripts.tickerhandler</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2024, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
</div>
</body>
</html>