Updated HTML docs

This commit is contained in:
Griatch 2021-08-22 20:36:28 +02:00
parent 5e89a10cbf
commit 40b2ba0cee
74 changed files with 627 additions and 363 deletions

View file

@ -1006,7 +1006,7 @@
<span class="k">return</span> <span class="s2">&quot;node_typeclass&quot;</span>
<span class="k">def</span> <span class="nf">_typeclass_select</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">typeclass</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">_typeclass_select</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">typeclass</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Select typeclass from list and add it to prototype. Return next node to go to.&quot;&quot;&quot;</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">_set_property</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">typeclass</span><span class="p">,</span> <span class="n">prop</span><span class="o">=</span><span class="s2">&quot;typeclass&quot;</span><span class="p">,</span> <span class="n">processor</span><span class="o">=</span><span class="nb">str</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">&quot;Selected typeclass |c</span><span class="si">{}</span><span class="s2">|n.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">typeclass</span><span class="p">))</span>
@ -2621,7 +2621,7 @@
<span class="c1"># prototype load node</span>
<span class="k">def</span> <span class="nf">_prototype_load_select</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">prototype_key</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">_prototype_load_select</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">prototype_key</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">matches</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="n">matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>

View file

@ -146,28 +146,74 @@
<span class="k">elif</span> <span class="n">protkey</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">,</span> <span class="s2">&quot;prototype_desc&quot;</span><span class="p">):</span>
<span class="n">prototype</span><span class="p">[</span><span class="n">protkey</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;attrs&quot;</span><span class="p">,</span> <span class="p">[]))</span> <span class="c1"># break reference</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tags&quot;</span><span class="p">,</span> <span class="p">[]))</span>
<span class="n">homogenized_tags</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">homogenized</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">homogenized_tags</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">homogenized_attrs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">homogenized_parents</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">prototype</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">reserved</span><span class="p">:</span>
<span class="c1"># check all reserved keys</span>
<span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;tags&quot;</span><span class="p">:</span>
<span class="c1"># tags must be on form [(tag, category, data), ...]</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tags&quot;</span><span class="p">,</span> <span class="p">[]))</span>
<span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">tags</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">tag</span><span class="p">):</span>
<span class="n">homogenized_tags</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">tag</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="k">elif</span> <span class="n">tag</span><span class="p">:</span>
<span class="n">ntag</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ntag</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">homogenized_tags</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">tag</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="k">elif</span> <span class="n">ntag</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">homogenized_tags</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">tag</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">tag</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="k">else</span><span class="p">:</span>
<span class="n">homogenized_tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tag</span><span class="p">[:</span><span class="mi">3</span><span class="p">])</span>
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;attrs&quot;</span><span class="p">:</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;attrs&quot;</span><span class="p">,</span> <span class="p">[]))</span> <span class="c1"># break reference</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="c1"># attrs must be on form [(key, value, category, lockstr)]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="s2">&quot;Prototype&#39;s &#39;attr&#39; field must &quot;</span>
<span class="sa">f</span><span class="s2">&quot;be a list of tuples: </span><span class="si">{</span><span class="n">prototype</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">attr</span><span class="p">:</span>
<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">&quot;&quot;</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">&quot;&quot;</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">&quot;&quot;</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>
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;prototype_parent&quot;</span><span class="p">:</span>
<span class="c1"># homogenize any prototype-parents embedded directly as dicts</span>
<span class="n">protparents</span> <span class="o">=</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;prototype_parent&#39;</span><span class="p">,</span> <span class="p">[])</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">protparents</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="n">protparents</span> <span class="o">=</span> <span class="p">[</span><span class="n">protparents</span><span class="p">]</span>
<span class="k">for</span> <span class="n">parent</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">protparents</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="c1"># recursively homogenize directly embedded prototype parents</span>
<span class="n">homogenized_parents</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">homogenize_prototype</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">custom_keys</span><span class="o">=</span><span class="n">custom_keys</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">homogenized_tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span>
<span class="c1"># normal prototype-parent names are added as-is</span>
<span class="n">homogenized_parents</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parent</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># another reserved key</span>
<span class="n">homogenized</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># unassigned keys -&gt; attrs</span>
<span class="n">attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">attrs</span><span class="p">:</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s2">&quot;attrs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">attrs</span>
<span class="c1"># unreserved keys -&gt; attrs</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">homogenized_attrs</span><span class="p">:</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s2">&quot;attrs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">homogenized_attrs</span>
<span class="k">if</span> <span class="n">homogenized_tags</span><span class="p">:</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s2">&quot;tags&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">homogenized_tags</span>
<span class="k">if</span> <span class="n">homogenized_parents</span><span class="p">:</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s1">&#39;prototype_parent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">homogenized_parents</span>
<span class="c1"># add required missing parts that had defaults before</span>
@ -474,7 +520,8 @@
<span class="k">return</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="search_prototype"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.search_prototype">[docs]</a><span class="k">def</span> <span class="nf">search_prototype</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">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">require_single</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">return_iterators</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<div class="viewcode-block" id="search_prototype"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.search_prototype">[docs]</a><span class="k">def</span> <span class="nf">search_prototype</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">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">require_single</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">return_iterators</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">no_db</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Find prototypes based on key and/or tags, or all prototypes.</span>
@ -488,6 +535,9 @@
<span class="sd"> return_iterators (bool): Optimized return for large numbers of db-prototypes.</span>
<span class="sd"> If set, separate returns of module based prototypes and paginate</span>
<span class="sd"> the db-prototype return.</span>
<span class="sd"> no_db (bool): Optimization. If set, skip querying for database-generated prototypes and only</span>
<span class="sd"> include module-based prototypes. This can lead to a dramatic speedup since</span>
<span class="sd"> module-prototypes are static and require no db-lookup.</span>
<span class="sd"> Return:</span>
<span class="sd"> matches (list): Default return, all found prototype dicts. Empty list if</span>
@ -539,35 +589,38 @@
<span class="c1"># prototype_from_object will modify the base prototype for every object</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">match</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">mod_matches</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
<span class="c1"># search db-stored prototypes</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="c1"># exact match on tag(s)</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="n">tag_categories</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;db_prototype&quot;</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">tags</span><span class="p">]</span>
<span class="n">db_matches</span> <span class="o">=</span> <span class="n">DbPrototype</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_by_tag</span><span class="p">(</span><span class="n">tags</span><span class="p">,</span> <span class="n">tag_categories</span><span class="p">)</span>
<span class="k">if</span> <span class="n">no_db</span><span class="p">:</span>
<span class="n">db_matches</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">db_matches</span> <span class="o">=</span> <span class="n">DbPrototype</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="c1"># exact or partial match on key</span>
<span class="n">exact_match</span> <span class="o">=</span> <span class="n">db_matches</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">key</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;db_key&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">exact_match</span> <span class="ow">and</span> <span class="n">allow_fuzzy</span><span class="p">:</span>
<span class="c1"># try with partial match instead</span>
<span class="n">db_matches</span> <span class="o">=</span> <span class="n">db_matches</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__icontains</span><span class="o">=</span><span class="n">key</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;db_key&quot;</span><span class="p">)</span>
<span class="c1"># search db-stored prototypes</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="c1"># exact match on tag(s)</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="n">tag_categories</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;db_prototype&quot;</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">tags</span><span class="p">]</span>
<span class="n">db_matches</span> <span class="o">=</span> <span class="n">DbPrototype</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_by_tag</span><span class="p">(</span><span class="n">tags</span><span class="p">,</span> <span class="n">tag_categories</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">db_matches</span> <span class="o">=</span> <span class="n">exact_match</span>
<span class="n">db_matches</span> <span class="o">=</span> <span class="n">DbPrototype</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="c1"># exact or partial match on key</span>
<span class="n">exact_match</span> <span class="o">=</span> <span class="n">db_matches</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">key</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;db_key&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">exact_match</span> <span class="ow">and</span> <span class="n">allow_fuzzy</span><span class="p">:</span>
<span class="c1"># try with partial match instead</span>
<span class="n">db_matches</span> <span class="o">=</span> <span class="n">db_matches</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__icontains</span><span class="o">=</span><span class="n">key</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;db_key&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">db_matches</span> <span class="o">=</span> <span class="n">exact_match</span>
<span class="c1"># convert to prototype</span>
<span class="n">db_ids</span> <span class="o">=</span> <span class="n">db_matches</span><span class="o">.</span><span class="n">values_list</span><span class="p">(</span><span class="s2">&quot;id&quot;</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="n">db_matches</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">Attribute</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">scriptdb__pk__in</span><span class="o">=</span><span class="n">db_ids</span><span class="p">,</span> <span class="n">db_key</span><span class="o">=</span><span class="s2">&quot;prototype&quot;</span><span class="p">)</span>
<span class="o">.</span><span class="n">values_list</span><span class="p">(</span><span class="s2">&quot;db_value&quot;</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">&quot;scriptdb__db_key&quot;</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># convert to prototype</span>
<span class="n">db_ids</span> <span class="o">=</span> <span class="n">db_matches</span><span class="o">.</span><span class="n">values_list</span><span class="p">(</span><span class="s2">&quot;id&quot;</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="n">db_matches</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">Attribute</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">scriptdb__pk__in</span><span class="o">=</span><span class="n">db_ids</span><span class="p">,</span> <span class="n">db_key</span><span class="o">=</span><span class="s2">&quot;prototype&quot;</span><span class="p">)</span>
<span class="o">.</span><span class="n">values_list</span><span class="p">(</span><span class="s2">&quot;db_value&quot;</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">&quot;scriptdb__db_key&quot;</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">require_single</span><span class="p">:</span>
<span class="n">nmodules</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">module_prototypes</span><span class="p">)</span>
<span class="n">ndbprots</span> <span class="o">=</span> <span class="n">db_matches</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
<span class="n">ndbprots</span> <span class="o">=</span> <span class="n">db_matches</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="k">if</span> <span class="n">db_matches</span> <span class="k">else</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">nmodules</span> <span class="o">+</span> <span class="n">ndbprots</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;Found </span><span class="si">{num}</span><span class="s2"> matching prototypes among </span><span class="si">{module_prototypes}</span><span class="s2">.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
@ -809,19 +862,29 @@
<span class="n">err</span><span class="o">=</span><span class="n">err</span><span class="p">,</span> <span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># recursively traverse prototype_parent chain</span>
<span class="k">if</span> <span class="n">prototype_parent</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prototype_parent</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="c1"># the protparent is already embedded as a dict;</span>
<span class="n">prototype_parent</span> <span class="o">=</span> <span class="p">[</span><span class="n">prototype_parent</span><span class="p">]</span>
<span class="c1"># recursively traverse prototype_parent chain</span>
<span class="k">for</span> <span class="n">protstring</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">prototype_parent</span><span class="p">):</span>
<span class="n">protstring</span> <span class="o">=</span> <span class="n">protstring</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">if</span> <span class="n">protkey</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">protstring</span> <span class="o">==</span> <span class="n">protkey</span><span class="p">:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2"> tries to parent itself.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">))</span>
<span class="n">protparent</span> <span class="o">=</span> <span class="n">protparents</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">protstring</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">protparent</span><span class="p">:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2">&#39;s prototype_parent &#39;</span><span class="si">{parent}</span><span class="s2">&#39; was not found.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="n">protstring</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">protstring</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="c1"># an already embedded prototype_parent</span>
<span class="n">protparent</span> <span class="o">=</span> <span class="n">protstring</span>
<span class="n">protstring</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">protstring</span> <span class="o">=</span> <span class="n">protstring</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">if</span> <span class="n">protkey</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">protstring</span> <span class="o">==</span> <span class="n">protkey</span><span class="p">:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2"> tries to parent itself.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">))</span>
<span class="n">protparent</span> <span class="o">=</span> <span class="n">protparents</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">protstring</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">protparent</span><span class="p">:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2">&#39;s `prototype_parent` (named &#39;</span><span class="si">{parent}</span><span class="s2">&#39;) &quot;</span>
<span class="s2">&quot;was not found.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="n">protstring</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># check for infinite recursion</span>
<span class="k">if</span> <span class="nb">id</span><span class="p">(</span><span class="n">prototype</span><span class="p">)</span> <span class="ow">in</span> <span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;visited&quot;</span><span class="p">]:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> has infinite nesting of prototypes.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
@ -832,9 +895,12 @@
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">_ERRSTR</span><span class="si">}</span><span class="s2">: &quot;</span> <span class="o">+</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="si">{</span><span class="n">_ERRSTR</span><span class="si">}</span><span class="s2">: &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]))</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;visited&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">id</span><span class="p">(</span><span class="n">prototype</span><span class="p">))</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;depth&quot;</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="c1"># next step of recursive validation</span>
<span class="n">validate_prototype</span><span class="p">(</span>
<span class="n">protparent</span><span class="p">,</span> <span class="n">protstring</span><span class="p">,</span> <span class="n">protparents</span><span class="p">,</span> <span class="n">is_prototype_base</span><span class="o">=</span><span class="n">is_prototype_base</span><span class="p">,</span> <span class="n">_flags</span><span class="o">=</span><span class="n">_flags</span>
<span class="p">)</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;visited&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;depth&quot;</span><span class="p">]</span> <span class="o">-=</span> <span class="mi">1</span>
@ -959,7 +1025,7 @@
<span class="n">attrs</span> <span class="o">=</span> <span class="n">prototype</span><span class="p">[</span><span class="s2">&quot;attrs&quot;</span><span class="p">]</span>
<span class="n">out</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="p">(</span><span class="n">attrkey</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="n">locks</span><span class="p">)</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lock</span> <span class="k">for</span> <span class="n">lock</span> <span class="ow">in</span> <span class="n">locks</span> <span class="k">if</span> <span class="n">lock</span><span class="p">)</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">locks</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">locks</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lock</span> <span class="k">for</span> <span class="n">lock</span> <span class="ow">in</span> <span class="n">locks</span> <span class="k">if</span> <span class="n">lock</span><span class="p">)</span>
<span class="n">category</span> <span class="o">=</span> <span class="s2">&quot;|ccategory:|n </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">category</span><span class="p">)</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="n">cat_locks</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">category</span> <span class="ow">or</span> <span class="n">locks</span><span class="p">:</span>

