mirror of
https://github.com/evennia/evennia.git
synced 2026-04-05 15:37:17 +02:00
Updated HTML docs
This commit is contained in:
parent
3bcf70a275
commit
eaf332099f
58 changed files with 1085 additions and 559 deletions
|
|
@ -2254,11 +2254,22 @@
|
|||
<span class="s2">"Use /force to override."</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">update</span> <span class="o">=</span> <span class="s2">"update"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
||||
<span class="n">reset</span> <span class="o">=</span> <span class="s2">"reset"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
||||
<span class="n">update</span> <span class="o">=</span> <span class="s2">"update"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">reset</span> <span class="c1"># default to update</span>
|
||||
|
||||
<span class="n">hooks</span> <span class="o">=</span> <span class="s2">"at_object_creation"</span> <span class="k">if</span> <span class="n">update</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">reset</span> <span class="k">else</span> <span class="s2">"all"</span>
|
||||
<span class="n">old_typeclass_path</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">typeclass_path</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">reset</span><span class="p">:</span>
|
||||
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span><span class="s2">"|yNote that this will reset the object back to its typeclass' default state, "</span>
|
||||
<span class="s2">"removing any custom locks/perms/attributes etc that may have been added "</span>
|
||||
<span class="s2">"by an explicit create_object call. Use `update` or type/force instead in order "</span>
|
||||
<span class="s2">"to keep such data. "</span>
|
||||
<span class="s2">"Continue [Y]/N?|n"</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"N"</span><span class="p">,</span> <span class="s2">"NO"</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">"Aborted."</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="c1"># special prompt for the user in cases where we want</span>
|
||||
<span class="c1"># to confirm changes.</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>
|
||||
|
|
@ -2304,7 +2315,7 @@
|
|||
<span class="k">if</span> <span class="n">reset</span><span class="p">:</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" All old attributes where deleted before the swap."</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" Attributes set before swap were not removed."</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" Attributes set before swap were not removed</span><span class="se">\n</span><span class="s2">(use `swap` or `type/reset` to clear all)."</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="ow">and</span> <span class="n">prototype_success</span><span class="p">:</span>
|
||||
<span class="n">string</span> <span class="o">+=</span> <span class="p">(</span>
|
||||
<span class="s2">" Prototype '</span><span class="si">%s</span><span class="s2">' was successfully applied over the object type."</span>
|
||||
|
|
|
|||
|
|
@ -1316,7 +1316,7 @@
|
|||
<span class="s2">"Obj2 = evennia.objects.objects.DefaultExit"</span><span class="p">,</span>
|
||||
<span class="s2">"Obj2 changed typeclass from evennia.objects.objects.DefaultObject "</span>
|
||||
<span class="s2">"to evennia.objects.objects.DefaultExit."</span><span class="p">,</span>
|
||||
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">"swap"</span><span class="p">,</span>
|
||||
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">"swap"</span><span class="p">,</span> <span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">"yes"</span><span class="p">],</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span> <span class="s2">"/list Obj"</span><span class="p">,</span> <span class="s2">"Core typeclasses"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
|
|
@ -1344,7 +1344,8 @@
|
|||
<span class="n">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
|
||||
<span class="s2">"Obj"</span><span class="p">,</span>
|
||||
<span class="s2">"Obj updated its existing typeclass (evennia.objects.objects.DefaultObject).</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="s2">"Only the at_object_creation hook was run (update mode). Attributes set before swap were not removed."</span><span class="p">,</span>
|
||||
<span class="s2">"Only the at_object_creation hook was run (update mode). Attributes set before swap were not removed</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="s2">"(use `swap` or `type/reset` to clear all)."</span><span class="p">,</span>
|
||||
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">"update"</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
|
|
@ -1352,6 +1353,7 @@
|
|||
<span class="s2">"/reset/force Obj=evennia.objects.objects.DefaultObject"</span><span class="p">,</span>
|
||||
<span class="s2">"Obj updated its existing typeclass (evennia.objects.objects.DefaultObject).</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="s2">"All object creation hooks were run. All old attributes where deleted before the swap."</span><span class="p">,</span>
|
||||
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">"yes"</span><span class="p">]</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia.prototypes.prototypes</span> <span class="kn">import</span> <span class="n">homogenize_prototype</span>
|
||||
|
|
@ -1374,11 +1376,11 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
<span class="n">building</span><span class="o">.</span><span class="n">CmdTypeclass</span><span class="p">(),</span>
|
||||
<span class="s2">"/prototype Obj=testkey"</span><span class="p">,</span>
|
||||
<span class="s2">"replaced_obj changed typeclass from "</span>
|
||||
<span class="s2">"evennia.objects.objects.DefaultObject to "</span>
|
||||
<span class="s2">"typeclasses.objects.Object.</span><span class="se">\n</span><span class="s2">All object creation hooks were "</span>
|
||||
<span class="s2">"run. Attributes set before swap were not removed. Prototype "</span>
|
||||
<span class="s2">"'replaced_obj' was successfully applied over the object type."</span><span class="p">,</span>
|
||||
<span class="s2">"replaced_obj changed typeclass from evennia.objects.objects.DefaultObject to "</span>
|
||||
<span class="s2">"typeclasses.objects.Object.</span><span class="se">\n</span><span class="s2">Only the at_object_creation hook was run "</span>
|
||||
<span class="s2">"(update mode). Attributes set before swap were not removed</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="s2">"(use `swap` or `type/reset` to clear all). Prototype 'replaced_obj' was "</span>
|
||||
<span class="s2">"successfully applied over the object type."</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">==</span> <span class="s2">"protdesc"</span></div>
|
||||
|
||||
|
|
|
|||
|
|
@ -515,6 +515,24 @@
|
|||
<span class="n">category</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="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="k">else</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">accessing_obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tagkey</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="is_ooc"><a class="viewcode-back" href="../../../api/evennia.locks.lockfuncs.html#evennia.locks.lockfuncs.is_ooc">[docs]</a><span class="k">def</span> <span class="nf">is_ooc</span><span class="p">(</span><span class="n">accessing_obj</span><span class="p">,</span> <span class="n">accessed_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:</span>
|
||||
<span class="sd"> is_ooc()</span>
|
||||
|
||||
<span class="sd"> This is normally used to lock a Command, so it can be used</span>
|
||||
<span class="sd"> only when out of character.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="n">accessed_obj</span><span class="o">.</span><span class="n">obj</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">accessed_obj</span><span class="p">,</span> <span class="s2">"obj"</span><span class="p">)</span> <span class="k">else</span> <span class="n">accessed_obj</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">session</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">"session"</span><span class="p">)</span> <span class="k">else</span> <span class="n">obj</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_puppet</span><span class="p">(</span><span class="n">session</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">get_puppet</span><span class="p">(</span><span class="n">session</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">return</span> <span class="kc">False</span></div>
|
||||
|
||||
<div class="viewcode-block" id="objtag"><a class="viewcode-back" href="../../../api/evennia.locks.lockfuncs.html#evennia.locks.lockfuncs.objtag">[docs]</a><span class="k">def</span> <span class="nf">objtag</span><span class="p">(</span><span class="n">accessing_obj</span><span class="p">,</span> <span class="n">accessed_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>
|
||||
|
|
|
|||
|
|
@ -47,8 +47,8 @@
|
|||
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span>
|
||||
<span class="kn">import</span> <span class="nn">time</span>
|
||||
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.protocols</span> <span class="kn">import</span> <span class="n">amp</span>
|
||||
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span><span class="p">,</span> <span class="n">namedtuple</span>
|
||||
<span class="kn">from</span> <span class="nn">io</span> <span class="kn">import</span> <span class="n">BytesIO</span>
|
||||
|
|
@ -400,6 +400,48 @@
|
|||
<span class="n">deferred</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_safeEmit</span><span class="p">)</span>
|
||||
<span class="n">deferred</span><span class="o">.</span><span class="n">addErrback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unhandledError</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="AMPMultiConnectionProtocol.stringReceived"><a class="viewcode-back" href="../../../../api/evennia.server.portal.amp.html#evennia.server.amp_client.AMPMultiConnectionProtocol.stringReceived">[docs]</a> <span class="k">def</span> <span class="nf">stringReceived</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Overrides the base stringReceived of twisted in order to handle</span>
|
||||
<span class="sd"> the strange error reported in https://github.com/evennia/evennia/issues/2053,</span>
|
||||
<span class="sd"> which can lead to the amp connection locking up.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> string (str): the data coming in.</span>
|
||||
|
||||
<span class="sd"> Notes:</span>
|
||||
|
||||
<span class="sd"> To test, add the following code to the beginning of</span>
|
||||
<span class="sd"> `evennia.server.amp_client.AMPServerClientProtocol.data_to_portal`, then</span>
|
||||
<span class="sd"> run multiple commands until the error trigger:</span>
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> import random</span>
|
||||
<span class="sd"> from twisted.protocols.amp import AmpBox</span>
|
||||
<span class="sd"> always_fail = False</span>
|
||||
<span class="sd"> if always_fail or random.random() < 0.05:</span>
|
||||
<span class="sd"> breaker = AmpBox()</span>
|
||||
<span class="sd"> breaker['_answer'.encode()]='13541'.encode()</span>
|
||||
<span class="sd"> self.transport.write(breaker.serialize())</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">pto</span> <span class="o">=</span> <span class="s2">"proto_"</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span>
|
||||
<span class="n">statehandler</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pto</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="n">log</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"callback"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span><span class="p">,</span> <span class="s2">"not found"</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="c1"># make sure to catch a KeyError cleanly here</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">=</span> <span class="n">statehandler</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">state</span> <span class="o">==</span> <span class="s2">"done"</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">loseConnection</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">KeyError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||||
<span class="n">_get_logger</span><span class="p">()</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span>
|
||||
<span class="sa">f</span><span class="s2">"AMP error (KeyError: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">). Discarded data (see "</span>
|
||||
<span class="s2">"https://github.com/evennia/evennia/issues/2053)"</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="AMPMultiConnectionProtocol.dataReceived"><a class="viewcode-back" href="../../../../api/evennia.server.portal.amp.html#evennia.server.amp_client.AMPMultiConnectionProtocol.dataReceived">[docs]</a> <span class="k">def</span> <span class="nf">dataReceived</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Handle non-AMP messages, such as HTTP communication.</span>
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@
|
|||
<span class="kn">from</span> <span class="nn">twisted.application</span> <span class="kn">import</span> <span class="n">internet</span><span class="p">,</span> <span class="n">service</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.internet.task</span> <span class="kn">import</span> <span class="n">LoopingCall</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.internet</span> <span class="kn">import</span> <span class="n">protocol</span><span class="p">,</span> <span class="n">reactor</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.python.log</span> <span class="kn">import</span> <span class="n">ILogObserver</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.logger</span> <span class="kn">import</span> <span class="n">globalLogPublisher</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">django</span>
|
||||
|
||||
|
|
@ -287,16 +287,16 @@
|
|||
<span class="c1"># what to execute from.</span>
|
||||
<span class="n">application</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">Application</span><span class="p">(</span><span class="s2">"Portal"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># custom logging</span>
|
||||
|
||||
<span class="k">if</span> <span class="s2">"--nodaemon"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="s2">"--nodaemon"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span> <span class="ow">and</span> <span class="s2">"test"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">:</span>
|
||||
<span class="c1"># activate logging for interactive/testing mode</span>
|
||||
<span class="n">logfile</span> <span class="o">=</span> <span class="n">logger</span><span class="o">.</span><span class="n">WeeklyLogFile</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">basename</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">PORTAL_LOG_FILE</span><span class="p">),</span>
|
||||
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">PORTAL_LOG_FILE</span><span class="p">),</span>
|
||||
<span class="n">day_rotation</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">PORTAL_LOG_DAY_ROTATION</span><span class="p">,</span>
|
||||
<span class="n">max_size</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">PORTAL_LOG_MAX_SIZE</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">application</span><span class="o">.</span><span class="n">setComponent</span><span class="p">(</span><span class="n">ILogObserver</span><span class="p">,</span> <span class="n">logger</span><span class="o">.</span><span class="n">PortalLogObserver</span><span class="p">(</span><span class="n">logfile</span><span class="p">)</span><span class="o">.</span><span class="n">emit</span><span class="p">)</span>
|
||||
<span class="n">globalLogPublisher</span><span class="o">.</span><span class="n">addObserver</span><span class="p">(</span><span class="n">logger</span><span class="o">.</span><span class="n">GetPortalLogObserver</span><span class="p">()(</span><span class="n">logfile</span><span class="p">))</span>
|
||||
|
||||
<span class="c1"># The main Portal server program. This sets up the database</span>
|
||||
<span class="c1"># and is where we store all the other services.</span>
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
<span class="kn">from</span> <span class="nn">twisted.application</span> <span class="kn">import</span> <span class="n">internet</span><span class="p">,</span> <span class="n">service</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.internet</span> <span class="kn">import</span> <span class="n">reactor</span><span class="p">,</span> <span class="n">defer</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.internet.task</span> <span class="kn">import</span> <span class="n">LoopingCall</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.python.log</span> <span class="kn">import</span> <span class="n">ILogObserver</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.logger</span> <span class="kn">import</span> <span class="n">globalLogPublisher</span>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">django</span>
|
||||
|
||||
|
|
@ -689,15 +689,17 @@
|
|||
<span class="c1"># what to execute from.</span>
|
||||
<span class="n">application</span> <span class="o">=</span> <span class="n">service</span><span class="o">.</span><span class="n">Application</span><span class="p">(</span><span class="s2">"Evennia"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="s2">"--nodaemon"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">:</span>
|
||||
<span class="c1"># custom logging, but only if we are not running in interactive mode</span>
|
||||
|
||||
<span class="k">if</span> <span class="s2">"--nodaemon"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span> <span class="ow">and</span> <span class="s2">"test"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">:</span>
|
||||
<span class="c1"># activate logging for interactive/testing mode</span>
|
||||
<span class="n">logfile</span> <span class="o">=</span> <span class="n">logger</span><span class="o">.</span><span class="n">WeeklyLogFile</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">basename</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">SERVER_LOG_FILE</span><span class="p">),</span>
|
||||
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">SERVER_LOG_FILE</span><span class="p">),</span>
|
||||
<span class="n">day_rotation</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">SERVER_LOG_DAY_ROTATION</span><span class="p">,</span>
|
||||
<span class="n">max_size</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">SERVER_LOG_MAX_SIZE</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">application</span><span class="o">.</span><span class="n">setComponent</span><span class="p">(</span><span class="n">ILogObserver</span><span class="p">,</span> <span class="n">logger</span><span class="o">.</span><span class="n">ServerLogObserver</span><span class="p">(</span><span class="n">logfile</span><span class="p">)</span><span class="o">.</span><span class="n">emit</span><span class="p">)</span>
|
||||
<span class="n">globalLogPublisher</span><span class="o">.</span><span class="n">addObserver</span><span class="p">(</span><span class="n">logger</span><span class="o">.</span><span class="n">GetServerLogObserver</span><span class="p">()(</span><span class="n">logfile</span><span class="p">))</span>
|
||||
|
||||
|
||||
<span class="c1"># The main evennia server program. This sets up the database</span>
|
||||
<span class="c1"># and is where we store all the other services.</span>
|
||||
|
|
|
|||
|
|
@ -318,16 +318,25 @@
|
|||
<span class="sd"> Start the pool after the service starts.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">startService</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pool</span><span class="o">.</span><span class="n">start</span><span class="p">()</span></div>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">startService</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pool</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">(</span><span class="s2">"Webserver did not start correctly. Disabling."</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">stopService</span><span class="p">()</span></div>
|
||||
|
||||
<div class="viewcode-block" id="WSGIWebServer.stopService"><a class="viewcode-back" href="../../../api/evennia.server.webserver.html#evennia.server.webserver.WSGIWebServer.stopService">[docs]</a> <span class="k">def</span> <span class="nf">stopService</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Safely stop the pool after the service stops.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">stopService</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pool</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span></div></div>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">stopService</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">(</span><span class="s2">"Webserver stopService error."</span><span class="p">)</span>
|
||||
<span class="k">finally</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pool</span><span class="o">.</span><span class="n">started</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">pool</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="PrivateStaticRoot"><a class="viewcode-back" href="../../../api/evennia.server.webserver.html#evennia.server.webserver.PrivateStaticRoot">[docs]</a><span class="k">class</span> <span class="nc">PrivateStaticRoot</span><span class="p">(</span><span class="n">static</span><span class="o">.</span><span class="n">File</span><span class="p">):</span>
|
||||
|
|
|
|||
|
|
@ -245,6 +245,10 @@
|
|||
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverDict</span><span class="p">(</span><span class="n">_parent</span><span class="o">=</span><span class="n">parent</span><span class="p">)</span>
|
||||
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">((</span><span class="n">key</span><span class="p">,</span> <span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
|
||||
<span class="k">return</span> <span class="n">dat</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="n">defaultdict</span><span class="p">:</span>
|
||||
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverDefaultDict</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="n">_parent</span><span class="o">=</span><span class="n">parent</span><span class="p">)</span>
|
||||
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">((</span><span class="n">key</span><span class="p">,</span> <span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
|
||||
<span class="k">return</span> <span class="n">dat</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">set</span><span class="p">:</span>
|
||||
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverSet</span><span class="p">(</span><span class="n">_parent</span><span class="o">=</span><span class="n">parent</span><span class="p">)</span>
|
||||
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
|
||||
|
|
@ -351,6 +355,25 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</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">class</span> <span class="nc">_SaverDefaultDict</span><span class="p">(</span><span class="n">_SaverDict</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A defaultdict that stores changes to an attribute when updated</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<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="n">factory</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="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">factory</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">default_factory</span> <span class="o">=</span> <span class="n">factory</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
||||
<span class="c1"># detect the case of db.foo['a'] with no immediate assignment</span>
|
||||
<span class="c1"># (important: using `key in self._data` would be always True!)</span>
|
||||
<span class="n">default_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="fm">__setitem__</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">default_value</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="k">class</span> <span class="nc">_SaverSet</span><span class="p">(</span><span class="n">_SaverMutable</span><span class="p">,</span> <span class="n">MutableSet</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A set that saves to an Attribute when updated</span>
|
||||
|
|
@ -449,6 +472,7 @@
|
|||
<span class="n">_SaverSet</span><span class="o">.</span><span class="vm">__name__</span><span class="p">:</span> <span class="nb">set</span><span class="p">,</span>
|
||||
<span class="n">_SaverOrderedDict</span><span class="o">.</span><span class="vm">__name__</span><span class="p">:</span> <span class="n">OrderedDict</span><span class="p">,</span>
|
||||
<span class="n">_SaverDeque</span><span class="o">.</span><span class="vm">__name__</span><span class="p">:</span> <span class="n">deque</span><span class="p">,</span>
|
||||
<span class="n">_SaverDefaultDict</span><span class="o">.</span><span class="vm">__name__</span><span class="p">:</span> <span class="n">defaultdict</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
|
||||
|
|
@ -460,12 +484,15 @@
|
|||
<span class="sd"> """</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_iter</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
|
||||
<span class="c1"># breakpoint()</span>
|
||||
<span class="n">typ</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
||||
<span class="n">tname</span> <span class="o">=</span> <span class="n">typ</span><span class="o">.</span><span class="vm">__name__</span>
|
||||
<span class="k">if</span> <span class="n">tname</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"_SaverDict"</span><span class="p">,</span> <span class="s2">"dict"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">{</span><span class="n">_iter</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">_iter</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">obj</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
|
||||
<span class="k">elif</span> <span class="n">tname</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"_SaverOrderedDict"</span><span class="p">,</span> <span class="s2">"OrderedDict"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">OrderedDict</span><span class="p">([(</span><span class="n">_iter</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">_iter</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">obj</span><span class="o">.</span><span class="n">items</span><span class="p">()])</span>
|
||||
<span class="k">elif</span> <span class="n">tname</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"_SaverDefaultDict"</span><span class="p">,</span> <span class="s2">"defaultdict"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="p">{</span><span class="n">_iter</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">_iter</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">obj</span><span class="o">.</span><span class="n">items</span><span class="p">()})</span>
|
||||
<span class="k">elif</span> <span class="n">tname</span> <span class="ow">in</span> <span class="n">_DESERIALIZE_MAPPING</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">_DESERIALIZE_MAPPING</span><span class="p">[</span><span class="n">tname</span><span class="p">](</span><span class="n">_iter</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
|
||||
|
|
@ -626,6 +653,8 @@
|
|||
<span class="k">return</span> <span class="p">[</span><span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">_SaverDict</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">dict</span><span class="p">((</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="n">defaultdict</span><span class="p">,</span> <span class="n">_SaverDefaultDict</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="p">((</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">set</span><span class="p">,</span> <span class="n">_SaverSet</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">set</span><span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="n">OrderedDict</span><span class="p">,</span> <span class="n">_SaverOrderedDict</span><span class="p">):</span>
|
||||
|
|
@ -677,6 +706,7 @@
|
|||
|
||||
<span class="k">def</span> <span class="nf">process_item</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
|
||||
<span class="sd">"""Recursive processor and identification of data"""</span>
|
||||
<span class="c1"># breakpoint()</span>
|
||||
<span class="n">dtype</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">SafeString</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">item</span>
|
||||
|
|
@ -689,6 +719,8 @@
|
|||
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">dict</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">dict</span><span class="p">((</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="n">defaultdict</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="p">((</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">set</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">set</span><span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="n">OrderedDict</span><span class="p">:</span>
|
||||
|
|
@ -706,6 +738,7 @@
|
|||
|
||||
<span class="k">def</span> <span class="nf">process_tree</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">parent</span><span class="p">):</span>
|
||||
<span class="sd">"""Recursive processor, building a parent-tree from iterable data"""</span>
|
||||
<span class="c1"># breakpoint()</span>
|
||||
<span class="n">dtype</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">SafeString</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">item</span>
|
||||
|
|
@ -724,6 +757,12 @@
|
|||
<span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">dat</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="n">defaultdict</span><span class="p">:</span>
|
||||
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverDefaultDict</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="n">_parent</span><span class="o">=</span><span class="n">parent</span><span class="p">)</span>
|
||||
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
|
||||
<span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">dat</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">set</span><span class="p">:</span>
|
||||
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverSet</span><span class="p">(</span><span class="n">_parent</span><span class="o">=</span><span class="n">parent</span><span class="p">)</span>
|
||||
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">))</span>
|
||||
|
|
@ -763,6 +802,12 @@
|
|||
<span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</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">data</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">dat</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="n">defaultdict</span><span class="p">:</span>
|
||||
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverDefaultDict</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="n">_db_obj</span><span class="o">=</span><span class="n">db_obj</span><span class="p">)</span>
|
||||
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
|
||||
<span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</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">data</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">dat</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">set</span><span class="p">:</span>
|
||||
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverSet</span><span class="p">(</span><span class="n">_db_obj</span><span class="o">=</span><span class="n">db_obj</span><span class="p">)</span>
|
||||
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">data</span><span class="p">)</span>
|
||||
|
|
|
|||
|
|
@ -60,16 +60,213 @@
|
|||
<span class="kn">import</span> <span class="nn">time</span>
|
||||
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
|
||||
<span class="kn">from</span> <span class="nn">traceback</span> <span class="kn">import</span> <span class="n">format_exc</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.python</span> <span class="kn">import</span> <span class="n">log</span><span class="p">,</span> <span class="n">logfile</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted</span> <span class="kn">import</span> <span class="n">logger</span> <span class="k">as</span> <span class="n">twisted_logger</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.python</span> <span class="kn">import</span> <span class="n">logfile</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.python</span> <span class="kn">import</span> <span class="n">util</span> <span class="k">as</span> <span class="n">twisted_util</span>
|
||||
<span class="kn">from</span> <span class="nn">twisted.internet.threads</span> <span class="kn">import</span> <span class="n">deferToThread</span>
|
||||
|
||||
<span class="n">log</span> <span class="o">=</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">Logger</span><span class="p">()</span>
|
||||
|
||||
<span class="n">_LOGDIR</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_LOG_ROTATE_SIZE</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_TIMEZONE</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">_CHANNEL_LOG_NUM_TAIL_LINES</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
||||
<span class="n">_TIME_FORMAT</span> <span class="o">=</span> <span class="s2">"%Y-%m-</span><span class="si">%d</span><span class="s2"> %H:%M:%S"</span>
|
||||
|
||||
|
||||
<span class="k">def</span> <span class="nf">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">logfunc</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">""</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">msg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">msg</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">msg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
<span class="n">logfunc</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</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="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">msg</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">logfunc</span><span class="p">(</span><span class="s2">"</span><span class="si">{line}</span><span class="s2">"</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span> <span class="n">line</span><span class="o">=</span><span class="n">line</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">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Log failure: </span><span class="si">{err}</span><span class="s2">"</span><span class="p">,</span> <span class="n">err</span><span class="o">=</span><span class="n">err</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="c1"># log call functions (each has legacy aliases)</span>
|
||||
|
||||
<div class="viewcode-block" id="log_info"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_info">[docs]</a><span class="k">def</span> <span class="nf">log_info</span><span class="p">(</span><span class="n">msg</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"> Logs any generic debugging/informative info that should appear in the log.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> msg: (string) The message to be logged.</span>
|
||||
<span class="sd"> **kwargs: If given, The `msg` is parsed as a format string with `{..}`</span>
|
||||
<span class="sd"> formatting markers that should match the keywords.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<span class="n">info</span> <span class="o">=</span> <span class="n">log_info</span>
|
||||
<span class="n">log_infomsg</span> <span class="o">=</span> <span class="n">log_info</span>
|
||||
<span class="n">log_msg</span> <span class="o">=</span> <span class="n">log_info</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_warn"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_warn">[docs]</a><span class="k">def</span> <span class="nf">log_warn</span><span class="p">(</span><span class="n">msg</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"> Logs warnings that aren't critical but should be noted.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> msg (str): The message to be logged.</span>
|
||||
<span class="sd"> **kwargs: If given, The `msg` is parsed as a format string with `{..}`</span>
|
||||
<span class="sd"> formatting markers that should match the keywords.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">warn</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<span class="n">warn</span> <span class="o">=</span> <span class="n">log_warn</span>
|
||||
<span class="n">warning</span> <span class="o">=</span> <span class="n">log_warn</span>
|
||||
<span class="n">log_warnmsg</span> <span class="o">=</span> <span class="n">log_warn</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_err"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_err">[docs]</a><span class="k">def</span> <span class="nf">log_err</span><span class="p">(</span><span class="n">msg</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"> Logs an error message to the server log.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> msg (str): The message to be logged.</span>
|
||||
<span class="sd"> **kwargs: If given, The `msg` is parsed as a format string with `{..}`</span>
|
||||
<span class="sd"> formatting markers that should match the keywords.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">error</span> <span class="o">=</span> <span class="n">log_err</span>
|
||||
<span class="n">err</span> <span class="o">=</span> <span class="n">log_err</span>
|
||||
<span class="n">log_errmsg</span> <span class="o">=</span> <span class="n">log_err</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_trace"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_trace">[docs]</a><span class="k">def</span> <span class="nf">log_trace</span><span class="p">(</span><span class="n">msg</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"> Log a traceback to the log. This should be called from within an</span>
|
||||
<span class="sd"> exception.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> msg (str, optional): Adds an extra line with added info</span>
|
||||
<span class="sd"> at the end of the traceback in the log.</span>
|
||||
<span class="sd"> **kwargs: If given, The `msg` is parsed as a format string with `{..}`</span>
|
||||
<span class="sd"> formatting markers that should match the keywords.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">tracestring</span> <span class="o">=</span> <span class="n">format_exc</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">tracestring</span><span class="p">:</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">tracestring</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"!!"</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">msg</span><span class="p">:</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"!!"</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<span class="n">log_tracemsg</span> <span class="o">=</span> <span class="n">log_trace</span>
|
||||
<span class="n">exception</span> <span class="o">=</span> <span class="n">log_trace</span>
|
||||
<span class="n">critical</span> <span class="o">=</span> <span class="n">log_trace</span>
|
||||
<span class="n">trace</span> <span class="o">=</span> <span class="n">log_trace</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_dep"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_dep">[docs]</a><span class="k">def</span> <span class="nf">log_dep</span><span class="p">(</span><span class="n">msg</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"> Prints a deprecation message.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> msg (str): The deprecation message to log.</span>
|
||||
<span class="sd"> **kwargs: If given, The `msg` is parsed as a format string with `{..}`</span>
|
||||
<span class="sd"> formatting markers that should match the keywords.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">warn</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"DP"</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">dep</span> <span class="o">=</span> <span class="n">log_dep</span>
|
||||
<span class="n">deprecated</span> <span class="o">=</span> <span class="n">log_dep</span>
|
||||
<span class="n">log_depmsg</span> <span class="o">=</span> <span class="n">log_dep</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_sec"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_sec">[docs]</a><span class="k">def</span> <span class="nf">log_sec</span><span class="p">(</span><span class="n">msg</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"> Prints a security-related message.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> msg (str): The security message to log.</span>
|
||||
<span class="sd"> **kwargs: If given, The `msg` is parsed as a format string with `{..}`</span>
|
||||
<span class="sd"> formatting markers that should match the keywords.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"SS"</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
<span class="n">sec</span> <span class="o">=</span> <span class="n">log_sec</span>
|
||||
<span class="n">security</span> <span class="o">=</span> <span class="n">log_sec</span>
|
||||
<span class="n">log_secmsg</span> <span class="o">=</span> <span class="n">log_sec</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_server"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_server">[docs]</a><span class="k">def</span> <span class="nf">log_server</span><span class="p">(</span><span class="n">msg</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"> This is for the Portal to log captured Server stdout messages (it's</span>
|
||||
<span class="sd"> usually only used during startup, before Server log is open)</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> msg (str): The message to be logged.</span>
|
||||
<span class="sd"> **kwargs: If given, The `msg` is parsed as a format string with `{..}`</span>
|
||||
<span class="sd"> formatting markers that should match the keywords.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"Server"</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="GetLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.GetLogObserver">[docs]</a><span class="k">class</span> <span class="nc">GetLogObserver</span><span class="p">:</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Sets up how the system logs are formatted.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">component_prefix</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">event_levels</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">twisted_logger</span><span class="o">.</span><span class="n">LogLevel</span><span class="o">.</span><span class="n">debug</span><span class="p">:</span> <span class="s2">"??"</span><span class="p">,</span>
|
||||
<span class="n">twisted_logger</span><span class="o">.</span><span class="n">LogLevel</span><span class="o">.</span><span class="n">info</span><span class="p">:</span> <span class="s2">".."</span><span class="p">,</span>
|
||||
<span class="n">twisted_logger</span><span class="o">.</span><span class="n">LogLevel</span><span class="o">.</span><span class="n">warn</span><span class="p">:</span> <span class="s2">"WW"</span><span class="p">,</span>
|
||||
<span class="n">twisted_logger</span><span class="o">.</span><span class="n">LogLevel</span><span class="o">.</span><span class="n">error</span><span class="p">:</span> <span class="s2">"EE"</span><span class="p">,</span>
|
||||
<span class="n">twisted_logger</span><span class="o">.</span><span class="n">LogLevel</span><span class="o">.</span><span class="n">critical</span><span class="p">:</span> <span class="s2">"!!"</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
|
||||
<div class="viewcode-block" id="GetLogObserver.format_log_event"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.GetLogObserver.format_log_event">[docs]</a> <span class="k">def</span> <span class="nf">format_log_event</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> By assigning log_system here, we skip the spammy display of namespace/level</span>
|
||||
<span class="sd"> in the default log output.</span>
|
||||
|
||||
<span class="sd"> [component_prefix] [date] [system/lvl] [msg]</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># setting log_system fills the [..] block after the time stamp</span>
|
||||
<span class="n">prefix</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prefix"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">prefix</span><span class="p">:</span>
|
||||
<span class="n">event</span><span class="p">[</span><span class="s2">"log_system"</span><span class="p">]</span> <span class="o">=</span> <span class="n">prefix</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">lvl</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"log_level"</span><span class="p">,</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">LogLevel</span><span class="o">.</span><span class="n">info</span><span class="p">)</span>
|
||||
<span class="n">event</span><span class="p">[</span><span class="s2">"log_system"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">event_levels</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">lvl</span><span class="p">,</span> <span class="s2">"-"</span><span class="p">)</span>
|
||||
<span class="n">event</span><span class="p">[</span><span class="s2">"log_format"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"log_format"</span><span class="p">,</span> <span class="s2">""</span><span class="p">))</span>
|
||||
<span class="n">component_prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">component_prefix</span> <span class="ow">or</span> <span class="s2">""</span>
|
||||
<span class="n">log_msg</span> <span class="o">=</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">formatEventAsClassicLogText</span><span class="p">(</span>
|
||||
<span class="n">event</span><span class="p">,</span>
|
||||
<span class="n">formatTime</span><span class="o">=</span><span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">formatTime</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">_TIME_FORMAT</span><span class="p">)</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">component_prefix</span><span class="si">}{</span><span class="n">log_msg</span><span class="si">}</span><span class="s2">"</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">outfile</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">FileLogObserver</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_log_event</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="c1"># Called by server/portal on startup</span>
|
||||
|
||||
<div class="viewcode-block" id="GetPortalLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.GetPortalLogObserver">[docs]</a><span class="k">class</span> <span class="nc">GetPortalLogObserver</span><span class="p">(</span><span class="n">GetLogObserver</span><span class="p">):</span>
|
||||
<span class="n">component_prefix</span> <span class="o">=</span> <span class="s2">"|Portal| "</span></div>
|
||||
|
||||
<div class="viewcode-block" id="GetServerLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.GetServerLogObserver">[docs]</a><span class="k">class</span> <span class="nc">GetServerLogObserver</span><span class="p">(</span><span class="n">GetLogObserver</span><span class="p">):</span>
|
||||
<span class="n">component_prefix</span> <span class="o">=</span> <span class="s2">""</span></div>
|
||||
|
||||
|
||||
|
||||
<span class="c1"># logging overrides</span>
|
||||
|
||||
|
|
@ -79,7 +276,7 @@
|
|||
<span class="sd"> This helper function will format the current time in the same</span>
|
||||
<span class="sd"> way as the twisted logger does, including time zone info. Only</span>
|
||||
<span class="sd"> difference from official logger is that we only use two digits</span>
|
||||
<span class="sd"> for the year and don't show timezone for CET times.</span>
|
||||
<span class="sd"> for the year and don't show timezone for GMT times.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> when (int, optional): This is a time in POSIX seconds on the form</span>
|
||||
|
|
@ -197,196 +394,6 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">lastDate</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lastDate</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">toDate</span><span class="p">())</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="PortalLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.PortalLogObserver">[docs]</a><span class="k">class</span> <span class="nc">PortalLogObserver</span><span class="p">(</span><span class="n">log</span><span class="o">.</span><span class="n">FileLogObserver</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Reformat logging</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">timeFormat</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">prefix</span> <span class="o">=</span> <span class="s2">" |Portal| "</span>
|
||||
|
||||
<div class="viewcode-block" id="PortalLogObserver.emit"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.PortalLogObserver.emit">[docs]</a> <span class="k">def</span> <span class="nf">emit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">eventDict</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Copied from Twisted parent, to change logging output</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="n">log</span><span class="o">.</span><span class="n">textFromEventDict</span><span class="p">(</span><span class="n">eventDict</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">text</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="k">return</span>
|
||||
|
||||
<span class="c1"># timeStr = self.formatTime(eventDict["time"])</span>
|
||||
<span class="n">timeStr</span> <span class="o">=</span> <span class="n">timeformat</span><span class="p">(</span><span class="n">eventDict</span><span class="p">[</span><span class="s2">"time"</span><span class="p">])</span>
|
||||
<span class="n">fmtDict</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="n">text</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="se">\n\t</span><span class="s2">"</span><span class="p">)}</span>
|
||||
|
||||
<span class="n">msgStr</span> <span class="o">=</span> <span class="n">log</span><span class="o">.</span><span class="n">_safeFormat</span><span class="p">(</span><span class="s2">"</span><span class="si">%(text)s</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="n">fmtDict</span><span class="p">)</span>
|
||||
|
||||
<span class="n">twisted_util</span><span class="o">.</span><span class="n">untilConcludes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">,</span> <span class="n">timeStr</span> <span class="o">+</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">prefix</span> <span class="o">+</span> <span class="n">msgStr</span><span class="p">)</span>
|
||||
<span class="n">twisted_util</span><span class="o">.</span><span class="n">untilConcludes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">flush</span><span class="p">)</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="ServerLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.ServerLogObserver">[docs]</a><span class="k">class</span> <span class="nc">ServerLogObserver</span><span class="p">(</span><span class="n">PortalLogObserver</span><span class="p">):</span>
|
||||
<span class="n">prefix</span> <span class="o">=</span> <span class="s2">" "</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_msg"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_msg">[docs]</a><span class="k">def</span> <span class="nf">log_msg</span><span class="p">(</span><span class="n">msg</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Wrapper around log.msg call to catch any exceptions that might</span>
|
||||
<span class="sd"> occur in logging. If an exception is raised, we'll print to</span>
|
||||
<span class="sd"> stdout instead.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> msg: The message that was passed to log.msg</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">log</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Exception raised while writing message to log. Original message: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">msg</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_trace"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_trace">[docs]</a><span class="k">def</span> <span class="nf">log_trace</span><span class="p">(</span><span class="n">errmsg</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Log a traceback to the log. This should be called from within an</span>
|
||||
<span class="sd"> exception.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> errmsg (str, optional): Adds an extra line with added info</span>
|
||||
<span class="sd"> at the end of the traceback in the log.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">tracestring</span> <span class="o">=</span> <span class="n">format_exc</span><span class="p">()</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">tracestring</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">tracestring</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">log</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"[::] </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">line</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">errmsg</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">errmsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">errmsg</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">errmsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">errmsg</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">log_msg</span><span class="p">(</span><span class="s2">"[EE] </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">line</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
<span class="n">log_msg</span><span class="p">(</span><span class="s2">"[EE] </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">errmsg</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">log_tracemsg</span> <span class="o">=</span> <span class="n">log_trace</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_err"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_err">[docs]</a><span class="k">def</span> <span class="nf">log_err</span><span class="p">(</span><span class="n">errmsg</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Prints/logs an error message to the server log.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> errmsg (str): The message to be logged.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">errmsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">errmsg</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">errmsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">errmsg</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">log_msg</span><span class="p">(</span><span class="s2">"[EE] </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">line</span><span class="p">)</span></div>
|
||||
|
||||
<span class="c1"># log.err('ERROR: %s' % (errmsg,))</span>
|
||||
|
||||
|
||||
<span class="n">log_errmsg</span> <span class="o">=</span> <span class="n">log_err</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_server"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_server">[docs]</a><span class="k">def</span> <span class="nf">log_server</span><span class="p">(</span><span class="n">servermsg</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> This is for the Portal to log captured Server stdout messages (it's</span>
|
||||
<span class="sd"> usually only used during startup, before Server log is open)</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">servermsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">servermsg</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">servermsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">servermsg</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">log_msg</span><span class="p">(</span><span class="s2">"[Server] </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">line</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_warn"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_warn">[docs]</a><span class="k">def</span> <span class="nf">log_warn</span><span class="p">(</span><span class="n">warnmsg</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Prints/logs any warnings that aren't critical but should be noted.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> warnmsg (str): The message to be logged.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">warnmsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">warnmsg</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">warnmsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">warnmsg</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">log_msg</span><span class="p">(</span><span class="s2">"[WW] </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">line</span><span class="p">)</span></div>
|
||||
|
||||
<span class="c1"># log.msg('WARNING: %s' % (warnmsg,))</span>
|
||||
|
||||
|
||||
<span class="n">log_warnmsg</span> <span class="o">=</span> <span class="n">log_warn</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_info"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_info">[docs]</a><span class="k">def</span> <span class="nf">log_info</span><span class="p">(</span><span class="n">infomsg</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Prints any generic debugging/informative info that should appear in the log.</span>
|
||||
|
||||
<span class="sd"> infomsg: (string) The message to be logged.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">infomsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">infomsg</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">infomsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">infomsg</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">log_msg</span><span class="p">(</span><span class="s2">"[..] </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">line</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">log_infomsg</span> <span class="o">=</span> <span class="n">log_info</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_dep"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_dep">[docs]</a><span class="k">def</span> <span class="nf">log_dep</span><span class="p">(</span><span class="n">depmsg</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Prints a deprecation message.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> depmsg (str): The deprecation message to log.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">depmsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">depmsg</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">depmsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">depmsg</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">log_msg</span><span class="p">(</span><span class="s2">"[DP] </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">line</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">log_depmsg</span> <span class="o">=</span> <span class="n">log_dep</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_sec"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_sec">[docs]</a><span class="k">def</span> <span class="nf">log_sec</span><span class="p">(</span><span class="n">secmsg</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Prints a security-related message.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> secmsg (str): The security message to log.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">secmsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">secmsg</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
||||
<span class="n">secmsg</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">secmsg</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
|
||||
<span class="n">log_msg</span><span class="p">(</span><span class="s2">"[SS] </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">line</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">log_secmsg</span> <span class="o">=</span> <span class="n">log_sec</span>
|
||||
|
||||
|
||||
<span class="c1"># Arbitrary file logger</span>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -138,8 +138,9 @@
|
|||
<span class="s2">"evennia.game_template.server.conf.prototypefuncs"</span><span class="p">,</span>
|
||||
<span class="p">],</span>
|
||||
<span class="n">BASE_GUEST_TYPECLASS</span><span class="o">=</span><span class="s2">"evennia.accounts.accounts.DefaultGuest"</span><span class="p">,</span>
|
||||
<span class="c1"># a special flag; test with settings._TEST_ENVIRONMENT to see if code runs in a test</span>
|
||||
<span class="n">_TEST_ENVIRONMENT</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
||||
|
||||
<span class="c1"># a special setting boolean _TEST_ENVIRONMENT is set by the test runner</span>
|
||||
<span class="c1"># while the test suite is running.</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">DEFAULT_SETTINGS</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">all_from_module</span><span class="p">(</span><span class="n">settings_default</span><span class="p">),</span> <span class="o">**</span><span class="n">DEFAULT_SETTING_RESETS</span><span class="p">}</span>
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@
|
|||
<span class="n">re</span><span class="o">.</span><span class="n">S</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">re_dblspace</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">" {2,}"</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span><span class="p">)</span>
|
||||
<span class="n">re_invisiblespace</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="p">)</span>
|
||||
<span class="n">re_url</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span>
|
||||
<span class="sa">r</span><span class="s1">'(?<!=")((?:ftp|www|https?)\W+(?:(?!\.(?:\s|$)|&\w+;)[^"</span><span class="se">\'</span><span class="s1">,;$*^</span><span class="se">\\</span><span class="s1">()</span><span class="si">{}</span><span class="s1"><>\[\]\s])+)(\.(?:\s|$)|&\w+;|)'</span>
|
||||
<span class="p">)</span>
|
||||
|
|
@ -313,6 +314,13 @@
|
|||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_dblspace</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sub_dblspace</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.re_invisible_space"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.re_invisible_space">[docs]</a> <span class="k">def</span> <span class="nf">re_invisible_space</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> If two spaces are separated by an invisble html element, they act as a</span>
|
||||
<span class="sd"> hidden double-space and the last of them should be replaced by &nbsp;</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_invisiblespace</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sub_invisiblespace</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.sub_mxp_links"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.sub_mxp_links">[docs]</a> <span class="k">def</span> <span class="nf">sub_mxp_links</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Helper method to be passed to re.sub,</span>
|
||||
|
|
@ -378,6 +386,10 @@
|
|||
<span class="s2">"clean up double-spaces"</span>
|
||||
<span class="k">return</span> <span class="s2">" "</span> <span class="o">+</span> <span class="s2">"&nbsp;"</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">())</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.sub_invisiblespace"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.sub_invisiblespace">[docs]</a> <span class="k">def</span> <span class="nf">sub_invisiblespace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">):</span>
|
||||
<span class="s2">"clean up invisible spaces"</span>
|
||||
<span class="k">return</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"&nbsp;"</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.parse"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Main access function, converts a text containing ANSI codes</span>
|
||||
|
|
@ -389,7 +401,10 @@
|
|||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> text (str): Parsed text.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># print(f"incoming ansi:\n{text}")</span>
|
||||
|
||||
<span class="c1"># parse everything to ansi first</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="n">parse_ansi</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="n">strip_ansi</span><span class="p">,</span> <span class="n">xterm256</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">mxp</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="c1"># convert all ansi to html</span>
|
||||
|
|
@ -406,8 +421,9 @@
|
|||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">remove_backspaces</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_urls</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_double_space</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_invisible_space</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="c1"># clean out eventual ansi that was missed</span>
|
||||
<span class="c1"># result = parse_ansi(result, strip_ansi=True)</span>
|
||||
<span class="c1">## result = parse_ansi(result, strip_ansi=True)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">result</span></div></div>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue