<spanid="evennia-utils-idmapper-models"></span><h1>evennia.utils.idmapper.models<aclass="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>
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.utils.idmapper.models.</code><codeclass="sig-name descname">SharedMemoryModelBase</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">name</span></em>, <emclass="sig-param"><spanclass="n">bases</span></em>, <emclass="sig-param"><spanclass="n">attrs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModelBase"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.utils.idmapper.models.SharedMemoryModelBase"title="Permalink to this definition">¶</a></dt>
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.utils.idmapper.models.</code><codeclass="sig-name descname">SharedMemoryModel</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.utils.idmapper.models.SharedMemoryModel"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">objects</code><aclass="headerlink"href="#evennia.utils.idmapper.models.SharedMemoryModel.objects"title="Permalink to this definition">¶</a></dt>
<emclass="property">class </em><codeclass="sig-name descname">Meta</code><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.Meta"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.utils.idmapper.models.SharedMemoryModel.Meta"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">abstract</code><emclass="property"> = False</em><aclass="headerlink"href="#evennia.utils.idmapper.models.SharedMemoryModel.Meta.abstract"title="Permalink to this definition">¶</a></dt>
<emclass="property">classmethod </em><codeclass="sig-name descname">get_cached_instance</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">id</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.get_cached_instance"><spanclass="viewcode-link">[source]</span></a><aclass="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
<emclass="property">classmethod </em><codeclass="sig-name descname">cache_instance</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">instance</span></em>, <emclass="sig-param"><spanclass="n">new</span><spanclass="o">=</span><spanclass="default_value">False</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.cache_instance"><spanclass="viewcode-link">[source]</span></a><aclass="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>
<dlclass="field-list simple">
<dtclass="field-odd">Parameters</dt>
<ddclass="field-odd"><ulclass="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
<emclass="property">classmethod </em><codeclass="sig-name descname">get_all_cached_instances</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.get_all_cached_instances"><spanclass="viewcode-link">[source]</span></a><aclass="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>
<emclass="property">classmethod </em><codeclass="sig-name descname">flush_cached_instance</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">instance</span></em>, <emclass="sig-param"><spanclass="n">force</span><spanclass="o">=</span><spanclass="default_value">True</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.flush_cached_instance"><spanclass="viewcode-link">[source]</span></a><aclass="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 don’t cache
<emclass="property">classmethod </em><codeclass="sig-name descname">flush_instance_cache</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">force</span><spanclass="o">=</span><spanclass="default_value">False</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.flush_instance_cache"><spanclass="viewcode-link">[source]</span></a><aclass="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>
<codeclass="sig-name descname">at_idmapper_flush</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.at_idmapper_flush"><spanclass="viewcode-link">[source]</span></a><aclass="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
<codeclass="sig-name descname">flush_from_cache</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">force</span><spanclass="o">=</span><spanclass="default_value">False</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.flush_from_cache"><spanclass="viewcode-link">[source]</span></a><aclass="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>
<codeclass="sig-name descname">delete</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.delete"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.utils.idmapper.models.SharedMemoryModel.delete"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">save</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#SharedMemoryModel.save"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.utils.idmapper.models.SharedMemoryModel.save"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">path</code><emclass="property"> = 'evennia.utils.idmapper.models.SharedMemoryModel'</em><aclass="headerlink"href="#evennia.utils.idmapper.models.SharedMemoryModel.path"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">typename</code><emclass="property"> = 'SharedMemoryModelBase'</em><aclass="headerlink"href="#evennia.utils.idmapper.models.SharedMemoryModel.typename"title="Permalink to this definition">¶</a></dt>
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.utils.idmapper.models.</code><codeclass="sig-name descname">WeakSharedMemoryModelBase</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">name</span></em>, <emclass="sig-param"><spanclass="n">bases</span></em>, <emclass="sig-param"><spanclass="n">attrs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#WeakSharedMemoryModelBase"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.utils.idmapper.models.WeakSharedMemoryModelBase"title="Permalink to this definition">¶</a></dt>
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.utils.idmapper.models.</code><codeclass="sig-name descname">WeakSharedMemoryModel</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">*</span><spanclass="n">args</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#WeakSharedMemoryModel"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.utils.idmapper.models.WeakSharedMemoryModel"title="Permalink to this definition">¶</a></dt>
<emclass="property">class </em><codeclass="sig-name descname">Meta</code><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#WeakSharedMemoryModel.Meta"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.utils.idmapper.models.WeakSharedMemoryModel.Meta"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">abstract</code><emclass="property"> = False</em><aclass="headerlink"href="#evennia.utils.idmapper.models.WeakSharedMemoryModel.Meta.abstract"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">path</code><emclass="property"> = 'evennia.utils.idmapper.models.WeakSharedMemoryModel'</em><aclass="headerlink"href="#evennia.utils.idmapper.models.WeakSharedMemoryModel.path"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">typename</code><emclass="property"> = 'WeakSharedMemoryModelBase'</em><aclass="headerlink"href="#evennia.utils.idmapper.models.WeakSharedMemoryModel.typename"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-prename descclassname">evennia.utils.idmapper.models.</code><codeclass="sig-name descname">flush_cache</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#flush_cache"><spanclass="viewcode-link">[source]</span></a><aclass="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>
<codeclass="sig-prename descclassname">evennia.utils.idmapper.models.</code><codeclass="sig-name descname">flush_cached_instance</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">sender</span></em>, <emclass="sig-param"><spanclass="n">instance</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#flush_cached_instance"><spanclass="viewcode-link">[source]</span></a><aclass="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>
<codeclass="sig-prename descclassname">evennia.utils.idmapper.models.</code><codeclass="sig-name descname">update_cached_instance</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">sender</span></em>, <emclass="sig-param"><spanclass="n">instance</span></em>, <emclass="sig-param"><spanclass="o">**</span><spanclass="n">kwargs</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#update_cached_instance"><spanclass="viewcode-link">[source]</span></a><aclass="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>
<codeclass="sig-prename descclassname">evennia.utils.idmapper.models.</code><codeclass="sig-name descname">conditional_flush</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">max_rmem</span></em>, <emclass="sig-param"><spanclass="n">force</span><spanclass="o">=</span><spanclass="default_value">False</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#conditional_flush"><spanclass="viewcode-link">[source]</span></a><aclass="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>
<dlclass="field-list simple">
<dtclass="field-odd">Parameters</dt>
<ddclass="field-odd"><ulclass="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>
<dlclass="py function">
<dtid="evennia.utils.idmapper.models.cache_size">
<codeclass="sig-prename descclassname">evennia.utils.idmapper.models.</code><codeclass="sig-name descname">cache_size</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">mb</span><spanclass="o">=</span><spanclass="default_value">True</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/utils/idmapper/models.html#cache_size"><spanclass="viewcode-link">[source]</span></a><aclass="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>