evennia/docs/0.x/api/evennia.utils.idmapper.models.html
2023-12-20 19:10:09 +01:00

337 lines
No EOL
26 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>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>evennia.utils.idmapper.models &#8212; Evennia 0.9.5 documentation</title>
<link rel="stylesheet" href="../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"processClass": "tex2jax_process|mathjax_process|math|output_area"}})</script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 0.9.5</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.utils.idmapper.models</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.utils.idmapper.models">
<span id="evennia-utils-idmapper-models"></span><h1>evennia.utils.idmapper.models<a class="headerlink" href="#module-evennia.utils.idmapper.models" title="Permalink to this headline"></a></h1>
<p>Django ID mapper</p>
<p>Modified for Evennia by making sure that no model references
leave caching unexpectedly (no use of WeakRefs).</p>
<p>Also adds <strong>cache_size()</strong> for monitoring the size of the cache.</p>
<dl class="py class">
<dt id="evennia.utils.idmapper.models.SharedMemoryModelBase">
<em class="property">class </em><code class="sig-prename descclassname">evennia.utils.idmapper.models.</code><code class="sig-name descname">SharedMemoryModelBase</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">name</span></em>, <em class="sig-param"><span class="n">bases</span></em>, <em class="sig-param"><span class="n">attrs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModelBase"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModelBase" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">django.db.models.base.ModelBase</span></code></p>
</dd></dl>
<dl class="py class">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel">
<em class="property">class </em><code class="sig-prename descclassname">evennia.utils.idmapper.models.</code><code class="sig-name descname">SharedMemoryModel</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">django.db.models.base.Model</span></code></p>
<p>Base class for idmapped objects. Inherit from <strong>this</strong>.</p>
<dl class="py attribute">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.objects">
<code class="sig-name descname">objects</code><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.objects" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py class">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.Meta">
<em class="property">class </em><code class="sig-name descname">Meta</code><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.Meta"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.Meta" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="py attribute">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.Meta.abstract">
<code class="sig-name descname">abstract</code><em class="property"> = False</em><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.Meta.abstract" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.get_cached_instance">
<em class="property">classmethod </em><code class="sig-name descname">get_cached_instance</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">id</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.get_cached_instance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.get_cached_instance" title="Permalink to this definition"></a></dt>
<dd><p>Method to retrieve a cached instance by pk value. Returns None
when not found (which will always be the case when caching is
disabled for this class). Please note that the lookup will be
done even when instance caching is disabled.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.cache_instance">
<em class="property">classmethod </em><code class="sig-name descname">cache_instance</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">instance</span></em>, <em class="sig-param"><span class="n">new</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.cache_instance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.cache_instance" title="Permalink to this definition"></a></dt>
<dd><p>Method to store an instance in the cache.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>instance</strong> (<em>Class instance</em>) the instance to cache.</p></li>
<li><p><strong>new</strong> (<em>bool</em><em>, </em><em>optional</em>) this is the first time this instance is
cached (i.e. this is not an update operation like after a
db save).</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.get_all_cached_instances">
<em class="property">classmethod </em><code class="sig-name descname">get_all_cached_instances</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.get_all_cached_instances"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.get_all_cached_instances" title="Permalink to this definition"></a></dt>
<dd><p>Return the objects so far cached by idmapper for this class.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.flush_cached_instance">
<em class="property">classmethod </em><code class="sig-name descname">flush_cached_instance</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">instance</span></em>, <em class="sig-param"><span class="n">force</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.flush_cached_instance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.flush_cached_instance" title="Permalink to this definition"></a></dt>
<dd><p>Method to flush an instance from the cache. The instance will
always be flushed from the cache, since this is most likely
called from delete(), and we want to make sure we dont cache
dead objects.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.flush_instance_cache">
<em class="property">classmethod </em><code class="sig-name descname">flush_instance_cache</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">force</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.flush_instance_cache"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.flush_instance_cache" title="Permalink to this definition"></a></dt>
<dd><p>This will clean safe objects from the cache. Use <strong>force</strong>
keyword to remove all objects, safe or not.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.at_idmapper_flush">
<code class="sig-name descname">at_idmapper_flush</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.at_idmapper_flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.at_idmapper_flush" title="Permalink to this definition"></a></dt>
<dd><p>This is called when the idmapper cache is flushed and
allows customized actions when this happens.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><p><em>do_flush (bool)</em> </p>
<dl class="simple">
<dt>If True, flush this object as normal. If</dt><dd><p>False, dont flush and expect this object to handle
the flushing on its own.</p>
</dd>
</dl>
</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.flush_from_cache">
<code class="sig-name descname">flush_from_cache</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">force</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.flush_from_cache"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.flush_from_cache" title="Permalink to this definition"></a></dt>
<dd><p>Flush this instance from the instance cache. Use
<strong>force</strong> to override the result of at_idmapper_flush() for the object.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.delete">
<code class="sig-name descname">delete</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.delete"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.delete" title="Permalink to this definition"></a></dt>
<dd><p>Delete the object, clearing cache.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.save">
<code class="sig-name descname">save</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.save"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.save" title="Permalink to this definition"></a></dt>
<dd><p>Central database save operation.</p>
<p class="rubric">Notes</p>
<p>Arguments as per Django documentation.
Calls <strong>self.at_&lt;fieldname&gt;_postsave(new)</strong>
(this is a wrapper set by oobhandler:
self._oob_at_&lt;fieldname&gt;_postsave())</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.path">
<code class="sig-name descname">path</code><em class="property"> = 'evennia.utils.idmapper.models.SharedMemoryModel'</em><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.path" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.utils.idmapper.models.SharedMemoryModel.typename">
<code class="sig-name descname">typename</code><em class="property"> = 'SharedMemoryModelBase'</em><a class="headerlink" href="#evennia.utils.idmapper.models.SharedMemoryModel.typename" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.utils.idmapper.models.WeakSharedMemoryModelBase">
<em class="property">class </em><code class="sig-prename descclassname">evennia.utils.idmapper.models.</code><code class="sig-name descname">WeakSharedMemoryModelBase</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">name</span></em>, <em class="sig-param"><span class="n">bases</span></em>, <em class="sig-param"><span class="n">attrs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#WeakSharedMemoryModelBase"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.WeakSharedMemoryModelBase" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.utils.idmapper.models.SharedMemoryModelBase" title="evennia.utils.idmapper.models.SharedMemoryModelBase"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.utils.idmapper.models.SharedMemoryModelBase</span></code></a></p>
<p>Uses a WeakValue dictionary for caching instead of a regular one.</p>
</dd></dl>
<dl class="py class">
<dt id="evennia.utils.idmapper.models.WeakSharedMemoryModel">
<em class="property">class </em><code class="sig-prename descclassname">evennia.utils.idmapper.models.</code><code class="sig-name descname">WeakSharedMemoryModel</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#WeakSharedMemoryModel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.WeakSharedMemoryModel" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.utils.idmapper.models.SharedMemoryModel" title="evennia.utils.idmapper.models.SharedMemoryModel"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.utils.idmapper.models.SharedMemoryModel</span></code></a></p>
<p>Uses a WeakValue dictionary for caching instead of a regular one</p>
<dl class="py class">
<dt id="evennia.utils.idmapper.models.WeakSharedMemoryModel.Meta">
<em class="property">class </em><code class="sig-name descname">Meta</code><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#WeakSharedMemoryModel.Meta"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.WeakSharedMemoryModel.Meta" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="py attribute">
<dt id="evennia.utils.idmapper.models.WeakSharedMemoryModel.Meta.abstract">
<code class="sig-name descname">abstract</code><em class="property"> = False</em><a class="headerlink" href="#evennia.utils.idmapper.models.WeakSharedMemoryModel.Meta.abstract" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.utils.idmapper.models.WeakSharedMemoryModel.path">
<code class="sig-name descname">path</code><em class="property"> = 'evennia.utils.idmapper.models.WeakSharedMemoryModel'</em><a class="headerlink" href="#evennia.utils.idmapper.models.WeakSharedMemoryModel.path" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.utils.idmapper.models.WeakSharedMemoryModel.typename">
<code class="sig-name descname">typename</code><em class="property"> = 'WeakSharedMemoryModelBase'</em><a class="headerlink" href="#evennia.utils.idmapper.models.WeakSharedMemoryModel.typename" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py function">
<dt id="evennia.utils.idmapper.models.flush_cache">
<code class="sig-prename descclassname">evennia.utils.idmapper.models.</code><code class="sig-name descname">flush_cache</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#flush_cache"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.flush_cache" title="Permalink to this definition"></a></dt>
<dd><p>Flush idmapper cache. When doing so the cache will fire the
at_idmapper_flush hook to allow the object to optionally handle
its own flushing.</p>
<p>Uses a signal so we make sure to catch cascades.</p>
</dd></dl>
<dl class="py function">
<dt id="evennia.utils.idmapper.models.flush_cached_instance">
<code class="sig-prename descclassname">evennia.utils.idmapper.models.</code><code class="sig-name descname">flush_cached_instance</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">sender</span></em>, <em class="sig-param"><span class="n">instance</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#flush_cached_instance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.flush_cached_instance" title="Permalink to this definition"></a></dt>
<dd><p>Flush the idmapper cache only for a given instance.</p>
</dd></dl>
<dl class="py function">
<dt id="evennia.utils.idmapper.models.update_cached_instance">
<code class="sig-prename descclassname">evennia.utils.idmapper.models.</code><code class="sig-name descname">update_cached_instance</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">sender</span></em>, <em class="sig-param"><span class="n">instance</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#update_cached_instance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.update_cached_instance" title="Permalink to this definition"></a></dt>
<dd><p>Re-cache the given instance in the idmapper cache.</p>
</dd></dl>
<dl class="py function">
<dt id="evennia.utils.idmapper.models.conditional_flush">
<code class="sig-prename descclassname">evennia.utils.idmapper.models.</code><code class="sig-name descname">conditional_flush</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">max_rmem</span></em>, <em class="sig-param"><span class="n">force</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#conditional_flush"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.conditional_flush" title="Permalink to this definition"></a></dt>
<dd><p>Flush the cache if the estimated memory usage exceeds <strong>max_rmem</strong>.</p>
<p>The flusher has a timeout to avoid flushing over and over
in particular situations (this means that for some setups
the memory usage will exceed the requirement and a server with
more memory is probably required for the given game).</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>max_rmem</strong> (<em>int</em>) memory-usage estimation-treshold after which
cache is flushed.</p></li>
<li><p><strong>force</strong> (<em>bool</em><em>, </em><em>optional</em>) forces a flush, regardless of timeout.
Defaults to <strong>False</strong>.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt id="evennia.utils.idmapper.models.cache_size">
<code class="sig-prename descclassname">evennia.utils.idmapper.models.</code><code class="sig-name descname">cache_size</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">mb</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/idmapper/models.html#cache_size"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.idmapper.models.cache_size" title="Permalink to this definition"></a></dt>
<dd><p>Calculate statistics about the cache.</p>
<p>Note: we cannot get reliable memory statistics from the cache -
whereas we could do <strong>getsizof</strong> each object in cache, the result is
highly imprecise and for a large number of objects the result is
many times larger than the actual memory usage of the entire server;
Python is clearly reusing memory behind the scenes that we cannot
catch in an easy way here. Ideas are appreciated. /Griatch</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><em>total_num, {objclass</em> total_num, …}</p>
</dd>
</dl>
</dd></dl>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.utils.idmapper.models.md.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
<a href="https://discord.gg/NecFePw">Discord</a> -
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
</li>
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="../../1.0-dev/api/evennia.utils.idmapper.models.html">1.0-dev (develop branch)</a></li>
<li><a href="evennia.utils.idmapper.models.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 0.9.5</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.utils.idmapper.models</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>