mirror of
https://github.com/evennia/evennia.git
synced 2026-04-04 23:17:17 +02:00
Updated HTML docs
This commit is contained in:
parent
db734562d5
commit
500734d214
100 changed files with 6800 additions and 2763 deletions
|
|
@ -49,7 +49,7 @@
|
|||
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.locks.lockhandler</span> <span class="kn">import</span> <span class="n">LockException</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.commands.cmdhandler</span> <span class="kn">import</span> <span class="n">get_and_merge_cmdsets</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">utils</span><span class="p">,</span> <span class="n">search</span><span class="p">,</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">create</span><span class="p">,</span> <span class="n">utils</span><span class="p">,</span> <span class="n">search</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">funcparser</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">inherits_from</span><span class="p">,</span>
|
||||
<span class="n">class_from_module</span><span class="p">,</span>
|
||||
|
|
@ -64,10 +64,11 @@
|
|||
<span class="kn">from</span> <span class="nn">evennia.utils.evmore</span> <span class="kn">import</span> <span class="n">EvMore</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.prototypes</span> <span class="kn">import</span> <span class="n">spawner</span><span class="p">,</span> <span class="n">prototypes</span> <span class="k">as</span> <span class="n">protlib</span><span class="p">,</span> <span class="n">menus</span> <span class="k">as</span> <span class="n">olc_menus</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">raw</span> <span class="k">as</span> <span class="n">ansi_raw</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.inlinefuncs</span> <span class="kn">import</span> <span class="n">raw</span> <span class="k">as</span> <span class="n">inlinefunc_raw</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">_FUNCPARSER</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="c1"># limit symbol import for API</span>
|
||||
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s2">"ObjManipCommand"</span><span class="p">,</span>
|
||||
|
|
@ -2164,7 +2165,8 @@
|
|||
<span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="s2">"prototype"</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">modified</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="p">[</span><span class="n">obj</span><span class="p">])</span>
|
||||
<span class="n">modified</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span>
|
||||
<span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="p">[</span><span class="n">obj</span><span class="p">],</span> <span class="n">caller</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="n">prototype_success</span> <span class="o">=</span> <span class="n">modified</span> <span class="o">></span> <span class="mi">0</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype_success</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">"Prototype </span><span class="si">%s</span><span class="s2"> failed to apply."</span> <span class="o">%</span> <span class="n">prototype</span><span class="p">[</span><span class="s2">"key"</span><span class="p">])</span>
|
||||
|
|
@ -2422,12 +2424,16 @@
|
|||
<span class="sd"> value (any): Attribute value.</span>
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">global</span> <span class="n">_FUNCPARSER</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_FUNCPARSER</span><span class="p">:</span>
|
||||
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">FuncParser</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">FUNCPARSER_OUTGOING_MESSAGES_MODULES</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">attr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"No such attribute was found."</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">to_str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">crop</span><span class="p">:</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">inlinefunc_raw</span><span class="p">(</span><span class="n">ansi_raw</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">_FUNCPARSER</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">ansi_raw</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="n">escape</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">category</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">attr</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">] = </span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
|
|
@ -3500,7 +3506,7 @@
|
|||
<span class="s2">"Python structures are allowed. </span><span class="se">\n</span><span class="s2">Make sure to use correct "</span>
|
||||
<span class="s2">"Python syntax. Remember especially to put quotes around all "</span>
|
||||
<span class="s2">"strings inside lists and dicts.|n For more advanced uses, embed "</span>
|
||||
<span class="s2">"inlinefuncs in the strings."</span>
|
||||
<span class="s2">"funcparser callables ($funcs) in the strings."</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Expected </span><span class="si">{}</span><span class="s2">, got </span><span class="si">{}</span><span class="s2">."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">expect</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">prototype</span><span class="p">))</span>
|
||||
|
|
@ -3596,7 +3602,7 @@
|
|||
<span class="k">return</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">n_updated</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span>
|
||||
<span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="n">existing_objects</span>
|
||||
<span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="n">existing_objects</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
|
||||
|
|
@ -3848,7 +3854,7 @@
|
|||
|
||||
<span class="c1"># proceed to spawning</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">spawner</span><span class="o">.</span><span class="n">spawn</span><span class="p">(</span><span class="n">prototype</span><span class="p">):</span>
|
||||
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">spawner</span><span class="o">.</span><span class="n">spawn</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</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">msg</span><span class="p">(</span><span class="s2">"Spawned </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</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="k">if</span> <span class="ow">not</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"location"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">noloc</span><span class="p">:</span>
|
||||
<span class="c1"># we don't hardcode the location in the prototype (unless the user</span>
|
||||
|
|
|
|||
|
|
@ -737,27 +737,27 @@
|
|||
<span class="s2">After playing through the tutorial-world quest, if you aim to make a game with</span>
|
||||
<span class="s2">Evennia you are wise to take a look at the |wEvennia documentation|n at</span>
|
||||
|
||||
<span class="s2"> |yhttps://github.com/evennia/evennia/wiki|n</span>
|
||||
<span class="s2"> |yhttps://www.evennia.com/docs/latest|n</span>
|
||||
|
||||
<span class="s2">- You can start by trying to build some stuff by following the |wBuilder quick-start|n:</span>
|
||||
|
||||
<span class="s2"> |yhttps://github.com/evennia/evennia/wiki/Building-Quickstart|n</span>
|
||||
<span class="s2"> |yhttps://www.evennia.com/docs/latest/Building-Quickstart|n</span>
|
||||
|
||||
<span class="s2">- The tutorial-world may or may not be your cup of tea, but it does show off</span>
|
||||
<span class="s2"> several |wuseful tools|n of Evennia. You may want to check out how it works:</span>
|
||||
|
||||
<span class="s2"> |yhttps://github.com/evennia/evennia/wiki/Tutorial-World-Introduction|n</span>
|
||||
<span class="s2"> |yhttps://www.evennia.com/docs/latest/Tutorial-World-Introduction|n</span>
|
||||
|
||||
<span class="s2">- You can then continue looking through the |wTutorials|n and pick one that</span>
|
||||
<span class="s2"> fits your level of understanding.</span>
|
||||
|
||||
<span class="s2"> |yhttps://github.com/evennia/evennia/wiki/Tutorials|n</span>
|
||||
<span class="s2"> |yhttps://www.evennia.com/docs/latest/Tutorials|n</span>
|
||||
|
||||
<span class="s2">- Make sure to |wjoin our forum|n and connect to our |wsupport chat|n! The</span>
|
||||
<span class="s2"> Evennia community is very active and friendly and no question is too simple.</span>
|
||||
<span class="s2"> You will often quickly get help. You can everything you need linked from</span>
|
||||
|
||||
<span class="s2"> |yhttp://www.evennia.com|n</span>
|
||||
<span class="s2"> |yhttps://www.evennia.com|n</span>
|
||||
|
||||
<span class="s2"># ---------------------------------------------------------------------------------</span>
|
||||
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@
|
|||
<span class="kn">from</span> <span class="nn">evennia.scripts.scripthandler</span> <span class="kn">import</span> <span class="n">ScriptHandler</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdset</span><span class="p">,</span> <span class="n">command</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.commands.cmdsethandler</span> <span class="kn">import</span> <span class="n">CmdSetHandler</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">funcparser</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">search</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
|
||||
|
|
@ -89,6 +90,12 @@
|
|||
<span class="c1"># the sessid_max is based on the length of the db_sessid csv field (excluding commas)</span>
|
||||
<span class="n">_SESSID_MAX</span> <span class="o">=</span> <span class="mi">16</span> <span class="k">if</span> <span class="n">_MULTISESSION_MODE</span> <span class="ow">in</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="k">else</span> <span class="mi">1</span>
|
||||
|
||||
<span class="n">_MSG_CONTENTS_PARSER</span> <span class="o">=</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">FuncParser</span><span class="p">(</span>
|
||||
<span class="p">{</span><span class="s2">"you"</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_you</span><span class="p">,</span>
|
||||
<span class="s2">"You"</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_You</span><span class="p">,</span>
|
||||
<span class="s2">"conj"</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_conjugate</span>
|
||||
<span class="p">})</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ObjectSessionHandler"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.ObjectSessionHandler">[docs]</a><span class="k">class</span> <span class="nc">ObjectSessionHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -759,64 +766,94 @@
|
|||
<span class="sd"> text (str or tuple): Message to send. If a tuple, this should be</span>
|
||||
<span class="sd"> on the valid OOB outmessage form `(message, {kwargs})`,</span>
|
||||
<span class="sd"> where kwargs are optional data passed to the `text`</span>
|
||||
<span class="sd"> outputfunc.</span>
|
||||
<span class="sd"> outputfunc. The message will be parsed for `{key}` formatting and</span>
|
||||
<span class="sd"> `$You/$you()/$You(key)` and `$conj(verb)` inline function callables.</span>
|
||||
<span class="sd"> The `key` is taken from the `mapping` kwarg {"key": object, ...}`.</span>
|
||||
<span class="sd"> The `mapping[key].get_display_name(looker=recipient)` will be called</span>
|
||||
<span class="sd"> for that key for every recipient of the string.</span>
|
||||
<span class="sd"> exclude (list, optional): A list of objects not to send to.</span>
|
||||
<span class="sd"> from_obj (Object, optional): An object designated as the</span>
|
||||
<span class="sd"> "sender" of the message. See `DefaultObject.msg()` for</span>
|
||||
<span class="sd"> more info.</span>
|
||||
<span class="sd"> mapping (dict, optional): A mapping of formatting keys</span>
|
||||
<span class="sd"> `{"key":<object>, "key2":<object2>,...}. The keys</span>
|
||||
<span class="sd"> must match `{key}` markers in the `text` if this is a string or</span>
|
||||
<span class="sd"> in the internal `message` if `text` is a tuple. These</span>
|
||||
<span class="sd"> formatting statements will be</span>
|
||||
<span class="sd"> replaced by the return of `<object>.get_display_name(looker)`</span>
|
||||
<span class="sd"> for every looker in contents that receives the</span>
|
||||
<span class="sd"> message. This allows for every object to potentially</span>
|
||||
<span class="sd"> get its own customized string.</span>
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> Keyword arguments will be passed on to `obj.msg()` for all</span>
|
||||
<span class="sd"> messaged objects.</span>
|
||||
<span class="sd"> `{"key":<object>, "key2":<object2>,...}.</span>
|
||||
<span class="sd"> The keys must either match `{key}` or `$You(key)/$you(key)` markers</span>
|
||||
<span class="sd"> in the `text` string. If `<object>` doesn't have a `get_display_name`</span>
|
||||
<span class="sd"> method, it will be returned as a string. If not set, a key `you` will</span>
|
||||
<span class="sd"> be auto-added to point to `from_obj` if given, otherwise to `self`.</span>
|
||||
<span class="sd"> **kwargs: Keyword arguments will be passed on to `obj.msg()` for all</span>
|
||||
<span class="sd"> messaged objects.</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> The `mapping` argument is required if `message` contains</span>
|
||||
<span class="sd"> {}-style format syntax. The keys of `mapping` should match</span>
|
||||
<span class="sd"> named format tokens, and its values will have their</span>
|
||||
<span class="sd"> `get_display_name()` function called for each object in</span>
|
||||
<span class="sd"> the room before substitution. If an item in the mapping does</span>
|
||||
<span class="sd"> not have `get_display_name()`, its string value will be used.</span>
|
||||
<span class="sd"> For 'actor-stance' reporting (You say/Name says), use the</span>
|
||||
<span class="sd"> `$You()/$you()/$You(key)` and `$conj(verb)` (verb-conjugation)</span>
|
||||
<span class="sd"> inline callables. This will use the respective `get_display_name()`</span>
|
||||
<span class="sd"> for all onlookers except for `from_obj or self`, which will become</span>
|
||||
<span class="sd"> 'You/you'. If you use `$You/you(key)`, the key must be in `mapping`.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> Say Char is a Character object and Npc is an NPC object:</span>
|
||||
<span class="sd"> For 'director-stance' reporting (Name says/Name says), use {key}</span>
|
||||
<span class="sd"> syntax directly. For both `{key}` and `You/you(key)`,</span>
|
||||
<span class="sd"> `mapping[key].get_display_name(looker=recipient)` may be called</span>
|
||||
<span class="sd"> depending on who the recipient is.</span>
|
||||
|
||||
<span class="sd"> char.location.msg_contents(</span>
|
||||
<span class="sd"> "{attacker} kicks {defender}",</span>
|
||||
<span class="sd"> mapping=dict(attacker=char, defender=npc), exclude=(char, npc))</span>
|
||||
<span class="sd"> Examples:</span>
|
||||
|
||||
<span class="sd"> This will result in everyone in the room seeing 'Char kicks NPC'</span>
|
||||
<span class="sd"> where everyone may potentially see different results for Char and Npc</span>
|
||||
<span class="sd"> depending on the results of `char.get_display_name(looker)` and</span>
|
||||
<span class="sd"> `npc.get_display_name(looker)` for each particular onlooker</span>
|
||||
<span class="sd"> Let's assume</span>
|
||||
<span class="sd"> - `player1.key -> "Player1"`,</span>
|
||||
<span class="sd"> `player1.get_display_name(looker=player2) -> "The First girl"`</span>
|
||||
<span class="sd"> - `player2.key -> "Player2"`,</span>
|
||||
<span class="sd"> `player2.get_display_name(looker=player1) -> "The Second girl"`</span>
|
||||
|
||||
<span class="sd"> Actor-stance:</span>
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> char.location.msg_contents(</span>
|
||||
<span class="sd"> "$You() $conj(attack) $you(defender).",</span>
|
||||
<span class="sd"> mapping={"defender": player2})</span>
|
||||
|
||||
<span class="sd"> - player1 will see `You attack The Second girl.`</span>
|
||||
<span class="sd"> - player2 will see 'The First girl attacks you.'</span>
|
||||
|
||||
<span class="sd"> Director-stance:</span>
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> char.location.msg_contents(</span>
|
||||
<span class="sd"> "{attacker} attacks {defender}.",</span>
|
||||
<span class="sd"> mapping={"attacker:player1, "defender":player2})</span>
|
||||
|
||||
<span class="sd"> - player1 will see: 'Player1 attacks The Second girl.'</span>
|
||||
<span class="sd"> - player2 will see: 'The First girl attacks Player2'</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># we also accept an outcommand on the form (message, {kwargs})</span>
|
||||
<span class="n">is_outcmd</span> <span class="o">=</span> <span class="n">text</span> <span class="ow">and</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
|
||||
<span class="n">inmessage</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">is_outcmd</span> <span class="k">else</span> <span class="n">text</span>
|
||||
<span class="n">outkwargs</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">is_outcmd</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="p">{}</span>
|
||||
<span class="n">mapping</span> <span class="o">=</span> <span class="n">mapping</span> <span class="ow">or</span> <span class="p">{}</span>
|
||||
<span class="n">you</span> <span class="o">=</span> <span class="n">from_obj</span> <span class="ow">or</span> <span class="bp">self</span>
|
||||
|
||||
<span class="k">if</span> <span class="s1">'you'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">:</span>
|
||||
<span class="n">mapping</span><span class="p">[</span><span class="n">you</span><span class="p">]</span> <span class="o">=</span> <span class="n">you</span>
|
||||
|
||||
<span class="n">contents</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">contents</span>
|
||||
<span class="k">if</span> <span class="n">exclude</span><span class="p">:</span>
|
||||
<span class="n">exclude</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">exclude</span><span class="p">)</span>
|
||||
<span class="n">contents</span> <span class="o">=</span> <span class="p">[</span><span class="n">obj</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">contents</span> <span class="k">if</span> <span class="n">obj</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">exclude</span><span class="p">]</span>
|
||||
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">contents</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">mapping</span><span class="p">:</span>
|
||||
<span class="n">substitutions</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">t</span><span class="p">:</span> <span class="n">sub</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sub</span><span class="p">,</span> <span class="s2">"get_display_name"</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">sub</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">t</span><span class="p">,</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
||||
<span class="p">}</span>
|
||||
<span class="n">outmessage</span> <span class="o">=</span> <span class="n">inmessage</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">substitutions</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">outmessage</span> <span class="o">=</span> <span class="n">inmessage</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">outmessage</span><span class="p">,</span> <span class="n">outkwargs</span><span class="p">),</span> <span class="n">from_obj</span><span class="o">=</span><span class="n">from_obj</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">for</span> <span class="n">receiver</span> <span class="ow">in</span> <span class="n">contents</span><span class="p">:</span>
|
||||
|
||||
<span class="c1"># actor-stance replacements</span>
|
||||
<span class="n">inmessage</span> <span class="o">=</span> <span class="n">_MSG_CONTENTS_PARSER</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span>
|
||||
<span class="n">inmessage</span><span class="p">,</span> <span class="n">raise_errors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">return_string</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
<span class="n">caller</span><span class="o">=</span><span class="n">you</span><span class="p">,</span> <span class="n">receiver</span><span class="o">=</span><span class="n">receiver</span><span class="p">,</span> <span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># director-stance replacements</span>
|
||||
<span class="n">outmessage</span> <span class="o">=</span> <span class="n">inmessage</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="o">**</span><span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="o">=</span><span class="n">receiver</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"get_display_name"</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">items</span><span class="p">()})</span>
|
||||
|
||||
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">outmessage</span><span class="p">,</span> <span class="n">outkwargs</span><span class="p">),</span> <span class="n">from_obj</span><span class="o">=</span><span class="n">from_obj</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="DefaultObject.move_to"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.move_to">[docs]</a> <span class="k">def</span> <span class="nf">move_to</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
|
|
|
|||
|
|
@ -219,9 +219,7 @@
|
|||
|
||||
<span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"test_parse"</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span>
|
||||
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">" Simulating prototype-func parsing ..."</span><span class="p">)</span>
|
||||
<span class="n">err</span><span class="p">,</span> <span class="n">parsed_value</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">protfunc_parser</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">testing</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">err</span><span class="p">:</span>
|
||||
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">" |yPython `literal_eval` warning: </span><span class="si">{}</span><span class="s2">|n"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="p">))</span>
|
||||
<span class="n">parsed_value</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">protfunc_parser</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">testing</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">prototype</span><span class="o">=</span><span class="n">prototype</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">parsed_value</span> <span class="o">!=</span> <span class="n">value</span><span class="p">:</span>
|
||||
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||
<span class="s2">" |g(Example-)value when parsed (</span><span class="si">{}</span><span class="s2">):|n </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">parsed_value</span><span class="p">),</span> <span class="n">parsed_value</span><span class="p">)</span>
|
||||
|
|
@ -306,7 +304,7 @@
|
|||
<span class="k">def</span> <span class="nf">_format_protfuncs</span><span class="p">():</span>
|
||||
<span class="n">out</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">sorted_funcs</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">func</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">protlib</span><span class="o">.</span><span class="n">PROT_FUNCS</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tup</span><span class="p">:</span> <span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">func</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">protlib</span><span class="o">.</span><span class="n">FUNC_PARSER</span><span class="o">.</span><span class="n">callables</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tup</span><span class="p">:</span> <span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="p">]</span>
|
||||
<span class="k">for</span> <span class="n">protfunc_name</span><span class="p">,</span> <span class="n">protfunc</span> <span class="ow">in</span> <span class="n">sorted_funcs</span><span class="p">:</span>
|
||||
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||
|
|
@ -2157,7 +2155,8 @@
|
|||
<span class="n">objects</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"objects"</span><span class="p">]</span>
|
||||
<span class="n">back_node</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"back_node"</span><span class="p">]</span>
|
||||
<span class="n">diff</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"diff"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">num_changed</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">diff</span><span class="o">=</span><span class="n">diff</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="n">objects</span><span class="p">)</span>
|
||||
<span class="n">num_changed</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">diff</span><span class="o">=</span><span class="n">diff</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="n">objects</span><span class="p">,</span>
|
||||
<span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|g</span><span class="si">{num}</span><span class="s2"> objects were updated successfully.|n"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">num</span><span class="o">=</span><span class="n">num_changed</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">back_node</span>
|
||||
|
||||
|
|
@ -2525,7 +2524,7 @@
|
|||
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"location"</span><span class="p">):</span>
|
||||
<span class="n">prototype</span><span class="p">[</span><span class="s2">"location"</span><span class="p">]</span> <span class="o">=</span> <span class="n">caller</span>
|
||||
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">spawn</span><span class="p">(</span><span class="n">prototype</span><span class="p">)</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">spawn</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="s2">"|gNew instance|n </span><span class="si">{key}</span><span class="s2"> (</span><span class="si">{dbref}</span><span class="s2">) |gspawned at location |n</span><span class="si">{loc}</span><span class="s2">|n|g.|n"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
|
|
|
|||
|
|
@ -41,35 +41,30 @@
|
|||
|
||||
<h1>Source code for evennia.prototypes.protfuncs</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">Protfuncs are function-strings embedded in a prototype and allows for a builder to create a</span>
|
||||
<span class="sd">prototype with custom logics without having access to Python. The Protfunc is parsed using the</span>
|
||||
<span class="sd">inlinefunc parser but is fired at the moment the spawning happens, using the creating object's</span>
|
||||
<span class="sd">session as input.</span>
|
||||
<span class="sd">Protfuncs are FuncParser-callables that can be embedded in a prototype to</span>
|
||||
<span class="sd">provide custom logic without having access to Python. The protfunc is parsed at</span>
|
||||
<span class="sd">the time of spawning, using the creating object's session as input. If the</span>
|
||||
<span class="sd">protfunc returns a non-string, this is what will be added to the prototype.</span>
|
||||
|
||||
<span class="sd">In the prototype dict, the protfunc is specified as a string inside the prototype, e.g.:</span>
|
||||
|
||||
<span class="sd"> { ...</span>
|
||||
|
||||
<span class="sd"> "key": "$funcname(arg1, arg2, ...)"</span>
|
||||
<span class="sd"> "key": "$funcname(args, kwargs)"</span>
|
||||
|
||||
<span class="sd"> ... }</span>
|
||||
|
||||
<span class="sd">and multiple functions can be nested (no keyword args are supported). The result will be used as the</span>
|
||||
<span class="sd">value for that prototype key for that individual spawn.</span>
|
||||
|
||||
<span class="sd">Available protfuncs are callables in one of the modules of `settings.PROT_FUNC_MODULES`. They</span>
|
||||
<span class="sd">are specified as functions</span>
|
||||
<span class="sd">Available protfuncs are either all callables in one of the modules of `settings.PROT_FUNC_MODULES`</span>
|
||||
<span class="sd">or all callables added to a dict FUNCPARSER_CALLABLES in such a module.</span>
|
||||
|
||||
<span class="sd"> def funcname (*args, **kwargs)</span>
|
||||
|
||||
<span class="sd">where *args are the arguments given in the prototype, and **kwargs are inserted by Evennia:</span>
|
||||
<span class="sd">At spawn-time the spawner passes the following extra kwargs into each callable (in addition to</span>
|
||||
<span class="sd">what is added in the call itself):</span>
|
||||
|
||||
<span class="sd"> - session (Session): The Session of the entity spawning using this prototype.</span>
|
||||
<span class="sd"> - prototype (dict): The dict this protfunc is a part of.</span>
|
||||
<span class="sd"> - current_key (str): The active key this value belongs to in the prototype.</span>
|
||||
<span class="sd"> - testing (bool): This is set if this function is called as part of the prototype validation; if</span>
|
||||
<span class="sd"> set, the protfunc should take care not to perform any persistent actions, such as operate on</span>
|
||||
<span class="sd"> objects or add things to the database.</span>
|
||||
|
||||
<span class="sd">Any traceback raised by this function will be handled at the time of spawning and abort the spawn</span>
|
||||
<span class="sd">before any object is created/updated. It must otherwise return the value to store for the specified</span>
|
||||
|
|
@ -77,315 +72,35 @@
|
|||
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">ast</span> <span class="kn">import</span> <span class="n">literal_eval</span>
|
||||
<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">randint</span> <span class="k">as</span> <span class="n">base_randint</span><span class="p">,</span> <span class="n">random</span> <span class="k">as</span> <span class="n">base_random</span><span class="p">,</span> <span class="n">choice</span> <span class="k">as</span> <span class="n">base_choice</span>
|
||||
<span class="kn">import</span> <span class="nn">re</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">search</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">justify</span> <span class="k">as</span> <span class="n">base_justify</span><span class="p">,</span> <span class="n">is_iter</span><span class="p">,</span> <span class="n">to_str</span>
|
||||
|
||||
<span class="n">_PROTLIB</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="n">_RE_DBREF</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">"\#[0-9]+"</span><span class="p">)</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">funcparser</span>
|
||||
|
||||
|
||||
<span class="c1"># default protfuncs</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="random"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.random">[docs]</a><span class="k">def</span> <span class="nf">random</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="protfunc_callable_protkey"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.protfunc_callable_protkey">[docs]</a><span class="k">def</span> <span class="nf">protfunc_callable_protkey</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $random()</span>
|
||||
<span class="sd"> Returns a random value in the interval [0, 1)</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">base_random</span><span class="p">()</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="randint"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.randint">[docs]</a><span class="k">def</span> <span class="nf">randint</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $randint(start, end)</span>
|
||||
<span class="sd"> Returns random integer in interval [start, end]</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</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">TypeError</span><span class="p">(</span><span class="s2">"$randint needs two arguments - start and end."</span><span class="p">)</span>
|
||||
<span class="n">start</span><span class="p">,</span> <span class="n">end</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="nb">int</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">base_randint</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="left_justify"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.left_justify">[docs]</a><span class="k">def</span> <span class="nf">left_justify</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $left_justify(<text>)</span>
|
||||
<span class="sd"> Returns <text> left-justified.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">base_justify</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">align</span><span class="o">=</span><span class="s2">"l"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="right_justify"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.right_justify">[docs]</a><span class="k">def</span> <span class="nf">right_justify</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $right_justify(<text>)</span>
|
||||
<span class="sd"> Returns <text> right-justified across screen width.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">base_justify</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">align</span><span class="o">=</span><span class="s2">"r"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="center_justify"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.center_justify">[docs]</a><span class="k">def</span> <span class="nf">center_justify</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $center_justify(<text>)</span>
|
||||
<span class="sd"> Returns <text> centered in screen width.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">base_justify</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">align</span><span class="o">=</span><span class="s2">"c"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="choice"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.choice">[docs]</a><span class="k">def</span> <span class="nf">choice</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $choice(val, val, val, ...)</span>
|
||||
<span class="sd"> Returns one of the values randomly</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">base_choice</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="full_justify"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.full_justify">[docs]</a><span class="k">def</span> <span class="nf">full_justify</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $full_justify(<text>)</span>
|
||||
<span class="sd"> Returns <text> filling up screen width by adding extra space.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">base_justify</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">align</span><span class="o">=</span><span class="s2">"f"</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="protkey"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.protkey">[docs]</a><span class="k">def</span> <span class="nf">protkey</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $protkey(<key>)</span>
|
||||
<span class="sd"> Usage: $protkey(keyname)</span>
|
||||
<span class="sd"> Returns the value of another key in this prototoype. Will raise an error if</span>
|
||||
<span class="sd"> the key is not found in this prototype.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="n">prototype</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"prototype"</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">prototype</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span></div>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">""</span>
|
||||
|
||||
<span class="n">prototype</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prototype"</span><span class="p">,</span> <span class="p">{})</span>
|
||||
<span class="n">prot_value</span> <span class="o">=</span> <span class="n">prototype</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_eval</span><span class="p">(</span><span class="n">prot_value</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">ParsingError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">prot_value</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="add"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.add">[docs]</a><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $add(val1, val2)</span>
|
||||
<span class="sd"> Returns the result of val1 + val2. Values must be</span>
|
||||
<span class="sd"> valid simple Python structures possible to add,</span>
|
||||
<span class="sd"> such as numbers, lists etc.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="c1"># try to convert to python structures, otherwise, keep as strings</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">val1</span> <span class="o">=</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">val1</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">val2</span> <span class="o">=</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">val2</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">return</span> <span class="n">val1</span> <span class="o">+</span> <span class="n">val2</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"$add requires two arguments."</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="sub"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.sub">[docs]</a><span class="k">def</span> <span class="nf">sub</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $del(val1, val2)</span>
|
||||
<span class="sd"> Returns the value of val1 - val2. Values must be</span>
|
||||
<span class="sd"> valid simple Python structures possible to</span>
|
||||
<span class="sd"> subtract.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="c1"># try to convert to python structures, otherwise, keep as strings</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">val1</span> <span class="o">=</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">val1</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">val2</span> <span class="o">=</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">val2</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">return</span> <span class="n">val1</span> <span class="o">-</span> <span class="n">val2</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"$sub requires two arguments."</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="mult"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.mult">[docs]</a><span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $mul(val1, val2)</span>
|
||||
<span class="sd"> Returns the value of val1 * val2. The values must be</span>
|
||||
<span class="sd"> valid simple Python structures possible to</span>
|
||||
<span class="sd"> multiply, like strings and/or numbers.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="c1"># try to convert to python structures, otherwise, keep as strings</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">val1</span> <span class="o">=</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">val1</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">val2</span> <span class="o">=</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">val2</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">return</span> <span class="n">val1</span> <span class="o">*</span> <span class="n">val2</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"$mul requires two arguments."</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="div"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.div">[docs]</a><span class="k">def</span> <span class="nf">div</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $div(val1, val2)</span>
|
||||
<span class="sd"> Returns the value of val1 / val2. Values must be numbers and</span>
|
||||
<span class="sd"> the result is always a float.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="c1"># try to convert to python structures, otherwise, keep as strings</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">val1</span> <span class="o">=</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">val1</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">val2</span> <span class="o">=</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">val2</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">return</span> <span class="n">val1</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="n">val2</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"$mult requires two arguments."</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="toint"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.toint">[docs]</a><span class="k">def</span> <span class="nf">toint</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $toint(<number>)</span>
|
||||
<span class="sd"> Returns <number> as an integer.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">literal_eval</span><span class="p">(</span><span class="n">val</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">val</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"$toint requires one argument."</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="eval"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.eval">[docs]</a><span class="k">def</span> <span class="nf">eval</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage $eval(<expression>)</span>
|
||||
<span class="sd"> Returns evaluation of a simple Python expression. The string may *only* consist of the following</span>
|
||||
<span class="sd"> Python literal structures: strings, numbers, tuples, lists, dicts, booleans,</span>
|
||||
<span class="sd"> and None. The strings can also contain #dbrefs. Escape embedded protfuncs as $$protfunc(..)</span>
|
||||
<span class="sd"> - those will then be evaluated *after* $eval.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">global</span> <span class="n">_PROTLIB</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_PROTLIB</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.prototypes</span> <span class="kn">import</span> <span class="n">prototypes</span> <span class="k">as</span> <span class="n">_PROTLIB</span>
|
||||
|
||||
<span class="n">string</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="n">struct</span> <span class="o">=</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">struct</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="c1"># we must shield the string, otherwise it will be merged as a string and future</span>
|
||||
<span class="c1"># literal_evas will pick up e.g. '2' as something that should be converted to a number</span>
|
||||
<span class="n">struct</span> <span class="o">=</span> <span class="s1">'"</span><span class="si">{}</span><span class="s1">"'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">struct</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># convert any #dbrefs to objects (also in nested structures)</span>
|
||||
<span class="n">struct</span> <span class="o">=</span> <span class="n">_PROTLIB</span><span class="o">.</span><span class="n">value_to_obj_or_any</span><span class="p">(</span><span class="n">struct</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">struct</span></div>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">_obj_search</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="s2">"Helper function to search for an object"</span>
|
||||
|
||||
<span class="n">query</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"session"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">return_list</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"return_list"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">account</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">session</span><span class="p">:</span>
|
||||
<span class="n">account</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">account</span>
|
||||
|
||||
<span class="n">targets</span> <span class="o">=</span> <span class="n">search</span><span class="o">.</span><span class="n">search_object</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">return_list</span><span class="p">:</span>
|
||||
<span class="n">retlist</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">target</span> <span class="ow">in</span> <span class="n">targets</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">):</span>
|
||||
<span class="n">retlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">retlist</span> <span class="o">=</span> <span class="n">targets</span>
|
||||
<span class="k">return</span> <span class="n">retlist</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># single-match</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">targets</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"$obj: Query '</span><span class="si">{}</span><span class="s2">' gave no matches."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">query</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">targets</span><span class="p">)</span> <span class="o">></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">"$obj: Query '</span><span class="si">{query}</span><span class="s2">' gave </span><span class="si">{nmatches}</span><span class="s2"> matches. Limit your "</span>
|
||||
<span class="s2">"query or use $objlist instead."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">query</span><span class="o">=</span><span class="n">query</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">targets</span><span class="p">))</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">target</span> <span class="o">=</span> <span class="n">targets</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">target</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
||||
<span class="s2">"$obj: Obj </span><span class="si">{target}</span><span class="s2">(#</span><span class="si">{dbref}</span><span class="s2"> cannot be added - "</span>
|
||||
<span class="s2">"Account </span><span class="si">{account}</span><span class="s2"> does not have 'control' access."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">target</span><span class="o">=</span><span class="n">target</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">dbref</span><span class="o">=</span><span class="n">target</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">account</span><span class="o">=</span><span class="n">account</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">target</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="obj"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.obj">[docs]</a><span class="k">def</span> <span class="nf">obj</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage $obj(<query>)</span>
|
||||
<span class="sd"> Returns one Object searched globally by key, alias or #dbref. Error if more than one.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="n">_obj_search</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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">"#</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="objlist"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.objlist">[docs]</a><span class="k">def</span> <span class="nf">objlist</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage $objlist(<query>)</span>
|
||||
<span class="sd"> Returns list with one or more Objects searched globally by key, alias or #dbref.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="s2">"#</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">_obj_search</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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)]</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="dbref"><a class="viewcode-back" href="../../../api/evennia.prototypes.protfuncs.html#evennia.prototypes.protfuncs.dbref">[docs]</a><span class="k">def</span> <span class="nf">dbref</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage $dbref(<#dbref>)</span>
|
||||
<span class="sd"> Validate that a #dbref input is valid.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o"><</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">_RE_DBREF</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"$dbref requires a valid #dbref argument."</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">obj</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span></div>
|
||||
<span class="c1"># this is picked up by FuncParser</span>
|
||||
<span class="n">FUNCPARSER_CALLABLES</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"protkey"</span><span class="p">:</span> <span class="n">protfunc_callable_protkey</span><span class="p">,</span>
|
||||
<span class="o">**</span><span class="n">funcparser</span><span class="o">.</span><span class="n">FUNCPARSER_CALLABLES</span><span class="p">,</span>
|
||||
<span class="o">**</span><span class="n">funcparser</span><span class="o">.</span><span class="n">SEARCHING_CALLABLES</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@
|
|||
<span class="p">)</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.locks.lockhandler</span> <span class="kn">import</span> <span class="n">validate_lockstring</span><span class="p">,</span> <span class="n">check_lockstring</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">inlinefuncs</span><span class="p">,</span> <span class="n">dbserialize</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.funcparser</span> <span class="kn">import</span> <span class="n">FuncParser</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">dbserialize</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.evtable</span> <span class="kn">import</span> <span class="n">EvTable</span>
|
||||
|
||||
|
||||
|
|
@ -100,11 +101,14 @@
|
|||
<span class="p">)</span>
|
||||
<span class="n">PROTOTYPE_TAG_CATEGORY</span> <span class="o">=</span> <span class="s2">"from_prototype"</span>
|
||||
<span class="n">_PROTOTYPE_TAG_META_CATEGORY</span> <span class="o">=</span> <span class="s2">"db_prototype"</span>
|
||||
<span class="n">PROT_FUNCS</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
|
||||
<span class="n">_PROTOTYPE_FALLBACK_LOCK</span> <span class="o">=</span> <span class="s2">"spawn:all();edit:all()"</span>
|
||||
|
||||
|
||||
<span class="c1"># the protfunc parser</span>
|
||||
<span class="n">FUNC_PARSER</span> <span class="o">=</span> <span class="n">FuncParser</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">PROT_FUNC_MODULES</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="PermissionError"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.PermissionError">[docs]</a><span class="k">class</span> <span class="nc">PermissionError</span><span class="p">(</span><span class="ne">RuntimeError</span><span class="p">):</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
|
|
@ -751,18 +755,7 @@
|
|||
<span class="n">prototype</span><span class="p">[</span><span class="s2">"prototype_locks"</span><span class="p">]</span> <span class="o">=</span> <span class="n">prototype_locks</span></div>
|
||||
|
||||
|
||||
<span class="c1"># Protfunc parsing (in-prototype functions)</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">settings</span><span class="o">.</span><span class="n">PROT_FUNC_MODULES</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">callables</span> <span class="o">=</span> <span class="n">callables_from_module</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span>
|
||||
<span class="n">PROT_FUNCS</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">callables</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
|
||||
<span class="k">raise</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="protfunc_parser"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.protfunc_parser">[docs]</a><span class="k">def</span> <span class="nf">protfunc_parser</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">available_functions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">testing</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">stacktrace</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="protfunc_parser"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.protfunc_parser">[docs]</a><span class="k">def</span> <span class="nf">protfunc_parser</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">available_functions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">testing</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">stacktrace</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Parse a prototype value string for a protfunc and process it.</span>
|
||||
|
||||
|
|
@ -774,45 +767,27 @@
|
|||
<span class="sd"> protfuncs, all other types are returned as-is.</span>
|
||||
<span class="sd"> available_functions (dict, optional): Mapping of name:protfunction to use for this parsing.</span>
|
||||
<span class="sd"> If not set, use default sources.</span>
|
||||
<span class="sd"> testing (bool, optional): Passed to protfunc. If in a testing mode, some protfuncs may</span>
|
||||
<span class="sd"> behave differently.</span>
|
||||
<span class="sd"> stacktrace (bool, optional): If set, print the stack parsing process of the protfunc-parser.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> session (Session): Passed to protfunc. Session of the entity spawning the prototype.</span>
|
||||
<span class="sd"> protototype (dict): Passed to protfunc. The dict this protfunc is a part of.</span>
|
||||
<span class="sd"> current_key(str): Passed to protfunc. The key in the prototype that will hold this value.</span>
|
||||
<span class="sd"> caller (Object or Account): This is necessary for certain protfuncs that perform object</span>
|
||||
<span class="sd"> searches and have to check permissions.</span>
|
||||
<span class="sd"> any (any): Passed on to the protfunc.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> testresult (tuple): If `testing` is set, returns a tuple (error, result) where error is</span>
|
||||
<span class="sd"> either None or a string detailing the error from protfunc_parser or seen when trying to</span>
|
||||
<span class="sd"> run `literal_eval` on the parsed string.</span>
|
||||
<span class="sd"> any (any): A structure to replace the string on the prototype level. If this is a</span>
|
||||
<span class="sd"> callable or a (callable, (args,)) structure, it will be executed as if one had supplied</span>
|
||||
<span class="sd"> it to the prototype directly. This structure is also passed through literal_eval so one</span>
|
||||
<span class="sd"> can get actual Python primitives out of it (not just strings). It will also identify</span>
|
||||
<span class="sd"> eventual object #dbrefs in the output from the protfunc.</span>
|
||||
<span class="sd"> any: A structure to replace the string on the prototype leve. Note</span>
|
||||
<span class="sd"> that FunctionParser functions $funcname(*args, **kwargs) can return any</span>
|
||||
<span class="sd"> data type to insert into the prototype.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">value</span>
|
||||
|
||||
<span class="n">available_functions</span> <span class="o">=</span> <span class="n">PROT_FUNCS</span> <span class="k">if</span> <span class="n">available_functions</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">available_functions</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">FUNC_PARSER</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">raise_errors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">return_str</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">inlinefuncs</span><span class="o">.</span><span class="n">parse_inlinefunc</span><span class="p">(</span>
|
||||
<span class="n">value</span><span class="p">,</span> <span class="n">available_funcs</span><span class="o">=</span><span class="n">available_functions</span><span class="p">,</span> <span class="n">stacktrace</span><span class="o">=</span><span class="n">stacktrace</span><span class="p">,</span> <span class="n">testing</span><span class="o">=</span><span class="n">testing</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">err</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
|
||||
<span class="n">err</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">exc</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">testing</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">err</span><span class="p">,</span> <span class="n">result</span>
|
||||
<span class="k">return</span> <span class="n">result</span></div>
|
||||
|
||||
|
||||
|
|
@ -827,7 +802,7 @@
|
|||
<span class="sd"> clr (str, optional): What coloration tag to use.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">out</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">protfunc_name</span><span class="p">,</span> <span class="n">protfunc</span> <span class="ow">in</span> <span class="n">PROT_FUNCS</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="k">for</span> <span class="n">protfunc_name</span><span class="p">,</span> <span class="n">protfunc</span> <span class="ow">in</span> <span class="n">FUNC_PARSER</span><span class="o">.</span><span class="n">callables</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||
<span class="s2">"- |c$</span><span class="si">{name}</span><span class="s2">|n - |W</span><span class="si">{docs}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">name</span><span class="o">=</span><span class="n">protfunc_name</span><span class="p">,</span> <span class="n">docs</span><span class="o">=</span><span class="n">protfunc</span><span class="o">.</span><span class="vm">__doc__</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
|
|
@ -952,7 +927,7 @@
|
|||
<span class="k">return</span> <span class="n">default</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="init_spawn_value"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.init_spawn_value">[docs]</a><span class="k">def</span> <span class="nf">init_spawn_value</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">validator</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="init_spawn_value"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.init_spawn_value">[docs]</a><span class="k">def</span> <span class="nf">init_spawn_value</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">validator</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Analyze the prototype value and produce a value useful at the point of spawning.</span>
|
||||
|
||||
|
|
@ -963,6 +938,8 @@
|
|||
<span class="sd"> other - will be assigned depending on the variable type</span>
|
||||
<span class="sd"> validator (callable, optional): If given, this will be called with the value to</span>
|
||||
<span class="sd"> check and guarantee the outcome is of a given type.</span>
|
||||
<span class="sd"> caller (Object or Account): This is necessary for certain protfuncs that perform object</span>
|
||||
<span class="sd"> searches and have to check permissions.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> any (any): The (potentially pre-processed value to use for this prototype key)</span>
|
||||
|
|
@ -977,7 +954,7 @@
|
|||
<span class="n">value</span> <span class="o">=</span> <span class="n">validator</span><span class="p">(</span><span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">](</span><span class="o">*</span><span class="n">make_iter</span><span class="p">(</span><span class="n">args</span><span class="p">)))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">validator</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">protfunc_parser</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">protfunc_parser</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">result</span> <span class="o">!=</span> <span class="n">value</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">validator</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">result</span></div>
|
||||
|
|
|
|||
|
|
@ -649,7 +649,8 @@
|
|||
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">line</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">texts</span> <span class="k">if</span> <span class="n">line</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="batch_update_objects_with_prototype"><a class="viewcode-back" href="../../../api/evennia.prototypes.spawner.html#evennia.prototypes.spawner.batch_update_objects_with_prototype">[docs]</a><span class="k">def</span> <span class="nf">batch_update_objects_with_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">diff</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="batch_update_objects_with_prototype"><a class="viewcode-back" href="../../../api/evennia.prototypes.spawner.html#evennia.prototypes.spawner.batch_update_objects_with_prototype">[docs]</a><span class="k">def</span> <span class="nf">batch_update_objects_with_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">diff</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="kc">None</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">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Update existing objects with the latest version of the prototype.</span>
|
||||
|
||||
|
|
@ -666,6 +667,7 @@
|
|||
<span class="sd"> if it's not set in the prototype. With `exact=True`, all un-specified properties of the</span>
|
||||
<span class="sd"> objects will be removed if they exist. This will lead to a more accurate 1:1 correlation</span>
|
||||
<span class="sd"> between the object and the prototype but is usually impractical.</span>
|
||||
<span class="sd"> caller (Object or Account, optional): This may be used by protfuncs to do permission checks.</span>
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> changed (int): The number of objects that had changes applied to them.</span>
|
||||
|
||||
|
|
@ -717,33 +719,33 @@
|
|||
<span class="n">do_save</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">"key"</span><span class="p">:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db_key</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db_key</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">"typeclass"</span><span class="p">:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db_typeclass_path</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db_typeclass_path</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">"location"</span><span class="p">:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db_location</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db_location</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">"home"</span><span class="p">:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db_home</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db_home</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">"destination"</span><span class="p">:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db_destination</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db_destination</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">"locks"</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">directive</span> <span class="o">==</span> <span class="s2">"REPLACE"</span><span class="p">:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">))</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">"permissions"</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">directive</span> <span class="o">==</span> <span class="s2">"REPLACE"</span><span class="p">:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">perm</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">for</span> <span class="n">perm</span> <span class="ow">in</span> <span class="n">val</span><span class="p">))</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">perm</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span> <span class="k">for</span> <span class="n">perm</span> <span class="ow">in</span> <span class="n">val</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">"aliases"</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">directive</span> <span class="o">==</span> <span class="s2">"REPLACE"</span><span class="p">:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">val</span><span class="p">))</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span> <span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">val</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">"tags"</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">directive</span> <span class="o">==</span> <span class="s2">"REPLACE"</span><span class="p">:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span>
|
||||
<span class="o">*</span><span class="p">(</span>
|
||||
<span class="p">(</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">ttag</span><span class="p">,</span> <span class="nb">str</span><span class="p">),</span> <span class="n">tcategory</span><span class="p">,</span> <span class="n">tdata</span><span class="p">)</span>
|
||||
<span class="p">(</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">ttag</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">),</span> <span class="n">tcategory</span><span class="p">,</span> <span class="n">tdata</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">ttag</span><span class="p">,</span> <span class="n">tcategory</span><span class="p">,</span> <span class="n">tdata</span> <span class="ow">in</span> <span class="n">val</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
|
|
@ -753,8 +755,8 @@
|
|||
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span>
|
||||
<span class="o">*</span><span class="p">(</span>
|
||||
<span class="p">(</span>
|
||||
<span class="n">init_spawn_value</span><span class="p">(</span><span class="n">akey</span><span class="p">,</span> <span class="nb">str</span><span class="p">),</span>
|
||||
<span class="n">init_spawn_value</span><span class="p">(</span><span class="n">aval</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">),</span>
|
||||
<span class="n">init_spawn_value</span><span class="p">(</span><span class="n">akey</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">),</span>
|
||||
<span class="n">init_spawn_value</span><span class="p">(</span><span class="n">aval</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">),</span>
|
||||
<span class="n">acategory</span><span class="p">,</span>
|
||||
<span class="n">alocks</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
|
@ -765,7 +767,7 @@
|
|||
<span class="c1"># we don't auto-rerun exec statements, it would be huge security risk!</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">))</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="n">directive</span> <span class="o">==</span> <span class="s2">"REMOVE"</span><span class="p">:</span>
|
||||
<span class="n">do_save</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">"key"</span><span class="p">:</span>
|
||||
|
|
@ -878,7 +880,7 @@
|
|||
<span class="c1"># Spawner mechanism</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="spawn"><a class="viewcode-back" href="../../../api/evennia.prototypes.spawner.html#evennia.prototypes.spawner.spawn">[docs]</a><span class="k">def</span> <span class="nf">spawn</span><span class="p">(</span><span class="o">*</span><span class="n">prototypes</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="spawn"><a class="viewcode-back" href="../../../api/evennia.prototypes.spawner.html#evennia.prototypes.spawner.spawn">[docs]</a><span class="k">def</span> <span class="nf">spawn</span><span class="p">(</span><span class="o">*</span><span class="n">prototypes</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Spawn a number of prototyped objects.</span>
|
||||
|
||||
|
|
@ -887,6 +889,7 @@
|
|||
<span class="sd"> prototype_key (will be used to find the prototype) or a full prototype</span>
|
||||
<span class="sd"> dictionary. These will be batched-spawned as one object each.</span>
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> caller (Object or Account, optional): This may be used by protfuncs to do access checks.</span>
|
||||
<span class="sd"> prototype_modules (str or list): A python-path to a prototype</span>
|
||||
<span class="sd"> module, or a list of such paths. These will be used to build</span>
|
||||
<span class="sd"> the global protparents dictionary accessible by the input</span>
|
||||
|
|
@ -952,39 +955,39 @@
|
|||
<span class="s2">"key"</span><span class="p">,</span>
|
||||
<span class="s2">"Spawned-</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">hashlib</span><span class="o">.</span><span class="n">md5</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()),</span> <span class="s2">"utf-8"</span><span class="p">))</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()[:</span><span class="mi">6</span><span class="p">]),</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_key"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_key"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"location"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_location"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">)</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_location"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"home"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">val</span><span class="p">:</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_home"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">)</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_home"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_home"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">)</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_home"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
|
||||
<span class="c1"># settings.DEFAULT_HOME not existing is common for unittests</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"destination"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_destination"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">)</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_destination"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"typeclass"</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span><span class="p">)</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_typeclass_path"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>
|
||||
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">"db_typeclass_path"</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># extract calls to handlers</span>
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"permissions"</span><span class="p">,</span> <span class="p">[])</span>
|
||||
<span class="n">permission_string</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">)</span>
|
||||
<span class="n">permission_string</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"locks"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">lock_string</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>
|
||||
<span class="n">lock_string</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"aliases"</span><span class="p">,</span> <span class="p">[])</span>
|
||||
<span class="n">alias_string</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">)</span>
|
||||
<span class="n">alias_string</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"tags"</span><span class="p">,</span> <span class="p">[])</span>
|
||||
<span class="n">tags</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="n">category</span><span class="p">,</span> <span class="o">*</span><span class="n">data</span><span class="p">)</span> <span class="ow">in</span> <span class="n">val</span><span class="p">:</span>
|
||||
<span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="nb">str</span><span class="p">),</span> <span class="n">category</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">data</span> <span class="k">else</span> <span class="kc">None</span><span class="p">))</span>
|
||||
<span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">),</span> <span class="n">category</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">data</span> <span class="k">else</span> <span class="kc">None</span><span class="p">))</span>
|
||||
|
||||
<span class="n">prototype_key</span> <span class="o">=</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prototype_key"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">prototype_key</span><span class="p">:</span>
|
||||
|
|
@ -992,11 +995,11 @@
|
|||
<span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">PROTOTYPE_TAG_CATEGORY</span><span class="p">))</span>
|
||||
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"exec"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="n">execs</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">)</span>
|
||||
<span class="n">execs</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># extract ndb assignments</span>
|
||||
<span class="n">nattributes</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"_"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">))</span>
|
||||
<span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"_"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">))</span>
|
||||
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">prot</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"ndb_"</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
|
|
@ -1005,7 +1008,7 @@
|
|||
<span class="n">val</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"attrs"</span><span class="p">,</span> <span class="p">[]))</span>
|
||||
<span class="n">attributes</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="p">(</span><span class="n">attrname</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span><span class="p">)</span> <span class="ow">in</span> <span class="n">val</span><span class="p">:</span>
|
||||
<span class="n">attributes</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attrname</span><span class="p">,</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">value</span><span class="p">),</span>
|
||||
<span class="n">attributes</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attrname</span><span class="p">,</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">),</span>
|
||||
<span class="n">rest</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">rest</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span> <span class="n">rest</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">rest</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">))</span>
|
||||
|
||||
<span class="n">simple_attributes</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
|
@ -1017,7 +1020,7 @@
|
|||
<span class="k">continue</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">simple_attributes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
||||
<span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">value_to_obj_or_any</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">value_to_obj_or_any</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">),</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">attributes</span> <span class="o">=</span> <span class="n">attributes</span> <span class="o">+</span> <span class="n">simple_attributes</span>
|
||||
|
|
|
|||
|
|
@ -101,6 +101,21 @@
|
|||
<span class="s2">"Update your settings file (see evennia/settings_default.py "</span>
|
||||
<span class="s2">"for more info)."</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">depstring</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s2">"settings.</span><span class="si">{}</span><span class="s2"> was renamed to </span><span class="si">{}</span><span class="s2">. Update your settings file (the FuncParser "</span>
|
||||
<span class="s2">"replaces and generalizes that which inlinefuncs used to do)."</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">"INLINEFUNC_ENABLED"</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span><span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="s2">"settings.INLINEFUNC_ENABLED"</span><span class="p">,</span> <span class="s2">"FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLE"</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">"INLINEFUNC_STACK_MAXSIZE"</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span><span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="s2">"settings.INLINEFUNC_STACK_MAXSIZE"</span><span class="p">,</span> <span class="s2">"FUNCPARSER_MAX_NESTING"</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">"INLINEFUNC_MODULES"</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span><span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="s2">"settings.INLINEFUNC_MODULES"</span><span class="p">,</span> <span class="s2">"FUNCPARSER_OUTGOING_MESSAGES_MODULES"</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">"PROTFUNC_MODULES"</span><span class="p">):</span>
|
||||
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span><span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="s2">"settings.PROTFUNC_MODULES"</span><span class="p">,</span> <span class="s2">"FUNCPARSER_PROTOTYPE_VALUE_MODULES"</span><span class="p">))</span>
|
||||
|
||||
<span class="n">gametime_deprecation</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="s2">"The settings TIME_SEC_PER_MIN, TIME_MIN_PER_HOUR,"</span>
|
||||
|
|
|
|||
|
|
@ -70,10 +70,9 @@
|
|||
<span class="kn">from</span> <span class="nn">evennia.server.portal</span> <span class="kn">import</span> <span class="n">amp</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.server.signals</span> <span class="kn">import</span> <span class="n">SIGNAL_ACCOUNT_POST_LOGIN</span><span class="p">,</span> <span class="n">SIGNAL_ACCOUNT_POST_LOGOUT</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.server.signals</span> <span class="kn">import</span> <span class="n">SIGNAL_ACCOUNT_POST_FIRST_LOGIN</span><span class="p">,</span> <span class="n">SIGNAL_ACCOUNT_POST_LAST_LOGOUT</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.inlinefuncs</span> <span class="kn">import</span> <span class="n">parse_inlinefunc</span>
|
||||
<span class="kn">from</span> <span class="nn">codecs</span> <span class="kn">import</span> <span class="n">decode</span> <span class="k">as</span> <span class="n">codecs_decode</span>
|
||||
|
||||
<span class="n">_INLINEFUNC_ENABLED</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">INLINEFUNC_ENABLED</span>
|
||||
<span class="n">_FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED</span>
|
||||
|
||||
<span class="c1"># delayed imports</span>
|
||||
<span class="n">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
|
@ -101,6 +100,9 @@
|
|||
<span class="n">_MAX_SERVER_COMMANDS_PER_SECOND</span> <span class="o">=</span> <span class="mf">100.0</span>
|
||||
<span class="n">_MAX_SESSION_COMMANDS_PER_SECOND</span> <span class="o">=</span> <span class="mf">5.0</span>
|
||||
<span class="n">_MODEL_MAP</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
|
||||
|
||||
<span class="c1"># input handlers</span>
|
||||
|
||||
|
|
@ -193,7 +195,8 @@
|
|||
|
||||
<div class="viewcode-block" id="SessionHandler.clean_senddata"><a class="viewcode-back" href="../../../api/evennia.server.sessionhandler.html#evennia.server.sessionhandler.SessionHandler.clean_senddata">[docs]</a> <span class="k">def</span> <span class="nf">clean_senddata</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Clean up data for sending across the AMP wire. Also apply INLINEFUNCS.</span>
|
||||
<span class="sd"> Clean up data for sending across the AMP wire. Also apply the</span>
|
||||
<span class="sd"> FuncParser using callables from `settings.FUNCPARSER_OUTGOING_MESSAGES_MODULES`.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> session (Session): The relevant session instance.</span>
|
||||
|
|
@ -209,10 +212,15 @@
|
|||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> kwargs (dict): A cleaned dictionary of cmdname:[[args],{kwargs}] pairs,</span>
|
||||
<span class="sd"> where the keys, args and kwargs have all been converted to</span>
|
||||
<span class="sd"> send-safe entities (strings or numbers), and inlinefuncs have been</span>
|
||||
<span class="sd"> send-safe entities (strings or numbers), and funcparser parsing has been</span>
|
||||
<span class="sd"> applied.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">global</span> <span class="n">_FUNCPARSER</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_FUNCPARSER</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.funcparser</span> <span class="kn">import</span> <span class="n">FuncParser</span>
|
||||
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="n">FuncParser</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">FUNCPARSER_OUTGOING_MESSAGES_MODULE</span><span class="p">,</span> <span class="n">raise_errors</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">options</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"options"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">or</span> <span class="p">{}</span>
|
||||
<span class="n">raw</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"raw"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">strip_inlinefunc</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"strip_inlinefunc"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
|
|
@ -244,9 +252,10 @@
|
|||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">)):</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">_utf8</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">_INLINEFUNC_ENABLED</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">raw</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ServerSessionHandler</span><span class="p">):</span>
|
||||
<span class="c1"># only parse inlinefuncs on the outgoing path (sessionhandler->)</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">parse_inlinefunc</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">strip</span><span class="o">=</span><span class="n">strip_inlinefunc</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">_FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">raw</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ServerSessionHandler</span><span class="p">):</span>
|
||||
<span class="c1"># only apply funcparser on the outgoing path (sessionhandler->)</span>
|
||||
<span class="c1"># data = parse_inlinefunc(data, strip=strip_inlinefunc, session=session)</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">_FUNCPARSER</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">strip</span><span class="o">=</span><span class="n">strip_inlinefunc</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="p">(</span>
|
||||
|
|
|
|||
1287
docs/1.0-dev/_modules/evennia/utils/funcparser.html
Normal file
1287
docs/1.0-dev/_modules/evennia/utils/funcparser.html
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,730 +0,0 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>evennia.utils.inlinefuncs — Evennia 1.0-dev documentation</title>
|
||||
<link rel="stylesheet" href="../../../_static/nature.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
||||
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
||||
<script src="../../../_static/jquery.js"></script>
|
||||
<script src="../../../_static/underscore.js"></script>
|
||||
<script src="../../../_static/doctools.js"></script>
|
||||
<script src="../../../_static/language_data.js"></script>
|
||||
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
|
||||
<link rel="index" title="Index" href="../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../search.html" />
|
||||
</head><body>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="../../../genindex.html" title="General Index"
|
||||
accesskey="I">index</a></li>
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.utils.inlinefuncs</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for evennia.utils.inlinefuncs</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">Inline functions (nested form).</span>
|
||||
|
||||
<span class="sd">This parser accepts nested inlinefunctions on the form</span>
|
||||
|
||||
<span class="sd">```python</span>
|
||||
<span class="sd">$funcname(arg, arg, ...)</span>
|
||||
<span class="sd">```</span>
|
||||
|
||||
<span class="sd">embedded in any text where any arg can be another ``$funcname()`` call.</span>
|
||||
<span class="sd">This functionality is turned off by default - to activate,</span>
|
||||
<span class="sd">`settings.INLINEFUNC_ENABLED` must be set to `True`.</span>
|
||||
|
||||
<span class="sd">Each token starts with `$funcname(` where there must be no space</span>
|
||||
<span class="sd">between the `$funcname` and `"("`. The inlinefunc ends with a matched ending parentesis.</span>
|
||||
<span class="sd">`")"`.</span>
|
||||
|
||||
<span class="sd">Inside the inlinefunc definition, one can use `\` to escape. This is</span>
|
||||
<span class="sd">mainly needed for escaping commas in flowing text (which would</span>
|
||||
<span class="sd">otherwise be interpreted as an argument separator), or to escape `)`</span>
|
||||
<span class="sd">when not intended to close the function block. Enclosing text in</span>
|
||||
<span class="sd">matched `\"\"\"` (triple quotes) or `'''` (triple single-quotes) will</span>
|
||||
<span class="sd">also escape *everything* within without needing to escape individual</span>
|
||||
<span class="sd">characters.</span>
|
||||
|
||||
<span class="sd">The available inlinefuncs are defined as global-level functions in</span>
|
||||
<span class="sd">modules defined by `settings.INLINEFUNC_MODULES`. They are identified</span>
|
||||
<span class="sd">by their function name (and ignored if this name starts with `_`). They</span>
|
||||
<span class="sd">should be on the following form:</span>
|
||||
|
||||
<span class="sd">```python</span>
|
||||
<span class="sd">def funcname (*args, **kwargs):</span>
|
||||
<span class="sd"> # ...</span>
|
||||
<span class="sd">```</span>
|
||||
|
||||
<span class="sd">Here, the arguments given to `$funcname(arg1,arg2)` will appear as the</span>
|
||||
<span class="sd">`*args` tuple. This will be populated by the arguments given to the</span>
|
||||
<span class="sd">inlinefunc in-game - the only part that will be available from</span>
|
||||
<span class="sd">in-game. `**kwargs` are not supported from in-game but are only used</span>
|
||||
<span class="sd">internally by Evennia to make details about the caller available to</span>
|
||||
<span class="sd">the function. The kwarg passed to all functions is `session`, the</span>
|
||||
<span class="sd">Sessionobject for the object seeing the string. This may be `None` if</span>
|
||||
<span class="sd">the string is sent to a non-puppetable object. The inlinefunc should</span>
|
||||
<span class="sd">never raise an exception.</span>
|
||||
|
||||
<span class="sd">There are two reserved function names:</span>
|
||||
|
||||
<span class="sd">- "nomatch": This is called if the user uses a functionname that is</span>
|
||||
<span class="sd"> not registered. The nomatch function will get the name of the</span>
|
||||
<span class="sd"> not-found function as its first argument followed by the normal</span>
|
||||
<span class="sd"> arguments to the given function. If not defined the default effect is</span>
|
||||
<span class="sd"> to print `<UNKNOWN>` to replace the unknown function.</span>
|
||||
<span class="sd">- "stackfull": This is called when the maximum nested function stack is reached.</span>
|
||||
<span class="sd"> When this happens, the original parsed string is returned and the result of</span>
|
||||
<span class="sd"> the `stackfull` inlinefunc is appended to the end. By default this is an</span>
|
||||
<span class="sd"> error message.</span>
|
||||
|
||||
<span class="sd">Syntax errors, notably failing to completely closing all inlinefunc</span>
|
||||
<span class="sd">blocks, will lead to the entire string remaining unparsed. Inlineparsing should</span>
|
||||
<span class="sd">never traceback.</span>
|
||||
|
||||
<span class="sd">----</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">re</span>
|
||||
<span class="kn">import</span> <span class="nn">fnmatch</span>
|
||||
<span class="kn">import</span> <span class="nn">random</span> <span class="k">as</span> <span class="nn">base_random</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="p">,</span> <span class="n">logger</span>
|
||||
|
||||
<span class="c1"># The stack size is a security measure. Set to <=0 to disable.</span>
|
||||
<span class="n">_STACK_MAXSIZE</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">INLINEFUNC_STACK_MAXSIZE</span>
|
||||
|
||||
|
||||
<span class="c1"># example/testing inline functions</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="random"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.random">[docs]</a><span class="k">def</span> <span class="nf">random</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Inlinefunc. Returns a random number between</span>
|
||||
<span class="sd"> 0 and 1, from 0 to a maximum value, or within a given range (inclusive).</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> minval (str, optional): Minimum value. If not given, assumed 0.</span>
|
||||
<span class="sd"> maxval (str, optional): Maximum value.</span>
|
||||
|
||||
<span class="sd"> Keyword argumuents:</span>
|
||||
<span class="sd"> session (Session): Session getting the string.</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> If either of the min/maxvalue has a '.' in it, a floating-point random</span>
|
||||
<span class="sd"> value will be returned. Otherwise it will be an integer value in the</span>
|
||||
<span class="sd"> given range.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> `$random()`</span>
|
||||
<span class="sd"> `$random(5)`</span>
|
||||
<span class="sd"> `$random(5, 10)`</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">nargs</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="c1"># only maxval given</span>
|
||||
<span class="n">minval</span><span class="p">,</span> <span class="n">maxval</span> <span class="o">=</span> <span class="s2">"0"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">minval</span><span class="p">,</span> <span class="n">maxval</span> <span class="o">=</span> <span class="n">args</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">minval</span><span class="p">,</span> <span class="n">maxval</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"0"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="s2">"."</span> <span class="ow">in</span> <span class="n">minval</span> <span class="ow">or</span> <span class="s2">"."</span> <span class="ow">in</span> <span class="n">maxval</span><span class="p">:</span>
|
||||
<span class="c1"># float mode</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">minval</span><span class="p">,</span> <span class="n">maxval</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">minval</span><span class="p">),</span> <span class="nb">float</span><span class="p">(</span><span class="n">maxval</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="n">minval</span><span class="p">,</span> <span class="n">maxval</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">{:.2f}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">minval</span> <span class="o">+</span> <span class="n">maxval</span> <span class="o">*</span> <span class="n">base_random</span><span class="o">.</span><span class="n">random</span><span class="p">())</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># int mode</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">minval</span><span class="p">,</span> <span class="n">maxval</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">minval</span><span class="p">),</span> <span class="nb">int</span><span class="p">(</span><span class="n">maxval</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="n">minval</span><span class="p">,</span> <span class="n">maxval</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">base_random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="n">minval</span><span class="p">,</span> <span class="n">maxval</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="pad"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.pad">[docs]</a><span class="k">def</span> <span class="nf">pad</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Inlinefunc. Pads text to given width.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> text (str, optional): Text to pad.</span>
|
||||
<span class="sd"> width (str, optional): Will be converted to integer. Width</span>
|
||||
<span class="sd"> of padding.</span>
|
||||
<span class="sd"> align (str, optional): Alignment of padding; one of 'c', 'l' or 'r'.</span>
|
||||
<span class="sd"> fillchar (str, optional): Character used for padding. Defaults to a</span>
|
||||
<span class="sd"> space.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> session (Session): Session performing the pad.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> `$pad(text, width, align, fillchar)`</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">text</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">align</span><span class="p">,</span> <span class="n">fillchar</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="mi">78</span><span class="p">,</span> <span class="s2">"c"</span><span class="p">,</span> <span class="s2">" "</span>
|
||||
<span class="n">nargs</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">width</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="k">else</span> <span class="mi">78</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="n">align</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"c"</span><span class="p">,</span> <span class="s2">"l"</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"c"</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">3</span><span class="p">:</span>
|
||||
<span class="n">fillchar</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">utils</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">align</span><span class="o">=</span><span class="n">align</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="n">fillchar</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="crop"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.crop">[docs]</a><span class="k">def</span> <span class="nf">crop</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Inlinefunc. Crops ingoing text to given widths.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> text (str, optional): Text to crop.</span>
|
||||
<span class="sd"> width (str, optional): Will be converted to an integer. Width of</span>
|
||||
<span class="sd"> crop in characters.</span>
|
||||
<span class="sd"> suffix (str, optional): End string to mark the fact that a part</span>
|
||||
<span class="sd"> of the string was cropped. Defaults to `[...]`.</span>
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> session (Session): Session performing the crop.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> `$crop(text, width=78, suffix='[...]')`</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">text</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">suffix</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="mi">78</span><span class="p">,</span> <span class="s2">"[...]"</span>
|
||||
<span class="n">nargs</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">width</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="k">else</span> <span class="mi">78</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="n">suffix</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="n">suffix</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="space"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.space">[docs]</a><span class="k">def</span> <span class="nf">space</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Inlinefunc. Inserts an arbitrary number of spaces. Defaults to 4 spaces.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> spaces (int, optional): The number of spaces to insert.</span>
|
||||
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> session (Session): Session performing the crop.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> `$space(20)`</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">width</span> <span class="o">=</span> <span class="mi">4</span>
|
||||
<span class="k">if</span> <span class="n">args</span><span class="p">:</span>
|
||||
<span class="n">width</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="k">else</span> <span class="mi">4</span>
|
||||
<span class="k">return</span> <span class="s2">" "</span> <span class="o">*</span> <span class="n">width</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="clr"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.clr">[docs]</a><span class="k">def</span> <span class="nf">clr</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Inlinefunc. Colorizes nested text.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> startclr (str, optional): An ANSI color abbreviation without the</span>
|
||||
<span class="sd"> prefix `|`, such as `r` (red foreground) or `[r` (red background).</span>
|
||||
<span class="sd"> text (str, optional): Text</span>
|
||||
<span class="sd"> endclr (str, optional): The color to use at the end of the string. Defaults</span>
|
||||
<span class="sd"> to `|n` (reset-color).</span>
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> session (Session): Session object triggering inlinefunc.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> `$clr(startclr, text, endclr)`</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">nargs</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">color</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="s2">"|"</span> <span class="o">+</span> <span class="n">color</span> <span class="o">+</span> <span class="n">text</span>
|
||||
<span class="k">if</span> <span class="n">nargs</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span>
|
||||
<span class="n">text</span> <span class="o">+=</span> <span class="s2">"|"</span> <span class="o">+</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">text</span> <span class="o">+=</span> <span class="s2">"|n"</span>
|
||||
<span class="k">return</span> <span class="n">text</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="null"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.null">[docs]</a><span class="k">def</span> <span class="nf">null</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">args</span> <span class="k">else</span> <span class="s2">""</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="nomatch"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.nomatch">[docs]</a><span class="k">def</span> <span class="nf">nomatch</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Default implementation of nomatch returns the function as-is as a string.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"inlinefunc_stack_depth"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"session"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="s2">"$</span><span class="si">{name}</span><span class="s2">(</span><span class="si">{args}{kwargs}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
|
||||
<span class="n">args</span><span class="o">=</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">),</span>
|
||||
<span class="n">kwargs</span><span class="o">=</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"</span><span class="si">{}</span><span class="s2">=</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()),</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">_INLINE_FUNCS</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
|
||||
<span class="c1"># we specify a default nomatch function to use if no matching func was</span>
|
||||
<span class="c1"># found. This will be overloaded by any nomatch function defined in</span>
|
||||
<span class="c1"># the imported modules.</span>
|
||||
<span class="n">_DEFAULT_FUNCS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"nomatch"</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="s2">"<UNKNOWN>"</span><span class="p">,</span>
|
||||
<span class="s2">"stackfull"</span><span class="p">:</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> (not parsed: "</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="n">_INLINE_FUNCS</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">_DEFAULT_FUNCS</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># load custom inline func modules.</span>
|
||||
<span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">utils</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">INLINEFUNC_MODULES</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">_INLINE_FUNCS</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">callables_from_module</span><span class="p">(</span><span class="n">module</span><span class="p">))</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">module</span> <span class="o">==</span> <span class="s2">"server.conf.inlinefuncs"</span><span class="p">:</span>
|
||||
<span class="c1"># a temporary warning since the default module changed name</span>
|
||||
<span class="k">raise</span> <span class="ne">ImportError</span><span class="p">(</span>
|
||||
<span class="s2">"Error: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">Possible reason: mygame/server/conf/inlinefunc.py should "</span>
|
||||
<span class="s2">"be renamed to mygame/server/conf/inlinefuncs.py (note "</span>
|
||||
<span class="s2">"the S at the end)."</span> <span class="o">%</span> <span class="n">err</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
|
||||
|
||||
<span class="c1"># regex definitions</span>
|
||||
|
||||
<span class="n">_RE_STARTTOKEN</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">"(?<!</span><span class="se">\\</span><span class="s2">)\$(\w+)\("</span><span class="p">)</span> <span class="c1"># unescaped $funcname( (start of function call)</span>
|
||||
|
||||
<span class="c1"># note: this regex can be experimented with at https://regex101.com/r/kGR3vE/2</span>
|
||||
<span class="n">_RE_TOKEN</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="sd">"""</span>
|
||||
<span class="sd"> (?<!\\)\'\'\'(?P<singlequote>.*?)(?<!\\)\'\'\'| # single-triplets escape all inside</span>
|
||||
<span class="sd"> (?<!\\)\"\"\"(?P<doublequote>.*?)(?<!\\)\"\"\"| # double-triplets escape all inside</span>
|
||||
<span class="sd"> (?P<comma>(?<!\\)\,)| # , (argument sep)</span>
|
||||
<span class="sd"> (?P<end>(?<!\\)\))| # ) (possible end of func call)</span>
|
||||
<span class="sd"> (?P<leftparens>(?<!\\)\()| # ( (lone left-parens)</span>
|
||||
<span class="sd"> (?P<start>(?<!\\)\$\w+\()| # $funcname (start of func call)</span>
|
||||
<span class="sd"> (?P<escaped> # escaped tokens to re-insert sans backslash</span>
|
||||
<span class="sd"> \\\'|\\\"|\\\)|\\\$\w+\(|\\\()|</span>
|
||||
<span class="sd"> (?P<rest> # everything else to re-insert verbatim</span>
|
||||
<span class="sd"> \$(?!\w+\()|\'|\"|\\|[^),$\'\"\\\(]+)"""</span><span class="p">,</span>
|
||||
<span class="n">re</span><span class="o">.</span><span class="n">UNICODE</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">VERBOSE</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># Cache for function lookups.</span>
|
||||
<span class="n">_PARSING_CACHE</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">LimitedSizeOrderedDict</span><span class="p">(</span><span class="n">size_limit</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ParseStack"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.ParseStack">[docs]</a><span class="k">class</span> <span class="nc">ParseStack</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Custom stack that always concatenates strings together when the</span>
|
||||
<span class="sd"> strings are added next to one another. Tuples are stored</span>
|
||||
<span class="sd"> separately and None is used to mark that a string should be broken</span>
|
||||
<span class="sd"> up into a new chunk. Below is the resulting stack after separately</span>
|
||||
<span class="sd"> appending 3 strings, None, 2 strings, a tuple and finally 2</span>
|
||||
<span class="sd"> strings:</span>
|
||||
|
||||
<span class="sd"> [string + string + string,</span>
|
||||
<span class="sd"> None</span>
|
||||
<span class="sd"> string + string,</span>
|
||||
<span class="sd"> tuple,</span>
|
||||
<span class="sd"> string + string]</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<div class="viewcode-block" id="ParseStack.__init__"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.ParseStack.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="c1"># always start stack with the empty string</span>
|
||||
<span class="nb">list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="c1"># indicates if the top of the stack is a string or not</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_string_last</span> <span class="o">=</span> <span class="kc">True</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">(</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__eq__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
|
||||
<span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="s2">"_string_last"</span><span class="p">)</span>
|
||||
<span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_string_last</span> <span class="o">==</span> <span class="n">other</span><span class="o">.</span><span class="n">_string_last</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="fm">__eq__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="ParseStack.append"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.ParseStack.append">[docs]</a> <span class="k">def</span> <span class="nf">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> The stack will merge strings, add other things as normal</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_string_last</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="n">item</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="nb">list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_string_last</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># everything else is added as normal</span>
|
||||
<span class="nb">list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_string_last</span> <span class="o">=</span> <span class="kc">False</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="InlinefuncError"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.InlinefuncError">[docs]</a><span class="k">class</span> <span class="nc">InlinefuncError</span><span class="p">(</span><span class="ne">RuntimeError</span><span class="p">):</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="parse_inlinefunc"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.parse_inlinefunc">[docs]</a><span class="k">def</span> <span class="nf">parse_inlinefunc</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">strip</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">available_funcs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">stacktrace</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Parse the incoming string.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> string (str): The incoming string to parse.</span>
|
||||
<span class="sd"> strip (bool, optional): Whether to strip function calls rather than</span>
|
||||
<span class="sd"> execute them.</span>
|
||||
<span class="sd"> available_funcs (dict, optional): Define an alternative source of functions to parse for.</span>
|
||||
<span class="sd"> If unset, use the functions found through `settings.INLINEFUNC_MODULES`.</span>
|
||||
<span class="sd"> stacktrace (bool, optional): If set, print the stacktrace to log.</span>
|
||||
<span class="sd"> Keyword Args:</span>
|
||||
<span class="sd"> session (Session): This is sent to this function by Evennia when triggering</span>
|
||||
<span class="sd"> it. It is passed to the inlinefunc.</span>
|
||||
<span class="sd"> kwargs (any): All other kwargs are also passed on to the inlinefunc.</span>
|
||||
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">global</span> <span class="n">_PARSING_CACHE</span>
|
||||
<span class="n">usecache</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">available_funcs</span><span class="p">:</span>
|
||||
<span class="n">available_funcs</span> <span class="o">=</span> <span class="n">_INLINE_FUNCS</span>
|
||||
<span class="n">usecache</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># make sure the default keys are available, but also allow overriding</span>
|
||||
<span class="n">tmp</span> <span class="o">=</span> <span class="n">_DEFAULT_FUNCS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
||||
<span class="n">tmp</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">available_funcs</span><span class="p">)</span>
|
||||
<span class="n">available_funcs</span> <span class="o">=</span> <span class="n">tmp</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">usecache</span> <span class="ow">and</span> <span class="n">string</span> <span class="ow">in</span> <span class="n">_PARSING_CACHE</span><span class="p">:</span>
|
||||
<span class="c1"># stack is already cached</span>
|
||||
<span class="n">stack</span> <span class="o">=</span> <span class="n">_PARSING_CACHE</span><span class="p">[</span><span class="n">string</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="ow">not</span> <span class="n">_RE_STARTTOKEN</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">string</span><span class="p">):</span>
|
||||
<span class="c1"># if there are no unescaped start tokens at all, return immediately.</span>
|
||||
<span class="k">return</span> <span class="n">string</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># no cached stack; build a new stack and continue</span>
|
||||
<span class="n">stack</span> <span class="o">=</span> <span class="n">ParseStack</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># process string on stack</span>
|
||||
<span class="n">ncallable</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">nlparens</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">nvalid</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">stacktrace</span><span class="p">:</span>
|
||||
<span class="n">out</span> <span class="o">=</span> <span class="s2">"STRING: </span><span class="si">{}</span><span class="s2"> =>"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">_RE_TOKEN</span><span class="o">.</span><span class="n">finditer</span><span class="p">(</span><span class="n">string</span><span class="p">):</span>
|
||||
<span class="n">gdict</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">stacktrace</span><span class="p">:</span>
|
||||
<span class="n">out</span> <span class="o">=</span> <span class="s2">" MATCH: </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">({</span><span class="n">key</span><span class="p">:</span> <span class="n">val</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">gdict</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">val</span><span class="p">})</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">gdict</span><span class="p">[</span><span class="s2">"singlequote"</span><span class="p">]:</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">gdict</span><span class="p">[</span><span class="s2">"singlequote"</span><span class="p">])</span>
|
||||
<span class="k">elif</span> <span class="n">gdict</span><span class="p">[</span><span class="s2">"doublequote"</span><span class="p">]:</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">gdict</span><span class="p">[</span><span class="s2">"doublequote"</span><span class="p">])</span>
|
||||
<span class="k">elif</span> <span class="n">gdict</span><span class="p">[</span><span class="s2">"leftparens"</span><span class="p">]:</span>
|
||||
<span class="c1"># we have a left-parens inside a callable</span>
|
||||
<span class="k">if</span> <span class="n">ncallable</span><span class="p">:</span>
|
||||
<span class="n">nlparens</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"("</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">gdict</span><span class="p">[</span><span class="s2">"end"</span><span class="p">]:</span>
|
||||
<span class="k">if</span> <span class="n">nlparens</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">nlparens</span> <span class="o">-=</span> <span class="mi">1</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">")"</span><span class="p">)</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="k">if</span> <span class="n">ncallable</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">")"</span><span class="p">)</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">while</span> <span class="n">stack</span><span class="p">:</span>
|
||||
<span class="n">operation</span> <span class="o">=</span> <span class="n">stack</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">operation</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">strip</span><span class="p">:</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">operation</span><span class="p">,</span> <span class="p">[</span><span class="n">arg</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">args</span><span class="p">)]))</span>
|
||||
<span class="n">ncallable</span> <span class="o">-=</span> <span class="mi">1</span>
|
||||
<span class="k">break</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">operation</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">gdict</span><span class="p">[</span><span class="s2">"start"</span><span class="p">]:</span>
|
||||
<span class="n">funcname</span> <span class="o">=</span> <span class="n">_RE_STARTTOKEN</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">gdict</span><span class="p">[</span><span class="s2">"start"</span><span class="p">])</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="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># try to fetch the matching inlinefunc from storage</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">available_funcs</span><span class="p">[</span><span class="n">funcname</span><span class="p">])</span>
|
||||
<span class="n">nvalid</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">available_funcs</span><span class="p">[</span><span class="s2">"nomatch"</span><span class="p">])</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">funcname</span><span class="p">)</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
||||
<span class="n">ncallable</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">elif</span> <span class="n">gdict</span><span class="p">[</span><span class="s2">"escaped"</span><span class="p">]:</span>
|
||||
<span class="c1"># escaped tokens</span>
|
||||
<span class="n">token</span> <span class="o">=</span> <span class="n">gdict</span><span class="p">[</span><span class="s2">"escaped"</span><span class="p">]</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"</span><span class="se">\\</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">gdict</span><span class="p">[</span><span class="s2">"comma"</span><span class="p">]:</span>
|
||||
<span class="k">if</span> <span class="n">ncallable</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="c1"># commas outside strings and inside a callable are</span>
|
||||
<span class="c1"># used to mark argument separation - we use None</span>
|
||||
<span class="c1"># in the stack to indicate such a separation.</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># no callable active - just a string</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">","</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># the rest</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">gdict</span><span class="p">[</span><span class="s2">"rest"</span><span class="p">])</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">ncallable</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="c1"># this means not all inlinefuncs were complete</span>
|
||||
<span class="k">return</span> <span class="n">string</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">_STACK_MAXSIZE</span> <span class="o">></span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">_STACK_MAXSIZE</span> <span class="o"><</span> <span class="n">nvalid</span><span class="p">:</span>
|
||||
<span class="c1"># if stack is larger than limit, throw away parsing</span>
|
||||
<span class="k">return</span> <span class="n">string</span> <span class="o">+</span> <span class="n">available_funcs</span><span class="p">[</span><span class="s2">"stackfull"</span><span class="p">](</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">usecache</span><span class="p">:</span>
|
||||
<span class="c1"># cache the stack - we do this also if we don't check the cache above</span>
|
||||
<span class="n">_PARSING_CACHE</span><span class="p">[</span><span class="n">string</span><span class="p">]</span> <span class="o">=</span> <span class="n">stack</span>
|
||||
|
||||
<span class="c1"># run the stack recursively</span>
|
||||
<span class="k">def</span> <span class="nf">_run_stack</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="n">retval</span> <span class="o">=</span> <span class="n">item</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">strip</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s2">""</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">func</span><span class="p">,</span> <span class="n">arglist</span> <span class="o">=</span> <span class="n">item</span>
|
||||
<span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">""</span><span class="p">]</span>
|
||||
<span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">arglist</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">arg</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># an argument-separating comma - start a new arg</span>
|
||||
<span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># all other args should merge into one string</span>
|
||||
<span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="n">_run_stack</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="n">depth</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
||||
<span class="c1"># execute the inlinefunc at this point or strip it.</span>
|
||||
<span class="n">kwargs</span><span class="p">[</span><span class="s2">"inlinefunc_stack_depth"</span><span class="p">]</span> <span class="o">=</span> <span class="n">depth</span>
|
||||
<span class="n">retval</span> <span class="o">=</span> <span class="s2">""</span> <span class="k">if</span> <span class="n">strip</span> <span class="k">else</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">utils</span><span class="o">.</span><span class="n">to_str</span><span class="p">(</span><span class="n">retval</span><span class="p">)</span>
|
||||
|
||||
<span class="n">retval</span> <span class="o">=</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_run_stack</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">stack</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">stacktrace</span><span class="p">:</span>
|
||||
<span class="n">out</span> <span class="o">=</span> <span class="s2">"STACK: </span><span class="se">\n</span><span class="si">{}</span><span class="s2"> => </span><span class="si">{}</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">stack</span><span class="p">,</span> <span class="n">retval</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># execute the stack</span>
|
||||
<span class="k">return</span> <span class="n">retval</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="raw"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.raw">[docs]</a><span class="k">def</span> <span class="nf">raw</span><span class="p">(</span><span class="n">string</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Escape all inlinefuncs in a string so they won't get parsed.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> string (str): String with inlinefuncs to escape.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_escape</span><span class="p">(</span><span class="n">match</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">"</span> <span class="o">+</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">_RE_STARTTOKEN</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">_escape</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Nick templating</span>
|
||||
<span class="c1">#</span>
|
||||
|
||||
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd">This supports the use of replacement templates in nicks:</span>
|
||||
|
||||
<span class="sd">This happens in two steps:</span>
|
||||
|
||||
<span class="sd">1) The user supplies a template that is converted to a regex according</span>
|
||||
<span class="sd"> to the unix-like templating language.</span>
|
||||
<span class="sd">2) This regex is tested against nicks depending on which nick replacement</span>
|
||||
<span class="sd"> strategy is considered (most commonly inputline).</span>
|
||||
<span class="sd">3) If there is a template match and there are templating markers,</span>
|
||||
<span class="sd"> these are replaced with the arguments actually given.</span>
|
||||
|
||||
<span class="sd">@desc $1 $2 $3</span>
|
||||
|
||||
<span class="sd">This will be converted to the following regex:</span>
|
||||
|
||||
<span class="sd">\@desc (?P<1>\w+) (?P<2>\w+) $(?P<3>\w+)</span>
|
||||
|
||||
<span class="sd">Supported template markers (through fnmatch)</span>
|
||||
<span class="sd"> * matches anything (non-greedy) -> .*?</span>
|
||||
<span class="sd"> ? matches any single character -></span>
|
||||
<span class="sd"> [seq] matches any entry in sequence</span>
|
||||
<span class="sd"> [!seq] matches entries not in sequence</span>
|
||||
<span class="sd">Custom arg markers</span>
|
||||
<span class="sd"> $N argument position (1-99)</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
<span class="n">_RE_NICK_ARG</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">"</span><span class="se">\\</span><span class="s2">(\$)([1-9][0-9]?)"</span><span class="p">)</span>
|
||||
<span class="n">_RE_NICK_TEMPLATE_ARG</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">"(\$)([1-9][0-9]?)"</span><span class="p">)</span>
|
||||
<span class="n">_RE_NICK_SPACE</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">"</span><span class="se">\\</span><span class="s2"> "</span><span class="p">)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NickTemplateInvalid"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.NickTemplateInvalid">[docs]</a><span class="k">class</span> <span class="nc">NickTemplateInvalid</span><span class="p">(</span><span class="ne">ValueError</span><span class="p">):</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="initialize_nick_templates"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.initialize_nick_templates">[docs]</a><span class="k">def</span> <span class="nf">initialize_nick_templates</span><span class="p">(</span><span class="n">in_template</span><span class="p">,</span> <span class="n">out_template</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Initialize the nick templates for matching and remapping a string.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> in_template (str): The template to be used for nick recognition.</span>
|
||||
<span class="sd"> out_template (str): The template to be used to replace the string</span>
|
||||
<span class="sd"> matched by the in_template.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> regex (regex): Regex to match against strings</span>
|
||||
<span class="sd"> template (str): Template with markers {arg1}, {arg2}, etc for</span>
|
||||
<span class="sd"> replacement using the standard .format method.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> evennia.utils.inlinefuncs.NickTemplateInvalid: If the in/out template</span>
|
||||
<span class="sd"> does not have a matching number of $args.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># create the regex for in_template</span>
|
||||
<span class="n">regex_string</span> <span class="o">=</span> <span class="n">fnmatch</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="n">in_template</span><span class="p">)</span>
|
||||
<span class="n">n_inargs</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">_RE_NICK_ARG</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">regex_string</span><span class="p">))</span>
|
||||
<span class="n">regex_string</span> <span class="o">=</span> <span class="n">_RE_NICK_SPACE</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">"\s+"</span><span class="p">,</span> <span class="n">regex_string</span><span class="p">)</span>
|
||||
<span class="n">regex_string</span> <span class="o">=</span> <span class="n">_RE_NICK_ARG</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="s2">"(?P<arg</span><span class="si">%s</span><span class="s2">>.+?)"</span> <span class="o">%</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="n">regex_string</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># create the out_template</span>
|
||||
<span class="n">template_string</span> <span class="o">=</span> <span class="n">_RE_NICK_TEMPLATE_ARG</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="s2">"{arg</span><span class="si">%s</span><span class="s2">}"</span> <span class="o">%</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="n">out_template</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># validate the tempaltes - they should at least have the same number of args</span>
|
||||
<span class="n">n_outargs</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">_RE_NICK_TEMPLATE_ARG</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">out_template</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">n_inargs</span> <span class="o">!=</span> <span class="n">n_outargs</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="n">NickTemplateInvalid</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">regex_string</span><span class="p">),</span> <span class="n">template_string</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="parse_nick_template"><a class="viewcode-back" href="../../../api/evennia.utils.inlinefuncs.html#evennia.utils.inlinefuncs.parse_nick_template">[docs]</a><span class="k">def</span> <span class="nf">parse_nick_template</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">template_regex</span><span class="p">,</span> <span class="n">outtemplate</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Parse a text using a template and map it to another template</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> string (str): The input string to processj</span>
|
||||
<span class="sd"> template_regex (regex): A template regex created with</span>
|
||||
<span class="sd"> initialize_nick_template.</span>
|
||||
<span class="sd"> outtemplate (str): The template to which to map the matches</span>
|
||||
<span class="sd"> produced by the template_regex. This should have $1, $2,</span>
|
||||
<span class="sd"> etc to match the regex.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">match</span> <span class="o">=</span> <span class="n">template_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">match</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">outtemplate</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">match</span><span class="o">.</span><span class="n">groupdict</span><span class="p">())</span>
|
||||
<span class="k">return</span> <span class="n">string</span></div>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<p class="logo"><a href="../../../index.html">
|
||||
<img class="logo" src="../../../_static/evennia_logo.png" alt="Logo"/>
|
||||
</a></p>
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../search.html" method="get">
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" />
|
||||
<input type="submit" value="Go" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>$('#searchbox').show(0);</script><h3>Links</h3>
|
||||
<ul>
|
||||
<li><a href="https://www.evennia.com">Home page</a> </li>
|
||||
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
|
||||
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
||||
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
|
||||
<a href="https://discord.gg/NecFePw">Discord</a> -
|
||||
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
|
||||
</li>
|
||||
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
|
||||
</ul>
|
||||
<h3>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="inlinefuncs.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="../../../genindex.html" title="General Index"
|
||||
>index</a></li>
|
||||
<li class="right" >
|
||||
<a href="../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.utils.inlinefuncs</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -62,6 +62,8 @@
|
|||
<span class="kn">import</span> <span class="nn">importlib</span>
|
||||
<span class="kn">import</span> <span class="nn">importlib.util</span>
|
||||
<span class="kn">import</span> <span class="nn">importlib.machinery</span>
|
||||
<span class="kn">from</span> <span class="nn">ast</span> <span class="kn">import</span> <span class="n">literal_eval</span>
|
||||
<span class="kn">from</span> <span class="nn">simpleeval</span> <span class="kn">import</span> <span class="n">simple_eval</span>
|
||||
<span class="kn">from</span> <span class="nn">unicodedata</span> <span class="kn">import</span> <span class="n">east_asian_width</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.internet.task</span> <span class="kn">import</span> <span class="n">deferLater</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.internet.defer</span> <span class="kn">import</span> <span class="n">returnValue</span> <span class="c1"># noqa - used as import target</span>
|
||||
|
|
@ -1120,7 +1122,8 @@
|
|||
<span class="sd"> store_key (tuple, optional): This is only used in combination with `stop` and</span>
|
||||
<span class="sd"> should be the return given from the original `repeat` call. If this</span>
|
||||
<span class="sd"> is given, all other args except `stop` are ignored.</span>
|
||||
<span class="sd"> *args, **kwargs: Used as arguments to `callback`.</span>
|
||||
<span class="sd"> *args: Used as arguments to `callback`.</span>
|
||||
<span class="sd"> **kwargs: Keyword-arguments to pass to `callback`.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> tuple or None: The tuple is the `store_key` - the identifier for the</span>
|
||||
|
|
@ -1154,8 +1157,8 @@
|
|||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> store_key (tuple): This is the return from `repeat`, used to uniquely</span>
|
||||
<span class="sd"> identify the ticker to stop. Without the store_key, the ticker </span>
|
||||
<span class="sd"> must be stopped by passing its parameters to `TICKER_HANDLER.remove` </span>
|
||||
<span class="sd"> identify the ticker to stop. Without the store_key, the ticker</span>
|
||||
<span class="sd"> must be stopped by passing its parameters to `TICKER_HANDLER.remove`</span>
|
||||
<span class="sd"> directly.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
|
|
@ -2432,6 +2435,107 @@
|
|||
<span class="k">return</span> <span class="n">ret</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">decorator</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="safe_convert_to_types"><a class="viewcode-back" href="../../../api/evennia.utils.utils.html#evennia.contrib.tutorial_examples.red_button.safe_convert_to_types">[docs]</a><span class="k">def</span> <span class="nf">safe_convert_to_types</span><span class="p">(</span><span class="n">converters</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">raise_errors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Helper function to safely convert inputs to expected data types.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> converters (tuple): A tuple `((converter, converter,...), {kwarg: converter, ...})` to</span>
|
||||
<span class="sd"> match a converter to each element in `*args` and `**kwargs`.</span>
|
||||
<span class="sd"> Each converter will will be called with the arg/kwarg-value as the only argument.</span>
|
||||
<span class="sd"> If there are too few converters given, the others will simply not be converter. If the</span>
|
||||
<span class="sd"> converter is given as the string 'py', it attempts to run</span>
|
||||
<span class="sd"> `safe_eval`/`literal_eval` on the input arg or kwarg value. It's possible to</span>
|
||||
<span class="sd"> skip the arg/kwarg part of the tuple, an empty tuple/dict will then be assumed.</span>
|
||||
<span class="sd"> *args: The arguments to convert with `argtypes`.</span>
|
||||
<span class="sd"> raise_errors (bool, optional): If set, raise any errors. This will</span>
|
||||
<span class="sd"> abort the conversion at that arg/kwarg. Otherwise, just skip the</span>
|
||||
<span class="sd"> conversion of the failing arg/kwarg. This will be set by the FuncParser if</span>
|
||||
<span class="sd"> this is used as a part of a FuncParser callable.</span>
|
||||
<span class="sd"> **kwargs: The kwargs to convert with `kwargtypes`</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> tuple: `(args, kwargs)` in converted form.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> utils.funcparser.ParsingError: If parsing failed in the `'py'`</span>
|
||||
<span class="sd"> converter. This also makes this compatible with the FuncParser</span>
|
||||
<span class="sd"> interface.</span>
|
||||
<span class="sd"> any: Any other exception raised from other converters, if raise_errors is True.</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
<span class="sd"> This function is often used to validate/convert input from untrusted sources. For</span>
|
||||
<span class="sd"> security, the "py"-converter is deliberately limited and uses `safe_eval`/`literal_eval`</span>
|
||||
<span class="sd"> which only supports simple expressions or simple containers with literals. NEVER</span>
|
||||
<span class="sd"> use the python `eval` or `exec` methods as a converter for any untrusted input! Allowing</span>
|
||||
<span class="sd"> untrusted sources to execute arbitrary python on your server is a severe security risk,</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> $funcname(1, 2, 3.0, c=[1,2,3])</span>
|
||||
|
||||
<span class="sd"> def _funcname(*args, **kwargs):</span>
|
||||
<span class="sd"> args, kwargs = safe_convert_input(((int, int, float), {'c': 'py'}), *args, **kwargs)</span>
|
||||
<span class="sd"> # ...</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">def</span> <span class="nf">_safe_eval</span><span class="p">(</span><span class="n">inp</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">inp</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s1">''</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inp</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
||||
<span class="c1"># already converted</span>
|
||||
<span class="k">return</span> <span class="n">inp</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">literal_eval</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||||
<span class="n">literal_err</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">err</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">simple_eval</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||||
<span class="n">simple_err</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">"</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">raise_errors</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.funcparser</span> <span class="kn">import</span> <span class="n">ParsingError</span>
|
||||
<span class="n">err</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">"Errors converting '</span><span class="si">{</span><span class="n">inp</span><span class="si">}</span><span class="s2">' to python:</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="sa">f</span><span class="s2">"literal_eval raised </span><span class="si">{</span><span class="n">literal_err</span><span class="si">}</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="sa">f</span><span class="s2">"simple_eval raised </span><span class="si">{</span><span class="n">simple_err</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">raise</span> <span class="n">ParsingError</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># handle an incomplete/mixed set of input converters</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">converters</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span>
|
||||
<span class="n">arg_converters</span><span class="p">,</span> <span class="o">*</span><span class="n">kwarg_converters</span> <span class="o">=</span> <span class="n">converters</span>
|
||||
<span class="n">arg_converters</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">arg_converters</span><span class="p">)</span>
|
||||
<span class="n">kwarg_converters</span> <span class="o">=</span> <span class="n">kwarg_converters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">kwarg_converters</span> <span class="k">else</span> <span class="p">{}</span>
|
||||
|
||||
<span class="c1"># apply the converters</span>
|
||||
<span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="n">arg_converters</span><span class="p">:</span>
|
||||
<span class="n">args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="n">arg_converters</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">arg_converters</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">iarg</span><span class="p">,</span> <span class="n">arg</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">args</span><span class="p">[:</span><span class="nb">len</span><span class="p">(</span><span class="n">arg_converters</span><span class="p">)]):</span>
|
||||
<span class="n">converter</span> <span class="o">=</span> <span class="n">arg_converters</span><span class="p">[</span><span class="n">iarg</span><span class="p">]</span>
|
||||
<span class="n">converter</span> <span class="o">=</span> <span class="n">_safe_eval</span> <span class="k">if</span> <span class="n">converter</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'py'</span><span class="p">,</span> <span class="s1">'python'</span><span class="p">)</span> <span class="k">else</span> <span class="n">converter</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">args</span><span class="p">[</span><span class="n">iarg</span><span class="p">]</span> <span class="o">=</span> <span class="n">converter</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">raise_errors</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="n">args</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">kwarg_converters</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">kwarg_converters</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
||||
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">converter</span> <span class="ow">in</span> <span class="n">kwarg_converters</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="n">converter</span> <span class="o">=</span> <span class="n">_safe_eval</span> <span class="k">if</span> <span class="n">converter</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'py'</span><span class="p">,</span> <span class="s1">'python'</span><span class="p">)</span> <span class="k">else</span> <span class="n">converter</span>
|
||||
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">{</span><span class="o">**</span><span class="n">kwargs</span><span class="p">}:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">kwargs</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">converter</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">raise_errors</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">return</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span></div>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,492 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>evennia.utils.verb_conjugation.conjugate — Evennia 1.0-dev documentation</title>
|
||||
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
|
||||
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
|
||||
<script src="../../../../_static/jquery.js"></script>
|
||||
<script src="../../../../_static/underscore.js"></script>
|
||||
<script src="../../../../_static/doctools.js"></script>
|
||||
<script src="../../../../_static/language_data.js"></script>
|
||||
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
|
||||
<link rel="index" title="Index" href="../../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../../search.html" />
|
||||
</head><body>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="../../../../genindex.html" title="General Index"
|
||||
accesskey="I">index</a></li>
|
||||
<li class="right" >
|
||||
<a href="../../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.utils.verb_conjugation.conjugate</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for evennia.utils.verb_conjugation.conjugate</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">English verb conjugation</span>
|
||||
|
||||
<span class="sd">Original Author: Tom De Smedt <tomdesmedt@organisms.be> of Nodebox</span>
|
||||
<span class="sd">Refactored by Griatch 2021, for Evennia.</span>
|
||||
|
||||
<span class="sd">This is distributed under the GPL2 license. See ./LICENSE.txt for details.</span>
|
||||
|
||||
<span class="sd">The verb.txt morphology was adopted from the XTAG morph_englis.flat:</span>
|
||||
<span class="sd">http://www.cis.upenn.edu/~xtag/</span>
|
||||
|
||||
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">os</span>
|
||||
|
||||
<span class="n">_VERBS_FILE</span> <span class="o">=</span> <span class="s2">"verbs.txt"</span>
|
||||
|
||||
<span class="c1"># Each verb and its tenses is a list in verbs.txt,</span>
|
||||
<span class="c1"># indexed according to the following keys:</span>
|
||||
<span class="c1"># the negated forms (for supported verbs) are ind+11.</span>
|
||||
|
||||
<span class="n">verb_tenses_keys</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"infinitive"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="s2">"1st singular present"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="s2">"2nd singular present"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
|
||||
<span class="s2">"3rd singular present"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
|
||||
<span class="s2">"present plural"</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
|
||||
<span class="s2">"present participle"</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
|
||||
<span class="s2">"1st singular past"</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span>
|
||||
<span class="s2">"2nd singular past"</span><span class="p">:</span> <span class="mi">7</span><span class="p">,</span>
|
||||
<span class="s2">"3rd singular past"</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
|
||||
<span class="s2">"past plural"</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
|
||||
<span class="s2">"past"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
|
||||
<span class="s2">"past participle"</span><span class="p">:</span> <span class="mi">11</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="c1"># allow to specify tenses with a shorter notation</span>
|
||||
<span class="n">verb_tenses_aliases</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"inf"</span><span class="p">:</span> <span class="s2">"infinitive"</span><span class="p">,</span>
|
||||
<span class="s2">"1sgpres"</span><span class="p">:</span> <span class="s2">"1st singular present"</span><span class="p">,</span>
|
||||
<span class="s2">"2sgpres"</span><span class="p">:</span> <span class="s2">"2nd singular present"</span><span class="p">,</span>
|
||||
<span class="s2">"3sgpres"</span><span class="p">:</span> <span class="s2">"3rd singular present"</span><span class="p">,</span>
|
||||
<span class="s2">"pl"</span><span class="p">:</span> <span class="s2">"present plural"</span><span class="p">,</span>
|
||||
<span class="s2">"prog"</span><span class="p">:</span> <span class="s2">"present participle"</span><span class="p">,</span>
|
||||
<span class="s2">"1sgpast"</span><span class="p">:</span> <span class="s2">"1st singular past"</span><span class="p">,</span>
|
||||
<span class="s2">"2sgpast"</span><span class="p">:</span> <span class="s2">"2nd singular past"</span><span class="p">,</span>
|
||||
<span class="s2">"3sgpast"</span><span class="p">:</span> <span class="s2">"3rd singular past"</span><span class="p">,</span>
|
||||
<span class="s2">"pastpl"</span><span class="p">:</span> <span class="s2">"past plural"</span><span class="p">,</span>
|
||||
<span class="s2">"ppart"</span><span class="p">:</span> <span class="s2">"past participle"</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<span class="c1"># Each verb has morphs for infinitve,</span>
|
||||
<span class="c1"># 3rd singular present, present participle,</span>
|
||||
<span class="c1"># past and past participle.</span>
|
||||
<span class="c1"># Verbs like "be" have other morphs as well</span>
|
||||
<span class="c1"># (i.e. I am, you are, she is, they aren't)</span>
|
||||
<span class="c1"># Additionally, the following verbs can be negated:</span>
|
||||
<span class="c1"># be, can, do, will, must, have, may, need, dare, ought.</span>
|
||||
|
||||
<span class="c1"># load the conjugation forms from ./verbs.txt</span>
|
||||
<span class="n">verb_tenses</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
|
||||
<span class="n">path</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="vm">__file__</span><span class="p">),</span> <span class="n">_VERBS_FILE</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="p">)</span> <span class="k">as</span> <span class="n">fil</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">fil</span><span class="o">.</span><span class="n">readlines</span><span class="p">():</span>
|
||||
<span class="n">wordlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)]</span>
|
||||
<span class="n">verb_tenses</span><span class="p">[</span><span class="n">wordlist</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">wordlist</span>
|
||||
|
||||
<span class="c1"># Each verb can be lemmatised:</span>
|
||||
<span class="c1"># inflected morphs of the verb point</span>
|
||||
<span class="c1"># to its infinitive in this dictionary.</span>
|
||||
<span class="n">verb_lemmas</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="k">for</span> <span class="n">infinitive</span> <span class="ow">in</span> <span class="n">verb_tenses</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">tense</span> <span class="ow">in</span> <span class="n">verb_tenses</span><span class="p">[</span><span class="n">infinitive</span><span class="p">]:</span>
|
||||
<span class="k">if</span> <span class="n">tense</span><span class="p">:</span>
|
||||
<span class="n">verb_lemmas</span><span class="p">[</span><span class="n">tense</span><span class="p">]</span> <span class="o">=</span> <span class="n">infinitive</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_infinitive"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_infinitive">[docs]</a><span class="k">def</span> <span class="nf">verb_infinitive</span><span class="p">(</span><span class="n">verb</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Returns the uninflected form of the verb, like 'are' -> 'be'</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to get the uninflected form of.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: The uninflected verb form of `verb`.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">verb_lemmas</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_conjugate"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_conjugate">[docs]</a><span class="k">def</span> <span class="nf">verb_conjugate</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">tense</span><span class="o">=</span><span class="s2">"infinitive"</span><span class="p">,</span> <span class="n">negate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Inflects the verb to the given tense.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The single verb to conjugate.</span>
|
||||
<span class="sd"> tense (str): The tense to convert to. This can be given either as a long or short form</span>
|
||||
<span class="sd"> - "infinitive" ("inf") - be</span>
|
||||
<span class="sd"> - "1st/2nd/3rd singular present" ("1/2/3sgpres") - am/are/is</span>
|
||||
<span class="sd"> - "present plural" ("pl") - are</span>
|
||||
<span class="sd"> - "present participle" ("prog") - being</span>
|
||||
<span class="sd"> - "1st/2nd/3rd singular past" ("1/2/3sgpast") - was/were/was</span>
|
||||
<span class="sd"> - "past plural" ("pastpl") - were</span>
|
||||
<span class="sd"> - "past" - were</span>
|
||||
<span class="sd"> - "past participle" ("ppart") - been</span>
|
||||
<span class="sd"> negate (bool): Negates the verb. This only supported</span>
|
||||
<span class="sd"> for a limited number of verbs: be, can, do, will, must, have, may,</span>
|
||||
<span class="sd"> need, dare, ought.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: The conjugated verb. If conjugation fails, the original verb is returned.</span>
|
||||
|
||||
<span class="sd"> Examples:</span>
|
||||
<span class="sd"> The verb 'be':</span>
|
||||
<span class="sd"> - present: I am, you are, she is,</span>
|
||||
<span class="sd"> - present participle: being,</span>
|
||||
<span class="sd"> - past: I was, you were, he was,</span>
|
||||
<span class="sd"> - past participle: been,</span>
|
||||
<span class="sd"> - negated present: I am not, you aren't, it isn't.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">tense</span> <span class="o">=</span> <span class="n">verb_tenses_aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tense</span><span class="p">,</span> <span class="n">tense</span><span class="p">)</span>
|
||||
<span class="n">verb</span> <span class="o">=</span> <span class="n">verb_infinitive</span><span class="p">(</span><span class="n">verb</span><span class="p">)</span>
|
||||
<span class="n">ind</span> <span class="o">=</span> <span class="n">verb_tenses_keys</span><span class="p">[</span><span class="n">tense</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
|
||||
<span class="n">ind</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">verb_tenses_keys</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">verb_tenses</span><span class="p">[</span><span class="n">verb</span><span class="p">][</span><span class="n">ind</span><span class="p">]</span>
|
||||
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
||||
<span class="c1"># TODO implement simple algorithm here with +s for certain tenses?</span>
|
||||
<span class="k">return</span> <span class="n">verb</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_present"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_present">[docs]</a><span class="k">def</span> <span class="nf">verb_present</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">negate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Inflects the verb in the present tense.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> person (str or int): This can be 1, 2, 3, "1st", "2nd", "3rd", "plural" or "*".</span>
|
||||
<span class="sd"> negate (bool): Some verbs like be, have, must, can be negated.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: The present tense verb.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> had -> have</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">person</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">person</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"pl"</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">"stndrgural"</span><span class="p">)</span>
|
||||
<span class="n">mapping</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"1"</span><span class="p">:</span> <span class="s2">"1st singular present"</span><span class="p">,</span>
|
||||
<span class="s2">"2"</span><span class="p">:</span> <span class="s2">"2nd singular present"</span><span class="p">,</span>
|
||||
<span class="s2">"3"</span><span class="p">:</span> <span class="s2">"3rd singular present"</span><span class="p">,</span>
|
||||
<span class="s2">"*"</span><span class="p">:</span> <span class="s2">"present plural"</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">if</span> <span class="n">person</span> <span class="ow">in</span> <span class="n">mapping</span> <span class="ow">and</span> <span class="n">verb_conjugate</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">mapping</span><span class="p">[</span><span class="n">person</span><span class="p">],</span> <span class="n">negate</span><span class="p">)</span> <span class="o">!=</span> <span class="s2">""</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">verb_conjugate</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">mapping</span><span class="p">[</span><span class="n">person</span><span class="p">],</span> <span class="n">negate</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">verb_conjugate</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="s2">"infinitive"</span><span class="p">,</span> <span class="n">negate</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_present_participle"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_present_participle">[docs]</a><span class="k">def</span> <span class="nf">verb_present_participle</span><span class="p">(</span><span class="n">verb</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Inflects the verb in the present participle.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to inflect.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: The inflected verb.</span>
|
||||
|
||||
<span class="sd"> Examples:</span>
|
||||
<span class="sd"> give -> giving, be -> being, swim -> swimming</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">verb_conjugate</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="s2">"present participle"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_past"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_past">[docs]</a><span class="k">def</span> <span class="nf">verb_past</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">negate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="sd"> Inflects the verb in the past tense.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to inflect.</span>
|
||||
<span class="sd"> person (str, optional): The person can be specified with 1, 2, 3,</span>
|
||||
<span class="sd"> "1st", "2nd", "3rd", "plural", "*".</span>
|
||||
<span class="sd"> negate (bool, optional): Some verbs like be, have, must, can be negated.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: The inflected verb.</span>
|
||||
|
||||
<span class="sd"> Examples:</span>
|
||||
<span class="sd"> give -> gave, be -> was, swim -> swam</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">person</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">person</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"pl"</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">"stndrgural"</span><span class="p">)</span>
|
||||
<span class="n">mapping</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="s2">"1"</span><span class="p">:</span> <span class="s2">"1st singular past"</span><span class="p">,</span>
|
||||
<span class="s2">"2"</span><span class="p">:</span> <span class="s2">"2nd singular past"</span><span class="p">,</span>
|
||||
<span class="s2">"3"</span><span class="p">:</span> <span class="s2">"3rd singular past"</span><span class="p">,</span>
|
||||
<span class="s2">"*"</span><span class="p">:</span> <span class="s2">"past plural"</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
<span class="k">if</span> <span class="n">person</span> <span class="ow">in</span> <span class="n">mapping</span> <span class="ow">and</span> <span class="n">verb_conjugate</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">mapping</span><span class="p">[</span><span class="n">person</span><span class="p">],</span> <span class="n">negate</span><span class="p">)</span> <span class="o">!=</span> <span class="s2">""</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">verb_conjugate</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">mapping</span><span class="p">[</span><span class="n">person</span><span class="p">],</span> <span class="n">negate</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">verb_conjugate</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="s2">"past"</span><span class="p">,</span> <span class="n">negate</span><span class="o">=</span><span class="n">negate</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_past_participle"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_past_participle">[docs]</a><span class="k">def</span> <span class="nf">verb_past_participle</span><span class="p">(</span><span class="n">verb</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Inflects the verb in the present participle.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to inflect.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: The inflected verb.</span>
|
||||
|
||||
<span class="sd"> Examples:</span>
|
||||
<span class="sd"> give -> given, be -> been, swim -> swum</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">verb_conjugate</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="s2">"past participle"</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_all_tenses"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_all_tenses">[docs]</a><span class="k">def</span> <span class="nf">verb_all_tenses</span><span class="p">():</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Get all all possible verb tenses.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> list: A list if string names.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">verb_tenses_keys</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_tense"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_tense">[docs]</a><span class="k">def</span> <span class="nf">verb_tense</span><span class="p">(</span><span class="n">verb</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Returns a string from verb_tenses_keys representing the verb's tense.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to check the tense of.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> str: The tense.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> given -> "past participle"</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">infinitive</span> <span class="o">=</span> <span class="n">verb_infinitive</span><span class="p">(</span><span class="n">verb</span><span class="p">)</span>
|
||||
<span class="n">data</span> <span class="o">=</span> <span class="n">verb_tenses</span><span class="p">[</span><span class="n">infinitive</span><span class="p">]</span>
|
||||
<span class="k">for</span> <span class="n">tense</span> <span class="ow">in</span> <span class="n">verb_tenses_keys</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="n">verb_tenses_keys</span><span class="p">[</span><span class="n">tense</span><span class="p">]]</span> <span class="o">==</span> <span class="n">verb</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">tense</span>
|
||||
<span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="n">verb_tenses_keys</span><span class="p">[</span><span class="n">tense</span><span class="p">]</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">verb_tenses_keys</span><span class="p">)]</span> <span class="o">==</span> <span class="n">verb</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">tense</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_is_tense"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_is_tense">[docs]</a><span class="k">def</span> <span class="nf">verb_is_tense</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">tense</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Checks whether the verb is in the given tense.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to check.</span>
|
||||
<span class="sd"> tense (str): The tense to check.</span>
|
||||
|
||||
<span class="sd"> Return:</span>
|
||||
<span class="sd"> bool: If verb matches given tense.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">tense</span> <span class="o">=</span> <span class="n">verb_tenses_aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tense</span><span class="p">,</span> <span class="n">tense</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">verb_tense</span><span class="p">(</span><span class="n">verb</span><span class="p">)</span> <span class="o">==</span> <span class="n">tense</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_is_present"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_is_present">[docs]</a><span class="k">def</span> <span class="nf">verb_is_present</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">negated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Checks whether the verb is in the present tense.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to check.</span>
|
||||
<span class="sd"> person (str): Check which person.</span>
|
||||
<span class="sd"> negated (bool): Check if verb was negated.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: If verb was in present tense.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">person</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">person</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"*"</span><span class="p">,</span> <span class="s2">"plural"</span><span class="p">)</span>
|
||||
<span class="n">tense</span> <span class="o">=</span> <span class="n">verb_tense</span><span class="p">(</span><span class="n">verb</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">tense</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="s2">"present"</span> <span class="ow">in</span> <span class="n">tense</span> <span class="ow">and</span> <span class="n">person</span> <span class="ow">in</span> <span class="n">tense</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">negated</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">elif</span> <span class="s2">"n't"</span> <span class="ow">in</span> <span class="n">verb</span> <span class="ow">or</span> <span class="s2">" not"</span> <span class="ow">in</span> <span class="n">verb</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">return</span> <span class="kc">False</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_is_present_participle"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_is_present_participle">[docs]</a><span class="k">def</span> <span class="nf">verb_is_present_participle</span><span class="p">(</span><span class="n">verb</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Checks whether the verb is in present participle.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to check.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: Result of check.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">tense</span> <span class="o">=</span> <span class="n">verb_tense</span><span class="p">(</span><span class="n">verb</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">tense</span> <span class="o">==</span> <span class="s2">"present participle"</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_is_past"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_is_past">[docs]</a><span class="k">def</span> <span class="nf">verb_is_past</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">negated</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Checks whether the verb is in the past tense.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to check.</span>
|
||||
<span class="sd"> person (str): The person to check.</span>
|
||||
<span class="sd"> negated (bool): Check if verb is negated.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: Result of check.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">person</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">person</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"*"</span><span class="p">,</span> <span class="s2">"plural"</span><span class="p">)</span>
|
||||
<span class="n">tense</span> <span class="o">=</span> <span class="n">verb_tense</span><span class="p">(</span><span class="n">verb</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">tense</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="s2">"past"</span> <span class="ow">in</span> <span class="n">tense</span> <span class="ow">and</span> <span class="n">person</span> <span class="ow">in</span> <span class="n">tense</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">negated</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
<span class="k">elif</span> <span class="s2">"n't"</span> <span class="ow">in</span> <span class="n">verb</span> <span class="ow">or</span> <span class="s2">" not"</span> <span class="ow">in</span> <span class="n">verb</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
|
||||
<span class="k">return</span> <span class="kc">False</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_is_past_participle"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_is_past_participle">[docs]</a><span class="k">def</span> <span class="nf">verb_is_past_participle</span><span class="p">(</span><span class="n">verb</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Checks whether the verb is in past participle.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to check.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> bool: The result of the check.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">tense</span> <span class="o">=</span> <span class="n">verb_tense</span><span class="p">(</span><span class="n">verb</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">tense</span> <span class="o">==</span> <span class="s2">"past participle"</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="verb_actor_stance_components"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.conjugate.html#evennia.utils.verb_conjugation.conjugate.verb_actor_stance_components">[docs]</a><span class="k">def</span> <span class="nf">verb_actor_stance_components</span><span class="p">(</span><span class="n">verb</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Figure out actor stance components of a verb.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> verb (str): The verb to analyze</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> tuple: The 2nd person (you) and 3rd person forms of the verb,</span>
|
||||
<span class="sd"> in the same tense as the ingoing verb.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">tense</span> <span class="o">=</span> <span class="n">verb_tense</span><span class="p">(</span><span class="n">verb</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="s2">"participle"</span> <span class="ow">in</span> <span class="n">tense</span> <span class="ow">or</span> <span class="s2">"plural"</span> <span class="ow">in</span> <span class="n">tense</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">verb</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">tense</span> <span class="o">==</span> <span class="s2">"infinitive"</span> <span class="ow">or</span> <span class="s2">"present"</span> <span class="ow">in</span> <span class="n">tense</span><span class="p">:</span>
|
||||
<span class="n">you_str</span> <span class="o">=</span> <span class="n">verb_present</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="s2">"2"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">verb</span>
|
||||
<span class="n">them_str</span> <span class="o">=</span> <span class="n">verb_present</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="s2">"3"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">verb</span> <span class="o">+</span> <span class="s2">"s"</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">you_str</span> <span class="o">=</span> <span class="n">verb_past</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="s2">"2"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">verb</span>
|
||||
<span class="n">them_str</span> <span class="o">=</span> <span class="n">verb_past</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="s2">"3"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">verb</span> <span class="o">+</span> <span class="s2">"s"</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="n">you_str</span><span class="p">,</span> <span class="n">them_str</span><span class="p">)</span></div>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<p class="logo"><a href="../../../../index.html">
|
||||
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
|
||||
</a></p>
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../../search.html" method="get">
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" />
|
||||
<input type="submit" value="Go" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>$('#searchbox').show(0);</script><h3>Links</h3>
|
||||
<ul>
|
||||
<li><a href="https://www.evennia.com">Home page</a> </li>
|
||||
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
|
||||
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
||||
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
|
||||
<a href="https://discord.gg/NecFePw">Discord</a> -
|
||||
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
|
||||
</li>
|
||||
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
|
||||
</ul>
|
||||
<h3>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="conjugate.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="../../../../genindex.html" title="General Index"
|
||||
>index</a></li>
|
||||
<li class="right" >
|
||||
<a href="../../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.utils.verb_conjugation.conjugate</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
346
docs/1.0-dev/_modules/evennia/utils/verb_conjugation/tests.html
Normal file
346
docs/1.0-dev/_modules/evennia/utils/verb_conjugation/tests.html
Normal file
|
|
@ -0,0 +1,346 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>evennia.utils.verb_conjugation.tests — Evennia 1.0-dev documentation</title>
|
||||
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
|
||||
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
|
||||
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
|
||||
<script src="../../../../_static/jquery.js"></script>
|
||||
<script src="../../../../_static/underscore.js"></script>
|
||||
<script src="../../../../_static/doctools.js"></script>
|
||||
<script src="../../../../_static/language_data.js"></script>
|
||||
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
|
||||
<link rel="index" title="Index" href="../../../../genindex.html" />
|
||||
<link rel="search" title="Search" href="../../../../search.html" />
|
||||
</head><body>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="../../../../genindex.html" title="General Index"
|
||||
accesskey="I">index</a></li>
|
||||
<li class="right" >
|
||||
<a href="../../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.utils.verb_conjugation.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
<div class="body" role="main">
|
||||
|
||||
<h1>Source code for evennia.utils.verb_conjugation.tests</h1><div class="highlight"><pre>
|
||||
<span></span><span class="sd">"""</span>
|
||||
<span class="sd">Unit tests for verb conjugation.</span>
|
||||
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">parameterized</span> <span class="kn">import</span> <span class="n">parameterized</span>
|
||||
<span class="kn">from</span> <span class="nn">django.test</span> <span class="kn">import</span> <span class="n">TestCase</span>
|
||||
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">conjugate</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TestVerbConjugate"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.tests.html#evennia.utils.verb_conjugation.tests.TestVerbConjugate">[docs]</a><span class="k">class</span> <span class="nc">TestVerbConjugate</span><span class="p">(</span><span class="n">TestCase</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the conjugation.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"have"</span><span class="p">,</span> <span class="s2">"have"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"swim"</span><span class="p">,</span> <span class="s2">"swim"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"give"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"given"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"am"</span><span class="p">,</span> <span class="s2">"be"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"doing"</span><span class="p">,</span> <span class="s2">"do"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"are"</span><span class="p">,</span> <span class="s2">"be"</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_infinitive</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the infinite-getter.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_infinitive</span><span class="p">(</span><span class="n">verb</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"have"</span><span class="p">,</span> <span class="s2">"have"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"swim"</span><span class="p">,</span> <span class="s2">"swim"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"given"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">,</span> <span class="s2">"be"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"doing"</span><span class="p">,</span> <span class="s2">"do"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"are"</span><span class="p">,</span> <span class="s2">"be"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"2sgpres"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">,</span> <span class="s2">"are"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"3sgpres"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">,</span> <span class="s2">"is"</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_conjugate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tense</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test conjugation for different tenses.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_conjugate</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">tense</span><span class="o">=</span><span class="n">tense</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"have"</span><span class="p">,</span> <span class="s2">"have"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"swim"</span><span class="p">,</span> <span class="s2">"swim"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"given"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"doing"</span><span class="p">,</span> <span class="s2">"do"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"are"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"2nd"</span><span class="p">,</span> <span class="s2">"were"</span><span class="p">,</span> <span class="s2">"are"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"3rd"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">,</span> <span class="s2">"is"</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_present</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">person</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the present.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_present</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="n">person</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"have"</span><span class="p">,</span> <span class="s2">"having"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"swim"</span><span class="p">,</span> <span class="s2">"swimming"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"give"</span><span class="p">,</span> <span class="s2">"giving"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"given"</span><span class="p">,</span> <span class="s2">"giving"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"am"</span><span class="p">,</span> <span class="s2">"being"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"doing"</span><span class="p">,</span> <span class="s2">"doing"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"are"</span><span class="p">,</span> <span class="s2">"being"</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_present_participle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the present_participle</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_present_participle</span><span class="p">(</span><span class="n">verb</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"have"</span><span class="p">,</span> <span class="s2">"had"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"swim"</span><span class="p">,</span> <span class="s2">"swam"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">,</span> <span class="s2">"gave"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"given"</span><span class="p">,</span> <span class="s2">"gave"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">,</span> <span class="s2">"was"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"doing"</span><span class="p">,</span> <span class="s2">"did"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"are"</span><span class="p">,</span> <span class="s2">"was"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"2nd"</span><span class="p">,</span> <span class="s2">"were"</span><span class="p">,</span> <span class="s2">"were"</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_past</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">person</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the past getter.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_past</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="n">person</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"have"</span><span class="p">,</span> <span class="s2">"had"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"swim"</span><span class="p">,</span> <span class="s2">"swum"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"give"</span><span class="p">,</span> <span class="s2">"given"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"given"</span><span class="p">,</span> <span class="s2">"given"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"am"</span><span class="p">,</span> <span class="s2">"been"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"doing"</span><span class="p">,</span> <span class="s2">"done"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"are"</span><span class="p">,</span> <span class="s2">"been"</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_past_participle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the past participle.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_past_participle</span><span class="p">(</span><span class="n">verb</span><span class="p">))</span>
|
||||
|
||||
<div class="viewcode-block" id="TestVerbConjugate.test_verb_get_all_tenses"><a class="viewcode-back" href="../../../../api/evennia.utils.verb_conjugation.tests.html#evennia.utils.verb_conjugation.tests.TestVerbConjugate.test_verb_get_all_tenses">[docs]</a> <span class="k">def</span> <span class="nf">test_verb_get_all_tenses</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test getting all tenses.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">conjugate</span><span class="o">.</span><span class="n">verb_tenses_keys</span><span class="o">.</span><span class="n">keys</span><span class="p">()),</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_all_tenses</span><span class="p">())</span></div>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"have"</span><span class="p">,</span> <span class="s2">"infinitive"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"swim"</span><span class="p">,</span> <span class="s2">"infinitive"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"give"</span><span class="p">,</span> <span class="s2">"infinitive"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"given"</span><span class="p">,</span> <span class="s2">"past participle"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"am"</span><span class="p">,</span> <span class="s2">"1st singular present"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"doing"</span><span class="p">,</span> <span class="s2">"present participle"</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"are"</span><span class="p">,</span> <span class="s2">"2nd singular present"</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_tense</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the tense retriever.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_tense</span><span class="p">(</span><span class="n">verb</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"have"</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"swim"</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"given"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"doing"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"inf"</span><span class="p">,</span> <span class="s2">"are"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_is_tense</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tense</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the tense-checker</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_is_tense</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">tense</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"have"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"swim"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"given"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"doing"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"are"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"had"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_is_present</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">person</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the tense-checker</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_is_present</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="n">person</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"have"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"swim"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"give"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"given"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"am"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"doing"</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"are"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_is_present_participle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the tense-checker</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_is_present_participle</span><span class="p">(</span><span class="n">verb</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"have"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"swim"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"give"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"given"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"am"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"doing"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"1st"</span><span class="p">,</span> <span class="s2">"are"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"2nd"</span><span class="p">,</span> <span class="s2">"were"</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_is_past</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">person</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the tense-checker</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_is_past</span><span class="p">(</span><span class="n">verb</span><span class="p">,</span> <span class="n">person</span><span class="o">=</span><span class="n">person</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"have"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"swimming"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"give"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"given"</span><span class="p">,</span> <span class="kc">True</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"am"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"doing"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"are"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"had"</span><span class="p">,</span> <span class="kc">False</span><span class="p">),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_is_past_participle</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the tense-checker</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_is_past_participle</span><span class="p">(</span><span class="n">verb</span><span class="p">))</span>
|
||||
|
||||
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">([</span>
|
||||
<span class="p">(</span><span class="s2">"have"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"have"</span><span class="p">,</span> <span class="s2">"has"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"swimming"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"swimming"</span><span class="p">,</span> <span class="s2">"swimming"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"give"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"give"</span><span class="p">,</span> <span class="s2">"gives"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"given"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"given"</span><span class="p">,</span> <span class="s2">"given"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"am"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"are"</span><span class="p">,</span> <span class="s2">"is"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"doing"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"doing"</span><span class="p">,</span> <span class="s2">"doing"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"are"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"are"</span><span class="p">,</span> <span class="s2">"is"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"had"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"had"</span><span class="p">,</span> <span class="s2">"had"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"grin"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"grin"</span><span class="p">,</span> <span class="s2">"grins"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"smile"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"smile"</span><span class="p">,</span> <span class="s2">"smiles"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"vex"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"vex"</span><span class="p">,</span> <span class="s2">"vexes"</span><span class="p">)),</span>
|
||||
<span class="p">(</span><span class="s2">"thrust"</span><span class="p">,</span> <span class="p">(</span><span class="s2">"thrust"</span><span class="p">,</span> <span class="s2">"thrusts"</span><span class="p">)),</span>
|
||||
<span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">test_verb_actor_stance_components</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">verb</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Test the tense-checker</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">expected</span><span class="p">,</span> <span class="n">conjugate</span><span class="o">.</span><span class="n">verb_actor_stance_components</span><span class="p">(</span><span class="n">verb</span><span class="p">))</span></div>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<p class="logo"><a href="../../../../index.html">
|
||||
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
|
||||
</a></p>
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="../../../../search.html" method="get">
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" />
|
||||
<input type="submit" value="Go" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>$('#searchbox').show(0);</script><h3>Links</h3>
|
||||
<ul>
|
||||
<li><a href="https://www.evennia.com">Home page</a> </li>
|
||||
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
|
||||
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
||||
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
|
||||
<a href="https://discord.gg/NecFePw">Discord</a> -
|
||||
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
|
||||
</li>
|
||||
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
|
||||
</ul>
|
||||
<h3>Versions</h3>
|
||||
<ul>
|
||||
<li><a href="tests.html">1.0-dev (develop branch)</a></li>
|
||||
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="related" role="navigation" aria-label="related navigation">
|
||||
<h3>Navigation</h3>
|
||||
<ul>
|
||||
<li class="right" style="margin-right: 10px">
|
||||
<a href="../../../../genindex.html" title="General Index"
|
||||
>index</a></li>
|
||||
<li class="right" >
|
||||
<a href="../../../../py-modindex.html" title="Python Module Index"
|
||||
>modules</a> |</li>
|
||||
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> »</li>
|
||||
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
||||
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
||||
<li class="nav-item nav-item-this"><a href="">evennia.utils.verb_conjugation.tests</a></li>
|
||||
</ul>
|
||||
<div class="develop">develop branch</div>
|
||||
</div>
|
||||
<div class="footer" role="contentinfo">
|
||||
© Copyright 2020, The Evennia developer community.
|
||||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -217,11 +217,11 @@
|
|||
<li><a href="evennia/utils/evmenu.html">evennia.utils.evmenu</a></li>
|
||||
<li><a href="evennia/utils/evmore.html">evennia.utils.evmore</a></li>
|
||||
<li><a href="evennia/utils/evtable.html">evennia.utils.evtable</a></li>
|
||||
<li><a href="evennia/utils/funcparser.html">evennia.utils.funcparser</a></li>
|
||||
<li><a href="evennia/utils/gametime.html">evennia.utils.gametime</a></li>
|
||||
<li><a href="evennia/utils/idmapper/manager.html">evennia.utils.idmapper.manager</a></li>
|
||||
<li><a href="evennia/utils/idmapper/models.html">evennia.utils.idmapper.models</a></li>
|
||||
<li><a href="evennia/utils/idmapper/tests.html">evennia.utils.idmapper.tests</a></li>
|
||||
<li><a href="evennia/utils/inlinefuncs.html">evennia.utils.inlinefuncs</a></li>
|
||||
<li><a href="evennia/utils/logger.html">evennia.utils.logger</a></li>
|
||||
<li><a href="evennia/utils/optionclasses.html">evennia.utils.optionclasses</a></li>
|
||||
<li><a href="evennia/utils/optionhandler.html">evennia.utils.optionhandler</a></li>
|
||||
|
|
@ -231,6 +231,8 @@
|
|||
<li><a href="evennia/utils/text2html.html">evennia.utils.text2html</a></li>
|
||||
<li><a href="evennia/utils/utils.html">evennia.utils.utils</a></li>
|
||||
<li><a href="evennia/utils/validatorfuncs.html">evennia.utils.validatorfuncs</a></li>
|
||||
<li><a href="evennia/utils/verb_conjugation/conjugate.html">evennia.utils.verb_conjugation.conjugate</a></li>
|
||||
<li><a href="evennia/utils/verb_conjugation/tests.html">evennia.utils.verb_conjugation.tests</a></li>
|
||||
<li><a href="evennia/web/api/filters.html">evennia.web.api.filters</a></li>
|
||||
<li><a href="evennia/web/api/permissions.html">evennia.web.api.permissions</a></li>
|
||||
<li><a href="evennia/web/api/serializers.html">evennia.web.api.serializers</a></li>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue