evennia/docs/latest/api/evennia.contrib.base_systems.ingame_python.scripts.html
Evennia docbuilder action 4544902e08 Updated HTML docs.
2026-02-15 17:42:43 +00:00

579 lines
No EOL
49 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.contrib.base_systems.ingame_python.scripts &#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.contrib.base_systems.ingame_python.tests" href="evennia.contrib.base_systems.ingame_python.tests.html" />
<link rel="prev" title="evennia.contrib.base_systems.ingame_python.eventfuncs" href="evennia.contrib.base_systems.ingame_python.eventfuncs.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.contrib.base_systems.ingame_python.tests.html" title="evennia.contrib.base_systems.ingame_python.tests"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.contrib.base_systems.ingame_python.eventfuncs.html" title="evennia.contrib.base_systems.ingame_python.eventfuncs"
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.contrib.html" >evennia.contrib</a> &#187;</li>
<li class="nav-item nav-item-5"><a href="evennia.contrib.base_systems.html" >evennia.contrib.base_systems</a> &#187;</li>
<li class="nav-item nav-item-6"><a href="evennia.contrib.base_systems.ingame_python.html" accesskey="U">evennia.contrib.base_systems.ingame_python</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.base_systems.ingame_python.scripts</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.contrib.base_systems.ingame_python.scripts">
<span id="evennia-contrib-base-systems-ingame-python-scripts"></span><h1>evennia.contrib.base_systems.ingame_python.scripts<a class="headerlink" href="#module-evennia.contrib.base_systems.ingame_python.scripts" title="Link to this heading"></a></h1>
<p>Scripts for the in-game Python system.</p>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler">
<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.contrib.base_systems.ingame_python.scripts.</span></span><span class="sig-name descname"><span class="pre">EventHandler</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript" title="evennia.scripts.scripts.DefaultScript"><code class="xref py py-class docutils literal notranslate"><span class="pre">DefaultScript</span></code></a></p>
<p>The event handler that contains all events in a global script.</p>
<p>This script shouldnt be created more than once. It contains
event (in a non-persistent attribute) and callbacks (in a
persistent attribute). The script method would help adding,
editing and deleting these events and callbacks.</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.at_script_creation">
<span class="sig-name descname"><span class="pre">at_script_creation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.at_script_creation"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.at_script_creation" title="Link to this definition"></a></dt>
<dd><p>Hook called when the script is created.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.at_server_start">
<span class="sig-name descname"><span class="pre">at_server_start</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.at_server_start"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.at_server_start" title="Link to this definition"></a></dt>
<dd><p>Set up the event system when starting.</p>
<p>Note that this hook is called every time the server restarts
(including when its reloaded). This hook performs the following
tasks:</p>
<ul class="simple">
<li><p>Create temporarily stored events.</p></li>
<li><p>Generate locals (individual events namespace).</p></li>
<li><p>Load eventfuncs, including user-defined ones.</p></li>
<li><p>Re-schedule tasks that arent set to fire anymore.</p></li>
<li><p>Effectively connect the handler to the main script.</p></li>
</ul>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.get_events">
<span class="sig-name descname"><span class="pre">get_events</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">obj</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.get_events"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.get_events" title="Link to this definition"></a></dt>
<dd><p>Return a dictionary of events on this 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><em> or </em><em>typeclass</em>) the connected object or a general typeclass.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A dictionary of the objects events.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Events would define what the object can have as
callbacks. Note, however, that chained callbacks will not
appear in events and are handled separately.</p>
<p>You can also request the events of a typeclass, not a
connected object. This is useful to get the global list
of events for a typeclass that has no object yet.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.get_variable">
<span class="sig-name descname"><span class="pre">get_variable</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">variable_name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.get_variable"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.get_variable" title="Link to this definition"></a></dt>
<dd><p>Return the variable defined in the locals.</p>
<p>This can be very useful to check the value of a variable that can be modified in an event, and whose value will be used in code. This system allows additional customization.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>variable_name</strong> (<em>str</em>) the name of the variable to return.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>The variable if found in the locals.
None if not found in the locals.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This will return the variable from the current locals.
Keep in mind that locals are shared between events. As
every event is called one by one, this doesnt pose
additional problems if you get the variable right after
an event has been executed. If, however, you differ,
theres no guarantee the variable will be here or will
mean the same thing.</p>
</div>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.get_callbacks">
<span class="sig-name descname"><span class="pre">get_callbacks</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">obj</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.get_callbacks"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.get_callbacks" title="Link to this definition"></a></dt>
<dd><p>Return a dictionary of the objects callbacks.</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 connected objects.</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>A dictionary of the objects callbacks.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This method can be useful to override in some contexts,
when several objects would share callbacks.</p>
</div>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.add_callback">
<span class="sig-name descname"><span class="pre">add_callback</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">callback_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">author</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">valid</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">parameters</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">''</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.add_callback"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.add_callback" title="Link to this definition"></a></dt>
<dd><p>Add the specified callback.</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>Object</em>) the Evennia typeclassed object to be extended.</p></li>
<li><p><strong>callback_name</strong> (<em>str</em>) the name of the callback to add.</p></li>
<li><p><strong>code</strong> (<em>str</em>) the Python code associated with this callback.</p></li>
<li><p><strong>author</strong> (<em>Character</em><em> or </em><em>Account</em><em>, </em><em>optional</em>) the author of the callback.</p></li>
<li><p><strong>valid</strong> (<em>bool</em><em>, </em><em>optional</em>) should the callback be connected?</p></li>
<li><p><strong>parameters</strong> (<em>str</em><em>, </em><em>optional</em>) optional parameters.</p></li>
</ul>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This method doesnt check that the callback type exists.</p>
</div>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.edit_callback">
<span class="sig-name descname"><span class="pre">edit_callback</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">callback_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">number</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">author</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">valid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.edit_callback"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.edit_callback" title="Link to this definition"></a></dt>
<dd><p>Edit the specified callback.</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>Object</em>) the Evennia typeclassed object to be edited.</p></li>
<li><p><strong>callback_name</strong> (<em>str</em>) the name of the callback to edit.</p></li>
<li><p><strong>number</strong> (<em>int</em>) the callback number to be changed.</p></li>
<li><p><strong>code</strong> (<em>str</em>) the Python code associated with this callback.</p></li>
<li><p><strong>author</strong> (<em>Character</em><em> or </em><em>Account</em><em>, </em><em>optional</em>) the author of the callback.</p></li>
<li><p><strong>valid</strong> (<em>bool</em><em>, </em><em>optional</em>) should the callback be connected?</p></li>
</ul>
</dd>
<dt class="field-even">Raises<span class="colon">:</span></dt>
<dd class="field-even"><p><strong>RuntimeError if the callback is locked.</strong> </p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This method doesnt check that the callback type exists.</p>
</div>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.del_callback">
<span class="sig-name descname"><span class="pre">del_callback</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">callback_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">number</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.del_callback"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.del_callback" title="Link to this definition"></a></dt>
<dd><p>Delete the specified callback.</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>Object</em>) the typeclassed object containing the callback.</p></li>
<li><p><strong>callback_name</strong> (<em>str</em>) the name of the callback to delete.</p></li>
<li><p><strong>number</strong> (<em>int</em>) the number of the callback to delete.</p></li>
</ul>
</dd>
<dt class="field-even">Raises<span class="colon">:</span></dt>
<dd class="field-even"><p><strong>RuntimeError if the callback is locked.</strong> </p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.accept_callback">
<span class="sig-name descname"><span class="pre">accept_callback</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">callback_name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">number</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.accept_callback"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.accept_callback" title="Link to this definition"></a></dt>
<dd><p>Valid a callback.</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>Object</em>) the object containing the callback.</p></li>
<li><p><strong>callback_name</strong> (<em>str</em>) the name of the callback.</p></li>
<li><p><strong>number</strong> (<em>int</em>) the number of the callback.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.call">
<span class="sig-name descname"><span class="pre">call</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">callback_name</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/contrib/base_systems/ingame_python/scripts.html#EventHandler.call"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.call" title="Link to this definition"></a></dt>
<dd><p>Call the connected callbacks.</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>Object</em>) the Evennia typeclassed object.</p></li>
<li><p><strong>callback_name</strong> (<em>str</em>) the callback name to call.</p></li>
<li><p><strong>*args</strong> additional variables for this callback.</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>number</strong> (<em>int</em><em>, </em><em>optional</em>) call just a specific callback.</p></li>
<li><p><strong>parameters</strong> (<em>str</em><em>, </em><em>optional</em>) call a callback with parameters.</p></li>
<li><p><strong>locals</strong> (<em>dict</em><em>, </em><em>optional</em>) a locals replacement.</p></li>
</ul>
</dd>
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>True to report the callback was called without interruption,
False otherwise.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.handle_error">
<span class="sig-name descname"><span class="pre">handle_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">callback</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trace</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.handle_error"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.handle_error" title="Link to this definition"></a></dt>
<dd><p>Handle an error in a callback.</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>callback</strong> (<em>dict</em>) the callback representation.</p></li>
<li><p><strong>trace</strong> (<em>list</em>) the traceback containing the exception.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>This method can be useful to override to change the default
handling of errors. By default, the error message is sent to
the character who last updated the callback, if connected.
If not, display to the everror channel.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.add_event">
<span class="sig-name descname"><span class="pre">add_event</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">typeclass</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">variables</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">help_text</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">custom_call</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">custom_add</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.add_event"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.add_event" title="Link to this definition"></a></dt>
<dd><p>Add a new event for a defined typeclass.</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>typeclass</strong> (<em>str</em>) the path leading to the typeclass.</p></li>
<li><p><strong>name</strong> (<em>str</em>) the name of the event to add.</p></li>
<li><p><strong>variables</strong> (<em>list</em><em> of </em><em>str</em>) list of variable names for this event.</p></li>
<li><p><strong>help_text</strong> (<em>str</em>) the long help text of the event.</p></li>
<li><p><strong>custom_call</strong> (<em>callable</em><em> or </em><em>None</em>) the function to be called
when the event fires.</p></li>
<li><p><strong>custom_add</strong> (<em>callable</em><em> or </em><em>None</em>) the function to be called when
a callback is added.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.set_task">
<span class="sig-name descname"><span class="pre">set_task</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">seconds</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">obj</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">callback_name</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#EventHandler.set_task"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.set_task" title="Link to this definition"></a></dt>
<dd><p>Set and schedule a task to run.</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>seconds</strong> (<em>int</em><em>, </em><em>float</em>) the delay in seconds from now.</p></li>
<li><p><strong>obj</strong> (<em>Object</em>) the typecalssed object connected to the event.</p></li>
<li><p><strong>callback_name</strong> (<em>str</em>) the callbacks name.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>This method allows to schedule a “persistent” task.
utils.delay is called, but a copy of the task is kept in
the event handler, and when the script restarts (after reload),
the differed delay is called again.
The dictionary of locals is frozen and will be available
again when the task runs. This feature, however, is limited
by the database: all data cannot be saved. Lambda functions,
class methods, objects inside an instance and so on will
not be kept in the locals dictionary.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.DoesNotExist">
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">DoesNotExist</span></span><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.DoesNotExist" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.DoesNotExist" title="evennia.scripts.scripts.DefaultScript.DoesNotExist"><code class="xref py py-class docutils literal notranslate"><span class="pre">DoesNotExist</span></code></a></p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.MultipleObjectsReturned">
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">MultipleObjectsReturned</span></span><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.MultipleObjectsReturned" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.MultipleObjectsReturned" title="evennia.scripts.scripts.DefaultScript.MultipleObjectsReturned"><code class="xref py py-class docutils literal notranslate"><span class="pre">MultipleObjectsReturned</span></code></a></p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.NotUpdated">
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">NotUpdated</span></span><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.NotUpdated" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.NotUpdated" title="evennia.scripts.scripts.DefaultScript.NotUpdated"><code class="xref py py-class docutils literal notranslate"><span class="pre">NotUpdated</span></code></a></p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.path">
<span class="sig-name descname"><span class="pre">path</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'evennia.contrib.base_systems.ingame_python.scripts.EventHandler'</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.path" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.EventHandler.typename">
<span class="sig-name descname"><span class="pre">typename</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'EventHandler'</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.typename" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript">
<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.contrib.base_systems.ingame_python.scripts.</span></span><span class="sig-name descname"><span class="pre">TimeEventScript</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#TimeEventScript"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript" title="evennia.scripts.scripts.DefaultScript"><code class="xref py py-class docutils literal notranslate"><span class="pre">DefaultScript</span></code></a></p>
<p>Gametime-sensitive script.</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.at_script_creation">
<span class="sig-name descname"><span class="pre">at_script_creation</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#TimeEventScript.at_script_creation"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.at_script_creation" title="Link to this definition"></a></dt>
<dd><p>The script is created.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.at_repeat">
<span class="sig-name descname"><span class="pre">at_repeat</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#TimeEventScript.at_repeat"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.at_repeat" title="Link to this definition"></a></dt>
<dd><p>Call the event and reset interval.</p>
<p>It is necessary to restart the script to reset its interval
only twice after a reload. When the script has undergone
down time, theres usually a slight shift in game time. Once
the script restarts once, it will set the average time it
needs for all its future intervals and should not need to be
restarted. In short, a script that is created shouldnt need
to restart more than once, and a script that is reloaded should
restart only twice.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.DoesNotExist">
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">DoesNotExist</span></span><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.DoesNotExist" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.DoesNotExist" title="evennia.scripts.scripts.DefaultScript.DoesNotExist"><code class="xref py py-class docutils literal notranslate"><span class="pre">DoesNotExist</span></code></a></p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.MultipleObjectsReturned">
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">MultipleObjectsReturned</span></span><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.MultipleObjectsReturned" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.MultipleObjectsReturned" title="evennia.scripts.scripts.DefaultScript.MultipleObjectsReturned"><code class="xref py py-class docutils literal notranslate"><span class="pre">MultipleObjectsReturned</span></code></a></p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.NotUpdated">
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">NotUpdated</span></span><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.NotUpdated" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.NotUpdated" title="evennia.scripts.scripts.DefaultScript.NotUpdated"><code class="xref py py-class docutils literal notranslate"><span class="pre">NotUpdated</span></code></a></p>
</dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.path">
<span class="sig-name descname"><span class="pre">path</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript'</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.path" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.typename">
<span class="sig-name descname"><span class="pre">typename</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'TimeEventScript'</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.typename" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.scripts.complete_task">
<span class="sig-prename descclassname"><span class="pre">evennia.contrib.base_systems.ingame_python.scripts.</span></span><span class="sig-name descname"><span class="pre">complete_task</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">task_id</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/base_systems/ingame_python/scripts.html#complete_task"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.scripts.complete_task" title="Link to this definition"></a></dt>
<dd><p>Mark the task in the event handler as complete.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>task_id</strong> (<em>int</em>) the task ID.</p>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This function should be called automatically for individual tasks.</p>
</div>
</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.contrib.base_systems.ingame_python.scripts</a><ul>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler"><code class="docutils literal notranslate"><span class="pre">EventHandler</span></code></a><ul>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.at_script_creation"><code class="docutils literal notranslate"><span class="pre">EventHandler.at_script_creation()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.at_server_start"><code class="docutils literal notranslate"><span class="pre">EventHandler.at_server_start()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.get_events"><code class="docutils literal notranslate"><span class="pre">EventHandler.get_events()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.get_variable"><code class="docutils literal notranslate"><span class="pre">EventHandler.get_variable()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.get_callbacks"><code class="docutils literal notranslate"><span class="pre">EventHandler.get_callbacks()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.add_callback"><code class="docutils literal notranslate"><span class="pre">EventHandler.add_callback()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.edit_callback"><code class="docutils literal notranslate"><span class="pre">EventHandler.edit_callback()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.del_callback"><code class="docutils literal notranslate"><span class="pre">EventHandler.del_callback()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.accept_callback"><code class="docutils literal notranslate"><span class="pre">EventHandler.accept_callback()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.call"><code class="docutils literal notranslate"><span class="pre">EventHandler.call()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.handle_error"><code class="docutils literal notranslate"><span class="pre">EventHandler.handle_error()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.add_event"><code class="docutils literal notranslate"><span class="pre">EventHandler.add_event()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.set_task"><code class="docutils literal notranslate"><span class="pre">EventHandler.set_task()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.DoesNotExist"><code class="docutils literal notranslate"><span class="pre">EventHandler.DoesNotExist</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.MultipleObjectsReturned"><code class="docutils literal notranslate"><span class="pre">EventHandler.MultipleObjectsReturned</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.NotUpdated"><code class="docutils literal notranslate"><span class="pre">EventHandler.NotUpdated</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.path"><code class="docutils literal notranslate"><span class="pre">EventHandler.path</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.typename"><code class="docutils literal notranslate"><span class="pre">EventHandler.typename</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript"><code class="docutils literal notranslate"><span class="pre">TimeEventScript</span></code></a><ul>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.at_script_creation"><code class="docutils literal notranslate"><span class="pre">TimeEventScript.at_script_creation()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.at_repeat"><code class="docutils literal notranslate"><span class="pre">TimeEventScript.at_repeat()</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.DoesNotExist"><code class="docutils literal notranslate"><span class="pre">TimeEventScript.DoesNotExist</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.MultipleObjectsReturned"><code class="docutils literal notranslate"><span class="pre">TimeEventScript.MultipleObjectsReturned</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.NotUpdated"><code class="docutils literal notranslate"><span class="pre">TimeEventScript.NotUpdated</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.path"><code class="docutils literal notranslate"><span class="pre">TimeEventScript.path</span></code></a></li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript.typename"><code class="docutils literal notranslate"><span class="pre">TimeEventScript.typename</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.contrib.base_systems.ingame_python.scripts.complete_task"><code class="docutils literal notranslate"><span class="pre">complete_task()</span></code></a></li>
</ul>
</li>
</ul>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.contrib.base_systems.ingame_python.eventfuncs.html"
title="previous chapter">evennia.contrib.base_systems.ingame_python.eventfuncs</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.contrib.base_systems.ingame_python.tests.html"
title="next chapter">evennia.contrib.base_systems.ingame_python.tests</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.contrib.base_systems.ingame_python.scripts.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.contrib.base_systems.ingame_python.tests.html" title="evennia.contrib.base_systems.ingame_python.tests"
>next</a> |</li>
<li class="right" >
<a href="evennia.contrib.base_systems.ingame_python.eventfuncs.html" title="evennia.contrib.base_systems.ingame_python.eventfuncs"
>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.contrib.html" >evennia.contrib</a> &#187;</li>
<li class="nav-item nav-item-5"><a href="evennia.contrib.base_systems.html" >evennia.contrib.base_systems</a> &#187;</li>
<li class="nav-item nav-item-6"><a href="evennia.contrib.base_systems.ingame_python.html" >evennia.contrib.base_systems.ingame_python</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.base_systems.ingame_python.scripts</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>