View file

@ -261,10 +261,23 @@
<span class="n">_workprot</span> <span class="o">=</span> <span class="p">{}</span> <span class="k">if</span> <span class="n">_workprot</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">_workprot</span>
<span class="k">if</span> <span class="s2">&quot;prototype_parent&quot;</span> <span class="ow">in</span> <span class="n">inprot</span><span class="p">:</span>
<span class="c1"># move backwards through the inheritance</span>
<span class="k">for</span> <span class="n">prototype</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">inprot</span><span class="p">[</span><span class="s2">&quot;prototype_parent&quot;</span><span class="p">]):</span>
<span class="n">prototype_parents</span> <span class="o">=</span> <span class="n">inprot</span><span class="p">[</span><span class="s2">&quot;prototype_parent&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prototype_parents</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="c1"># protparent already embedded as-is</span>
<span class="n">prototype_parents</span> <span class="o">=</span> <span class="p">[</span><span class="n">prototype_parents</span><span class="p">]</span>
<span class="k">for</span> <span class="n">prototype</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">prototype_parents</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="c1"># protparent already embedded as-is</span>
<span class="n">parent_prototype</span> <span class="o">=</span> <span class="n">prototype</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># protparent given by-name</span>
<span class="n">parent_prototype</span> <span class="o">=</span> <span class="n">protparents</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="p">{})</span>
<span class="c1"># Build the prot dictionary in reverse order, overloading</span>
<span class="n">new_prot</span> <span class="o">=</span> <span class="n">_get_prototype</span><span class="p">(</span>
<span class="n">protparents</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="p">{}),</span> <span class="n">protparents</span><span class="p">,</span> <span class="n">_workprot</span><span class="o">=</span><span class="n">_workprot</span>
<span class="n">parent_prototype</span><span class="p">,</span> <span class="n">protparents</span><span class="p">,</span> <span class="n">_workprot</span><span class="o">=</span><span class="n">_workprot</span>
<span class="p">)</span>
<span class="c1"># attrs, tags have internal structure that should be inherited separately</span>
@ -286,7 +299,7 @@
<span class="k">return</span> <span class="n">_workprot</span>
<div class="viewcode-block" id="flatten_prototype"><a class="viewcode-back" href="../../../api/evennia.prototypes.spawner.html#evennia.prototypes.spawner.flatten_prototype">[docs]</a><span class="k">def</span> <span class="nf">flatten_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">validate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<div class="viewcode-block" id="flatten_prototype"><a class="viewcode-back" href="../../../api/evennia.prototypes.spawner.html#evennia.prototypes.spawner.flatten_prototype">[docs]</a><span class="k">def</span> <span class="nf">flatten_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">validate</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">no_db</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Produce a &#39;flattened&#39; prototype, where all prototype parents in the inheritance tree have been</span>
<span class="sd"> merged into a final prototype.</span>
@ -294,6 +307,8 @@
<span class="sd"> Args:</span>
<span class="sd"> prototype (dict): Prototype to flatten. Its `prototype_parent` field will be parsed.</span>
<span class="sd"> validate (bool, optional): Validate for valid keys etc.</span>
<span class="sd"> no_db (bool, optional): Don&#39;t search db-based prototypes. This can speed up</span>
<span class="sd"> searching dramatically since module-based prototypes are static.</span>
<span class="sd"> Returns:</span>
<span class="sd"> flattened (dict): The final, flattened prototype.</span>
@ -302,7 +317,8 @@
<span class="k">if</span> <span class="n">prototype</span><span class="p">:</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">homogenize_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">)</span>
<span class="n">protparents</span> <span class="o">=</span> <span class="p">{</span><span class="n">prot</span><span class="p">[</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> <span class="n">prot</span> <span class="k">for</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</span><span class="p">()}</span>
<span class="n">protparents</span> <span class="o">=</span> <span class="p">{</span><span class="n">prot</span><span class="p">[</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> <span class="n">prot</span>
<span class="k">for</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</span><span class="p">(</span><span class="n">no_db</span><span class="o">=</span><span class="n">no_db</span><span class="p">)}</span>
<span class="n">protlib</span><span class="o">.</span><span class="n">validate_prototype</span><span class="p">(</span>
<span class="n">prototype</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">protparents</span><span class="p">,</span> <span class="n">is_prototype_base</span><span class="o">=</span><span class="n">validate</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="n">validate</span>
<span class="p">)</span>
@ -366,7 +382,8 @@
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;aliases&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">aliases</span>
<span class="n">tags</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span>
<span class="p">[(</span><span class="n">tag</span><span class="o">.</span><span class="n">db_key</span><span class="p">,</span> <span class="n">tag</span><span class="o">.</span><span class="n">db_category</span><span class="p">,</span> <span class="n">tag</span><span class="o">.</span><span class="n">db_data</span><span class="p">)</span> <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">return_objs</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span>
<span class="p">[(</span><span class="n">tag</span><span class="o">.</span><span class="n">db_key</span><span class="p">,</span> <span class="n">tag</span><span class="o">.</span><span class="n">db_category</span><span class="p">,</span> <span class="n">tag</span><span class="o">.</span><span class="n">db_data</span><span class="p">)</span> <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">return_objs</span><span class="o">=</span><span class="kc">True</span><span class="p">)],</span>
<span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tup</span><span class="p">:</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;tags&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">tags</span>
@ -374,7 +391,8 @@
<span class="p">[</span>
<span class="p">(</span><span class="n">attr</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">attr</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">attr</span><span class="o">.</span><span class="n">category</span><span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">attr</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">all</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">attributes</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="p">]</span>
<span class="p">],</span>
<span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tup</span><span class="p">:</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">attrs</span><span class="p">:</span>
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;attrs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">attrs</span>

View file

@ -271,12 +271,16 @@
<span class="sd"> be stripped on the Evennia side.</span>
<span class="sd"> ::</span>
<span class="sd"> [cmd.name, [], {}] -&gt; Cmd.Name</span>
<span class="sd"> [cmd.name, [arg], {}] -&gt; Cmd.Name arg</span>
<span class="sd"> [cmd.name, [args],{}] -&gt; Cmd.Name [args]</span>
<span class="sd"> [cmd.name, [], {kwargs}] -&gt; Cmd.Name {kwargs}</span>
<span class="sd"> [cmd_name, [], {}] -&gt; Cmd.Name</span>
<span class="sd"> [cmd_name, [arg], {}] -&gt; Cmd.Name arg</span>
<span class="sd"> [cmd_name, [args],{}] -&gt; Cmd.Name [args]</span>
<span class="sd"> [cmd_name, [], {kwargs}] -&gt; Cmd.Name {kwargs}</span>
<span class="sd"> [cmdname, [args, {kwargs}] -&gt; Core.Cmdname [[args],{kwargs}]</span>
<span class="sd"> For more flexibility with certain clients, if `cmd_name` is capitalized,</span>
<span class="sd"> Evennia will leave its current capitalization (So CMD_nAmE would be sent</span>
<span class="sd"> as CMD.nAmE but cMD_Name would be Cmd.Name)</span>
<span class="sd"> Notes:</span>
<span class="sd"> There are also a few default mappings between evennia outputcmds and GMCP:</span>
<span class="sd"> ::</span>
@ -292,9 +296,13 @@
<span class="k">if</span> <span class="n">cmdname</span> <span class="ow">in</span> <span class="n">EVENNIA_TO_GMCP</span><span class="p">:</span>
<span class="n">gmcp_cmdname</span> <span class="o">=</span> <span class="n">EVENNIA_TO_GMCP</span><span class="p">[</span><span class="n">cmdname</span><span class="p">]</span>
<span class="k">elif</span> <span class="s2">&quot;_&quot;</span> <span class="ow">in</span> <span class="n">cmdname</span><span class="p">:</span>
<span class="n">gmcp_cmdname</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">word</span><span class="o">.</span><span class="n">capitalize</span><span class="p">()</span> <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">istitle</span><span class="p">():</span>
<span class="c1"># leave without capitalization</span>
<span class="n">gmcp_cmdname</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">word</span> <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">gmcp_cmdname</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">word</span><span class="o">.</span><span class="n">capitalize</span><span class="p">()</span> <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">gmcp_cmdname</span> <span class="o">=</span> <span class="s2">&quot;Core.</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">capitalize</span><span class="p">()</span>
<span class="n">gmcp_cmdname</span> <span class="o">=</span> <span class="s2">&quot;Core.</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">cmdname</span> <span class="k">if</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">istitle</span><span class="p">()</span> <span class="k">else</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">capitalize</span><span class="p">())</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">args</span> <span class="ow">or</span> <span class="n">kwargs</span><span class="p">):</span>
<span class="n">gmcp_string</span> <span class="o">=</span> <span class="n">gmcp_cmdname</span>

View file

@ -1415,7 +1415,7 @@
<span class="sd"> Parse the select action</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">available_choices</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;available_choices&quot;</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">available_choices</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;available_choices&quot;</span><span class="p">,</span> <span class="p">[])</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">index</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">raw_string</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="o">-</span> <span class="mi">1</span>
@ -1431,7 +1431,10 @@
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">select</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">selection</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</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="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">(</span><span class="s2">&quot;Error in EvMenu.list_node decorator:</span><span class="se">\n</span><span class="s2"> &quot;</span>
<span class="sa">f</span><span class="s2">&quot;select-callable: </span><span class="si">{</span><span class="n">select</span><span class="si">}</span><span class="se">\n</span><span class="s2"> with args: (</span><span class="si">{</span><span class="n">caller</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">selection</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">available_choices</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">kwargs</span><span class="si">}</span><span class="s2">) raised &quot;</span>
<span class="s2">&quot;exception.&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">select</span><span class="p">:</span>
<span class="c1"># we assume a string was given, we inject the result into the kwargs</span>
<span class="c1"># to pass on to the next node</span>