Updated HTML docs

This commit is contained in:
Evennia docbuilder action 2022-09-24 16:33:18 +00:00
parent dcc4cbe66f
commit 61bb3744b0
98 changed files with 929 additions and 418 deletions

View file

@ -105,7 +105,7 @@
<span class="k">try</span><span class="p">:</span>
<span class="n">orig_string</span> <span class="o">=</span> <span class="n">raw_string</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">include_prefixes</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_string</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">raw_string</span> <span class="o">=</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="n">_CMD_IGNORE_PREFIXES</span><span class="p">)</span>
<span class="n">raw_string</span> <span class="o">=</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="n">_CMD_IGNORE_PREFIXES</span><span class="p">)</span>
<span class="n">search_string</span> <span class="o">=</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmdset</span><span class="p">:</span>
<span class="n">cmdname</span><span class="p">,</span> <span class="n">raw_cmdname</span> <span class="o">=</span> <span class="n">cmd</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">search_string</span><span class="p">,</span> <span class="n">include_prefixes</span><span class="o">=</span><span class="n">include_prefixes</span><span class="p">)</span>

View file

@ -401,11 +401,15 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">include_prefixes</span><span class="p">:</span>
<span class="k">for</span> <span class="n">cmd_key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_keyaliases</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">cmd_key</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">cmdname</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">cmd_key</span><span class="p">)</span> <span class="p">:])):</span>
<span class="k">if</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">cmd_key</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
<span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">cmdname</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">cmd_key</span><span class="p">)</span> <span class="p">:])</span>
<span class="p">):</span>
<span class="k">return</span> <span class="n">cmd_key</span><span class="p">,</span> <span class="n">cmd_key</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_noprefix_aliases</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">cmdname</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="p">:])):</span>
<span class="k">if</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span>
<span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">cmdname</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="p">:])</span>
<span class="p">):</span>
<span class="k">return</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span>
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span></div>

View file

@ -1992,7 +1992,12 @@
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># no = means we inspect the attribute(s)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">attrs</span><span class="p">:</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">attr</span><span class="o">.</span><span class="n">key</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">get</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="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">attr</span><span class="o">.</span><span class="n">key</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">get</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="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="p">]</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>
@ -2043,7 +2048,9 @@
<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"># check if anything was done</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">result</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;No valid attributes were found. Usage: set obj/attr[:category] = value. Use empty value to clear.&quot;</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;No valid attributes were found. Usage: set obj/attr[:category] = value. Use empty value to clear.&quot;</span>
<span class="p">)</span>
<span class="k">else</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">&quot;&quot;</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">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">))</span></div></div>
@ -3774,7 +3781,7 @@
<span class="n">quiet</span><span class="o">=</span><span class="s2">&quot;quiet&quot;</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">emit_to_obj</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
<span class="n">use_destination</span><span class="o">=</span><span class="s2">&quot;intoexit&quot;</span> <span class="ow">not</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">move_type</span><span class="o">=</span><span class="s2">&quot;teleport&quot;</span>
<span class="n">move_type</span><span class="o">=</span><span class="s2">&quot;teleport&quot;</span><span class="p">,</span>
<span class="p">):</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span> <span class="o">==</span> <span class="n">caller</span><span class="p">:</span>

View file

@ -50,19 +50,18 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">chain</span>
<span class="kn">from</span> <span class="nn">dataclasses</span> <span class="kn">import</span> <span class="n">dataclass</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">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">dedent</span>
<span class="kn">from</span> <span class="nn">dataclasses</span> <span class="kn">import</span> <span class="n">dataclass</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">chain</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">evennia.help.filehelp</span> <span class="kn">import</span> <span class="n">FILE_HELP_ENTRIES</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="kn">from</span> <span class="nn">evennia.help.utils</span> <span class="kn">import</span> <span class="n">help_search_with_index</span><span class="p">,</span> <span class="n">parse_entry_for_subcategories</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span><span class="p">,</span> <span class="n">evmore</span>
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">ANSIString</span>
<span class="kn">from</span> <span class="nn">evennia.help.filehelp</span> <span class="kn">import</span> <span class="n">FILE_HELP_ENTRIES</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.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">inherits_from</span><span class="p">,</span> <span class="n">format_grid</span><span class="p">,</span> <span class="n">pad</span>
<span class="kn">from</span> <span class="nn">evennia.help.utils</span> <span class="kn">import</span> <span class="n">help_search_with_index</span><span class="p">,</span> <span class="n">parse_entry_for_subcategories</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">dedent</span><span class="p">,</span> <span class="n">format_grid</span><span class="p">,</span> <span class="n">inherits_from</span><span class="p">,</span> <span class="n">pad</span>
<span class="n">CMD_IGNORE_PREFIXES</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">CMD_IGNORE_PREFIXES</span>
<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>
@ -216,7 +215,11 @@
<span class="k">else</span><span class="p">:</span>
<span class="n">subtopics</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;|w</span><span class="si">{</span><span class="n">topic</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">subtop</span><span class="si">}</span><span class="s2">|n&quot;</span> <span class="k">for</span> <span class="n">subtop</span> <span class="ow">in</span> <span class="n">subtopics</span><span class="p">]</span>
<span class="n">subtopics</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|CSubtopics:|n</span><span class="se">\n</span><span class="s2"> </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="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</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">subtopics</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">()))</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</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">subtopics</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">(),</span> <span class="n">line_prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">subtopics</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
@ -228,7 +231,11 @@
<span class="k">else</span><span class="p">:</span>
<span class="n">suggested</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;|w</span><span class="si">{</span><span class="n">sug</span><span class="si">}</span><span class="s2">|n&quot;</span> <span class="k">for</span> <span class="n">sug</span> <span class="ow">in</span> <span class="n">suggested</span><span class="p">]</span>
<span class="n">suggested</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|COther topic suggestions:|n</span><span class="se">\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="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</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">suggested</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">()))</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</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">suggested</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">(),</span> <span class="n">line_prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">suggested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
@ -322,7 +329,13 @@
<span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span>
<span class="p">)</span>
<span class="n">grid</span><span class="p">,</span> <span class="n">verbatim_elements</span> <span class="o">=</span> <span class="n">_group_by_category</span><span class="p">(</span><span class="n">cmd_help_dict</span><span class="p">)</span>
<span class="n">gridrows</span> <span class="o">=</span> <span class="n">format_grid</span><span class="p">(</span><span class="n">grid</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">verbatim_elements</span><span class="o">=</span><span class="n">verbatim_elements</span><span class="p">)</span>
<span class="n">gridrows</span> <span class="o">=</span> <span class="n">format_grid</span><span class="p">(</span>
<span class="n">grid</span><span class="p">,</span>
<span class="n">width</span><span class="p">,</span>
<span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
<span class="n">verbatim_elements</span><span class="o">=</span><span class="n">verbatim_elements</span><span class="p">,</span>
<span class="n">line_prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">cmd_grid</span> <span class="o">=</span> <span class="n">ANSIString</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">gridrows</span><span class="p">)</span> <span class="k">if</span> <span class="n">gridrows</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">db_help_dict</span><span class="o">.</span><span class="n">values</span><span class="p">()):</span>
@ -333,7 +346,13 @@
<span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span>
<span class="p">)</span>
<span class="n">grid</span><span class="p">,</span> <span class="n">verbatim_elements</span> <span class="o">=</span> <span class="n">_group_by_category</span><span class="p">(</span><span class="n">db_help_dict</span><span class="p">)</span>
<span class="n">gridrows</span> <span class="o">=</span> <span class="n">format_grid</span><span class="p">(</span><span class="n">grid</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">verbatim_elements</span><span class="o">=</span><span class="n">verbatim_elements</span><span class="p">)</span>
<span class="n">gridrows</span> <span class="o">=</span> <span class="n">format_grid</span><span class="p">(</span>
<span class="n">grid</span><span class="p">,</span>
<span class="n">width</span><span class="p">,</span>
<span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span>
<span class="n">verbatim_elements</span><span class="o">=</span><span class="n">verbatim_elements</span><span class="p">,</span>
<span class="n">line_prefix</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">db_grid</span> <span class="o">=</span> <span class="n">ANSIString</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">gridrows</span><span class="p">)</span> <span class="k">if</span> <span class="n">gridrows</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># only show the main separators if there are actually both cmd and db-based help</span>

View file

@ -48,23 +48,23 @@
<span class="kn">import</span> <span class="nn">code</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">traceback</span>
<span class="kn">import</span> <span class="nn">django</span>
<span class="kn">import</span> <span class="nn">twisted</span>
<span class="kn">import</span> <span class="nn">time</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">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</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="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="p">,</span> <span class="n">gametime</span><span class="p">,</span> <span class="n">search</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.evtable</span> <span class="kn">import</span> <span class="n">EvTable</span>
<span class="kn">from</span> <span class="nn">evennia.utils.evmenu</span> <span class="kn">import</span> <span class="n">ask_yes_no</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">iter_to_str</span>
<span class="kn">from</span> <span class="nn">evennia.scripts.taskhandler</span> <span class="kn">import</span> <span class="n">TaskHandlerTask</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.utils</span> <span class="kn">import</span> <span class="n">gametime</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">search</span><span class="p">,</span> <span class="n">utils</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.evmenu</span> <span class="kn">import</span> <span class="n">ask_yes_no</span>
<span class="kn">from</span> <span class="nn">evennia.utils.evtable</span> <span class="kn">import</span> <span class="n">EvTable</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">iter_to_str</span>
<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">_TASK_HANDLER</span> <span class="o">=</span> <span class="kc">None</span>
@ -243,7 +243,10 @@
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span> <span class="o">=</span> <span class="n">caller</span>
<span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string</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="n">string</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="n">string</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</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="n">string</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="k">else</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="n">string</span><span class="p">)</span>
<span class="n">fake_std</span> <span class="o">=</span> <span class="n">FakeStd</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span> <span class="o">=</span> <span class="n">fake_std</span>

View file

@ -1626,8 +1626,9 @@
<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">CmdTeleport</span><span class="p">(),</span>
<span class="s2">&quot;Obj = Room2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Obj(#</span><span class="si">{}</span><span class="s2">) is leaving Room(#</span><span class="si">{}</span><span class="s2">), heading for Room2(#</span><span class="si">{}</span><span class="s2">).|Teleported Obj -&gt; Room2.&quot;</span>
<span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">oid</span><span class="p">,</span> <span class="n">rid</span><span class="p">,</span> <span class="n">rid2</span><span class="p">),</span>
<span class="s2">&quot;Obj(#</span><span class="si">{}</span><span class="s2">) is leaving Room(#</span><span class="si">{}</span><span class="s2">), heading for Room2(#</span><span class="si">{}</span><span class="s2">).|Teleported Obj -&gt; Room2.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">oid</span><span class="p">,</span> <span class="n">rid</span><span class="p">,</span> <span class="n">rid2</span>
<span class="p">),</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">CmdTeleport</span><span class="p">(),</span> <span class="s2">&quot;NotFound = Room&quot;</span><span class="p">,</span> <span class="s2">&quot;Could not find &#39;NotFound&#39;.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
@ -1743,8 +1744,7 @@
<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">CmdSpawn</span><span class="p">(),</span>
<span class="s2">&quot;{&#39;prototype_key&#39;:&#39;GOBLIN&#39;, &#39;typeclass&#39;:&#39;evennia.objects.objects.DefaultCharacter&#39;, &quot;</span>
<span class="s2">&quot;&#39;key&#39;:&#39;goblin&#39;, &#39;location&#39;:&#39;</span><span class="si">%s</span><span class="s2">&#39;}&quot;</span>
<span class="o">%</span> <span class="n">spawnLoc</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
<span class="s2">&quot;&#39;key&#39;:&#39;goblin&#39;, &#39;location&#39;:&#39;</span><span class="si">%s</span><span class="s2">&#39;}&quot;</span> <span class="o">%</span> <span class="n">spawnLoc</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
<span class="s2">&quot;Spawned goblin&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">goblin</span> <span class="o">=</span> <span class="n">get_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;goblin&quot;</span><span class="p">)</span>
@ -1792,8 +1792,7 @@
<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">CmdSpawn</span><span class="p">(),</span>
<span class="s2">&quot;/noloc {&#39;prototype_parent&#39;:&#39;TESTBALL&#39;, &#39;key&#39;: &#39;Ball&#39;, &#39;prototype_key&#39;: &#39;foo&#39;,&quot;</span>
<span class="s2">&quot; &#39;location&#39;:&#39;</span><span class="si">%s</span><span class="s2">&#39;}&quot;</span>
<span class="o">%</span> <span class="n">spawnLoc</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
<span class="s2">&quot; &#39;location&#39;:&#39;</span><span class="si">%s</span><span class="s2">&#39;}&quot;</span> <span class="o">%</span> <span class="n">spawnLoc</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
<span class="s2">&quot;Spawned Ball&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">ball</span> <span class="o">=</span> <span class="n">get_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;Ball&quot;</span><span class="p">)</span>

View file

@ -278,7 +278,9 @@
<span class="c1"># manually call move hooks</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room</span><span class="o">.</span><span class="n">msg_room</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="sa">f</span><span class="s2">&quot;|r</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> gave up and was whisked away!|n&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room</span><span class="o">.</span><span class="n">at_object_leave</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="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">home</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">move_to</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">home</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">move_hooks</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">move_type</span><span class="o">=</span><span class="s2">&quot;teleport&quot;</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">move_to</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">home</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">move_hooks</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">move_type</span><span class="o">=</span><span class="s2">&quot;teleport&quot;</span>
<span class="p">)</span>
<span class="c1"># back to menu</span>
<span class="n">run_evscaperoom_menu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span>

View file

@ -278,6 +278,7 @@
<div class="viewcode-block" id="LanguageError"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.rpsystem.html#evennia.contrib.rpg.rpsystem.rpsystem.LanguageError">[docs]</a><span class="k">class</span> <span class="nc">LanguageError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="k">pass</span></div>
<span class="k">def</span> <span class="nf">_get_case_ref</span><span class="p">(</span><span class="n">string</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Helper function which parses capitalization and</span>
@ -299,6 +300,7 @@
<span class="k">return</span> <span class="n">case</span>
<span class="c1"># emoting mechanisms</span>
<div class="viewcode-block" id="parse_language"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.rpsystem.html#evennia.contrib.rpg.rpsystem.rpsystem.parse_language">[docs]</a><span class="k">def</span> <span class="nf">parse_language</span><span class="p">(</span><span class="n">speaker</span><span class="p">,</span> <span class="n">emote</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -447,7 +449,7 @@
<span class="n">match_index</span> <span class="o">=</span> <span class="n">marker_match</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="c1"># split the emote string at the reference marker, to process everything after it</span>
<span class="n">head</span> <span class="o">=</span> <span class="n">string</span><span class="p">[:</span><span class="n">match_index</span><span class="p">]</span>
<span class="n">tail</span> <span class="o">=</span> <span class="n">string</span><span class="p">[</span><span class="n">match_index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:]</span>
<span class="n">tail</span> <span class="o">=</span> <span class="n">string</span><span class="p">[</span><span class="n">match_index</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
<span class="k">if</span> <span class="n">search_mode</span><span class="p">:</span>
<span class="c1"># match the candidates against the whole search string after the marker</span>
@ -493,7 +495,7 @@
<span class="c1"># save search string</span>
<span class="n">matched_text</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">tail</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="n">iend</span><span class="p">])</span>
<span class="c1"># recombine remainder of emote back into a string</span>
<span class="n">tail</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">tail</span><span class="p">[</span><span class="n">iend</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:])</span>
<span class="n">tail</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">tail</span><span class="p">[</span><span class="n">iend</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:])</span>
<span class="n">nmatches</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">bestmatches</span><span class="p">)</span>
@ -1317,19 +1319,19 @@
<span class="bp">self</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;Something&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="ContribRPObject.search"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.rpsystem.html#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject.search">[docs]</a> <span class="k">def</span> <span class="nf">search</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">searchdata</span><span class="p">,</span>
<span class="n">global_search</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">use_nicks</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">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attribute_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">quiet</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">candidates</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nofound_string</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">multimatch_string</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">use_dbref</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">searchdata</span><span class="p">,</span>
<span class="n">global_search</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">use_nicks</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">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attribute_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">quiet</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">candidates</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nofound_string</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">multimatch_string</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">use_dbref</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns an Object matching a search string/condition, taking</span>
@ -1413,10 +1415,10 @@
<span class="p">)</span>
<span class="k">if</span> <span class="n">global_search</span> <span class="ow">or</span> <span class="p">(</span>
<span class="n">is_string</span>
<span class="ow">and</span> <span class="n">searchdata</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
<span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">searchdata</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span>
<span class="ow">and</span> <span class="n">searchdata</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span>
<span class="n">is_string</span>
<span class="ow">and</span> <span class="n">searchdata</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
<span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">searchdata</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span>
<span class="ow">and</span> <span class="n">searchdata</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span>
<span class="p">):</span>
<span class="c1"># only allow exact matching if searching the entire database</span>
<span class="c1"># or unique #dbrefs</span>

View file

@ -193,7 +193,13 @@
<span class="n">id2</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">candidates</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">(</span>
<span class="s1">&#39;With a flair, {&#39;</span><span class="o">+</span><span class="n">id0</span><span class="o">+</span><span class="s1">&#39;} looks at {&#39;</span><span class="o">+</span><span class="n">id1</span><span class="o">+</span><span class="s1">&#39;} and {&#39;</span><span class="o">+</span><span class="n">id2</span><span class="o">+</span><span class="s1">&#39;}. She says &quot;This is a test.&quot;&#39;</span><span class="p">,</span>
<span class="s2">&quot;With a flair, {&quot;</span>
<span class="o">+</span> <span class="n">id0</span>
<span class="o">+</span> <span class="s2">&quot;} looks at {&quot;</span>
<span class="o">+</span> <span class="n">id1</span>
<span class="o">+</span> <span class="s2">&quot;} and {&quot;</span>
<span class="o">+</span> <span class="n">id2</span>
<span class="o">+</span> <span class="s1">&#39;}. She says &quot;This is a test.&quot;&#39;</span><span class="p">,</span>
<span class="p">{</span>
<span class="n">id2</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">,</span>
<span class="n">id1</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">,</span>
@ -220,7 +226,7 @@
<span class="n">id2</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">candidates</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;{&quot;</span><span class="o">+</span><span class="n">id0</span><span class="o">+</span><span class="s2">&quot;} frowns at {&quot;</span><span class="o">+</span><span class="n">id1</span><span class="o">+</span><span class="s2">&quot;} for trying to steal {&quot;</span><span class="o">+</span><span class="n">id0</span><span class="o">+</span><span class="s2">&quot;}&#39;s test.&quot;</span><span class="p">,</span>
<span class="s2">&quot;{&quot;</span> <span class="o">+</span> <span class="n">id0</span> <span class="o">+</span> <span class="s2">&quot;} frowns at {&quot;</span> <span class="o">+</span> <span class="n">id1</span> <span class="o">+</span> <span class="s2">&quot;} for trying to steal {&quot;</span> <span class="o">+</span> <span class="n">id0</span> <span class="o">+</span> <span class="s2">&quot;}&#39;s test.&quot;</span><span class="p">,</span>
<span class="p">{</span>
<span class="n">id1</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">,</span>
<span class="n">id0</span><span class="p">:</span> <span class="n">speaker</span><span class="p">,</span>

View file

@ -374,11 +374,9 @@
<span class="nb">setattr</span><span class="p">(</span><span class="n">character</span><span class="p">,</span> <span class="n">abi</span><span class="p">,</span> <span class="n">current_abi</span><span class="p">)</span>
<span class="n">character</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;~&quot;</span> <span class="o">*</span> <span class="mi">78</span>
<span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|yYou survive your brush with death, &quot;</span>
<span class="s2">&quot;~&quot;</span> <span class="o">*</span> <span class="mi">78</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|yYou survive your brush with death, &quot;</span>
<span class="sa">f</span><span class="s2">&quot;but are |r</span><span class="si">{</span><span class="n">result</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">|y and permanently |rlose </span><span class="si">{</span><span class="n">loss</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">abi</span><span class="si">}</span><span class="s2">|y.|n</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="sa">f</span><span class="s2">&quot;|GYou recover |g</span><span class="si">{</span><span class="n">new_hp</span><span class="si">}</span><span class="s2">|G health|.</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="o">+</span> <span class="s2">&quot;~&quot;</span> <span class="o">*</span> <span class="mi">78</span>
<span class="sa">f</span><span class="s2">&quot;|GYou recover |g</span><span class="si">{</span><span class="n">new_hp</span><span class="si">}</span><span class="s2">|G health|.</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;~&quot;</span> <span class="o">*</span> <span class="mi">78</span>
<span class="p">)</span></div></div>

View file

@ -118,48 +118,121 @@
<span class="c1"># Load name data from Behind the Name lists</span>
<span class="n">dirpath</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="vm">__file__</span><span class="p">))</span>
<span class="n">_FIRSTNAME_LIST</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="s2">&quot;btn_givennames.txt&quot;</span><span class="p">),</span><span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
<span class="n">_FIRSTNAME_LIST</span> <span class="o">=</span> <span class="p">[</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">file</span> <span class="k">if</span> <span class="n">line</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span> <span class="p">]</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="s2">&quot;btn_givennames.txt&quot;</span><span class="p">),</span> <span class="s2">&quot;r&quot;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
<span class="n">_FIRSTNAME_LIST</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">file</span> <span class="k">if</span> <span class="n">line</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
<span class="p">]</span>
<span class="n">_SURNAME_LIST</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="s2">&quot;btn_surnames.txt&quot;</span><span class="p">),</span><span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
<span class="n">_SURNAME_LIST</span> <span class="o">=</span> <span class="p">[</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">file</span> <span class="k">if</span> <span class="n">line</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span> <span class="p">]</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">dirpath</span><span class="p">,</span> <span class="s2">&quot;btn_surnames.txt&quot;</span><span class="p">),</span> <span class="s2">&quot;r&quot;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
<span class="n">_SURNAME_LIST</span> <span class="o">=</span> <span class="p">[</span><span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">file</span> <span class="k">if</span> <span class="n">line</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)]</span>
<span class="n">_REQUIRED_KEYS</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">&quot;syllable&quot;</span><span class="p">,</span> <span class="s2">&quot;consonants&quot;</span><span class="p">,</span> <span class="s2">&quot;vowels&quot;</span><span class="p">,</span> <span class="s2">&quot;length&quot;</span> <span class="p">}</span>
<span class="n">_REQUIRED_KEYS</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;syllable&quot;</span><span class="p">,</span> <span class="s2">&quot;consonants&quot;</span><span class="p">,</span> <span class="s2">&quot;vowels&quot;</span><span class="p">,</span> <span class="s2">&quot;length&quot;</span><span class="p">}</span>
<span class="c1"># Define phoneme structure for built-in fantasy name generators.</span>
<span class="n">_FANTASY_NAME_STRUCTURES</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;harsh&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;syllable&quot;</span><span class="p">:</span> <span class="s2">&quot;CV(C)&quot;</span><span class="p">,</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;k&quot;</span><span class="p">,</span> <span class="s2">&quot;k&quot;</span><span class="p">,</span> <span class="s2">&quot;k&quot;</span><span class="p">,</span> <span class="s2">&quot;z&quot;</span><span class="p">,</span> <span class="s2">&quot;zh&quot;</span><span class="p">,</span> <span class="s2">&quot;g&quot;</span><span class="p">,</span> <span class="s2">&quot;v&quot;</span><span class="p">,</span> <span class="s2">&quot;t&quot;</span><span class="p">,</span> <span class="s2">&quot;th&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;d&quot;</span><span class="p">,</span> <span class="s2">&quot;d&quot;</span><span class="p">,</span> <span class="p">],</span>
<span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;dh&quot;</span><span class="p">,</span> <span class="s2">&quot;kh&quot;</span><span class="p">,</span> <span class="s2">&quot;kh&quot;</span><span class="p">,</span> <span class="s2">&quot;kh&quot;</span><span class="p">,</span> <span class="s2">&quot;vh&quot;</span><span class="p">,</span> <span class="p">],</span>
<span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="p">],</span>
<span class="s2">&quot;vowels&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;o&quot;</span><span class="p">,</span> <span class="s2">&quot;o&quot;</span><span class="p">,</span> <span class="s2">&quot;o&quot;</span><span class="p">,</span> <span class="s2">&quot;a&quot;</span><span class="p">,</span> <span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="s2">&quot;u&quot;</span><span class="p">,</span> <span class="s2">&quot;u&quot;</span><span class="p">,</span> <span class="s2">&quot;u&quot;</span><span class="p">,</span> <span class="s2">&quot;ä&quot;</span><span class="p">,</span> <span class="s2">&quot;ö&quot;</span><span class="p">,</span> <span class="s2">&quot;e&quot;</span><span class="p">,</span> <span class="s2">&quot;i&quot;</span><span class="p">,</span> <span class="s2">&quot;i&quot;</span><span class="p">,</span> <span class="p">],</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span>
<span class="s2">&quot;syllable&quot;</span><span class="p">:</span> <span class="s2">&quot;CV(C)&quot;</span><span class="p">,</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;k&quot;</span><span class="p">,</span>
<span class="s2">&quot;k&quot;</span><span class="p">,</span>
<span class="s2">&quot;k&quot;</span><span class="p">,</span>
<span class="s2">&quot;z&quot;</span><span class="p">,</span>
<span class="s2">&quot;zh&quot;</span><span class="p">,</span>
<span class="s2">&quot;g&quot;</span><span class="p">,</span>
<span class="s2">&quot;v&quot;</span><span class="p">,</span>
<span class="s2">&quot;t&quot;</span><span class="p">,</span>
<span class="s2">&quot;th&quot;</span><span class="p">,</span>
<span class="s2">&quot;w&quot;</span><span class="p">,</span>
<span class="s2">&quot;n&quot;</span><span class="p">,</span>
<span class="s2">&quot;d&quot;</span><span class="p">,</span>
<span class="s2">&quot;d&quot;</span><span class="p">,</span>
<span class="p">],</span>
<span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;dh&quot;</span><span class="p">,</span>
<span class="s2">&quot;kh&quot;</span><span class="p">,</span>
<span class="s2">&quot;kh&quot;</span><span class="p">,</span>
<span class="s2">&quot;kh&quot;</span><span class="p">,</span>
<span class="s2">&quot;vh&quot;</span><span class="p">,</span>
<span class="p">],</span>
<span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;n&quot;</span><span class="p">,</span>
<span class="s2">&quot;x&quot;</span><span class="p">,</span>
<span class="p">],</span>
<span class="s2">&quot;vowels&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;o&quot;</span><span class="p">,</span>
<span class="s2">&quot;o&quot;</span><span class="p">,</span>
<span class="s2">&quot;o&quot;</span><span class="p">,</span>
<span class="s2">&quot;a&quot;</span><span class="p">,</span>
<span class="s2">&quot;y&quot;</span><span class="p">,</span>
<span class="s2">&quot;u&quot;</span><span class="p">,</span>
<span class="s2">&quot;u&quot;</span><span class="p">,</span>
<span class="s2">&quot;u&quot;</span><span class="p">,</span>
<span class="s2">&quot;ä&quot;</span><span class="p">,</span>
<span class="s2">&quot;ö&quot;</span><span class="p">,</span>
<span class="s2">&quot;e&quot;</span><span class="p">,</span>
<span class="s2">&quot;i&quot;</span><span class="p">,</span>
<span class="s2">&quot;i&quot;</span><span class="p">,</span>
<span class="p">],</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span>
<span class="p">},</span>
<span class="s2">&quot;fluid&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;syllable&quot;</span><span class="p">:</span> <span class="s2">&quot;V(C)&quot;</span><span class="p">,</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s1">&#39;r&#39;</span><span class="p">,</span><span class="s1">&#39;r&#39;</span><span class="p">,</span><span class="s1">&#39;l&#39;</span><span class="p">,</span><span class="s1">&#39;l&#39;</span><span class="p">,</span><span class="s1">&#39;l&#39;</span><span class="p">,</span><span class="s1">&#39;l&#39;</span><span class="p">,</span><span class="s1">&#39;s&#39;</span><span class="p">,</span><span class="s1">&#39;s&#39;</span><span class="p">,</span><span class="s1">&#39;s&#39;</span><span class="p">,</span><span class="s1">&#39;sh&#39;</span><span class="p">,</span><span class="s1">&#39;m&#39;</span><span class="p">,</span><span class="s1">&#39;n&#39;</span><span class="p">,</span><span class="s1">&#39;n&#39;</span><span class="p">,</span><span class="s1">&#39;f&#39;</span><span class="p">,</span><span class="s1">&#39;v&#39;</span><span class="p">,</span><span class="s1">&#39;w&#39;</span><span class="p">,</span><span class="s1">&#39;th&#39;</span> <span class="p">],</span>
<span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="p">[],</span>
<span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="p">[],</span>
<span class="s2">&quot;vowels&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;a&quot;</span><span class="p">,</span><span class="s2">&quot;a&quot;</span><span class="p">,</span><span class="s2">&quot;a&quot;</span><span class="p">,</span><span class="s2">&quot;a&quot;</span><span class="p">,</span><span class="s2">&quot;a&quot;</span><span class="p">,</span><span class="s2">&quot;e&quot;</span><span class="p">,</span><span class="s2">&quot;i&quot;</span><span class="p">,</span><span class="s2">&quot;i&quot;</span><span class="p">,</span><span class="s2">&quot;i&quot;</span><span class="p">,</span><span class="s2">&quot;y&quot;</span><span class="p">,</span><span class="s2">&quot;u&quot;</span><span class="p">,</span><span class="s2">&quot;o&quot;</span><span class="p">,</span> <span class="p">],</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span>
<span class="s2">&quot;syllable&quot;</span><span class="p">:</span> <span class="s2">&quot;V(C)&quot;</span><span class="p">,</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;r&quot;</span><span class="p">,</span>
<span class="s2">&quot;r&quot;</span><span class="p">,</span>
<span class="s2">&quot;l&quot;</span><span class="p">,</span>
<span class="s2">&quot;l&quot;</span><span class="p">,</span>
<span class="s2">&quot;l&quot;</span><span class="p">,</span>
<span class="s2">&quot;l&quot;</span><span class="p">,</span>
<span class="s2">&quot;s&quot;</span><span class="p">,</span>
<span class="s2">&quot;s&quot;</span><span class="p">,</span>
<span class="s2">&quot;s&quot;</span><span class="p">,</span>
<span class="s2">&quot;sh&quot;</span><span class="p">,</span>
<span class="s2">&quot;m&quot;</span><span class="p">,</span>
<span class="s2">&quot;n&quot;</span><span class="p">,</span>
<span class="s2">&quot;n&quot;</span><span class="p">,</span>
<span class="s2">&quot;f&quot;</span><span class="p">,</span>
<span class="s2">&quot;v&quot;</span><span class="p">,</span>
<span class="s2">&quot;w&quot;</span><span class="p">,</span>
<span class="s2">&quot;th&quot;</span><span class="p">,</span>
<span class="p">],</span>
<span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="p">[],</span>
<span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="p">[],</span>
<span class="s2">&quot;vowels&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;a&quot;</span><span class="p">,</span>
<span class="s2">&quot;a&quot;</span><span class="p">,</span>
<span class="s2">&quot;a&quot;</span><span class="p">,</span>
<span class="s2">&quot;a&quot;</span><span class="p">,</span>
<span class="s2">&quot;a&quot;</span><span class="p">,</span>
<span class="s2">&quot;e&quot;</span><span class="p">,</span>
<span class="s2">&quot;i&quot;</span><span class="p">,</span>
<span class="s2">&quot;i&quot;</span><span class="p">,</span>
<span class="s2">&quot;i&quot;</span><span class="p">,</span>
<span class="s2">&quot;y&quot;</span><span class="p">,</span>
<span class="s2">&quot;u&quot;</span><span class="p">,</span>
<span class="s2">&quot;o&quot;</span><span class="p">,</span>
<span class="p">],</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
<span class="p">},</span>
<span class="s2">&quot;alien&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;syllable&quot;</span><span class="p">:</span> <span class="s2">&quot;C(C(V))(&#39;)(C)&quot;</span><span class="p">,</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s1">&#39;q&#39;</span><span class="p">,</span><span class="s1">&#39;q&#39;</span><span class="p">,</span><span class="s1">&#39;x&#39;</span><span class="p">,</span><span class="s1">&#39;z&#39;</span><span class="p">,</span><span class="s1">&#39;v&#39;</span><span class="p">,</span><span class="s1">&#39;w&#39;</span><span class="p">,</span><span class="s1">&#39;k&#39;</span><span class="p">,</span><span class="s1">&#39;h&#39;</span><span class="p">,</span><span class="s1">&#39;b&#39;</span> <span class="p">],</span>
<span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;x&#39;</span><span class="p">,],</span>
<span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="p">[],</span>
<span class="s2">&quot;vowels&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s1">&#39;y&#39;</span><span class="p">,</span><span class="s1">&#39;w&#39;</span><span class="p">,</span><span class="s1">&#39;o&#39;</span><span class="p">,</span><span class="s1">&#39;y&#39;</span> <span class="p">],</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span>
<span class="s2">&quot;syllable&quot;</span><span class="p">:</span> <span class="s2">&quot;C(C(V))(&#39;)(C)&quot;</span><span class="p">,</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;q&quot;</span><span class="p">,</span> <span class="s2">&quot;q&quot;</span><span class="p">,</span> <span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="s2">&quot;z&quot;</span><span class="p">,</span> <span class="s2">&quot;v&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">,</span> <span class="s2">&quot;k&quot;</span><span class="p">,</span> <span class="s2">&quot;h&quot;</span><span class="p">,</span> <span class="s2">&quot;b&quot;</span><span class="p">],</span>
<span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;x&quot;</span><span class="p">,</span>
<span class="p">],</span>
<span class="s2">&quot;end&quot;</span><span class="p">:</span> <span class="p">[],</span>
<span class="s2">&quot;vowels&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">,</span> <span class="s2">&quot;o&quot;</span><span class="p">,</span> <span class="s2">&quot;y&quot;</span><span class="p">],</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span>
<span class="p">},</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">_RE_DOUBLES</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;(\w)\1{2,}&#39;</span><span class="p">)</span>
<span class="n">_RE_DOUBLES</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;(\w)\1{2,}&quot;</span><span class="p">)</span>
<span class="c1"># Load in optional settings</span>
<span class="n">custom_first_names</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">NAMEGEN_FIRST_NAMES</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="s2">&quot;NAMEGEN_FIRST_NAMES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
<span class="n">custom_first_names</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">settings</span><span class="o">.</span><span class="n">NAMEGEN_FIRST_NAMES</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="s2">&quot;NAMEGEN_FIRST_NAMES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
<span class="p">)</span>
<span class="n">custom_last_names</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">NAMEGEN_LAST_NAMES</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="s2">&quot;NAMEGEN_LAST_NAMES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="s2">&quot;NAMEGEN_FANTASY_RULES&quot;</span><span class="p">):</span>
@ -174,7 +247,6 @@
<span class="n">_SURNAME_LIST</span> <span class="o">+=</span> <span class="n">custom_last_names</span>
<div class="viewcode-block" id="fantasy_name"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.namegen.html#evennia.contrib.utils.name_generator.namegen.fantasy_name">[docs]</a><span class="k">def</span> <span class="nf">fantasy_name</span><span class="p">(</span><span class="n">num</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="s2">&quot;harsh&quot;</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generate made-up names in one of a number of &quot;styles&quot;.</span>
@ -185,28 +257,34 @@
<span class="sd"> return_list (bool) - Whether to always return a list. `False` by default,</span>
<span class="sd"> which returns a string if there is only one value and a list if more.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">_validate</span><span class="p">(</span><span class="n">style_name</span><span class="p">):</span>
<span class="k">if</span> <span class="n">style_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">_FANTASY_NAME_STRUCTURES</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid style name: &#39;</span><span class="si">{</span><span class="n">style_name</span><span class="si">}</span><span class="s2">&#39;. Available style names: </span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_FANTASY_NAME_STRUCTURES</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Invalid style name: &#39;</span><span class="si">{</span><span class="n">style_name</span><span class="si">}</span><span class="s2">&#39;. Available style names: </span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_FANTASY_NAME_STRUCTURES</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="n">style_dict</span> <span class="o">=</span> <span class="n">_FANTASY_NAME_STRUCTURES</span><span class="p">[</span><span class="n">style_name</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">style_dict</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="nb">dict</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Style </span><span class="si">{</span><span class="n">style_name</span><span class="si">}</span><span class="s2"> must be a dictionary.&quot;</span><span class="p">)</span>
<span class="n">keys</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">style_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
<span class="n">missing_keys</span> <span class="o">=</span> <span class="n">_REQUIRED_KEYS</span> <span class="o">-</span> <span class="n">keys</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">missing_keys</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Style dictionary </span><span class="si">{</span><span class="n">style_name</span><span class="si">}</span><span class="s2"> is missing required keys: </span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">missing_keys</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">style_dict</span><span class="p">[</span><span class="s1">&#39;consonants&#39;</span><span class="p">])</span> <span class="ow">is</span> <span class="nb">list</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">style_dict</span><span class="p">[</span><span class="s1">&#39;vowels&#39;</span><span class="p">])</span> <span class="ow">is</span> <span class="nb">list</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Style dictionary </span><span class="si">{</span><span class="n">style_name</span><span class="si">}</span><span class="s2"> is missing required keys: </span><span class="si">{</span><span class="s1">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">missing_keys</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">style_dict</span><span class="p">[</span><span class="s2">&quot;consonants&quot;</span><span class="p">])</span> <span class="ow">is</span> <span class="nb">list</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">style_dict</span><span class="p">[</span><span class="s2">&quot;vowels&quot;</span><span class="p">])</span> <span class="ow">is</span> <span class="nb">list</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;&#39;consonants&#39; and &#39;vowels&#39; for style </span><span class="si">{</span><span class="n">style_name</span><span class="si">}</span><span class="s2"> must be lists.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">is_iter</span><span class="p">(</span><span class="n">style_dict</span><span class="p">[</span><span class="s1">&#39;length&#39;</span><span class="p">])</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">style_dict</span><span class="p">[</span><span class="s1">&#39;length&#39;</span><span class="p">])</span> <span class="o">==</span> <span class="mi">2</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;&#39;length&#39; key for </span><span class="si">{</span><span class="n">style_name</span><span class="si">}</span><span class="s2"> must have a minimum and maximum number of syllables.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">is_iter</span><span class="p">(</span><span class="n">style_dict</span><span class="p">[</span><span class="s2">&quot;length&quot;</span><span class="p">])</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">style_dict</span><span class="p">[</span><span class="s2">&quot;length&quot;</span><span class="p">])</span> <span class="o">==</span> <span class="mi">2</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;&#39;length&#39; key for </span><span class="si">{</span><span class="n">style_name</span><span class="si">}</span><span class="s2"> must have a minimum and maximum number of syllables.&quot;</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">style_dict</span>
<span class="c1"># validate num first</span>
<span class="n">num</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">num</span><span class="p">)</span>
<span class="k">if</span> <span class="n">num</span> <span class="o">&lt;</span> <span class="mi">1</span><span class="p">:</span>
@ -220,9 +298,9 @@
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">style_dict</span><span class="p">[</span><span class="s2">&quot;syllable&quot;</span><span class="p">]:</span>
<span class="c1"># parentheses mean optional - allow nested parens</span>
<span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;(&quot;</span><span class="p">:</span>
<span class="n">weight</span> <span class="o">=</span> <span class="n">weight</span><span class="o">/</span><span class="mi">2</span>
<span class="n">weight</span> <span class="o">=</span> <span class="n">weight</span> <span class="o">/</span> <span class="mi">2</span>
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;)&quot;</span><span class="p">:</span>
<span class="n">weight</span> <span class="o">=</span> <span class="n">weight</span><span class="o">*</span><span class="mi">2</span>
<span class="n">weight</span> <span class="o">=</span> <span class="n">weight</span> <span class="o">*</span> <span class="mi">2</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;C&quot;</span><span class="p">:</span>
<span class="n">sound_type</span> <span class="o">=</span> <span class="s2">&quot;consonants&quot;</span>
@ -231,23 +309,23 @@
<span class="k">else</span><span class="p">:</span>
<span class="n">sound_type</span> <span class="o">=</span> <span class="n">key</span>
<span class="c1"># append the sound type and weight</span>
<span class="n">syllable</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> <span class="p">(</span><span class="n">sound_type</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">weight</span><span class="p">))</span> <span class="p">)</span>
<span class="n">syllable</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">sound_type</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">weight</span><span class="p">)))</span>
<span class="n">name_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># time to generate a name!</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num</span><span class="p">):</span>
<span class="c1"># build a list of syllables</span>
<span class="n">length</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="o">*</span><span class="n">style_dict</span><span class="p">[</span><span class="s1">&#39;length&#39;</span><span class="p">])</span>
<span class="n">length</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="o">*</span><span class="n">style_dict</span><span class="p">[</span><span class="s2">&quot;length&quot;</span><span class="p">])</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">length</span><span class="p">):</span>
<span class="c1"># build the syllable itself</span>
<span class="n">syll</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">for</span> <span class="n">sound</span><span class="p">,</span> <span class="n">weight</span> <span class="ow">in</span> <span class="n">syllable</span><span class="p">:</span>
<span class="c1"># random chance to skip this key; lower weights mean less likely</span>
<span class="k">if</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">8</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">weight</span><span class="p">:</span>
<span class="k">if</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">weight</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">sound</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">style_dict</span><span class="p">:</span>
<span class="c1"># extra character, like apostrophes</span>
<span class="n">syll</span> <span class="o">+=</span> <span class="n">sound</span>
@ -259,33 +337,38 @@
<span class="k">if</span> <span class="n">sound</span> <span class="o">==</span> <span class="s2">&quot;consonants&quot;</span><span class="p">:</span>
<span class="c1"># if it&#39;s a starting consonant, add starting-sounds to the options</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">syll</span><span class="p">):</span>
<span class="n">choices</span> <span class="o">+=</span> <span class="n">style_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;start&#39;</span><span class="p">,[])</span>
<span class="n">choices</span> <span class="o">+=</span> <span class="n">style_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="p">[])</span>
<span class="c1"># if it&#39;s an ending consonant, add ending-sounds to the options</span>
<span class="k">elif</span> <span class="n">i</span><span class="o">+</span><span class="mi">1</span> <span class="o">==</span> <span class="n">length</span><span class="p">:</span>
<span class="n">choices</span> <span class="o">+=</span> <span class="n">style_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;end&#39;</span><span class="p">,[])</span>
<span class="k">elif</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">==</span> <span class="n">length</span><span class="p">:</span>
<span class="n">choices</span> <span class="o">+=</span> <span class="n">style_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;end&quot;</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">syll</span> <span class="o">+=</span> <span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">choices</span><span class="p">)</span>
<span class="n">name</span> <span class="o">+=</span> <span class="n">syll</span>
<span class="c1"># condense repeating letters down to a maximum of 2</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">_RE_DOUBLES</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="k">lambda</span> <span class="n">m</span><span class="p">:</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="mi">2</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">_RE_DOUBLES</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="k">lambda</span> <span class="n">m</span><span class="p">:</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="mi">2</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="c1"># capitalize the first letter</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">+</span> <span class="n">name</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="n">name_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">name_list</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">return_list</span><span class="p">:</span>
<span class="k">return</span> <span class="n">name_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">name_list</span></div>
<div class="viewcode-block" id="first_name"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.namegen.html#evennia.contrib.utils.name_generator.namegen.first_name">[docs]</a><span class="k">def</span> <span class="nf">first_name</span><span class="p">(</span><span class="n">num</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">gender</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="p">):</span>
<div class="viewcode-block" id="first_name"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.namegen.html#evennia.contrib.utils.name_generator.namegen.first_name">[docs]</a><span class="k">def</span> <span class="nf">first_name</span><span class="p">(</span>
<span class="n">num</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">gender</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generate first names, also known as personal names.</span>
<span class="sd"> </span>
<span class="sd"> Keyword args:</span>
<span class="sd"> num (int) - How many names to return.</span>
<span class="sd"> gender (str) - Restrict names by gender association. `None` by default, which selects from</span>
<span class="sd"> all possible names. Set to &quot;m&quot; for masculine, &quot;f&quot; for feminine, &quot;mf&quot; for androgynous </span>
<span class="sd"> all possible names. Set to &quot;m&quot; for masculine, &quot;f&quot; for feminine, &quot;mf&quot; for androgynous</span>
<span class="sd"> return_list (bool) - Whether to always return a list. `False` by default,</span>
<span class="sd"> which returns a string if there is only one value and a list if more.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@ -293,29 +376,33 @@
<span class="n">num</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">num</span><span class="p">)</span>
<span class="k">if</span> <span class="n">num</span> <span class="o">&lt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Number of names to generate must be positive.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">gender</span><span class="p">:</span>
<span class="c1"># filter the options by gender</span>
<span class="n">name_options</span> <span class="o">=</span> <span class="p">[</span> <span class="n">name_data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">name_data</span> <span class="ow">in</span> <span class="n">_FIRSTNAME_LIST</span> <span class="k">if</span> <span class="nb">all</span><span class="p">([</span><span class="n">gender_key</span> <span class="ow">in</span> <span class="n">gender</span> <span class="k">for</span> <span class="n">gender_key</span> <span class="ow">in</span> <span class="n">name_data</span><span class="p">[</span><span class="mi">1</span><span class="p">]])]</span>
<span class="n">name_options</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">name_data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">for</span> <span class="n">name_data</span> <span class="ow">in</span> <span class="n">_FIRSTNAME_LIST</span>
<span class="k">if</span> <span class="nb">all</span><span class="p">([</span><span class="n">gender_key</span> <span class="ow">in</span> <span class="n">gender</span> <span class="k">for</span> <span class="n">gender_key</span> <span class="ow">in</span> <span class="n">name_data</span><span class="p">[</span><span class="mi">1</span><span class="p">]])</span>
<span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">name_options</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Invalid gender &#39;</span><span class="si">{</span><span class="n">gender</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">name_options</span> <span class="o">=</span> <span class="p">[</span> <span class="n">name_data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">name_data</span> <span class="ow">in</span> <span class="n">_FIRSTNAME_LIST</span> <span class="p">]</span>
<span class="n">name_options</span> <span class="o">=</span> <span class="p">[</span><span class="n">name_data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">name_data</span> <span class="ow">in</span> <span class="n">_FIRSTNAME_LIST</span><span class="p">]</span>
<span class="c1"># take a random selection of `num` names, without repeats</span>
<span class="n">results</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">name_options</span><span class="p">,</span><span class="n">num</span><span class="p">)</span>
<span class="n">results</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">name_options</span><span class="p">,</span> <span class="n">num</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">results</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">return_list</span><span class="p">:</span>
<span class="c1"># return single value as a string</span>
<span class="k">return</span> <span class="n">results</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">results</span></div>
<div class="viewcode-block" id="last_name"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.namegen.html#evennia.contrib.utils.name_generator.namegen.last_name">[docs]</a><span class="k">def</span> <span class="nf">last_name</span><span class="p">(</span><span class="n">num</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generate family names, also known as surnames or last names.</span>
<span class="sd"> </span>
<span class="sd"> Keyword args:</span>
<span class="sd"> num (int) - How many names to return.</span>
<span class="sd"> return_list (bool) - Whether to always return a list. `False` by default,</span>
@ -327,7 +414,7 @@
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Number of names to generate must be positive.&quot;</span><span class="p">)</span>
<span class="c1"># take a random selection of `num` names, without repeats</span>
<span class="n">results</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">_SURNAME_LIST</span><span class="p">,</span><span class="n">num</span><span class="p">)</span>
<span class="n">results</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">sample</span><span class="p">(</span><span class="n">_SURNAME_LIST</span><span class="p">,</span> <span class="n">num</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">results</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">return_list</span><span class="p">:</span>
<span class="c1"># return single value as a string</span>
@ -335,15 +422,16 @@
<span class="k">return</span> <span class="n">results</span></div>
<div class="viewcode-block" id="full_name"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.namegen.html#evennia.contrib.utils.name_generator.namegen.full_name">[docs]</a><span class="k">def</span> <span class="nf">full_name</span><span class="p">(</span><span class="n">num</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">parts</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">gender</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">surname_first</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generate complete names with a personal name, family name, and optionally middle names.</span>
<span class="sd"> </span>
<span class="sd"> Keyword args:</span>
<span class="sd"> num (int) - How many names to return.</span>
<span class="sd"> parts (int) - How many parts the name should have. By default two: first and last.</span>
<span class="sd"> gender (str) - Restrict names by gender association. `None` by default, which selects from</span>
<span class="sd"> all possible names. Set to &quot;m&quot; for masculine, &quot;f&quot; for feminine, &quot;mf&quot; for androgynous </span>
<span class="sd"> all possible names. Set to &quot;m&quot; for masculine, &quot;f&quot; for feminine, &quot;mf&quot; for androgynous</span>
<span class="sd"> return_list (bool) - Whether to always return a list. `False` by default,</span>
<span class="sd"> which returns a string if there is only one value and a list if more.</span>
<span class="sd"> surname_first (bool) - Default `False`. Set to `True` if you want the family name to be</span>
@ -360,26 +448,26 @@
<span class="n">name_lists</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">middle</span> <span class="o">=</span> <span class="n">parts</span><span class="o">-</span><span class="mi">2</span>
<span class="n">middle</span> <span class="o">=</span> <span class="n">parts</span> <span class="o">-</span> <span class="mi">2</span>
<span class="k">if</span> <span class="n">middle</span><span class="p">:</span>
<span class="c1"># calculate &quot;middle&quot; names.</span>
<span class="c1"># we want them to be an intelligent mix of personal names and family names</span>
<span class="c1"># first, split the total number of middle-name parts into &quot;personal&quot; and &quot;family&quot; at a random point</span>
<span class="n">total_mids</span> <span class="o">=</span> <span class="n">middle</span><span class="o">*</span><span class="n">num</span>
<span class="n">personals</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">total_mids</span><span class="p">)</span>
<span class="n">total_mids</span> <span class="o">=</span> <span class="n">middle</span> <span class="o">*</span> <span class="n">num</span>
<span class="n">personals</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">total_mids</span><span class="p">)</span>
<span class="n">familys</span> <span class="o">=</span> <span class="n">total_mids</span> <span class="o">-</span> <span class="n">personals</span>
<span class="c1"># then get the names for each</span>
<span class="n">personal_mids</span> <span class="o">=</span> <span class="n">first_name</span><span class="p">(</span><span class="n">num</span><span class="o">=</span><span class="n">personals</span><span class="p">,</span> <span class="n">gender</span><span class="o">=</span><span class="n">gender</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">family_mids</span> <span class="o">=</span> <span class="n">last_name</span><span class="p">(</span><span class="n">num</span><span class="o">=</span><span class="n">familys</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="n">familys</span> <span class="k">else</span> <span class="p">[]</span>
<span class="c1"># splice them together according to surname_first....</span>
<span class="n">middle_names</span> <span class="o">=</span> <span class="n">family_mids</span><span class="o">+</span><span class="n">personal_mids</span> <span class="k">if</span> <span class="n">surname_first</span> <span class="k">else</span> <span class="n">personal_mids</span><span class="o">+</span><span class="n">family_mids</span>
<span class="n">middle_names</span> <span class="o">=</span> <span class="n">family_mids</span> <span class="o">+</span> <span class="n">personal_mids</span> <span class="k">if</span> <span class="n">surname_first</span> <span class="k">else</span> <span class="n">personal_mids</span> <span class="o">+</span> <span class="n">family_mids</span>
<span class="c1"># ...and then split into `num`-length lists to be used for the final names</span>
<span class="n">name_lists</span> <span class="o">=</span> <span class="p">[</span> <span class="n">middle_names</span><span class="p">[</span><span class="n">num</span><span class="o">*</span><span class="n">i</span><span class="p">:</span><span class="n">num</span><span class="o">*</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">middle</span><span class="p">)</span> <span class="p">]</span>
<span class="n">name_lists</span> <span class="o">=</span> <span class="p">[</span><span class="n">middle_names</span><span class="p">[</span><span class="n">num</span> <span class="o">*</span> <span class="n">i</span> <span class="p">:</span> <span class="n">num</span> <span class="o">*</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">middle</span><span class="p">)]</span>
<span class="c1"># get personal and family names</span>
<span class="n">personal_names</span> <span class="o">=</span> <span class="n">first_name</span><span class="p">(</span><span class="n">num</span><span class="o">=</span><span class="n">num</span><span class="p">,</span> <span class="n">gender</span><span class="o">=</span><span class="n">gender</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">last_names</span> <span class="o">=</span> <span class="n">last_name</span><span class="p">(</span><span class="n">num</span><span class="o">=</span><span class="n">num</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="c1"># attach personal/family names to the list of name lists, according to surname_first</span>
<span class="k">if</span> <span class="n">surname_first</span><span class="p">:</span>
<span class="n">name_lists</span> <span class="o">=</span> <span class="p">[</span><span class="n">last_names</span><span class="p">]</span> <span class="o">+</span> <span class="n">name_lists</span> <span class="o">+</span> <span class="p">[</span><span class="n">personal_names</span><span class="p">]</span>
@ -388,7 +476,7 @@
<span class="c1"># lastly, zip them all up and join them together</span>
<span class="n">names</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">name_lists</span><span class="p">))</span>
<span class="n">names</span> <span class="o">=</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">name</span><span class="p">)</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span> <span class="p">]</span>
<span class="n">names</span> <span class="o">=</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">name</span><span class="p">)</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">names</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">return_list</span><span class="p">:</span>
<span class="c1"># return single value as a string</span>

View file

@ -40,8 +40,7 @@
<div class="body" role="main">
<h1>Source code for evennia.contrib.utils.name_generator.tests</h1><div class="highlight"><pre>
<span></span>
<span class="sd">&quot;&quot;&quot;</span>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Tests for the Random Name Generator</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -50,35 +49,36 @@
<span class="n">_INVALID_STYLES</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;missing_keys&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;c&#39;</span><span class="p">,</span><span class="s1">&#39;d&#39;</span><span class="p">],</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;c&quot;</span><span class="p">,</span> <span class="s2">&quot;d&quot;</span><span class="p">],</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
<span class="p">},</span>
<span class="s2">&quot;invalid_vowels&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;syllable&quot;</span><span class="p">:</span> <span class="s2">&quot;CVC&quot;</span><span class="p">,</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;c&#39;</span><span class="p">,</span><span class="s1">&#39;d&#39;</span><span class="p">],</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;c&quot;</span><span class="p">,</span> <span class="s2">&quot;d&quot;</span><span class="p">],</span>
<span class="s2">&quot;vowels&quot;</span><span class="p">:</span> <span class="s2">&quot;aeiou&quot;</span><span class="p">,</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
<span class="p">},</span>
<span class="s2">&quot;invalid_length&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;syllable&quot;</span><span class="p">:</span> <span class="s2">&quot;CVC&quot;</span><span class="p">,</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;c&#39;</span><span class="p">,</span><span class="s1">&#39;d&#39;</span><span class="p">],</span>
<span class="s2">&quot;vowels&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;a&#39;</span><span class="p">,</span><span class="s1">&#39;e&#39;</span><span class="p">],</span>
<span class="s2">&quot;consonants&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;c&quot;</span><span class="p">,</span> <span class="s2">&quot;d&quot;</span><span class="p">],</span>
<span class="s2">&quot;vowels&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;a&quot;</span><span class="p">,</span> <span class="s2">&quot;e&quot;</span><span class="p">],</span>
<span class="s2">&quot;length&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">}</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">_FANTASY_NAME_STRUCTURES</span> <span class="o">|=</span> <span class="n">_INVALID_STYLES</span>
<div class="viewcode-block" id="TestNameGenerator"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.tests.html#evennia.contrib.utils.name_generator.tests.TestNameGenerator">[docs]</a><span class="k">class</span> <span class="nc">TestNameGenerator</span><span class="p">(</span><span class="n">BaseEvenniaTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestNameGenerator.test_fantasy_name"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.tests.html#evennia.contrib.utils.name_generator.tests.TestNameGenerator.test_fantasy_name">[docs]</a> <span class="k">def</span> <span class="nf">test_fantasy_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Verify output types and lengths.</span>
<span class="sd"> </span>
<span class="sd"> fantasy_name() - str</span>
<span class="sd"> fantasy_name(style=&quot;fluid&quot;) - str</span>
<span class="sd"> fantasy_name(num=3) - list of length 3</span>
<span class="sd"> fantasy_name(return_list=True) - list of length 1</span>
<span class="sd"> </span>
<span class="sd"> raises KeyError on missing style or ValueError on num</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">single_name</span> <span class="o">=</span> <span class="n">namegen</span><span class="o">.</span><span class="n">fantasy_name</span><span class="p">()</span>
@ -97,27 +97,27 @@
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="ne">ValueError</span><span class="p">):</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">fantasy_name</span><span class="p">(</span><span class="n">num</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="ne">ValueError</span><span class="p">):</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">fantasy_name</span><span class="p">(</span><span class="n">style</span><span class="o">=</span><span class="s2">&quot;dummy&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestNameGenerator.test_structure_validation"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.tests.html#evennia.contrib.utils.name_generator.tests.TestNameGenerator.test_structure_validation">[docs]</a> <span class="k">def</span> <span class="nf">test_structure_validation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Verify that validation raises the correct errors for invalid inputs.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="ne">KeyError</span><span class="p">):</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">fantasy_name</span><span class="p">(</span><span class="n">style</span><span class="o">=</span><span class="s2">&quot;missing_keys&quot;</span><span class="p">)</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">fantasy_name</span><span class="p">(</span><span class="n">style</span><span class="o">=</span><span class="s2">&quot;missing_keys&quot;</span><span class="p">)</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="ne">TypeError</span><span class="p">):</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">fantasy_name</span><span class="p">(</span><span class="n">style</span><span class="o">=</span><span class="s2">&quot;invalid_vowels&quot;</span><span class="p">)</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">fantasy_name</span><span class="p">(</span><span class="n">style</span><span class="o">=</span><span class="s2">&quot;invalid_vowels&quot;</span><span class="p">)</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="ne">ValueError</span><span class="p">):</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">fantasy_name</span><span class="p">(</span><span class="n">style</span><span class="o">=</span><span class="s2">&quot;invalid_length&quot;</span><span class="p">)</span></div>
<span class="n">namegen</span><span class="o">.</span><span class="n">fantasy_name</span><span class="p">(</span><span class="n">style</span><span class="o">=</span><span class="s2">&quot;invalid_length&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestNameGenerator.test_first_name"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.tests.html#evennia.contrib.utils.name_generator.tests.TestNameGenerator.test_first_name">[docs]</a> <span class="k">def</span> <span class="nf">test_first_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Verify output types and lengths.</span>
<span class="sd"> </span>
<span class="sd"> first_name() - str</span>
<span class="sd"> first_name(num=3) - list of length 3</span>
<span class="sd"> first_name(gender=&#39;f&#39;) - str</span>
@ -130,7 +130,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">three_names</span><span class="p">),</span> <span class="nb">list</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">three_names</span><span class="p">),</span> <span class="mi">3</span><span class="p">)</span>
<span class="n">gendered_name</span> <span class="o">=</span> <span class="n">namegen</span><span class="o">.</span><span class="n">first_name</span><span class="p">(</span><span class="n">gender</span><span class="o">=</span><span class="s1">&#39;f&#39;</span><span class="p">)</span>
<span class="n">gendered_name</span> <span class="o">=</span> <span class="n">namegen</span><span class="o">.</span><span class="n">first_name</span><span class="p">(</span><span class="n">gender</span><span class="o">=</span><span class="s2">&quot;f&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">gendered_name</span><span class="p">),</span> <span class="nb">str</span><span class="p">)</span>
<span class="n">single_list</span> <span class="o">=</span> <span class="n">namegen</span><span class="o">.</span><span class="n">first_name</span><span class="p">(</span><span class="n">return_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
@ -138,7 +138,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">single_list</span><span class="p">),</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="ne">ValueError</span><span class="p">):</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">first_name</span><span class="p">(</span><span class="n">gender</span><span class="o">=</span><span class="s1">&#39;x&#39;</span><span class="p">)</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">first_name</span><span class="p">(</span><span class="n">gender</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">)</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">assertRaises</span><span class="p">(</span><span class="ne">ValueError</span><span class="p">):</span>
<span class="n">namegen</span><span class="o">.</span><span class="n">first_name</span><span class="p">(</span><span class="n">num</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span></div>
@ -146,7 +146,7 @@
<div class="viewcode-block" id="TestNameGenerator.test_last_name"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.tests.html#evennia.contrib.utils.name_generator.tests.TestNameGenerator.test_last_name">[docs]</a> <span class="k">def</span> <span class="nf">test_last_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Verify output types and lengths.</span>
<span class="sd"> </span>
<span class="sd"> last_name() - str</span>
<span class="sd"> last_name(num=3) - list of length 3</span>
<span class="sd"> last_name(return_list=True) - list of length 1</span>
@ -168,7 +168,7 @@
<div class="viewcode-block" id="TestNameGenerator.test_full_name"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.name_generator.tests.html#evennia.contrib.utils.name_generator.tests.TestNameGenerator.test_full_name">[docs]</a> <span class="k">def</span> <span class="nf">test_full_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Verify output types and lengths.</span>
<span class="sd"> </span>
<span class="sd"> full_name() - str</span>
<span class="sd"> full_name(num=3) - list of length 3</span>
<span class="sd"> full_name(gender=&#39;f&#39;) - str</span>
@ -181,7 +181,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">three_names</span><span class="p">),</span> <span class="nb">list</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">three_names</span><span class="p">),</span> <span class="mi">3</span><span class="p">)</span>
<span class="n">gendered_name</span> <span class="o">=</span> <span class="n">namegen</span><span class="o">.</span><span class="n">full_name</span><span class="p">(</span><span class="n">gender</span><span class="o">=</span><span class="s1">&#39;f&#39;</span><span class="p">)</span>
<span class="n">gendered_name</span> <span class="o">=</span> <span class="n">namegen</span><span class="o">.</span><span class="n">full_name</span><span class="p">(</span><span class="n">gender</span><span class="o">=</span><span class="s2">&quot;f&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">gendered_name</span><span class="p">),</span> <span class="nb">str</span><span class="p">)</span>
<span class="n">single_list</span> <span class="o">=</span> <span class="n">namegen</span><span class="o">.</span><span class="n">full_name</span><span class="p">(</span><span class="n">return_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>

View file

@ -53,23 +53,23 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">signal</span>
<span class="kn">import</span> <span class="nn">shutil</span>
<span class="kn">import</span> <span class="nn">importlib</span>
<span class="kn">import</span> <span class="nn">pickle</span>
<span class="kn">from</span> <span class="nn">distutils.version</span> <span class="kn">import</span> <span class="n">LooseVersion</span>
<span class="kn">from</span> <span class="nn">argparse</span> <span class="kn">import</span> <span class="n">ArgumentParser</span>
<span class="kn">import</span> <span class="nn">argparse</span>
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="n">Popen</span><span class="p">,</span> <span class="n">check_output</span><span class="p">,</span> <span class="n">call</span><span class="p">,</span> <span class="n">CalledProcessError</span><span class="p">,</span> <span class="n">STDOUT</span>
<span class="kn">import</span> <span class="nn">importlib</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">import</span> <span class="nn">pickle</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">shutil</span>
<span class="kn">import</span> <span class="nn">signal</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">argparse</span> <span class="kn">import</span> <span class="n">ArgumentParser</span>
<span class="kn">from</span> <span class="nn">distutils.version</span> <span class="kn">import</span> <span class="n">LooseVersion</span>
<span class="kn">from</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="n">STDOUT</span><span class="p">,</span> <span class="n">CalledProcessError</span><span class="p">,</span> <span class="n">Popen</span><span class="p">,</span> <span class="n">call</span><span class="p">,</span> <span class="n">check_output</span>
<span class="kn">from</span> <span class="nn">twisted.protocols</span> <span class="kn">import</span> <span class="n">amp</span>
<span class="kn">from</span> <span class="nn">twisted.internet</span> <span class="kn">import</span> <span class="n">reactor</span><span class="p">,</span> <span class="n">endpoints</span>
<span class="kn">import</span> <span class="nn">django</span>
<span class="kn">from</span> <span class="nn">django.core.management</span> <span class="kn">import</span> <span class="n">execute_from_command_line</span>
<span class="kn">from</span> <span class="nn">django.db.utils</span> <span class="kn">import</span> <span class="n">ProgrammingError</span>
<span class="kn">from</span> <span class="nn">twisted.internet</span> <span class="kn">import</span> <span class="n">endpoints</span><span class="p">,</span> <span class="n">reactor</span>
<span class="kn">from</span> <span class="nn">twisted.protocols</span> <span class="kn">import</span> <span class="n">amp</span>
<span class="c1"># Signal processing</span>
<span class="n">SIG</span> <span class="o">=</span> <span class="n">signal</span><span class="o">.</span><span class="n">SIGINT</span>
@ -80,7 +80,7 @@
<span class="kn">import</span> <span class="nn">evennia</span> <span class="c1"># noqa</span>
<span class="n">EVENNIA_LIB</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">evennia</span><span class="o">.</span><span class="vm">__file__</span><span class="p">)))</span>
<span class="n">EVENNIA_LIB</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">EVENNIA_ROOT</span><span class="p">,</span> <span class="s2">&quot;evennia&quot;</span><span class="p">)</span>
<span class="n">EVENNIA_SERVER</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">EVENNIA_LIB</span><span class="p">,</span> <span class="s2">&quot;server&quot;</span><span class="p">)</span>
<span class="n">EVENNIA_TEMPLATE</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">EVENNIA_LIB</span><span class="p">,</span> <span class="s2">&quot;game_template&quot;</span><span class="p">)</span>
<span class="n">EVENNIA_PROFILING</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">EVENNIA_SERVER</span><span class="p">,</span> <span class="s2">&quot;profiling&quot;</span><span class="p">)</span>
@ -1189,8 +1189,9 @@
<span class="k">if</span> <span class="n">new_linecount</span> <span class="o">&lt;</span> <span class="n">old_linecount</span><span class="p">:</span>
<span class="c1"># this happens if the file was cycled or manually deleted/edited.</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot; ** Log file </span><span class="si">{filename}</span><span class="s2"> has cycled or been edited. &quot;</span>
<span class="s2">&quot;Restarting log. &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">filename</span><span class="o">=</span><span class="n">filehandle</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="s2">&quot; ** Log file </span><span class="si">{filename}</span><span class="s2"> has cycled or been edited. Restarting log. &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">filename</span><span class="o">=</span><span class="n">filehandle</span><span class="o">.</span><span class="n">name</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">new_linecount</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">old_linecount</span> <span class="o">=</span> <span class="mi">0</span>
@ -1268,7 +1269,7 @@
<span class="n">version</span> <span class="o">=</span> <span class="s2">&quot;Unknown&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">version</span> <span class="o">=</span> <span class="n">evennia</span><span class="o">.</span><span class="n">__version__</span>
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">ImportError</span><span class="p">,</span> <span class="ne">AttributeError</span><span class="p">):</span>
<span class="c1"># even if evennia is not found, we should not crash here.</span>
<span class="k">pass</span>
<span class="k">try</span><span class="p">:</span>
@ -1656,8 +1657,9 @@
<span class="n">errback</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot;Could not send kill signal - </span><span class="si">{component}</span><span class="s2"> does &quot;</span>
<span class="s2">&quot;not appear to be running.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">component</span><span class="o">=</span><span class="n">component</span><span class="p">)</span>
<span class="s2">&quot;Could not send kill signal - </span><span class="si">{component}</span><span class="s2"> does not appear to be running.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">component</span><span class="o">=</span><span class="n">component</span>
<span class="p">)</span>
<span class="p">)</span></div>
@ -1673,6 +1675,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">twisted</span>
<span class="k">return</span> <span class="n">VERSION_INFO</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
@ -1936,6 +1939,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">importlib</span> <span class="kn">import</span> <span class="n">import_module</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">evtable</span>
<span class="n">evsettings</span> <span class="o">=</span> <span class="n">import_module</span><span class="p">(</span><span class="n">SETTINGS_DOTPATH</span><span class="p">)</span>
@ -1980,9 +1984,10 @@
<span class="sd"> evennia mycmd foo bar</span>
<span class="sd"> &quot;&quot;&quot;</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">import</span> <span class="nn">importlib</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># a dict of {option: callable(*args), ...}</span>
<span class="n">custom_commands</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">EXTRA_LAUNCHER_COMMANDS</span>
@ -2120,7 +2125,7 @@
<span class="n">action</span><span class="o">=</span><span class="s2">&quot;store&quot;</span><span class="p">,</span>
<span class="n">dest</span><span class="o">=</span><span class="s2">&quot;listsetting&quot;</span><span class="p">,</span>
<span class="n">metavar</span><span class="o">=</span><span class="s2">&quot;all|&lt;key&gt;&quot;</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;list settings, use &#39;all&#39; to list all available keys&quot;</span><span class="p">),</span>
<span class="n">help</span><span class="o">=</span><span class="s2">&quot;list settings, use &#39;all&#39; to list all available keys&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
<span class="s2">&quot;--settings&quot;</span><span class="p">,</span>
@ -2146,7 +2151,9 @@
<span class="n">action</span><span class="o">=</span><span class="s2">&quot;store_true&quot;</span><span class="p">,</span>
<span class="n">dest</span><span class="o">=</span><span class="s2">&quot;initmissing&quot;</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s2">&quot;checks for missing secret_settings or server logs</span><span class="se">\n</span><span class="s2"> directory, and adds them if needed&quot;</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="p">(</span>
<span class="s2">&quot;checks for missing secret_settings or server logs</span><span class="se">\n</span><span class="s2"> directory, and adds them if needed&quot;</span>
<span class="p">),</span>
<span class="p">)</span>
<span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
<span class="s2">&quot;--profiler&quot;</span><span class="p">,</span>
@ -2382,6 +2389,14 @@
<span class="n">django</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">management</span><span class="o">.</span><span class="n">call_command</span><span class="p">(</span><span class="o">*</span><span class="p">([</span><span class="n">option</span><span class="p">]</span> <span class="o">+</span> <span class="n">unknown_args</span><span class="p">))</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">if</span> <span class="n">option</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;createsuperuser&quot;</span><span class="p">,):</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot;Note: Don&#39;t create an additional superuser this way. It will not be set up &quot;</span>
<span class="s2">&quot;correctly.</span><span class="se">\n</span><span class="s2"> Instead, use the web admin or the in-game `py` command to &quot;</span>
<span class="s2">&quot;set `is_superuser=True` on a existing Account.&quot;</span>
<span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
<span class="k">if</span> <span class="n">run_custom_commands</span><span class="p">(</span><span class="n">option</span><span class="p">,</span> <span class="o">*</span><span class="n">unknown_args</span><span class="p">):</span>
<span class="c1"># run any custom commands</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>

View file

@ -89,8 +89,11 @@
<span class="n">SERVER_RESTART</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">&quot;server&quot;</span><span class="p">,</span> <span class="s2">&quot;server.restart&quot;</span><span class="p">)</span>
<span class="c1"># modules containing hook methods called during start_stop</span>
<span class="n">SERVER_STARTSTOP_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="n">mod_import</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span> <span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">AT_SERVER_STARTSTOP_MODULE</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="nb">str</span><span class="p">)]</span>
<span class="n">SERVER_STARTSTOP_MODULES</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">mod_import</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span>
<span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">AT_SERVER_STARTSTOP_MODULE</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>
<span class="p">]</span>
<span class="c1"># modules containing plugin services</span>
<span class="n">SERVER_SERVICES_PLUGIN_MODULES</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">SERVER_SERVICES_PLUGIN_MODULES</span><span class="p">)</span>

View file

@ -244,18 +244,18 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_lockstring</span> <span class="o">=</span> <span class="n">lockstring</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span> <span class="o">=</span> <span class="n">autocreate</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">_default</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Tries returning a new instance of default if callable.</span>
<span class="sd"> </span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__default</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__default</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__default</span>
<span class="nd">@_default</span><span class="o">.</span><span class="n">setter</span>
<span class="k">def</span> <span class="nf">_default</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="bp">self</span><span class="o">.</span><span class="n">__default</span> <span class="o">=</span> <span class="n">value</span>
@ -275,13 +275,16 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_default</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">at_get</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">get</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">_key</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_default</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
<span class="n">raise_exception</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">,</span>
<span class="p">),</span> <span class="n">instance</span><span class="p">)</span>
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">at_get</span><span class="p">(</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">get</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">_key</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_default</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
<span class="n">raise_exception</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">,</span>
<span class="p">),</span>
<span class="n">instance</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">:</span>
<span class="c1"># attribute didn&#39;t exist and autocreate is set</span>

