mirror of
https://github.com/evennia/evennia.git
synced 2026-04-02 14:07:16 +02:00
Updated HTML docs
This commit is contained in:
parent
7a8f150ed9
commit
3ba4299df6
99 changed files with 2573 additions and 1932 deletions
|
|
@ -47,9 +47,12 @@
|
|||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">datetime</span>
|
||||
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
||||
<span class="kn">from</span> <span class="nn">django.utils</span> <span class="kn">import</span> <span class="n">timezone</span>
|
||||
<span class="kn">from</span> <span class="nn">django.contrib.auth.models</span> <span class="kn">import</span> <span class="n">UserManager</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
|
||||
|
||||
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"AccountManager"</span><span class="p">,</span> <span class="s2">"AccountDBManager"</span><span class="p">)</span>
|
||||
|
||||
|
|
@ -197,14 +200,17 @@
|
|||
<span class="sd"> (non-case-sensitive fuzzy match).</span>
|
||||
<span class="sd"> typeclass (str or Typeclass, optional): Limit the search only to</span>
|
||||
<span class="sd"> accounts of this typeclass.</span>
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Queryset: A queryset (an iterable) with 0, 1 or more matches.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">ostring</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dbref</span> <span class="ow">or</span> <span class="n">dbref</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="c1"># bref search is always exact</span>
|
||||
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">matches</span>
|
||||
<span class="c1"># dbref search is always exact</span>
|
||||
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">search_dbref</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">dbref_match</span>
|
||||
|
||||
<span class="n">query</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"username__iexact"</span> <span class="k">if</span> <span class="n">exact</span> <span class="k">else</span> <span class="s2">"username__icontains"</span><span class="p">:</span> <span class="n">ostring</span><span class="p">}</span>
|
||||
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
|
||||
<span class="c1"># we accept both strings and actual typeclasses</span>
|
||||
|
|
@ -225,6 +231,108 @@
|
|||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">matches</span></div>
|
||||
|
||||
<div class="viewcode-block" id="AccountDBManager.create_account"><a class="viewcode-back" href="../../../api/evennia.accounts.manager.html#evennia.accounts.accounts.AccountDBManager.create_account">[docs]</a> <span class="k">def</span> <span class="nf">create_account</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">email</span><span class="p">,</span>
|
||||
<span class="n">password</span><span class="p">,</span>
|
||||
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">is_superuser</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> This creates a new account.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> key (str): The account's name. This should be unique.</span>
|
||||
<span class="sd"> email (str or None): Email on valid addr@addr.domain form. If</span>
|
||||
<span class="sd"> the empty string, will be set to None.</span>
|
||||
<span class="sd"> password (str): Password in cleartext.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> typeclass (str): The typeclass to use for the account.</span>
|
||||
<span class="sd"> is_superuser (bool): Wether or not this account is to be a superuser</span>
|
||||
<span class="sd"> locks (str): Lockstring.</span>
|
||||
<span class="sd"> permission (list): List of permission strings.</span>
|
||||
<span class="sd"> tags (list): List of Tags on form `(key, category[, data])`</span>
|
||||
<span class="sd"> attributes (list): List of Attributes on form</span>
|
||||
<span class="sd"> `(key, value [, category, [,lockstring [, default_pass]]])`</span>
|
||||
<span class="sd"> report_to (Object): An object with a msg() method to report</span>
|
||||
<span class="sd"> errors to. If not given, errors will be logged.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Account: The newly created Account.</span>
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> ValueError: If `key` already exists in database.</span>
|
||||
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> Usually only the server admin should need to be superuser, all</span>
|
||||
<span class="sd"> other access levels can be handled with more fine-grained</span>
|
||||
<span class="sd"> permissions or groups. A superuser bypasses all lock checking</span>
|
||||
<span class="sd"> operations and is thus not suitable for play-testing the game.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ACCOUNT_TYPECLASS</span>
|
||||
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="c1"># a path is given. Load the actual typeclass.</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># setup input for the create command. We use AccountDB as baseclass</span>
|
||||
<span class="c1"># here to give us maximum freedom (the typeclasses will load</span>
|
||||
<span class="c1"># correctly when each object is recovered).</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">email</span><span class="p">:</span>
|
||||
<span class="n">email</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">username__iexact</span><span class="o">=</span><span class="n">key</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"An Account with the name '</span><span class="si">%s</span><span class="s2">' already exists."</span> <span class="o">%</span> <span class="n">key</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># this handles a given dbref-relocate to an account.</span>
|
||||
<span class="n">report_to</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">report_to</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># create the correct account entity, using the setup from</span>
|
||||
<span class="c1"># base django auth.</span>
|
||||
<span class="n">now</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
|
||||
<span class="n">email</span> <span class="o">=</span> <span class="n">typeclass</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">normalize_email</span><span class="p">(</span><span class="n">email</span><span class="p">)</span>
|
||||
<span class="n">new_account</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
|
||||
<span class="n">username</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">email</span><span class="o">=</span><span class="n">email</span><span class="p">,</span>
|
||||
<span class="n">is_staff</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
|
||||
<span class="n">is_superuser</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
|
||||
<span class="n">last_login</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
|
||||
<span class="n">date_joined</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># the password may be None for 'fake' accounts, like bots</span>
|
||||
<span class="n">valid</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">new_account</span><span class="o">.</span><span class="n">validate_password</span><span class="p">(</span><span class="n">password</span><span class="p">,</span> <span class="n">new_account</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">valid</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">error</span>
|
||||
|
||||
<span class="n">new_account</span><span class="o">.</span><span class="n">set_password</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
|
||||
|
||||
<span class="n">new_account</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># saving will trigger the signal that calls the</span>
|
||||
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
|
||||
<span class="c1"># can be used.</span>
|
||||
<span class="n">new_account</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># note that we don't send a signal here, that is sent from the Account.create helper method</span>
|
||||
<span class="c1"># instead.</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">new_account</span></div>
|
||||
|
||||
<span class="c1"># back-compatibility alias</span>
|
||||
<span class="n">account_search</span> <span class="o">=</span> <span class="n">search_account</span></div>
|
||||
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@
|
|||
<span class="n">interactive</span><span class="p">,</span>
|
||||
<span class="n">list_to_string</span><span class="p">,</span>
|
||||
<span class="n">display_len</span><span class="p">,</span>
|
||||
<span class="n">format_grid</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.eveditor</span> <span class="kn">import</span> <span class="n">EvEditor</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.evmore</span> <span class="kn">import</span> <span class="n">EvMore</span>
|
||||
|
|
@ -75,6 +76,7 @@
|
|||
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">)</span>
|
||||
|
||||
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_ATTRFUNCPARSER</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="c1"># limit symbol import for API</span>
|
||||
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
|
||||
|
|
@ -1636,11 +1638,20 @@
|
|||
<span class="sd"> char: Setting an attribute on a character (global search)</span>
|
||||
<span class="sd"> character: Alias for char, as above.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> set self/foo = "bar"</span>
|
||||
<span class="sd"> set/delete self/foo</span>
|
||||
<span class="sd"> set self/foo = $dbref(#53)</span>
|
||||
|
||||
<span class="sd"> Sets attributes on objects. The second example form above clears a</span>
|
||||
<span class="sd"> previously set attribute while the third form inspects the current value of</span>
|
||||
<span class="sd"> the attribute (if any). The last one (with the star) is a shortcut for</span>
|
||||
<span class="sd"> operating on a player Account rather than an Object.</span>
|
||||
|
||||
<span class="sd"> If you want <value> to be an object, use $dbef(#dbref) or</span>
|
||||
<span class="sd"> $search(key) to assign it. You need control or edit access to</span>
|
||||
<span class="sd"> the object you are adding.</span>
|
||||
|
||||
<span class="sd"> The most common data to save with this command are strings and</span>
|
||||
<span class="sd"> numbers. You can however also set Python primitives such as lists,</span>
|
||||
<span class="sd"> dictionaries and tuples on objects (this might be important for</span>
|
||||
|
|
@ -1965,13 +1976,33 @@
|
|||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rm_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">category</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># setting attribute(s). Make sure to convert to real Python type before saving.</span>
|
||||
<span class="c1"># add support for $dbref() and $search() in set argument</span>
|
||||
<span class="k">global</span> <span class="n">_ATTRFUNCPARSER</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ATTRFUNCPARSER</span><span class="p">:</span>
|
||||
<span class="n">_ATTRFUNCPARSER</span> <span class="o">=</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">FuncParser</span><span class="p">(</span>
|
||||
<span class="p">{</span><span class="s2">"dbref"</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_search</span><span class="p">,</span>
|
||||
<span class="s2">"search"</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_search</span><span class="p">}</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</span><span class="p">)):</span>
|
||||
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"You don't have permission to edit </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">category</span><span class="p">):</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">_convert_from_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
||||
<span class="c1"># from evennia import set_trace;set_trace()</span>
|
||||
<span class="n">parsed_value</span> <span class="o">=</span> <span class="n">_ATTRFUNCPARSER</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">return_str</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">parsed_value</span><span class="p">,</span> <span class="s2">"access"</span><span class="p">):</span>
|
||||
<span class="c1"># if this is an object we must have the right to read it, if so,</span>
|
||||
<span class="c1"># we will not convert it to a string</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">parsed_value</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span>
|
||||
<span class="ow">or</span> <span class="n">parsed_value</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</span><span class="p">)):</span>
|
||||
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"You don't have permission to set "</span>
|
||||
<span class="sa">f</span><span class="s2">"object with identifier '</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">'."</span><span class="p">)</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">parsed_value</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">_convert_from_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">set_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">category</span><span class="p">))</span>
|
||||
<span class="c1"># send feedback</span>
|
||||
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">))</span></div></div>
|
||||
|
|
@ -2459,6 +2490,8 @@
|
|||
<span class="sd"> Switch:</span>
|
||||
<span class="sd"> account - examine an Account (same as adding *)</span>
|
||||
<span class="sd"> object - examine an Object (useful when OOC)</span>
|
||||
<span class="sd"> script - examine a Script</span>
|
||||
<span class="sd"> channel - examine a Channel</span>
|
||||
|
||||
<span class="sd"> The examine command shows detailed game info about an</span>
|
||||
<span class="sd"> object and optionally a specific attribute on it.</span>
|
||||
|
|
@ -2473,8 +2506,10 @@
|
|||
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(examine) or perm(Builder)"</span>
|
||||
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
||||
<span class="n">arg_regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"(/\w+?(\s|$))|\s|$"</span>
|
||||
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"account"</span><span class="p">,</span> <span class="s2">"object"</span><span class="p">,</span> <span class="s2">"script"</span><span class="p">,</span> <span class="s2">"channel"</span><span class="p">]</span>
|
||||
|
||||
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">"object"</span>
|
||||
|
||||
<span class="n">account_mode</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">detail_color</span> <span class="o">=</span> <span class="s2">"|c"</span>
|
||||
<span class="n">header_color</span> <span class="o">=</span> <span class="s2">"|w"</span>
|
||||
<span class="n">quell_color</span> <span class="o">=</span> <span class="s2">"|r"</span>
|
||||
|
|
@ -2499,7 +2534,7 @@
|
|||
<span class="k">return</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">make_iter</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="p">)))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_typeclass"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_typeclass">[docs]</a> <span class="k">def</span> <span class="nf">format_typeclass</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"typeclass"</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"typeclass_path"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">typename</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">typeclass_path</span><span class="si">}</span><span class="s2">)"</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_sessions"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_sessions">[docs]</a> <span class="k">def</span> <span class="nf">format_sessions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
|
|
@ -2598,7 +2633,7 @@
|
|||
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">stored_cmdsets</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">cmdset</span><span class="o">.</span><span class="n">key</span> <span class="o">!=</span> <span class="s2">"_EMPTY_CMDSET"</span><span class="p">:</span>
|
||||
<span class="n">stored_cmdset_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_cmdset</span><span class="p">(</span><span class="n">cmdset</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">stored_cmdset_strings</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">stored_cmdset_strings</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_merged_cmdsets"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_merged_cmdsets">[docs]</a> <span class="k">def</span> <span class="nf">format_merged_cmdsets</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"cmdset"</span><span class="p">):</span>
|
||||
|
|
@ -2632,7 +2667,7 @@
|
|||
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">all_cmdsets</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">cmdset</span><span class="o">.</span><span class="n">key</span> <span class="o">!=</span> <span class="s2">"_EMPTY_CMDSET"</span><span class="p">:</span>
|
||||
<span class="n">merged_cmdset_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_cmdset</span><span class="p">(</span><span class="n">cmdset</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">merged_cmdset_strings</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">merged_cmdset_strings</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_current_cmds"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_current_cmds">[docs]</a> <span class="k">def</span> <span class="nf">format_current_cmds</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">):</span>
|
||||
<span class="n">current_commands</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">cmd</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">current_cmdset</span> <span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"cmd"</span><span class="p">)])</span>
|
||||
|
|
@ -2687,10 +2722,13 @@
|
|||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">header_color</span><span class="si">}{</span><span class="n">key</span><span class="si">}</span><span class="s2">|n=</span><span class="si">{</span><span class="n">value</span><span class="si">}{</span><span class="n">typ</span><span class="si">}</span><span class="s2">"</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_attributes"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_attributes">[docs]</a> <span class="k">def</span> <span class="nf">format_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="n">output</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_attribute</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_attributes</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
||||
<span class="p">)</span></div>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">output</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
|
||||
<span class="c1"># we don't want just an empty line</span>
|
||||
<span class="k">return</span> <span class="n">output</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_nattributes"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_nattributes">[docs]</a> <span class="k">def</span> <span class="nf">format_nattributes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
|
|
@ -2721,6 +2759,51 @@
|
|||
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">things</span> <span class="k">if</span> <span class="n">things</span> <span class="k">else</span> <span class="kc">None</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_script_desc"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_desc">[docs]</a> <span class="k">def</span> <span class="nf">format_script_desc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"db_desc"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_desc</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">crop</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">db_desc</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_script_is_persistent"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_is_persistent">[docs]</a> <span class="k">def</span> <span class="nf">format_script_is_persistent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"db_persistent"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"T"</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_persistent</span> <span class="k">else</span> <span class="s2">"F"</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_script_timer_data"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_timer_data">[docs]</a> <span class="k">def</span> <span class="nf">format_script_timer_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"db_interval"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_interval</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">start_delay</span> <span class="o">=</span> <span class="s2">"T"</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_start_delay</span> <span class="k">else</span> <span class="s2">"F"</span>
|
||||
<span class="n">next_repeat</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">time_until_next_repeat</span><span class="p">()</span>
|
||||
<span class="n">active</span> <span class="o">=</span> <span class="s2">"|grunning|n"</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_is_active</span> <span class="ow">and</span> <span class="n">next_repeat</span> <span class="k">else</span> <span class="s2">"|rinactive|n"</span>
|
||||
<span class="n">interval</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_interval</span>
|
||||
<span class="n">next_repeat</span> <span class="o">=</span> <span class="s2">"N/A"</span> <span class="k">if</span> <span class="n">next_repeat</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">next_repeat</span><span class="si">}</span><span class="s2">s"</span>
|
||||
<span class="n">repeats</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_repeats</span><span class="p">:</span>
|
||||
<span class="n">remaining_repeats</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">remaining_repeats</span><span class="p">()</span>
|
||||
<span class="n">remaining_repeats</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="n">remaining_repeats</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">remaining_repeats</span>
|
||||
<span class="n">repeats</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">" - </span><span class="si">{</span><span class="n">remaining_repeats</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">db_repeats</span><span class="si">}</span><span class="s2"> remain"</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">active</span><span class="si">}</span><span class="s2"> - interval: </span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">s "</span>
|
||||
<span class="sa">f</span><span class="s2">"(next: </span><span class="si">{</span><span class="n">next_repeat</span><span class="si">}{</span><span class="n">repeats</span><span class="si">}</span><span class="s2">, start_delay: </span><span class="si">{</span><span class="n">start_delay</span><span class="si">}</span><span class="s2">)"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_channel_sub_totals"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_sub_totals">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_sub_totals</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"db_account_subscriptions"</span><span class="p">):</span>
|
||||
<span class="n">account_subs</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_account_subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
||||
<span class="n">object_subs</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_object_subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
||||
<span class="n">online</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">online</span><span class="p">())</span>
|
||||
<span class="n">ntotal</span> <span class="o">=</span> <span class="n">account_subs</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="o">+</span> <span class="n">object_subs</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">ntotal</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">online</span><span class="si">}</span><span class="s2"> online)"</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_channel_account_subs"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_account_subs">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_account_subs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"db_account_subscriptions"</span><span class="p">):</span>
|
||||
<span class="n">account_subs</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_account_subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">account_subs</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="n">format_grid</span><span class="p">([</span><span class="n">sub</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">account_subs</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s1">' '</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_channel_object_subs"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_object_subs">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_object_subs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"db_object_subscriptions"</span><span class="p">):</span>
|
||||
<span class="n">object_subs</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_object_subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">object_subs</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="n">format_grid</span><span class="p">([</span><span class="n">sub</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">object_subs</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s1">' '</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.get_formatted_obj_data"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.get_formatted_obj_data">[docs]</a> <span class="k">def</span> <span class="nf">get_formatted_obj_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Calls all other `format_*` methods.</span>
|
||||
|
|
@ -2748,6 +2831,10 @@
|
|||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Merged Cmdset(s)"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_merged_cmdsets</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="sa">f</span><span class="s2">"Commands vailable to </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> (result of Merged Cmdset(s))"</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">format_current_cmds</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">"script"</span><span class="p">:</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Description"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_desc</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Persistent"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_is_persistent</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Script Repeat"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_timer_data</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Scripts"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_scripts</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Tags"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_tags</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Persistent Attributes"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_attributes</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
|
|
@ -2755,6 +2842,11 @@
|
|||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Exits"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_exits</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Characters"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_chars</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Content"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_things</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">"channel"</span><span class="p">:</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Subscription Totals"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_channel_sub_totals</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Account Subscriptions"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_channel_account_subs</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="n">objdata</span><span class="p">[</span><span class="s2">"Object Subscriptions"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_channel_object_subs</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">objdata</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.format_output"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_output">[docs]</a> <span class="k">def</span> <span class="nf">format_output</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">):</span>
|
||||
|
|
@ -2779,6 +2871,46 @@
|
|||
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">sep</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">main_str</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">sep</span><span class="si">}</span><span class="s2">"</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_search_by_object_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj_name</span><span class="p">,</span> <span class="n">objtype</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Route to different search functions depending on the object type being</span>
|
||||
<span class="sd"> examined. This also handles error reporting for multimatches/no matches.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> obj_name (str): The search query.</span>
|
||||
<span class="sd"> objtype (str): One of 'object', 'account', 'script' or 'channel'.</span>
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> any: `None` if no match or multimatch, otherwise a single result.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">objtype</span> <span class="o">==</span> <span class="s2">"object"</span><span class="p">:</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">obj_name</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">objtype</span> <span class="o">==</span> <span class="s2">"account"</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">))</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="c1"># this means we are calling examine from an account object</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span>
|
||||
<span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">),</span> <span class="n">search_object</span><span class="o">=</span><span class="s2">"object"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"search_</span><span class="si">{</span><span class="n">objtype</span><span class="si">}</span><span class="s2">"</span><span class="p">)(</span><span class="n">obj_name</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No </span><span class="si">{</span><span class="n">objtype</span><span class="si">}</span><span class="s2"> found with key </span><span class="si">{</span><span class="n">obj_name</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">err</span> <span class="o">=</span> <span class="s2">"Multiple </span><span class="si">{objtype}</span><span class="s2"> found with key </span><span class="si">{obj_name}</span><span class="s2">:</span><span class="se">\n</span><span class="si">{matches}</span><span class="s2">"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">obj_name</span><span class="o">=</span><span class="n">obj_name</span><span class="p">,</span>
|
||||
<span class="n">matches</span><span class="o">=</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">ob</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">(#</span><span class="si">{</span><span class="n">ob</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">)"</span> <span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">)</span>
|
||||
<span class="p">))</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">obj</span>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
|
||||
|
||||
|
|
@ -2793,42 +2925,32 @@
|
|||
<span class="k">raise</span> <span class="n">InterruptCommand</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">objdef</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objattr</span><span class="p">:</span>
|
||||
<span class="c1"># note that we check the objtype for every repeat; this will always</span>
|
||||
<span class="c1"># be the same result, but it makes for a cleaner code and multi-examine</span>
|
||||
<span class="c1"># is not so common anyway.</span>
|
||||
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">obj_name</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="c1"># name</span>
|
||||
<span class="n">obj_attrs</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">"attrs"</span><span class="p">]</span> <span class="c1"># /attrs</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"evennia.accounts.accounts.DefaultAccount"</span><span class="p">)</span>
|
||||
<span class="ow">or</span> <span class="s2">"account"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
||||
<span class="ow">or</span> <span class="n">obj_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">))</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="c1"># this means we are calling examine from an account object</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span>
|
||||
<span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">),</span> <span class="n">search_object</span><span class="o">=</span><span class="s2">"object"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">obj_name</span><span class="p">)</span>
|
||||
<span class="c1"># identify object type, in prio account - script - channel</span>
|
||||
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">"object"</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"evennia.accounts.accounts.DefaultAccount"</span><span class="p">)</span>
|
||||
<span class="ow">or</span> <span class="s2">"account"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="n">obj_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)):</span>
|
||||
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">"account"</span>
|
||||
<span class="k">elif</span> <span class="s2">"script"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
||||
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">"script"</span>
|
||||
<span class="k">elif</span> <span class="s2">"channel"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
||||
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">"channel"</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">=</span> <span class="n">object_type</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_search_by_object_type</span><span class="p">(</span><span class="n">obj_name</span><span class="p">,</span> <span class="n">object_type</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">examine_objs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">obj</span><span class="p">,</span> <span class="n">obj_attrs</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdExamine.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Process command"""</span>
|
||||
<span class="k">def</span> <span class="nf">get_cmdset_callback</span><span class="p">(</span><span class="n">current_cmdset</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> We make use of the cmdhandler.get_and_merge_cmdsets below. This</span>
|
||||
<span class="sd"> is an asynchronous function, returning a Twisted deferred.</span>
|
||||
<span class="sd"> So in order to properly use this we need use this callback;</span>
|
||||
<span class="sd"> it is called with the result of get_and_merge_cmdsets, whenever</span>
|
||||
<span class="sd"> that function finishes. Taking the resulting cmdset, we continue</span>
|
||||
<span class="sd"> to format and output the result.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_output</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">obj</span><span class="p">,</span> <span class="n">obj_attrs</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">examine_objs</span><span class="p">:</span>
|
||||
<span class="c1"># these are parsed out in .parse already</span>
|
||||
|
||||
|
|
@ -2856,31 +2978,42 @@
|
|||
|
||||
<span class="c1"># examine the obj itself</span>
|
||||
|
||||
<span class="c1"># get the cmdset status</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
|
||||
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">"session"</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
|
||||
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">"account"</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">"object"</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"object"</span><span class="p">,</span> <span class="s2">"account"</span><span class="p">):</span>
|
||||
<span class="c1"># for objects and accounts we need to set up an asynchronous</span>
|
||||
<span class="c1"># fetch of the cmdset and not proceed with the examine display</span>
|
||||
<span class="c1"># until the fetch is complete</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
|
||||
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">"session"</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">"account"</span><span class="p">:</span>
|
||||
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">"account"</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">"object"</span>
|
||||
|
||||
<span class="n">account</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">objct</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
|
||||
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span>
|
||||
<span class="n">objct</span> <span class="o">=</span> <span class="n">obj</span>
|
||||
<span class="n">account</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">objct</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">"account"</span><span class="p">:</span>
|
||||
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span>
|
||||
<span class="n">objct</span> <span class="o">=</span> <span class="n">obj</span>
|
||||
|
||||
<span class="c1"># this is usually handled when a command runs, but when we examine</span>
|
||||
<span class="c1"># we may have leftover inherited cmdsets directly after a move etc.</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
|
||||
<span class="c1"># using callback to print results whenever function returns.</span>
|
||||
<span class="n">get_and_merge_cmdsets</span><span class="p">(</span>
|
||||
<span class="n">obj</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">account</span><span class="p">,</span> <span class="n">objct</span><span class="p">,</span> <span class="n">mergemode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span>
|
||||
<span class="p">)</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">get_cmdset_callback</span><span class="p">)</span></div></div>
|
||||
<span class="c1"># this is usually handled when a command runs, but when we examine</span>
|
||||
<span class="c1"># we may have leftover inherited cmdsets directly after a move etc.</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
|
||||
<span class="c1"># using callback to print results whenever function returns.</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_get_cmdset_callback</span><span class="p">(</span><span class="n">current_cmdset</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_output</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
|
||||
<span class="n">get_and_merge_cmdsets</span><span class="p">(</span>
|
||||
<span class="n">obj</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">account</span><span class="p">,</span> <span class="n">objct</span><span class="p">,</span> <span class="n">mergemode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span>
|
||||
<span class="p">)</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">_get_cmdset_callback</span><span class="p">)</span>
|
||||
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># for objects without cmdsets we can proceed to examine immediately</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_output</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="CmdFind"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdFind">[docs]</a><span class="k">class</span> <span class="nc">CmdFind</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
||||
|
|
@ -3173,6 +3306,7 @@
|
|||
<span class="sd"> script/stop myobj = scriptname - stop script on object</span>
|
||||
<span class="sd"> script/pause foo.Bar.Script - pause global script</span>
|
||||
<span class="sd"> script/delete myobj - delete ALL scripts on object</span>
|
||||
<span class="sd"> script/delete #dbref[-#dbref] - delete script or range by dbref</span>
|
||||
|
||||
<span class="sd"> When given with an `<obj>` as left-hand-side, this creates and</span>
|
||||
<span class="sd"> assigns a new script to that object. Without an `<obj>`, this</span>
|
||||
|
|
@ -3214,6 +3348,13 @@
|
|||
<span class="n">scripts</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_typeclass_path__iendswith</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">scripts</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">scripts</span>
|
||||
<span class="k">if</span> <span class="s2">"-"</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="c1"># may be a dbref-range</span>
|
||||
<span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">=</span> <span class="p">(</span><span class="n">dbref</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">val1</span> <span class="ow">and</span> <span class="n">val2</span><span class="p">:</span>
|
||||
<span class="n">scripts</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">id__in</span><span class="o">=</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)))</span>
|
||||
<span class="k">if</span> <span class="n">scripts</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">scripts</span>
|
||||
|
||||
<div class="viewcode-block" id="CmdScripts.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdScripts.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""implement method"""</span>
|
||||
|
|
|
|||
|
|
@ -781,6 +781,7 @@
|
|||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">comtable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">styled_table</span><span class="p">(</span>
|
||||
<span class="s2">"id"</span><span class="p">,</span>
|
||||
<span class="s2">"channel"</span><span class="p">,</span>
|
||||
<span class="s2">"my aliases"</span><span class="p">,</span>
|
||||
<span class="s2">"locks"</span><span class="p">,</span>
|
||||
|
|
@ -791,17 +792,24 @@
|
|||
<span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">subscribed</span><span class="p">:</span>
|
||||
|
||||
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"-"</span>
|
||||
<span class="n">chanid</span> <span class="o">=</span> <span class="s2">"-"</span>
|
||||
<span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">):</span>
|
||||
<span class="n">locks</span> <span class="o">=</span> <span class="n">chan</span><span class="o">.</span><span class="n">locks</span>
|
||||
<span class="n">chanid</span> <span class="o">=</span> <span class="n">chan</span><span class="o">.</span><span class="n">id</span>
|
||||
|
||||
<span class="n">my_aliases</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_channel_aliases</span><span class="p">(</span><span class="n">chan</span><span class="p">))</span>
|
||||
<span class="n">comtable</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
|
||||
<span class="o">*</span><span class="p">(</span><span class="s2">"</span><span class="si">{}{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="s2">"(</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()))</span> <span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="k">else</span> <span class="s2">""</span><span class="p">),</span>
|
||||
<span class="o">*</span><span class="p">(</span>
|
||||
<span class="n">chanid</span><span class="p">,</span>
|
||||
<span class="s2">"</span><span class="si">{key}{aliases}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">aliases</span><span class="o">=</span><span class="s2">";"</span><span class="o">+</span> <span class="s2">";"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="p">),</span>
|
||||
<span class="n">my_aliases</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="p">,</span>
|
||||
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">))</span>
|
||||
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">comtable</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CmdChannel.display_all_channels"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.display_all_channels">[docs]</a> <span class="k">def</span> <span class="nf">display_all_channels</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subscribed</span><span class="p">,</span> <span class="n">available</span><span class="p">):</span>
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@
|
|||
<span class="kn">from</span> <span class="nn">evennia.commands.command</span> <span class="kn">import</span> <span class="n">Command</span><span class="p">,</span> <span class="n">InterruptCommand</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdparser</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.commands.cmdset</span> <span class="kn">import</span> <span class="n">CmdSet</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span><span class="p">,</span> <span class="n">utils</span><span class="p">,</span> <span class="n">gametime</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span><span class="p">,</span> <span class="n">utils</span><span class="p">,</span> <span class="n">gametime</span><span class="p">,</span> <span class="n">create</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">search_object</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultObject</span><span class="p">,</span> <span class="n">DefaultCharacter</span>
|
||||
|
|
@ -1772,6 +1772,23 @@
|
|||
<span class="s2">"Global Script Deleted -"</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestBuilding.test_script_multi_delete"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_script_multi_delete">[docs]</a> <span class="k">def</span> <span class="nf">test_script_multi_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
|
||||
<span class="n">script1</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
|
||||
<span class="n">script2</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
|
||||
<span class="n">script3</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
<span class="n">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span>
|
||||
<span class="s2">"/delete #</span><span class="si">{}</span><span class="s2">-#</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">script1</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">script3</span><span class="o">.</span><span class="n">id</span><span class="p">),</span>
|
||||
<span class="s2">"Global Script Deleted - #2 (evennia.scripts.scripts.DefaultScript)|"</span>
|
||||
<span class="s2">"Global Script Deleted - #3 (evennia.scripts.scripts.DefaultScript)|"</span>
|
||||
<span class="s2">"Global Script Deleted - #4 (evennia.scripts.scripts.DefaultScript)"</span><span class="p">,</span>
|
||||
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">"y"</span><span class="p">]</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">script1</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">script2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">script3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestBuilding.test_teleport"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_teleport">[docs]</a> <span class="k">def</span> <span class="nf">test_teleport</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">oid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">id</span>
|
||||
|
|
|
|||
|
|
@ -49,10 +49,12 @@
|
|||
<span class="sd">"""</span>
|
||||
|
||||
|
||||
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
||||
<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="kn">import</span> <span class="n">Q</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">dbref</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">dbref</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span>
|
||||
|
||||
<span class="n">_GA</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__getattribute__</span>
|
||||
<span class="n">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
|
@ -279,7 +281,7 @@
|
|||
<span class="sd"> always gives only one match.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Queryset: Message matches.</span>
|
||||
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># unique msg id</span>
|
||||
|
|
@ -329,8 +331,57 @@
|
|||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">sender_restrict</span> <span class="o">&</span> <span class="n">receiver_restrict</span> <span class="o">&</span> <span class="n">fulltext_restrict</span><span class="p">)</span></div>
|
||||
|
||||
<span class="c1"># back-compatibility alias</span>
|
||||
<span class="n">message_search</span> <span class="o">=</span> <span class="n">search_message</span></div>
|
||||
<span class="n">message_search</span> <span class="o">=</span> <span class="n">search_message</span>
|
||||
|
||||
<div class="viewcode-block" id="MsgManager.create_message"><a class="viewcode-back" href="../../../api/evennia.comms.managers.html#evennia.comms.comms.MsgManager.create_message">[docs]</a> <span class="k">def</span> <span class="nf">create_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">senderobj</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">receivers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Create a new communication Msg. Msgs represent a unit of</span>
|
||||
<span class="sd"> database-persistent communication between entites.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> senderobj (Object, Account, Script, str or list): The entity (or</span>
|
||||
<span class="sd"> entities) sending the Msg. If a `str`, this is the id-string</span>
|
||||
<span class="sd"> for an external sender type.</span>
|
||||
<span class="sd"> message (str): Text with the message. Eventual headers, titles</span>
|
||||
<span class="sd"> etc should all be included in this text string. Formatting</span>
|
||||
<span class="sd"> will be retained.</span>
|
||||
<span class="sd"> receivers (Object, Account, Script, str or list): An Account/Object to send</span>
|
||||
<span class="sd"> to, or a list of them. If a string, it's an identifier for an external</span>
|
||||
<span class="sd"> receiver.</span>
|
||||
<span class="sd"> locks (str): Lock definition string.</span>
|
||||
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
|
||||
<span class="sd"> header (str): Mime-type or other optional information for the message</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> The Comm system is created to be very open-ended, so it's fully</span>
|
||||
<span class="sd"> possible to let a message both go several receivers at the same time,</span>
|
||||
<span class="sd"> it's up to the command definitions to limit this as desired.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="s1">'channels'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
|
||||
<span class="s2">"create_message() does not accept 'channel' kwarg anymore "</span>
|
||||
<span class="s2">"- channels no longer accept Msg objects."</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">message</span><span class="p">:</span>
|
||||
<span class="c1"># we don't allow empty messages.</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="n">new_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">(</span><span class="n">db_message</span><span class="o">=</span><span class="n">message</span><span class="p">)</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="n">sender</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">senderobj</span><span class="p">):</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="n">sender</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">header</span>
|
||||
<span class="k">for</span> <span class="n">receiver</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">receivers</span><span class="p">):</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">receivers</span> <span class="o">=</span> <span class="n">receiver</span>
|
||||
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
|
||||
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">new_message</span></div></div>
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Channel manager</span>
|
||||
|
|
@ -413,13 +464,16 @@
|
|||
<span class="sd"> exact (bool, optional): Require an exact (but not</span>
|
||||
<span class="sd"> case sensitive) match.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">ostring</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">search_dbref</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">dbref_match</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">exact</span><span class="p">:</span>
|
||||
<span class="n">channels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
||||
<span class="n">Q</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span>
|
||||
|
|
@ -432,6 +486,56 @@
|
|||
<span class="p">)</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">channels</span></div>
|
||||
|
||||
<div class="viewcode-block" id="ChannelDBManager.create_channel"><a class="viewcode-back" href="../../../api/evennia.comms.managers.html#evennia.comms.comms.ChannelDBManager.create_channel">[docs]</a> <span class="k">def</span> <span class="nf">create_channel</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Create A communication Channel. A Channel serves as a central hub</span>
|
||||
<span class="sd"> for distributing Msgs to groups of people without specifying the</span>
|
||||
<span class="sd"> receivers explicitly. Instead accounts may 'connect' to the channel</span>
|
||||
<span class="sd"> and follow the flow of messages. By default the channel allows</span>
|
||||
<span class="sd"> access to all old messages, but this can be turned off with the</span>
|
||||
<span class="sd"> keep_log switch.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> key (str): This must be unique.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> aliases (list of str): List of alternative (likely shorter) keynames.</span>
|
||||
<span class="sd"> desc (str): A description of the channel, for use in listings.</span>
|
||||
<span class="sd"> locks (str): Lockstring.</span>
|
||||
<span class="sd"> keep_log (bool): Log channel throughput.</span>
|
||||
<span class="sd"> typeclass (str or class): The typeclass of the Channel (not</span>
|
||||
<span class="sd"> often used).</span>
|
||||
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> channel (Channel): A newly created channel.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHANNEL_TYPECLASS</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="c1"># a path is given. Load the actual typeclass</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># create new instance</span>
|
||||
<span class="n">new_channel</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># store call signature for the signal</span>
|
||||
<span class="n">new_channel</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="n">keep_log</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># this will trigger the save signal which in turn calls the</span>
|
||||
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
|
||||
<span class="c1"># used.</span>
|
||||
<span class="n">new_channel</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
|
||||
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_CHANNEL_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_channel</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">new_channel</span></div>
|
||||
|
||||
<span class="c1"># back-compatibility alias</span>
|
||||
<span class="n">channel_search</span> <span class="o">=</span> <span class="n">search_channel</span></div>
|
||||
|
||||
|
|
|
|||
|
|
@ -457,7 +457,7 @@
|
|||
<span class="c1"># ------------------------------------------------------------</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TempMsg"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.models.TempMsg">[docs]</a><span class="k">class</span> <span class="nc">TempMsg</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="TempMsg"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.models.TempMsg">[docs]</a><span class="k">class</span> <span class="nc">TempMsg</span><span class="p">:</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> This is a non-persistent object for sending temporary messages that will not be stored. It</span>
|
||||
<span class="sd"> mimics the "real" Msg object, but doesn't require sender to be given.</span>
|
||||
|
|
|
|||
|
|
@ -71,8 +71,7 @@
|
|||
<span class="p">)</span> <span class="c1"># note that this creates a new Session!</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="n">SESSIONS</span><span class="o">.</span><span class="n">session_from_sessid</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># the real session</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">session</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"session"</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">session</span></div>
|
||||
|
||||
<div class="viewcode-block" id="AuditingTest.test_mask"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.auditing.tests.html#evennia.contrib.utils.auditing.tests.AuditingTest.test_mask">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">"evennia.contrib.utils.auditing.server.AUDIT_CALLBACK"</span><span class="p">,</span>
|
||||
<span class="s2">"evennia.contrib.utils.auditing.outputs.to_syslog"</span><span class="p">)</span>
|
||||
|
|
|
|||
|
|
@ -45,8 +45,11 @@
|
|||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">Custom manager for HelpEntry objects.</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">IntegrityError</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span><span class="p">,</span> <span class="n">utils</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
|
||||
|
||||
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"HelpEntryManager"</span><span class="p">,)</span>
|
||||
|
||||
|
|
@ -187,12 +190,58 @@
|
|||
<span class="sd"> ostring (str): The help topic to look for.</span>
|
||||
<span class="sd"> category (str): Limit the search to a particular help topic</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Queryset: An iterable with 0, 1 or more matches.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">ostring</span> <span class="o">=</span> <span class="n">ostring</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">help_category</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">,</span> <span class="n">db_help_category__iexact</span><span class="o">=</span><span class="n">help_category</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span></div></div>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="HelpEntryManager.create_help"><a class="viewcode-back" href="../../../api/evennia.help.manager.html#evennia.help.manager.HelpEntryManager.create_help">[docs]</a> <span class="k">def</span> <span class="nf">create_help</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">entrytext</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"General"</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Create a static help entry in the help database. Note that Command</span>
|
||||
<span class="sd"> help entries are dynamic and directly taken from the __doc__</span>
|
||||
<span class="sd"> entries of the command. The database-stored help entries are</span>
|
||||
<span class="sd"> intended for more general help on the game, more extensive info,</span>
|
||||
<span class="sd"> in-game setting information and so on.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> key (str): The name of the help entry.</span>
|
||||
<span class="sd"> entrytext (str): The body of te help entry</span>
|
||||
<span class="sd"> category (str, optional): The help category of the entry.</span>
|
||||
<span class="sd"> locks (str, optional): A lockstring to restrict access.</span>
|
||||
<span class="sd"> aliases (list of str, optional): List of alternative (likely shorter) keynames.</span>
|
||||
<span class="sd"> tags (lst, optional): List of tags or tuples `(tag, category)`.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> help (HelpEntry): A newly created help entry.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">new_help</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">()</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">=</span> <span class="n">entrytext</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">help_category</span> <span class="o">=</span> <span class="n">category</span>
|
||||
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">new_help</span>
|
||||
<span class="k">except</span> <span class="n">IntegrityError</span><span class="p">:</span>
|
||||
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Could not add help entry: key '</span><span class="si">%s</span><span class="s2">' already exists."</span> <span class="o">%</span> <span class="n">key</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_HELPENTRY_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_help</span><span class="p">)</span></div></div>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
|
|
|
|||
|
|
@ -51,6 +51,9 @@
|
|||
<span class="kn">from</span> <span class="nn">django.db.models.fields</span> <span class="kn">import</span> <span class="n">exceptions</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">is_iter</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">string_partial_matching</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
|
||||
|
||||
|
||||
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"ObjectManager"</span><span class="p">,</span> <span class="s2">"ObjectDBManager"</span><span class="p">)</span>
|
||||
<span class="n">_GA</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__getattribute__</span>
|
||||
|
|
@ -73,7 +76,7 @@
|
|||
<span class="sd"> Querysets or database objects).</span>
|
||||
|
||||
<span class="sd"> dbref (converter)</span>
|
||||
<span class="sd"> get_id (alias: dbref_search)</span>
|
||||
<span class="sd"> dbref_search</span>
|
||||
<span class="sd"> get_dbref_range</span>
|
||||
<span class="sd"> object_totals</span>
|
||||
<span class="sd"> typeclass_search</span>
|
||||
|
|
@ -203,8 +206,8 @@
|
|||
<span class="sd"> typeclasses (list, optional): Python pats to restrict matches with.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> matches (query): Objects fullfilling both the `attribute_name` and</span>
|
||||
<span class="sd"> `attribute_value` criterions.</span>
|
||||
<span class="sd"> Queryset: Iterable with 0, 1 or more matches fullfilling both the `attribute_name` and</span>
|
||||
<span class="sd"> `attribute_value` criterions.</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> This uses the Attribute's PickledField to transparently search the database by matching</span>
|
||||
|
|
@ -263,6 +266,9 @@
|
|||
<span class="sd"> candidates (list, optional): List of objects to limit search to.</span>
|
||||
<span class="sd"> typeclasses (list, optional): List of typeclass-path strings to restrict matches with</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">property_name</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"db_"</span><span class="p">):</span>
|
||||
|
|
@ -275,11 +281,10 @@
|
|||
<span class="p">)</span>
|
||||
<span class="n">type_restriction</span> <span class="o">=</span> <span class="n">typeclasses</span> <span class="ow">and</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_typeclass_path__in</span><span class="o">=</span><span class="n">make_iter</span><span class="p">(</span><span class="n">typeclasses</span><span class="p">))</span> <span class="ow">or</span> <span class="n">Q</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">cand_restriction</span> <span class="o">&</span> <span class="n">type_restriction</span> <span class="o">&</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="n">querykwargs</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">"id"</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
||||
<span class="n">cand_restriction</span> <span class="o">&</span> <span class="n">type_restriction</span> <span class="o">&</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="n">querykwargs</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">"id"</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">exceptions</span><span class="o">.</span><span class="n">FieldError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
|
||||
|
||||
|
|
@ -287,7 +292,7 @@
|
|||
<span class="s2">"The property '</span><span class="si">%s</span><span class="s2">' does not support search criteria of the type </span><span class="si">%s</span><span class="s2">."</span>
|
||||
<span class="o">%</span> <span class="p">(</span><span class="n">property_name</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">property_value</span><span class="p">))</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">[]</span></div>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="ObjectDBManager.get_contents"><a class="viewcode-back" href="../../../api/evennia.objects.manager.html#evennia.objects.manager.ObjectDBManager.get_contents">[docs]</a> <span class="k">def</span> <span class="nf">get_contents</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">excludeobj</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -299,7 +304,8 @@
|
|||
<span class="sd"> to exclude from the match.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> contents (query): Matching contents, without excludeobj, if given.</span>
|
||||
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">exclude_restriction</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="n">Q</span><span class="p">(</span><span class="n">pk__in</span><span class="o">=</span><span class="p">[</span><span class="n">_GA</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"id"</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">excludeobj</span><span class="p">)])</span> <span class="k">if</span> <span class="n">excludeobj</span> <span class="k">else</span> <span class="n">Q</span><span class="p">()</span>
|
||||
|
|
@ -317,17 +323,18 @@
|
|||
<span class="sd"> typeclasses (list): Only match objects with typeclasses having thess path strings.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> matches (query): A list of matches of length 0, 1 or more.</span>
|
||||
<span class="sd"> Queryset: An iterable with 0, 1 or more matches.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ostring</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">ostring</span><span class="p">,</span> <span class="s2">"key"</span><span class="p">):</span>
|
||||
<span class="n">ostring</span> <span class="o">=</span> <span class="n">ostring</span><span class="o">.</span><span class="n">key</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">candidates</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">candidates</span><span class="p">):</span>
|
||||
<span class="c1"># if candidates is an empty iterable there can be no matches</span>
|
||||
<span class="c1"># Exit early.</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># build query objects</span>
|
||||
<span class="n">candidates_id</span> <span class="o">=</span> <span class="p">[</span><span class="n">_GA</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"id"</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">candidates</span><span class="p">)</span> <span class="k">if</span> <span class="n">obj</span><span class="p">]</span>
|
||||
|
|
@ -368,10 +375,12 @@
|
|||
<span class="c1"># fuzzy matching</span>
|
||||
<span class="n">key_strings</span> <span class="o">=</span> <span class="n">search_candidates</span><span class="o">.</span><span class="n">values_list</span><span class="p">(</span><span class="s2">"db_key"</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">"id"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">index_matches</span> <span class="o">=</span> <span class="n">string_partial_matching</span><span class="p">(</span><span class="n">key_strings</span><span class="p">,</span> <span class="n">ostring</span><span class="p">,</span> <span class="n">ret_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">index_matches</span><span class="p">:</span>
|
||||
<span class="c1"># a match by key</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">obj</span> <span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">search_candidates</span><span class="p">)</span> <span class="k">if</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">]</span>
|
||||
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">search_candidates</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># match by alias rather than by key</span>
|
||||
<span class="n">search_candidates</span> <span class="o">=</span> <span class="n">search_candidates</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
||||
|
|
@ -387,8 +396,10 @@
|
|||
<span class="n">index_matches</span> <span class="o">=</span> <span class="n">string_partial_matching</span><span class="p">(</span><span class="n">alias_strings</span><span class="p">,</span> <span class="n">ostring</span><span class="p">,</span> <span class="n">ret_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">index_matches</span><span class="p">:</span>
|
||||
<span class="c1"># it's possible to have multiple matches to the same Object, we must weed those out</span>
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">({</span><span class="n">alias_candidates</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">})</span>
|
||||
<span class="k">return</span> <span class="p">[]</span></div>
|
||||
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">alias_candidates</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">]</span>
|
||||
<span class="c1"># TODO - not ideal to have to do a second lookup here, but we want to return a queryset</span>
|
||||
<span class="c1"># rather than a list ... maybe the above queries can be improved.</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">id__in</span><span class="o">=</span><span class="n">match_ids</span><span class="p">)</span></div>
|
||||
|
||||
<span class="c1"># main search methods and helper functions</span>
|
||||
|
||||
|
|
@ -463,7 +474,7 @@
|
|||
<span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">searchdata</span> <span class="ow">and</span> <span class="n">searchdata</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
|
||||
<span class="c1"># typeclass may also be a list</span>
|
||||
|
|
@ -491,10 +502,11 @@
|
|||
<span class="c1"># Easiest case - dbref matching (always exact)</span>
|
||||
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref_search</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">candidates</span> <span class="ow">or</span> <span class="n">dbref_match</span> <span class="ow">in</span> <span class="n">candidates</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">dbref_match</span><span class="p">]</span>
|
||||
<span class="n">dmatch</span> <span class="o">=</span> <span class="n">dbref_match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">candidates</span> <span class="ow">or</span> <span class="n">dmatch</span> <span class="ow">in</span> <span class="n">candidates</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">dbref_match</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">[]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># Search through all possibilities.</span>
|
||||
<span class="n">match_number</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
|
@ -519,15 +531,16 @@
|
|||
<span class="c1"># this indicates trying to get a single match with a match-number</span>
|
||||
<span class="c1"># targeting some higher-number match (like 2-box when there is only</span>
|
||||
<span class="c1"># one box in the room). This leads to a no-match.</span>
|
||||
<span class="n">matches</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
||||
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">matches</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">match_number</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># multiple matches, but a number was given to separate them</span>
|
||||
<span class="k">if</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">match_number</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">matches</span><span class="p">):</span>
|
||||
<span class="c1"># limit to one match</span>
|
||||
<span class="n">matches</span> <span class="o">=</span> <span class="p">[</span><span class="n">matches</span><span class="p">[</span><span class="n">match_number</span><span class="p">]]</span>
|
||||
<span class="c1"># limit to one match (we still want a queryset back)</span>
|
||||
<span class="c1"># TODO: Can we do this some other way and avoid a second lookup?</span>
|
||||
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">matches</span><span class="p">[</span><span class="n">match_number</span><span class="p">]</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># a number was given outside of range. This means a no-match.</span>
|
||||
<span class="n">matches</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># return a list (possibly empty)</span>
|
||||
<span class="k">return</span> <span class="n">matches</span></div>
|
||||
|
|
@ -637,7 +650,118 @@
|
|||
<span class="sd"> db_account field set.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_sessid__isnull</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">db_sessid</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></div></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_sessid__isnull</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">db_sessid</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="ObjectDBManager.create_object"><a class="viewcode-back" href="../../../api/evennia.objects.manager.html#evennia.objects.manager.ObjectDBManager.create_object">[docs]</a> <span class="k">def</span> <span class="nf">create_object</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">home</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">destination</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">nohome</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">nattributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="sd"> Create a new in-game object.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
|
||||
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
|
||||
<span class="sd"> `#dbref` will be set.</span>
|
||||
<span class="sd"> location (Object or str): Obj or #dbref to use as the location of the new object.</span>
|
||||
<span class="sd"> home (Object or str): Obj or #dbref to use as the object's home location.</span>
|
||||
<span class="sd"> permissions (list): A list of permission strings or tuples (permstring, category).</span>
|
||||
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
|
||||
<span class="sd"> aliases (list): A list of alternative keys or tuples (aliasstring, category).</span>
|
||||
<span class="sd"> tags (list): List of tag keys or tuples (tagkey, category) or (tagkey, category, data).</span>
|
||||
<span class="sd"> destination (Object or str): Obj or #dbref to use as an Exit's target.</span>
|
||||
<span class="sd"> report_to (Object): The object to return error messages to.</span>
|
||||
<span class="sd"> nohome (bool): This allows the creation of objects without a</span>
|
||||
<span class="sd"> default home location; only used when creating the default</span>
|
||||
<span class="sd"> location itself or during unittests.</span>
|
||||
<span class="sd"> attributes (list): Tuples on the form (key, value) or (key, value, category),</span>
|
||||
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
|
||||
<span class="sd"> to set as Attributes on the new object.</span>
|
||||
<span class="sd"> nattributes (list): Non-persistent tuples on the form (key, value). Note that</span>
|
||||
<span class="sd"> adding this rarely makes sense since this data will not survive a reload.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> object (Object): A newly created object of the given typeclass.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> ObjectDB.DoesNotExist: If trying to create an Object with</span>
|
||||
<span class="sd"> `location` or `home` that can't be found.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span>
|
||||
|
||||
<span class="c1"># convenience converters to avoid common usage mistake</span>
|
||||
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">aliases</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span> <span class="k">if</span> <span class="n">aliases</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="c1"># a path is given. Load the actual typeclass</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Setup input for the create command. We use ObjectDB as baseclass here</span>
|
||||
<span class="c1"># to give us maximum freedom (the typeclasses will load</span>
|
||||
<span class="c1"># correctly when each object is recovered).</span>
|
||||
|
||||
<span class="n">location</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
|
||||
<span class="n">destination</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">destination</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
|
||||
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">home</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">nohome</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model_ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">(</span>
|
||||
<span class="s2">"settings.DEFAULT_HOME (= '</span><span class="si">%s</span><span class="s2">') does not exist, or the setting is malformed."</span>
|
||||
<span class="o">%</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># create new instance</span>
|
||||
<span class="n">new_object</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
|
||||
<span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">db_location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
|
||||
<span class="n">db_destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
|
||||
<span class="n">db_home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
|
||||
<span class="n">db_typeclass_path</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># store the call signature for the signal</span>
|
||||
<span class="n">new_object</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
|
||||
<span class="n">destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
|
||||
<span class="n">home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
|
||||
<span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
|
||||
<span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
|
||||
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
|
||||
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
|
||||
<span class="n">nohome</span><span class="o">=</span><span class="n">nohome</span><span class="p">,</span>
|
||||
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
|
||||
<span class="n">nattributes</span><span class="o">=</span><span class="n">nattributes</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># this will trigger the save signal which in turn calls the</span>
|
||||
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
|
||||
<span class="c1"># used.</span>
|
||||
<span class="n">new_object</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
|
||||
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_OBJECT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_object</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">new_object</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ObjectManager"><a class="viewcode-back" href="../../../api/evennia.objects.manager.html#evennia.objects.manager.ObjectManager">[docs]</a><span class="k">class</span> <span class="nc">ObjectManager</span><span class="p">(</span><span class="n">ObjectDBManager</span><span class="p">,</span> <span class="n">TypeclassManager</span><span class="p">):</span>
|
||||
|
|
|
|||
|
|
@ -183,11 +183,11 @@
|
|||
<span class="n">nattr</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">nattr</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="c1"># we assume a None-value</span>
|
||||
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">""</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">nattr</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">""</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">nattr</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
|
||||
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="s2">""</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[:</span><span class="mi">4</span><span class="p">])</span>
|
||||
|
||||
|
|
|
|||
|
|
@ -46,13 +46,19 @@
|
|||
<span class="sd">The custom manager for Scripts.</span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
||||
<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="kn">import</span> <span class="n">Q</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
|
||||
|
||||
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"ScriptManager"</span><span class="p">,</span> <span class="s2">"ScriptDBManager"</span><span class="p">)</span>
|
||||
<span class="n">_GA</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__getattribute__</span>
|
||||
|
||||
<span class="n">_ObjectDB</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
|
||||
<span class="n">VALIDATE_ITERATION</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
||||
|
||||
|
|
@ -66,7 +72,7 @@
|
|||
<span class="sd"> Querysets or database objects).</span>
|
||||
|
||||
<span class="sd"> dbref (converter)</span>
|
||||
<span class="sd"> get_id (or dbref_search)</span>
|
||||
<span class="sd"> dbref_search</span>
|
||||
<span class="sd"> get_dbref_range</span>
|
||||
<span class="sd"> object_totals</span>
|
||||
<span class="sd"> typeclass_search</span>
|
||||
|
|
@ -125,7 +131,6 @@
|
|||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
|
||||
<span class="n">script</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
|
||||
|
|
@ -177,6 +182,9 @@
|
|||
<span class="sd"> on a timer.</span>
|
||||
<span class="sd"> typeclass (class or str): Typeclass or path to typeclass.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Queryset: An iterable with 0, 1 or more results.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">ostring</span> <span class="o">=</span> <span class="n">ostring</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
|
|
@ -185,10 +193,10 @@
|
|||
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
|
||||
<span class="c1"># this is a dbref, try to find the script directly</span>
|
||||
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref_search</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dbref_match</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
|
||||
<span class="p">(</span><span class="n">obj</span> <span class="ow">and</span> <span class="n">obj</span> <span class="o">!=</span> <span class="n">dbref_match</span><span class="o">.</span><span class="n">obj</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">only_timed</span> <span class="ow">and</span> <span class="n">dbref_match</span><span class="o">.</span><span class="n">interval</span><span class="p">)</span>
|
||||
<span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">dbref_match</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
|
||||
<span class="n">dmatch</span> <span class="o">=</span> <span class="n">dbref_match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span> <span class="ow">and</span> <span class="n">obj</span> <span class="o">!=</span> <span class="n">dmatch</span><span class="o">.</span><span class="n">obj</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">only_timed</span> <span class="ow">and</span> <span class="n">dmatch</span><span class="o">.</span><span class="n">interval</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">dbref_match</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">typeclass</span><span class="p">):</span>
|
||||
|
|
@ -233,6 +241,129 @@
|
|||
<span class="n">new_script</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">(</span>
|
||||
<span class="n">typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">new_key</span><span class="p">,</span> <span class="n">obj</span><span class="o">=</span><span class="n">new_obj</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">new_locks</span><span class="p">,</span> <span class="n">autostart</span><span class="o">=</span><span class="kc">True</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">new_script</span></div>
|
||||
|
||||
<div class="viewcode-block" id="ScriptDBManager.create_script"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.create_script">[docs]</a> <span class="k">def</span> <span class="nf">create_script</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">interval</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">start_delay</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">repeats</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">persistent</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">autostart</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Create a new script. All scripts are a combination of a database</span>
|
||||
<span class="sd"> object that communicates with the database, and an typeclass that</span>
|
||||
<span class="sd"> 'decorates' the database object into being different types of</span>
|
||||
<span class="sd"> scripts. It's behaviour is similar to the game objects except</span>
|
||||
<span class="sd"> scripts has a time component and are more limited in scope.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
|
||||
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
|
||||
<span class="sd"> #dbref will be set.</span>
|
||||
<span class="sd"> obj (Object): The entity on which this Script sits. If this</span>
|
||||
<span class="sd"> is `None`, we are creating a "global" script.</span>
|
||||
<span class="sd"> account (Account): The account on which this Script sits. It is</span>
|
||||
<span class="sd"> exclusiv to `obj`.</span>
|
||||
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
|
||||
<span class="sd"> interval (int): The triggering interval for this Script, in</span>
|
||||
<span class="sd"> seconds. If unset, the Script will not have a timing</span>
|
||||
<span class="sd"> component.</span>
|
||||
<span class="sd"> start_delay (bool): If `True`, will wait `interval` seconds</span>
|
||||
<span class="sd"> before triggering the first time.</span>
|
||||
<span class="sd"> repeats (int): The number of times to trigger before stopping.</span>
|
||||
<span class="sd"> If unset, will repeat indefinitely.</span>
|
||||
<span class="sd"> persistent (bool): If this Script survives a server shutdown</span>
|
||||
<span class="sd"> or not (all Scripts will survive a reload).</span>
|
||||
<span class="sd"> autostart (bool): If this Script will start immediately when</span>
|
||||
<span class="sd"> created or if the `start` method must be called explicitly.</span>
|
||||
<span class="sd"> report_to (Object): The object to return error messages to.</span>
|
||||
<span class="sd"> desc (str): Optional description of script</span>
|
||||
<span class="sd"> tags (list): List of tags or tuples (tag, category).</span>
|
||||
<span class="sd"> attributes (list): List if tuples (key, value) or (key, value, category)</span>
|
||||
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> script (obj): An instance of the script created</span>
|
||||
|
||||
<span class="sd"> See evennia.scripts.manager for methods to manipulate existing</span>
|
||||
<span class="sd"> scripts in the database.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">global</span> <span class="n">_ObjectDB</span><span class="p">,</span> <span class="n">_AccountDB</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ObjectDB</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span> <span class="k">as</span> <span class="n">_ObjectDB</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="kn">import</span> <span class="n">AccountDB</span> <span class="k">as</span> <span class="n">_AccountDB</span>
|
||||
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_SCRIPT_TYPECLASS</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="c1"># a path is given. Load the actual typeclass</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># validate input</span>
|
||||
<span class="n">kwarg</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_key"</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span>
|
||||
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_account"</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">_AccountDB</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_obj"</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_interval"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">interval</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">start_delay</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_start_delay"</span><span class="p">]</span> <span class="o">=</span> <span class="n">start_delay</span>
|
||||
<span class="k">if</span> <span class="n">repeats</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_repeats"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">repeats</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">persistent</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_persistent"</span><span class="p">]</span> <span class="o">=</span> <span class="n">persistent</span>
|
||||
<span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_desc"</span><span class="p">]</span> <span class="o">=</span> <span class="n">desc</span>
|
||||
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
|
||||
<span class="c1"># create new instance</span>
|
||||
<span class="n">new_script</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="o">**</span><span class="n">kwarg</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># store the call signature for the signal</span>
|
||||
<span class="n">new_script</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">obj</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span>
|
||||
<span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
|
||||
<span class="n">interval</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span>
|
||||
<span class="n">start_delay</span><span class="o">=</span><span class="n">start_delay</span><span class="p">,</span>
|
||||
<span class="n">repeats</span><span class="o">=</span><span class="n">repeats</span><span class="p">,</span>
|
||||
<span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">,</span>
|
||||
<span class="n">autostart</span><span class="o">=</span><span class="n">autostart</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
|
||||
<span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span>
|
||||
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
|
||||
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># this will trigger the save signal which in turn calls the</span>
|
||||
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
|
||||
<span class="c1"># can be used.</span>
|
||||
<span class="n">new_script</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_script</span><span class="o">.</span><span class="n">id</span><span class="p">:</span>
|
||||
<span class="c1"># this happens in the case of having a repeating script with `repeats=1` and</span>
|
||||
<span class="c1"># `start_delay=False` - the script will run once and immediately stop before</span>
|
||||
<span class="c1"># save is over.</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_SCRIPT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_script</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">new_script</span></div></div>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -137,11 +137,25 @@
|
|||
<span class="c1"># make sure to clean data from database</span>
|
||||
<span class="n">ServerConfig</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">conf</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">savekey</span><span class="p">,</span> <span class="n">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_attr_category_fieldname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">category</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Modify the saved fieldname to make sure to differentiate between Attributes</span>
|
||||
<span class="sd"> with different categories.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">fieldname</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">]"</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="n">fieldname</span>
|
||||
|
||||
<div class="viewcode-block" id="MonitorHandler.at_update"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.at_update">[docs]</a> <span class="k">def</span> <span class="nf">at_update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Called by the field/attribute as it saves.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># if this an Attribute with a category we should differentiate</span>
|
||||
<span class="n">fieldname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_category_fieldname</span><span class="p">(</span>
|
||||
<span class="n">fieldname</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_category</span>
|
||||
<span class="k">if</span> <span class="n">fieldname</span> <span class="o">==</span> <span class="s2">"db_value"</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"db_category"</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">to_delete</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">if</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span> <span class="ow">and</span> <span class="n">fieldname</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">]:</span>
|
||||
<span class="k">for</span> <span class="n">idstring</span><span class="p">,</span> <span class="p">(</span><span class="n">callback</span><span class="p">,</span> <span class="n">persistent</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
|
|
@ -154,7 +168,8 @@
|
|||
<span class="k">for</span> <span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">idstring</span><span class="p">)</span> <span class="ow">in</span> <span class="n">to_delete</span><span class="p">:</span>
|
||||
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">][</span><span class="n">idstring</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="MonitorHandler.add"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="MonitorHandler.add"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Add monitoring to a given field or Attribute. A field must</span>
|
||||
<span class="sd"> be specified with the full db_* name or it will be assumed</span>
|
||||
|
|
@ -170,6 +185,9 @@
|
|||
<span class="sd"> of the same field and object.</span>
|
||||
<span class="sd"> persistent (bool, optional): If False, the monitor will survive</span>
|
||||
<span class="sd"> a server reload but not a cold restart. This is default.</span>
|
||||
<span class="sd"> category (str, optional): This is only used if `fieldname` refers to</span>
|
||||
<span class="sd"> an Attribute (i.e. it does not start with `db_`). You must specify this</span>
|
||||
<span class="sd"> if you want to target an Attribute with a category.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> session (Session): If this keyword is given, the monitorhandler will</span>
|
||||
|
|
@ -184,7 +202,7 @@
|
|||
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
|
||||
<span class="k">return</span>
|
||||
<span class="n">fieldname</span> <span class="o">=</span> <span class="s2">"db_value"</span>
|
||||
<span class="n">fieldname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_category_fieldname</span><span class="p">(</span><span class="s2">"db_value"</span><span class="p">,</span> <span class="n">category</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># we try to serialize this data to test it's valid. Otherwise we won't accept it.</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
|
|
@ -204,7 +222,7 @@
|
|||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">][</span><span class="n">idstring</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">callback</span><span class="p">,</span> <span class="n">persistent</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="MonitorHandler.remove"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">""</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="MonitorHandler.remove"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Remove a monitor.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
|
@ -212,7 +230,7 @@
|
|||
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
|
||||
<span class="k">return</span>
|
||||
<span class="n">fieldname</span> <span class="o">=</span> <span class="s2">"db_value"</span>
|
||||
<span class="n">fieldname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_category_fieldname</span><span class="p">(</span><span class="s2">"db_value"</span><span class="p">,</span> <span class="n">category</span><span class="p">)</span>
|
||||
|
||||
<span class="n">idstring_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">idstring</span> <span class="ow">in</span> <span class="n">idstring_dict</span><span class="p">:</span>
|
||||
|
|
|
|||
|
|
@ -508,10 +508,13 @@
|
|||
<span class="sd"> dbref (str or int): The id to search for.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> object (TypedObject): The matched object.</span>
|
||||
<span class="sd"> Queryset: Queryset with 0 or 1 match.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span></div>
|
||||
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">dbref</span><span class="p">,</span> <span class="n">reqhash</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TypedObjectManager.get_dbref_range"><a class="viewcode-back" href="../../../api/evennia.typeclasses.managers.html#evennia.typeclasses.managers.TypedObjectManager.get_dbref_range">[docs]</a> <span class="k">def</span> <span class="nf">get_dbref_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">min_dbref</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">max_dbref</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
|
|||
|
|
@ -1,693 +0,0 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>evennia.utils.create — Evennia 1.0-dev 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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.utils.create</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for evennia.utils.create</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">This module gathers all the essential database-creation functions for the game</span>
|
||||
<span class="sd">engine's various object types.</span>
|
||||
|
||||
<span class="sd">Only objects created 'stand-alone' are in here. E.g. object Attributes are</span>
|
||||
<span class="sd">always created through their respective objects handlers.</span>
|
||||
|
||||
<span class="sd">Each `creation_*` function also has an alias named for the entity being created,</span>
|
||||
<span class="sd">such as create_object() and object(). This is for consistency with the</span>
|
||||
<span class="sd">utils.search module and allows you to do the shorter `create.object()`.</span>
|
||||
|
||||
<span class="sd">The respective object managers hold more methods for manipulating and searching</span>
|
||||
<span class="sd">objects already existing in the database.</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
||||
<span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">IntegrityError</span>
|
||||
<span class="kn">from</span> <span class="nn">django.utils</span> <span class="kn">import</span> <span class="n">timezone</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
|
||||
|
||||
<span class="c1"># delayed imports</span>
|
||||
<span class="n">_User</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_ObjectDB</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_Object</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_Script</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_ScriptDB</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_HelpEntry</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_Msg</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_Account</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_to_object</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_ChannelDB</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
|
||||
<span class="c1"># limit symbol import from API</span>
|
||||
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s2">"create_object"</span><span class="p">,</span>
|
||||
<span class="s2">"create_script"</span><span class="p">,</span>
|
||||
<span class="s2">"create_help_entry"</span><span class="p">,</span>
|
||||
<span class="s2">"create_message"</span><span class="p">,</span>
|
||||
<span class="s2">"create_channel"</span><span class="p">,</span>
|
||||
<span class="s2">"create_account"</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">_GA</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__getattribute__</span>
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Game Object creation</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="create_object"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_object">[docs]</a><span class="k">def</span> <span class="nf">create_object</span><span class="p">(</span>
|
||||
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">home</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">destination</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">nohome</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">nattributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="sd"> Create a new in-game object.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
|
||||
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
|
||||
<span class="sd"> `#dbref` will be set.</span>
|
||||
<span class="sd"> location (Object or str): Obj or #dbref to use as the location of the new object.</span>
|
||||
<span class="sd"> home (Object or str): Obj or #dbref to use as the object's home location.</span>
|
||||
<span class="sd"> permissions (list): A list of permission strings or tuples (permstring, category).</span>
|
||||
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
|
||||
<span class="sd"> aliases (list): A list of alternative keys or tuples (aliasstring, category).</span>
|
||||
<span class="sd"> tags (list): List of tag keys or tuples (tagkey, category) or (tagkey, category, data).</span>
|
||||
<span class="sd"> destination (Object or str): Obj or #dbref to use as an Exit's target.</span>
|
||||
<span class="sd"> report_to (Object): The object to return error messages to.</span>
|
||||
<span class="sd"> nohome (bool): This allows the creation of objects without a</span>
|
||||
<span class="sd"> default home location; only used when creating the default</span>
|
||||
<span class="sd"> location itself or during unittests.</span>
|
||||
<span class="sd"> attributes (list): Tuples on the form (key, value) or (key, value, category),</span>
|
||||
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
|
||||
<span class="sd"> to set as Attributes on the new object.</span>
|
||||
<span class="sd"> nattributes (list): Non-persistent tuples on the form (key, value). Note that</span>
|
||||
<span class="sd"> adding this rarely makes sense since this data will not survive a reload.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> object (Object): A newly created object of the given typeclass.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> ObjectDB.DoesNotExist: If trying to create an Object with</span>
|
||||
<span class="sd"> `location` or `home` that can't be found.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">global</span> <span class="n">_ObjectDB</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ObjectDB</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span> <span class="k">as</span> <span class="n">_ObjectDB</span>
|
||||
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span>
|
||||
|
||||
<span class="c1"># convenience converters to avoid common usage mistake</span>
|
||||
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">aliases</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span> <span class="k">if</span> <span class="n">aliases</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="c1"># a path is given. Load the actual typeclass</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># Setup input for the create command. We use ObjectDB as baseclass here</span>
|
||||
<span class="c1"># to give us maximum freedom (the typeclasses will load</span>
|
||||
<span class="c1"># correctly when each object is recovered).</span>
|
||||
|
||||
<span class="n">location</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
|
||||
<span class="n">destination</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">destination</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
|
||||
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">home</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">nohome</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="n">_ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">_ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">(</span>
|
||||
<span class="s2">"settings.DEFAULT_HOME (= '</span><span class="si">%s</span><span class="s2">') does not exist, or the setting is malformed."</span>
|
||||
<span class="o">%</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># create new instance</span>
|
||||
<span class="n">new_object</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
|
||||
<span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">db_location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
|
||||
<span class="n">db_destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
|
||||
<span class="n">db_home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
|
||||
<span class="n">db_typeclass_path</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># store the call signature for the signal</span>
|
||||
<span class="n">new_object</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
|
||||
<span class="n">destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
|
||||
<span class="n">home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
|
||||
<span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
|
||||
<span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
|
||||
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
|
||||
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
|
||||
<span class="n">nohome</span><span class="o">=</span><span class="n">nohome</span><span class="p">,</span>
|
||||
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
|
||||
<span class="n">nattributes</span><span class="o">=</span><span class="n">nattributes</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># this will trigger the save signal which in turn calls the</span>
|
||||
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
|
||||
<span class="c1"># used.</span>
|
||||
<span class="n">new_object</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
|
||||
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_OBJECT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_object</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">new_object</span></div>
|
||||
|
||||
|
||||
<span class="c1"># alias for create_object</span>
|
||||
<span class="nb">object</span> <span class="o">=</span> <span class="n">create_object</span>
|
||||
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Script creation</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="create_script"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_script">[docs]</a><span class="k">def</span> <span class="nf">create_script</span><span class="p">(</span>
|
||||
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">interval</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">start_delay</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">repeats</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">persistent</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">autostart</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Create a new script. All scripts are a combination of a database</span>
|
||||
<span class="sd"> object that communicates with the database, and an typeclass that</span>
|
||||
<span class="sd"> 'decorates' the database object into being different types of</span>
|
||||
<span class="sd"> scripts. It's behaviour is similar to the game objects except</span>
|
||||
<span class="sd"> scripts has a time component and are more limited in scope.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
|
||||
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
|
||||
<span class="sd"> #dbref will be set.</span>
|
||||
<span class="sd"> obj (Object): The entity on which this Script sits. If this</span>
|
||||
<span class="sd"> is `None`, we are creating a "global" script.</span>
|
||||
<span class="sd"> account (Account): The account on which this Script sits. It is</span>
|
||||
<span class="sd"> exclusiv to `obj`.</span>
|
||||
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
|
||||
<span class="sd"> interval (int): The triggering interval for this Script, in</span>
|
||||
<span class="sd"> seconds. If unset, the Script will not have a timing</span>
|
||||
<span class="sd"> component.</span>
|
||||
<span class="sd"> start_delay (bool): If `True`, will wait `interval` seconds</span>
|
||||
<span class="sd"> before triggering the first time.</span>
|
||||
<span class="sd"> repeats (int): The number of times to trigger before stopping.</span>
|
||||
<span class="sd"> If unset, will repeat indefinitely.</span>
|
||||
<span class="sd"> persistent (bool): If this Script survives a server shutdown</span>
|
||||
<span class="sd"> or not (all Scripts will survive a reload).</span>
|
||||
<span class="sd"> autostart (bool): If this Script will start immediately when</span>
|
||||
<span class="sd"> created or if the `start` method must be called explicitly.</span>
|
||||
<span class="sd"> report_to (Object): The object to return error messages to.</span>
|
||||
<span class="sd"> desc (str): Optional description of script</span>
|
||||
<span class="sd"> tags (list): List of tags or tuples (tag, category).</span>
|
||||
<span class="sd"> attributes (list): List if tuples (key, value) or (key, value, category)</span>
|
||||
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> script (obj): An instance of the script created</span>
|
||||
|
||||
<span class="sd"> See evennia.scripts.manager for methods to manipulate existing</span>
|
||||
<span class="sd"> scripts in the database.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">global</span> <span class="n">_ScriptDB</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ScriptDB</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.scripts.models</span> <span class="kn">import</span> <span class="n">ScriptDB</span> <span class="k">as</span> <span class="n">_ScriptDB</span>
|
||||
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_SCRIPT_TYPECLASS</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="c1"># a path is given. Load the actual typeclass</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># validate input</span>
|
||||
<span class="n">kwarg</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_key"</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span>
|
||||
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_account"</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">_AccountDB</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_obj"</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_interval"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">interval</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">start_delay</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_start_delay"</span><span class="p">]</span> <span class="o">=</span> <span class="n">start_delay</span>
|
||||
<span class="k">if</span> <span class="n">repeats</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_repeats"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">repeats</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">persistent</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_persistent"</span><span class="p">]</span> <span class="o">=</span> <span class="n">persistent</span>
|
||||
<span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
|
||||
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_desc"</span><span class="p">]</span> <span class="o">=</span> <span class="n">desc</span>
|
||||
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
|
||||
<span class="c1"># create new instance</span>
|
||||
<span class="n">new_script</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="o">**</span><span class="n">kwarg</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># store the call signature for the signal</span>
|
||||
<span class="n">new_script</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">obj</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span>
|
||||
<span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
|
||||
<span class="n">interval</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span>
|
||||
<span class="n">start_delay</span><span class="o">=</span><span class="n">start_delay</span><span class="p">,</span>
|
||||
<span class="n">repeats</span><span class="o">=</span><span class="n">repeats</span><span class="p">,</span>
|
||||
<span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">,</span>
|
||||
<span class="n">autostart</span><span class="o">=</span><span class="n">autostart</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
|
||||
<span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span>
|
||||
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
|
||||
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># this will trigger the save signal which in turn calls the</span>
|
||||
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
|
||||
<span class="c1"># can be used.</span>
|
||||
<span class="n">new_script</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_script</span><span class="o">.</span><span class="n">id</span><span class="p">:</span>
|
||||
<span class="c1"># this happens in the case of having a repeating script with `repeats=1` and</span>
|
||||
<span class="c1"># `start_delay=False` - the script will run once and immediately stop before save is over.</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_SCRIPT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_script</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">new_script</span></div>
|
||||
|
||||
|
||||
<span class="c1"># alias</span>
|
||||
<span class="n">script</span> <span class="o">=</span> <span class="n">create_script</span>
|
||||
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Help entry creation</span>
|
||||
<span class="c1">#</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="create_help_entry"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_help_entry">[docs]</a><span class="k">def</span> <span class="nf">create_help_entry</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">entrytext</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"General"</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Create a static help entry in the help database. Note that Command</span>
|
||||
<span class="sd"> help entries are dynamic and directly taken from the __doc__</span>
|
||||
<span class="sd"> entries of the command. The database-stored help entries are</span>
|
||||
<span class="sd"> intended for more general help on the game, more extensive info,</span>
|
||||
<span class="sd"> in-game setting information and so on.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> key (str): The name of the help entry.</span>
|
||||
<span class="sd"> entrytext (str): The body of te help entry</span>
|
||||
<span class="sd"> category (str, optional): The help category of the entry.</span>
|
||||
<span class="sd"> locks (str, optional): A lockstring to restrict access.</span>
|
||||
<span class="sd"> aliases (list of str, optional): List of alternative (likely shorter) keynames.</span>
|
||||
<span class="sd"> tags (lst, optional): List of tags or tuples `(tag, category)`.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> help (HelpEntry): A newly created help entry.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">global</span> <span class="n">_HelpEntry</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_HelpEntry</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.help.models</span> <span class="kn">import</span> <span class="n">HelpEntry</span> <span class="k">as</span> <span class="n">_HelpEntry</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">new_help</span> <span class="o">=</span> <span class="n">_HelpEntry</span><span class="p">()</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">=</span> <span class="n">entrytext</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">help_category</span> <span class="o">=</span> <span class="n">category</span>
|
||||
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
|
||||
<span class="n">new_help</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">new_help</span>
|
||||
<span class="k">except</span> <span class="n">IntegrityError</span><span class="p">:</span>
|
||||
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Could not add help entry: key '</span><span class="si">%s</span><span class="s2">' already exists."</span> <span class="o">%</span> <span class="n">key</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
|
||||
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_HELPENTRY_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_help</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="c1"># alias</span>
|
||||
<span class="n">help_entry</span> <span class="o">=</span> <span class="n">create_help_entry</span>
|
||||
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Comm system methods</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="create_message"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_message">[docs]</a><span class="k">def</span> <span class="nf">create_message</span><span class="p">(</span>
|
||||
<span class="n">senderobj</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">receivers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Create a new communication Msg. Msgs represent a unit of</span>
|
||||
<span class="sd"> database-persistent communication between entites.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> senderobj (Object, Account, Script, str or list): The entity (or</span>
|
||||
<span class="sd"> entities) sending the Msg. If a `str`, this is the id-string</span>
|
||||
<span class="sd"> for an external sender type.</span>
|
||||
<span class="sd"> message (str): Text with the message. Eventual headers, titles</span>
|
||||
<span class="sd"> etc should all be included in this text string. Formatting</span>
|
||||
<span class="sd"> will be retained.</span>
|
||||
<span class="sd"> receivers (Object, Account, Script, str or list): An Account/Object to send</span>
|
||||
<span class="sd"> to, or a list of them. If a string, it's an identifier for an external</span>
|
||||
<span class="sd"> receiver.</span>
|
||||
<span class="sd"> locks (str): Lock definition string.</span>
|
||||
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
|
||||
<span class="sd"> header (str): Mime-type or other optional information for the message</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> The Comm system is created to be very open-ended, so it's fully</span>
|
||||
<span class="sd"> possible to let a message both go several receivers at the same time,</span>
|
||||
<span class="sd"> it's up to the command definitions to limit this as desired.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="s1">'channels'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
|
||||
<span class="s2">"create_message() does not accept 'channel' kwarg anymore "</span>
|
||||
<span class="s2">"- channels no longer accept Msg objects."</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">global</span> <span class="n">_Msg</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_Msg</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.comms.models</span> <span class="kn">import</span> <span class="n">Msg</span> <span class="k">as</span> <span class="n">_Msg</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">message</span><span class="p">:</span>
|
||||
<span class="c1"># we don't allow empty messages.</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="n">new_message</span> <span class="o">=</span> <span class="n">_Msg</span><span class="p">(</span><span class="n">db_message</span><span class="o">=</span><span class="n">message</span><span class="p">)</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
<span class="k">for</span> <span class="n">sender</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">senderobj</span><span class="p">):</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="n">sender</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">header</span>
|
||||
<span class="k">for</span> <span class="n">receiver</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">receivers</span><span class="p">):</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">receivers</span> <span class="o">=</span> <span class="n">receiver</span>
|
||||
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
|
||||
|
||||
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">new_message</span></div>
|
||||
|
||||
|
||||
<span class="n">message</span> <span class="o">=</span> <span class="n">create_message</span>
|
||||
<span class="n">create_msg</span> <span class="o">=</span> <span class="n">create_message</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="create_channel"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_channel">[docs]</a><span class="k">def</span> <span class="nf">create_channel</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Create A communication Channel. A Channel serves as a central hub</span>
|
||||
<span class="sd"> for distributing Msgs to groups of people without specifying the</span>
|
||||
<span class="sd"> receivers explicitly. Instead accounts may 'connect' to the channel</span>
|
||||
<span class="sd"> and follow the flow of messages. By default the channel allows</span>
|
||||
<span class="sd"> access to all old messages, but this can be turned off with the</span>
|
||||
<span class="sd"> keep_log switch.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> key (str): This must be unique.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> aliases (list of str): List of alternative (likely shorter) keynames.</span>
|
||||
<span class="sd"> desc (str): A description of the channel, for use in listings.</span>
|
||||
<span class="sd"> locks (str): Lockstring.</span>
|
||||
<span class="sd"> keep_log (bool): Log channel throughput.</span>
|
||||
<span class="sd"> typeclass (str or class): The typeclass of the Channel (not</span>
|
||||
<span class="sd"> often used).</span>
|
||||
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> channel (Channel): A newly created channel.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHANNEL_TYPECLASS</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="c1"># a path is given. Load the actual typeclass</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># create new instance</span>
|
||||
<span class="n">new_channel</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># store call signature for the signal</span>
|
||||
<span class="n">new_channel</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="n">keep_log</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># this will trigger the save signal which in turn calls the</span>
|
||||
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
|
||||
<span class="c1"># used.</span>
|
||||
<span class="n">new_channel</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
|
||||
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_CHANNEL_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_channel</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">new_channel</span></div>
|
||||
|
||||
|
||||
<span class="n">channel</span> <span class="o">=</span> <span class="n">create_channel</span>
|
||||
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Account creation methods</span>
|
||||
<span class="c1">#</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="create_account"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_account">[docs]</a><span class="k">def</span> <span class="nf">create_account</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">email</span><span class="p">,</span>
|
||||
<span class="n">password</span><span class="p">,</span>
|
||||
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">is_superuser</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> This creates a new account.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> key (str): The account's name. This should be unique.</span>
|
||||
<span class="sd"> email (str or None): Email on valid addr@addr.domain form. If</span>
|
||||
<span class="sd"> the empty string, will be set to None.</span>
|
||||
<span class="sd"> password (str): Password in cleartext.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> typeclass (str): The typeclass to use for the account.</span>
|
||||
<span class="sd"> is_superuser (bool): Wether or not this account is to be a superuser</span>
|
||||
<span class="sd"> locks (str): Lockstring.</span>
|
||||
<span class="sd"> permission (list): List of permission strings.</span>
|
||||
<span class="sd"> tags (list): List of Tags on form `(key, category[, data])`</span>
|
||||
<span class="sd"> attributes (list): List of Attributes on form</span>
|
||||
<span class="sd"> `(key, value [, category, [,lockstring [, default_pass]]])`</span>
|
||||
<span class="sd"> report_to (Object): An object with a msg() method to report</span>
|
||||
<span class="sd"> errors to. If not given, errors will be logged.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> Account: The newly created Account.</span>
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> ValueError: If `key` already exists in database.</span>
|
||||
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> Usually only the server admin should need to be superuser, all</span>
|
||||
<span class="sd"> other access levels can be handled with more fine-grained</span>
|
||||
<span class="sd"> permissions or groups. A superuser bypasses all lock checking</span>
|
||||
<span class="sd"> operations and is thus not suitable for play-testing the game.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">global</span> <span class="n">_AccountDB</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_AccountDB</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="kn">import</span> <span class="n">AccountDB</span> <span class="k">as</span> <span class="n">_AccountDB</span>
|
||||
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ACCOUNT_TYPECLASS</span>
|
||||
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="c1"># a path is given. Load the actual typeclass.</span>
|
||||
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># setup input for the create command. We use AccountDB as baseclass</span>
|
||||
<span class="c1"># here to give us maximum freedom (the typeclasses will load</span>
|
||||
<span class="c1"># correctly when each object is recovered).</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">email</span><span class="p">:</span>
|
||||
<span class="n">email</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">if</span> <span class="n">_AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">username__iexact</span><span class="o">=</span><span class="n">key</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"An Account with the name '</span><span class="si">%s</span><span class="s2">' already exists."</span> <span class="o">%</span> <span class="n">key</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># this handles a given dbref-relocate to an account.</span>
|
||||
<span class="n">report_to</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">report_to</span><span class="p">,</span> <span class="n">_AccountDB</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># create the correct account entity, using the setup from</span>
|
||||
<span class="c1"># base django auth.</span>
|
||||
<span class="n">now</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
|
||||
<span class="n">email</span> <span class="o">=</span> <span class="n">typeclass</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">normalize_email</span><span class="p">(</span><span class="n">email</span><span class="p">)</span>
|
||||
<span class="n">new_account</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
|
||||
<span class="n">username</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
|
||||
<span class="n">email</span><span class="o">=</span><span class="n">email</span><span class="p">,</span>
|
||||
<span class="n">is_staff</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
|
||||
<span class="n">is_superuser</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
|
||||
<span class="n">last_login</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
|
||||
<span class="n">date_joined</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># the password may be None for 'fake' accounts, like bots</span>
|
||||
<span class="n">valid</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">new_account</span><span class="o">.</span><span class="n">validate_password</span><span class="p">(</span><span class="n">password</span><span class="p">,</span> <span class="n">new_account</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">valid</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">error</span>
|
||||
|
||||
<span class="n">new_account</span><span class="o">.</span><span class="n">set_password</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
|
||||
|
||||
<span class="n">new_account</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span> <span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># saving will trigger the signal that calls the</span>
|
||||
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
|
||||
<span class="c1"># can be used.</span>
|
||||
<span class="n">new_account</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># note that we don't send a signal here, that is sent from the Account.create helper method</span>
|
||||
<span class="c1"># instead.</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">new_account</span></div>
|
||||
|
||||
|
||||
<span class="c1"># alias</span>
|
||||
<span class="n">account</span> <span class="o">=</span> <span class="n">create_account</span>
|
||||
</pre></div>
|
||||
|
||||
<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><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="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>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="create.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../../../0.9.5/index.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 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.utils.create</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -154,7 +154,7 @@
|
|||
<span class="c1"># candidates=None,</span>
|
||||
<span class="c1"># attribute_name=None):</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="n">search_object</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">object_search</span>
|
||||
<span class="n">search_object</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_object</span>
|
||||
<span class="n">search_objects</span> <span class="o">=</span> <span class="n">search_object</span>
|
||||
<span class="n">object_search</span> <span class="o">=</span> <span class="n">search_object</span>
|
||||
<span class="n">objects</span> <span class="o">=</span> <span class="n">search_objects</span>
|
||||
|
|
@ -170,7 +170,7 @@
|
|||
<span class="c1"># ostring = a string or database id.</span>
|
||||
<span class="c1">#</span>
|
||||
|
||||
<span class="n">search_account</span> <span class="o">=</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">account_search</span>
|
||||
<span class="n">search_account</span> <span class="o">=</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_account</span>
|
||||
<span class="n">search_accounts</span> <span class="o">=</span> <span class="n">search_account</span>
|
||||
<span class="n">account_search</span> <span class="o">=</span> <span class="n">search_account</span>
|
||||
<span class="n">accounts</span> <span class="o">=</span> <span class="n">search_accounts</span>
|
||||
|
|
@ -188,7 +188,7 @@
|
|||
<span class="c1"># on a timer.</span>
|
||||
<span class="c1">#</span>
|
||||
|
||||
<span class="n">search_script</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">script_search</span>
|
||||
<span class="n">search_script</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_script</span>
|
||||
<span class="n">search_scripts</span> <span class="o">=</span> <span class="n">search_script</span>
|
||||
<span class="n">script_search</span> <span class="o">=</span> <span class="n">search_script</span>
|
||||
<span class="n">scripts</span> <span class="o">=</span> <span class="n">search_scripts</span>
|
||||
|
|
@ -209,7 +209,7 @@
|
|||
<span class="c1"># one of the other arguments to limit the search.</span>
|
||||
<span class="c1">#</span>
|
||||
|
||||
<span class="n">search_message</span> <span class="o">=</span> <span class="n">Msg</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">message_search</span>
|
||||
<span class="n">search_message</span> <span class="o">=</span> <span class="n">Msg</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_message</span>
|
||||
<span class="n">search_messages</span> <span class="o">=</span> <span class="n">search_message</span>
|
||||
<span class="n">message_search</span> <span class="o">=</span> <span class="n">search_message</span>
|
||||
<span class="n">messages</span> <span class="o">=</span> <span class="n">search_messages</span>
|
||||
|
|
@ -225,7 +225,7 @@
|
|||
<span class="c1"># exact - requires an exact ostring match (not case sensitive)</span>
|
||||
<span class="c1">#</span>
|
||||
|
||||
<span class="n">search_channel</span> <span class="o">=</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">channel_search</span>
|
||||
<span class="n">search_channel</span> <span class="o">=</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_channel</span>
|
||||
<span class="n">search_channels</span> <span class="o">=</span> <span class="n">search_channel</span>
|
||||
<span class="n">channel_search</span> <span class="o">=</span> <span class="n">search_channel</span>
|
||||
<span class="n">channels</span> <span class="o">=</span> <span class="n">search_channels</span>
|
||||
|
|
|
|||
|
|
@ -175,26 +175,6 @@
|
|||
<span class="n">room_typeclass</span> <span class="o">=</span> <span class="n">DefaultRoom</span>
|
||||
<span class="n">script_typeclass</span> <span class="o">=</span> <span class="n">DefaultScript</span>
|
||||
|
||||
<div class="viewcode-block" id="EvenniaTestMixin.save_backups"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.save_backups">[docs]</a> <span class="k">def</span> <span class="nf">save_backups</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">backups</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span><span class="p">,</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span><span class="p">,</span>
|
||||
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span>
|
||||
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="EvenniaTestMixin.restore_backups"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.restore_backups">[docs]</a> <span class="k">def</span> <span class="nf">restore_backups</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">flush_cache</span><span class="p">()</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="EvenniaTestMixin.mock_sessions"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.mock_sessions">[docs]</a> <span class="k">def</span> <span class="nf">mock_sessions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mocked_SESSIONS</span> <span class="o">=</span> <span class="n">SESSIONS</span></div>
|
||||
|
||||
<div class="viewcode-block" id="EvenniaTestMixin.create_accounts"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_accounts">[docs]</a> <span class="k">def</span> <span class="nf">create_accounts</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">account</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_account</span><span class="p">(</span>
|
||||
<span class="s2">"TestAccount"</span><span class="p">,</span>
|
||||
|
|
@ -211,8 +191,10 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"Developer"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="EvenniaTestMixin.teardown_accounts"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.teardown_accounts">[docs]</a> <span class="k">def</span> <span class="nf">teardown_accounts</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">account2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"account"</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"account2"</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">account2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="EvenniaTestMixin.create_rooms"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_rooms">[docs]</a> <span class="k">def</span> <span class="nf">create_rooms</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">room1</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">room_typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"Room"</span><span class="p">,</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
|
@ -262,15 +244,23 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">session</span></div>
|
||||
|
||||
<div class="viewcode-block" id="EvenniaTestMixin.teardown_session"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.teardown_session">[docs]</a> <span class="k">def</span> <span class="nf">teardown_session</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">del</span> <span class="n">SESSIONS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">sessid</span><span class="p">]</span></div>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"sessions"</span><span class="p">):</span>
|
||||
<span class="k">del</span> <span class="n">SESSIONS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">sessid</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="EvenniaTestMixin.setUp"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.setUp">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">"evennia.scripts.taskhandler.deferLater"</span><span class="p">,</span> <span class="n">_mock_deferlater</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Sets up testing environment</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">save_backups</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mock_sessions</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">backups</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span><span class="p">,</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span><span class="p">,</span>
|
||||
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span>
|
||||
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_accounts</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_rooms</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">create_objs</span><span class="p">()</span>
|
||||
|
|
@ -279,8 +269,17 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">setup_session</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="EvenniaTestMixin.tearDown"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">restore_backups</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">teardown_session</span><span class="p">()</span>
|
||||
<span class="n">flush_cache</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">: Teardown error. If you overrode the `setUp()` method "</span>
|
||||
<span class="s2">"in your test, make sure you also added `super().setUp()`!"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">del</span> <span class="n">SESSIONS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">sessid</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">teardown_accounts</span><span class="p">()</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tearDown</span><span class="p">()</span></div></div>
|
||||
|
||||
|
|
|
|||
|
|
@ -240,7 +240,6 @@
|
|||
<li><a href="evennia/utils/ansi.html">evennia.utils.ansi</a></li>
|
||||
<li><a href="evennia/utils/batchprocessors.html">evennia.utils.batchprocessors</a></li>
|
||||
<li><a href="evennia/utils/containers.html">evennia.utils.containers</a></li>
|
||||
<li><a href="evennia/utils/create.html">evennia.utils.create</a></li>
|
||||
<li><a href="evennia/utils/dbserialize.html">evennia.utils.dbserialize</a></li>
|
||||
<li><a href="evennia/utils/eveditor.html">evennia.utils.eveditor</a></li>
|
||||
<li><a href="evennia/utils/evform.html">evennia.utils.evform</a></li>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue