evennia/docs/4.x/api/evennia.utils.picklefield.html
2024-03-17 14:15:56 +01:00

316 lines
No EOL
25 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.picklefield &#8212; Evennia latest 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>
<link rel="shortcut 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.utils.search" href="evennia.utils.search.html" />
<link rel="prev" title="evennia.utils.optionhandler" href="evennia.utils.optionhandler.html" />
</head><body>
<div class="admonition important">
<p class="first admonition-title">Note</p>
<p class="last">You are reading an old version of the Evennia documentation. <a href="https://www.evennia.com/docs/latest/index.html">The latest version is here</a></p>.
</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"
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.utils.search.html" title="evennia.utils.search"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.utils.optionhandler.html" title="evennia.utils.optionhandler"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia latest</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.utils.html" accesskey="U">evennia.utils</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.utils.picklefield</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<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>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.utils.optionhandler.html"
title="previous chapter">evennia.utils.optionhandler</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.utils.search.html"
title="next chapter">evennia.utils.search</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.utils.picklefield.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>
</div>
</div>
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.utils.picklefield">
<span id="evennia-utils-picklefield"></span><h1>evennia.utils.picklefield<a class="headerlink" href="#module-evennia.utils.picklefield" title="Permalink to this headline"></a></h1>
<p>Pickle field implementation for Django.</p>
<p>Modified for Evennia by Griatch and the Evennia community.</p>
<dl class="py class">
<dt id="evennia.utils.picklefield.PickledObject">
<em class="property">class </em><code class="sig-prename descclassname">evennia.utils.picklefield.</code><code class="sig-name descname">PickledObject</code><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#PickledObject"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObject" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></p>
<p>A subclass of string so it can be told whether a string is a pickled
object or not (if the object is an instance of this class then it must
[well, should] be a pickled one).</p>
<p>Only really useful for passing pre-encoded values to <strong>**default**</strong>
with <strong>**dbsafe_encode**</strong>, not that doing so is necessary. If you
remove PickledObject and its references, you wont be able to pass
in pre-encoded values anymore, but you can always just pass in the
python objects themselves.</p>
</dd></dl>
<dl class="py function">
<dt id="evennia.utils.picklefield.wrap_conflictual_object">
<code class="sig-prename descclassname">evennia.utils.picklefield.</code><code class="sig-name descname">wrap_conflictual_object</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#wrap_conflictual_object"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.wrap_conflictual_object" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt id="evennia.utils.picklefield.dbsafe_encode">
<code class="sig-prename descclassname">evennia.utils.picklefield.</code><code class="sig-name descname">dbsafe_encode</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em>, <em class="sig-param"><span class="n">compress_object</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">pickle_protocol</span><span class="o">=</span><span class="default_value">4</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#dbsafe_encode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.dbsafe_encode" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt id="evennia.utils.picklefield.dbsafe_decode">
<code class="sig-prename descclassname">evennia.utils.picklefield.</code><code class="sig-name descname">dbsafe_decode</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em>, <em class="sig-param"><span class="n">compress_object</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/picklefield.html#dbsafe_decode"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.dbsafe_decode" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py class">
<dt id="evennia.utils.picklefield.PickledWidget">
<em class="property">class </em><code class="sig-prename descclassname">evennia.utils.picklefield.</code><code class="sig-name descname">PickledWidget</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">attrs</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#PickledWidget"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledWidget" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">django.forms.widgets.Textarea</span></code></p>
<p>This is responsible for outputting HTML representing a given field.</p>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledWidget.render">
<code class="sig-name descname">render</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">name</span></em>, <em class="sig-param"><span class="n">value</span></em>, <em class="sig-param"><span class="n">attrs</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">renderer</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#PickledWidget.render"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledWidget.render" title="Permalink to this definition"></a></dt>
<dd><p>Display of the PickledField in django admin</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledWidget.value_from_datadict">
<code class="sig-name descname">value_from_datadict</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em>, <em class="sig-param"><span class="n">files</span></em>, <em class="sig-param"><span class="n">name</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#PickledWidget.value_from_datadict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledWidget.value_from_datadict" title="Permalink to this definition"></a></dt>
<dd><p>Given a dictionary of data and this widgets name, return the value
of this widget or None if its not provided.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledWidget.media">
<em class="property">property </em><code class="sig-name descname">media</code><a class="headerlink" href="#evennia.utils.picklefield.PickledWidget.media" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.utils.picklefield.PickledFormField">
<em class="property">class </em><code class="sig-prename descclassname">evennia.utils.picklefield.</code><code class="sig-name descname">PickledFormField</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/picklefield.html#PickledFormField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledFormField" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">django.forms.fields.CharField</span></code></p>
<p>This represents one input field for the form.</p>
<dl class="py attribute">
<dt id="evennia.utils.picklefield.PickledFormField.widget">
<code class="sig-name descname">widget</code><a class="headerlink" href="#evennia.utils.picklefield.PickledFormField.widget" title="Permalink to this definition"></a></dt>
<dd><p>alias of <a class="reference internal" href="#evennia.utils.picklefield.PickledWidget" title="evennia.utils.picklefield.PickledWidget"><code class="xref py py-class docutils literal notranslate"><span class="pre">PickledWidget</span></code></a></p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.utils.picklefield.PickledFormField.default_error_messages">
<code class="sig-name descname">default_error_messages</code><em class="property"> = {'invalid': 'This is not a Python Literal. You can store things like strings, integers, or floats, but you must do it by typing them as you would type them in the Python Interpreter. For instance, strings must be surrounded by quote marks. We have converted it to a string for your convenience. If it is acceptable, please hit save again.', 'required': 'This field is required.'}</em><a class="headerlink" href="#evennia.utils.picklefield.PickledFormField.default_error_messages" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledFormField.__init__">
<code class="sig-name descname">__init__</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/picklefield.html#PickledFormField.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledFormField.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledFormField.clean">
<code class="sig-name descname">clean</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#PickledFormField.clean"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledFormField.clean" title="Permalink to this definition"></a></dt>
<dd><p>Validate the given value and return its “cleaned” value as an
appropriate Python object. Raise ValidationError for any errors.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.utils.picklefield.PickledObjectField">
<em class="property">class </em><code class="sig-prename descclassname">evennia.utils.picklefield.</code><code class="sig-name descname">PickledObjectField</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/picklefield.html#PickledObjectField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObjectField" 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.fields.Field</span></code></p>
<p>A field that will accept <em>any</em> python object and store it in the
database. PickledObjectField will optionally compress its values if
declared with the keyword argument <strong>**compress=True**</strong>.</p>
<p>Does not actually encode and compress <strong>**None**</strong> objects (although you
can still do lookups using None). This way, it is still possible to
use the <strong>**isnull**</strong> lookup type correctly.</p>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledObjectField.__init__">
<code class="sig-name descname">__init__</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/picklefield.html#PickledObjectField.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObjectField.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledObjectField.get_default">
<code class="sig-name descname">get_default</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#PickledObjectField.get_default"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObjectField.get_default" title="Permalink to this definition"></a></dt>
<dd><p>Returns the default value for this field.</p>
<p>The default implementation on models.Field calls force_str
on the default, which means you cant set arbitrary Python
objects as the default. To fix this, we just return the value
without calling force_str on it. Note that if you set a
callable as a default, the field will still call it. It will
<em>not</em> try to pickle and encode it.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledObjectField.from_db_value">
<code class="sig-name descname">from_db_value</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#PickledObjectField.from_db_value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObjectField.from_db_value" title="Permalink to this definition"></a></dt>
<dd><p>B64decode and unpickle the object, optionally decompressing it.</p>
<p>If an error is raised in de-pickling and were sure the value is
a definite pickle, the error is allowed to propagate. If we
arent sure if the value is a pickle or not, then we catch the
error and return the original value instead.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledObjectField.formfield">
<code class="sig-name descname">formfield</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/picklefield.html#PickledObjectField.formfield"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObjectField.formfield" title="Permalink to this definition"></a></dt>
<dd><p>Return a django.forms.Field instance for this field.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledObjectField.pre_save">
<code class="sig-name descname">pre_save</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">model_instance</span></em>, <em class="sig-param"><span class="n">add</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#PickledObjectField.pre_save"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObjectField.pre_save" title="Permalink to this definition"></a></dt>
<dd><p>Return fields value just before saving.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledObjectField.get_db_prep_value">
<code class="sig-name descname">get_db_prep_value</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em>, <em class="sig-param"><span class="n">connection</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">prepared</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/picklefield.html#PickledObjectField.get_db_prep_value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObjectField.get_db_prep_value" title="Permalink to this definition"></a></dt>
<dd><p>Pickle and b64encode the object, optionally compressing it.</p>
<p>The pickling protocol is specified explicitly (by default 2),
rather than as -1 or HIGHEST_PROTOCOL, because we dont want the
protocol to change over time. If it did, <strong>**exact**</strong> and <strong>**in**</strong>
lookups would likely fail, since pickle would now be generating
a different string.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledObjectField.value_to_string">
<code class="sig-name descname">value_to_string</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#PickledObjectField.value_to_string"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObjectField.value_to_string" title="Permalink to this definition"></a></dt>
<dd><p>Return a string value of this field from the passed obj.
This is used by the serialization framework.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledObjectField.get_internal_type">
<code class="sig-name descname">get_internal_type</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/picklefield.html#PickledObjectField.get_internal_type"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObjectField.get_internal_type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.utils.picklefield.PickledObjectField.get_db_prep_lookup">
<code class="sig-name descname">get_db_prep_lookup</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">lookup_type</span></em>, <em class="sig-param"><span class="n">value</span></em>, <em class="sig-param"><span class="n">connection</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">prepared</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/picklefield.html#PickledObjectField.get_db_prep_lookup"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.picklefield.PickledObjectField.get_db_prep_lookup" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</section>
</div>
</div>
</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="right" >
<a href="evennia.utils.search.html" title="evennia.utils.search"
>next</a> |</li>
<li class="right" >
<a href="evennia.utils.optionhandler.html" title="evennia.utils.optionhandler"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia latest</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.utils.html" >evennia.utils</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.utils.picklefield</a></li>
</ul>
</div>
<div class="admonition important">
<p class="first admonition-title">Note</p>
<p class="last">You are reading an old version of the Evennia documentation. <a href="https://www.evennia.com/docs/latest/index.html">The latest version is here</a></p>.
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2023, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>