View file

@ -104,15 +104,11 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">functools</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">OrderedDict</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">evennia.utils</span> <span class="kn">import</span> <span class="n">utils</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</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.utils.utils</span> <span class="kn">import</span> <span class="n">to_str</span>
<span class="n">MXP_ENABLED</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">MXP_ENABLED</span>

View file

@ -79,14 +79,14 @@
<span class="sd">&quot;&quot;&quot;</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.query</span> <span class="kn">import</span> <span class="n">QuerySet</span>
<span class="kn">from</span> <span class="nn">django.core.paginator</span> <span class="kn">import</span> <span class="n">Paginator</span>
<span class="kn">from</span> <span class="nn">evennia.commands.command</span> <span class="kn">import</span> <span class="n">Command</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.commands</span> <span class="kn">import</span> <span class="n">cmdhandler</span>
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">ANSIString</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">inherits_from</span><span class="p">,</span> <span class="n">justify</span><span class="p">,</span> <span class="n">dedent</span>
<span class="kn">from</span> <span class="nn">django.db.models.query</span> <span class="kn">import</span> <span class="n">QuerySet</span>
<span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdhandler</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.commands.command</span> <span class="kn">import</span> <span class="n">Command</span>
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">ANSIString</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">dedent</span><span class="p">,</span> <span class="n">inherits_from</span><span class="p">,</span> <span class="n">justify</span><span class="p">,</span> <span class="n">make_iter</span>
<span class="n">_CMD_NOMATCH</span> <span class="o">=</span> <span class="n">cmdhandler</span><span class="o">.</span><span class="n">CMD_NOMATCH</span>
<span class="n">_CMD_NOINPUT</span> <span class="o">=</span> <span class="n">cmdhandler</span><span class="o">.</span><span class="n">CMD_NOINPUT</span>
@ -102,7 +102,7 @@
<span class="c1"># text</span>
<span class="n">_DISPLAY</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span><span class="si">{text}</span><span class="s2"></span>
<span class="s2">(|wPage|n [</span><span class="si">{pageno}</span><span class="s2">/</span><span class="si">{pagemax}</span><span class="s2">] |wn|next|n || |wp|nrevious || |wt|nop || |we|nnd || |wq|nuit)&quot;&quot;&quot;</span>
<span class="s2">|n(|wPage|n [</span><span class="si">{pageno}</span><span class="s2">/</span><span class="si">{pagemax}</span><span class="s2">] |wn|next|n || |wp|nrevious || |wt|nop || |we|nnd || |wq|nuit)&quot;&quot;&quot;</span>
<div class="viewcode-block" id="CmdMore"><a class="viewcode-back" href="../../../api/evennia.utils.evmore.html#evennia.utils.evmore.CmdMore">[docs]</a><span class="k">class</span> <span class="nc">CmdMore</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>

