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

305 lines
No EOL
20 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.monitorhandler &#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.scripts.ondemandhandler" href="evennia.scripts.ondemandhandler.html" />
<link rel="prev" title="evennia.scripts.models" href="evennia.scripts.models.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.scripts.ondemandhandler.html" title="evennia.scripts.ondemandhandler"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.scripts.models.html" title="evennia.scripts.models"
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.monitorhandler</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.scripts.monitorhandler">
<span id="evennia-scripts-monitorhandler"></span><h1>evennia.scripts.monitorhandler<a class="headerlink" href="#module-evennia.scripts.monitorhandler" title="Link to this heading"></a></h1>
<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="py class">
<dt class="sig sig-object py" id="evennia.scripts.monitorhandler.MonitorHandler">
<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.monitorhandler.</span></span><span class="sig-name descname"><span class="pre">MonitorHandler</span></span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler" 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 is a resource singleton that allows for registering
callbacks for when a field or Attribute is updated (saved).</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.monitorhandler.MonitorHandler.__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/monitorhandler.html#MonitorHandler.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.__init__" title="Link to this definition"></a></dt>
<dd><p>Initialize the handler.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.monitorhandler.MonitorHandler.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/monitorhandler.html#MonitorHandler.save"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.save" title="Link 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>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.monitorhandler.MonitorHandler.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/monitorhandler.html#MonitorHandler.restore"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.restore" title="Link 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<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.monitorhandler.MonitorHandler.at_update">
<span class="sig-name descname"><span class="pre">at_update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">obj</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fieldname</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.at_update"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.at_update" title="Link to this definition"></a></dt>
<dd><p>Called by the field/attribute as it saves.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.monitorhandler.MonitorHandler.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">obj</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fieldname</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">callback</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">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">category</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.add"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.add" title="Link 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 <strong>db_key</strong>, not just <strong>key</strong>).</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>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>
<li><p><strong>category</strong> (<em>str</em><em>, </em><em>optional</em>) This is only used if <strong>fieldname</strong> refers to
an Attribute (i.e. it does not start with <strong>db_</strong>). You must specify this
if you want to target an Attribute with a category.</p></li>
</ul>
</dd>
<dt class="field-even">Keyword Arguments<span class="colon">:</span></dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>session</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) If this keyword is given, the monitorhandler will
correctly analyze it and remove the monitor if after a reload/reboot
the session is no longer valid.</p></li>
<li><p><strong>any</strong> (<em>any</em>) Any other kwargs are passed on to the callback. Remember that
all kwargs must be possible to pickle!</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.monitorhandler.MonitorHandler.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">obj</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">fieldname</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">category</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/monitorhandler.html#MonitorHandler.remove"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.remove" title="Link to this definition"></a></dt>
<dd><p>Remove a monitor.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.monitorhandler.MonitorHandler.clear">
<span class="sig-name descname"><span class="pre">clear</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.clear"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.clear" title="Link to this definition"></a></dt>
<dd><p>Delete all monitors.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.monitorhandler.MonitorHandler.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">obj</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/monitorhandler.html#MonitorHandler.all"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.all" title="Link 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<span class="colon">:</span></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<span class="colon">:</span></dt>
<dd class="field-even"><p><em>monitors (list)</em> The handled monitors.</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.monitorhandler</a><ul>
<li><a class="reference internal" href="#evennia.scripts.monitorhandler.MonitorHandler"><code class="docutils literal notranslate"><span class="pre">MonitorHandler</span></code></a><ul>
<li><a class="reference internal" href="#evennia.scripts.monitorhandler.MonitorHandler.__init__"><code class="docutils literal notranslate"><span class="pre">MonitorHandler.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.monitorhandler.MonitorHandler.save"><code class="docutils literal notranslate"><span class="pre">MonitorHandler.save()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.monitorhandler.MonitorHandler.restore"><code class="docutils literal notranslate"><span class="pre">MonitorHandler.restore()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.monitorhandler.MonitorHandler.at_update"><code class="docutils literal notranslate"><span class="pre">MonitorHandler.at_update()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.monitorhandler.MonitorHandler.add"><code class="docutils literal notranslate"><span class="pre">MonitorHandler.add()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.monitorhandler.MonitorHandler.remove"><code class="docutils literal notranslate"><span class="pre">MonitorHandler.remove()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.monitorhandler.MonitorHandler.clear"><code class="docutils literal notranslate"><span class="pre">MonitorHandler.clear()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.monitorhandler.MonitorHandler.all"><code class="docutils literal notranslate"><span class="pre">MonitorHandler.all()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.scripts.models.html"
title="previous chapter">evennia.scripts.models</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.scripts.ondemandhandler.html"
title="next chapter">evennia.scripts.ondemandhandler</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.monitorhandler.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.scripts.ondemandhandler.html" title="evennia.scripts.ondemandhandler"
>next</a> |</li>
<li class="right" >
<a href="evennia.scripts.models.html" title="evennia.scripts.models"
>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.monitorhandler</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>