View file

@ -60,10 +60,11 @@
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
<span class="kn">from</span> <span class="nn">traceback</span> <span class="kn">import</span> <span class="n">format_exc</span>
<span class="kn">from</span> <span class="nn">twisted</span> <span class="kn">import</span> <span class="n">logger</span> <span class="k">as</span> <span class="n">twisted_logger</span>
<span class="kn">from</span> <span class="nn">twisted.internet.threads</span> <span class="kn">import</span> <span class="n">deferToThread</span>
<span class="kn">from</span> <span class="nn">twisted.python</span> <span class="kn">import</span> <span class="n">logfile</span>
<span class="kn">from</span> <span class="nn">twisted.python</span> <span class="kn">import</span> <span class="n">util</span> <span class="k">as</span> <span class="n">twisted_util</span>
<span class="kn">from</span> <span class="nn">twisted.internet.threads</span> <span class="kn">import</span> <span class="n">deferToThread</span>
<span class="n">log</span> <span class="o">=</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">Logger</span><span class="p">()</span>
@ -390,6 +391,12 @@
<span class="k">break</span>
<span class="k">return</span> <span class="n">suffix</span></div>
<div class="viewcode-block" id="WeeklyLogFile.rotate"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.WeeklyLogFile.rotate">[docs]</a> <span class="k">def</span> <span class="nf">rotate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">rotate</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">log_trace</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Could not rotate the log file </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="WeeklyLogFile.write"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.WeeklyLogFile.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Write data to log file</span>

View file

@ -1902,7 +1902,7 @@
<span class="k">return</span> <span class="n">d0</span> <span class="o">+</span> <span class="n">d1</span></div>
<div class="viewcode-block" id="format_grid"><a class="viewcode-back" href="../../../api/evennia.utils.utils.html#evennia.commands.default.building.format_grid">[docs]</a><span class="k">def</span> <span class="nf">format_grid</span><span class="p">(</span><span class="n">elements</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">78</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">verbatim_elements</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<div class="viewcode-block" id="format_grid"><a class="viewcode-back" href="../../../api/evennia.utils.utils.html#evennia.commands.default.building.format_grid">[docs]</a><span class="k">def</span> <span class="nf">format_grid</span><span class="p">(</span><span class="n">elements</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">78</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">verbatim_elements</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">line_prefix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This helper function makes a &#39;grid&#39; output, where it distributes the given</span>
<span class="sd"> string-elements as evenly as possible to fill out the given width.</span>
@ -1920,6 +1920,8 @@
<span class="sd"> by padding unless filling the entire line. This is useful for embedding</span>
<span class="sd"> decorations in the grid, such as horizontal bars.</span>
<span class="sd"> ignore_ansi (bool, optional): Ignore ansi markups when calculating white spacing.</span>
<span class="sd"> line_prefix (str, optional): A prefix to add at the beginning of each line.</span>
<span class="sd"> This can e.g. be used to preserve line color across line breaks.</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: The grid as a list of ready-formatted rows. We return it</span>
@ -2030,10 +2032,14 @@
<span class="k">if</span> <span class="nb">sum</span><span class="p">(</span><span class="n">display_len</span><span class="p">((</span><span class="n">element</span><span class="p">))</span> <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">elements</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="n">width</span><span class="p">:</span>
<span class="c1"># grid fits in one line</span>
<span class="k">return</span> <span class="n">_minimal_rows</span><span class="p">(</span><span class="n">elements</span><span class="p">)</span>
<span class="n">rows</span> <span class="o">=</span> <span class="n">_minimal_rows</span><span class="p">(</span><span class="n">elements</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># full multi-line grid</span>
<span class="k">return</span> <span class="n">_weighted_rows</span><span class="p">(</span><span class="n">elements</span><span class="p">)</span></div>
<span class="n">rows</span> <span class="o">=</span> <span class="n">_weighted_rows</span><span class="p">(</span><span class="n">elements</span><span class="p">)</span>
<span class="k">if</span> <span class="n">line_prefix</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[</span><span class="n">line_prefix</span> <span class="o">+</span> <span class="n">row</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">]</span>
<span class="k">return</span> <span class="n">rows</span></div>
<div class="viewcode-block" id="get_evennia_pids"><a class="viewcode-back" href="../../../api/evennia.utils.utils.html#evennia.commands.default.building.get_evennia_pids">[docs]</a><span class="k">def</span> <span class="nf">get_evennia_pids</span><span class="p">():</span>

View file

@ -317,8 +317,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span>
<span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">&gt;=</span> <span class="mi">400</span><span class="p">,</span>
<span class="s2">&quot;Invalid access should return a 4xx code-- either obj not found or permission denied!&quot;</span>
<span class="s2">&quot; (Returned </span><span class="si">%s</span><span class="s2">)&quot;</span>
<span class="o">%</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="p">,</span>
<span class="s2">&quot; (Returned </span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="p">,</span>
<span class="p">)</span></div></div>