mirror of
https://github.com/evennia/evennia.git
synced 2026-03-21 15:26:30 +01:00
335 lines
No EOL
27 KiB
HTML
335 lines
No EOL
27 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>evennia.server.initial_setup — Evennia 1.0-dev documentation</title>
|
|
<link rel="stylesheet" href="../../../_static/nature.css" type="text/css" />
|
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
|
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
|
<script src="../../../_static/jquery.js"></script>
|
|
<script src="../../../_static/underscore.js"></script>
|
|
<script src="../../../_static/doctools.js"></script>
|
|
<script src="../../../_static/language_data.js"></script>
|
|
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
|
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../../search.html" />
|
|
</head><body>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.server.initial_setup</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
|
|
<div class="document">
|
|
|
|
<div class="documentwrapper">
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<p class="logo"><a href="../../../index.html">
|
|
<img class="logo" src="../../../_static/evennia_logo.png" alt="Logo"/>
|
|
</a></p>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" />
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>$('#searchbox').show(0);</script><h3>Links</h3>
|
|
<ul>
|
|
<li><a href="https://www.evennia.com">Home page</a> </li>
|
|
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
|
|
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
|
<li>
|
|
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
|
|
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
|
|
<a href="https://evennia.blogspot.com/">Blog</a>
|
|
</li>
|
|
</ul>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="initial_setup.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for evennia.server.initial_setup</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">This module handles initial database propagation, which is only run the first time the game starts.</span>
|
|
<span class="sd">It will create some default objects (notably give #1 its evennia-specific properties, and create the</span>
|
|
<span class="sd">Limbo room). It will also hooks, and then perform an initial restart.</span>
|
|
|
|
<span class="sd">Everything starts at handle_setup()</span>
|
|
<span class="sd">"""</span>
|
|
|
|
|
|
<span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
|
<span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="kn">import</span> <span class="n">AccountDB</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.server.models</span> <span class="kn">import</span> <span class="n">ServerConfig</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span><span class="p">,</span> <span class="n">logger</span>
|
|
|
|
|
|
<span class="n">ERROR_NO_SUPERUSER</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2"> No superuser exists yet. The superuser is the 'owner' account on</span>
|
|
<span class="s2"> the Evennia server. Create a new superuser using the command</span>
|
|
|
|
<span class="s2"> evennia createsuperuser</span>
|
|
|
|
<span class="s2"> Follow the prompts, then restart the server.</span>
|
|
<span class="s2"> """</span>
|
|
|
|
|
|
<span class="n">LIMBO_DESC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd">Welcome to your new |wEvennia|n-based game! Visit https://www.evennia.com if you need</span>
|
|
<span class="sd">help, want to contribute, report issues or just join the community.</span>
|
|
|
|
<span class="sd">As a privileged user, write |wbatchcommand tutorial_world.build|n to build</span>
|
|
<span class="sd">tutorial content. Once built, try |wintro|n for starting help and |wtutorial|n to</span>
|
|
<span class="sd">play the demo game.</span>
|
|
<span class="sd">"""</span>
|
|
<span class="p">)</span>
|
|
|
|
|
|
<span class="n">WARNING_POSTGRESQL_FIX</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2"> PostgreSQL-psycopg2 compatibility fix:</span>
|
|
<span class="s2"> The in-game channels </span><span class="si">{chan1}</span><span class="s2">, </span><span class="si">{chan2}</span><span class="s2"> and </span><span class="si">{chan3}</span><span class="s2"> were created,</span>
|
|
<span class="s2"> but the superuser was not yet connected to them. Please use in</span>
|
|
<span class="s2"> game commands to connect Account #1 to those channels when first</span>
|
|
<span class="s2"> logging in.</span>
|
|
<span class="s2">"""</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_get_superuser_account</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get the superuser (created at the command line) and don't take no for an answer.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> Account: The first superuser (User #1).</span>
|
|
|
|
<span class="sd"> Raises:</span>
|
|
<span class="sd"> AccountDB.DoesNotExist: If the superuser couldn't be found.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">superuser</span> <span class="o">=</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">(</span><span class="n">ERROR_NO_SUPERUSER</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">superuser</span>
|
|
|
|
|
|
<div class="viewcode-block" id="create_objects"><a class="viewcode-back" href="../../../api/evennia.server.initial_setup.html#evennia.server.initial_setup.create_objects">[docs]</a><span class="k">def</span> <span class="nf">create_objects</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Creates the #1 account and Limbo room.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="s2">"Initial setup: Creating objects (Account #1 and Limbo room) ..."</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Set the initial User's account object's username on the #1 object.</span>
|
|
<span class="c1"># This object is pure django and only holds name, email and password.</span>
|
|
<span class="n">superuser</span> <span class="o">=</span> <span class="n">_get_superuser_account</span><span class="p">()</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span>
|
|
|
|
<span class="c1"># Create an Account 'user profile' object to hold eventual</span>
|
|
<span class="c1"># mud-specific settings for the AccountDB object.</span>
|
|
<span class="n">account_typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ACCOUNT_TYPECLASS</span>
|
|
|
|
<span class="c1"># run all creation hooks on superuser (we must do so manually</span>
|
|
<span class="c1"># since the manage.py command does not)</span>
|
|
<span class="n">superuser</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="n">account_typeclass</span><span class="p">,</span> <span class="n">clean_attributes</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">superuser</span><span class="o">.</span><span class="n">basetype_setup</span><span class="p">()</span>
|
|
<span class="n">superuser</span><span class="o">.</span><span class="n">at_account_creation</span><span class="p">()</span>
|
|
<span class="n">superuser</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
|
|
<span class="s2">"examine:perm(Developer);edit:false();delete:false();boot:false();msg:all()"</span>
|
|
<span class="p">)</span>
|
|
<span class="c1"># this is necessary for quelling to work correctly.</span>
|
|
<span class="n">superuser</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"Developer"</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Limbo is the default "nowhere" starting room</span>
|
|
|
|
<span class="c1"># Create the in-game god-character for account #1 and set</span>
|
|
<span class="c1"># it to exist in Limbo.</span>
|
|
<span class="n">character_typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHARACTER_TYPECLASS</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">superuser_character</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
|
|
<span class="n">superuser_character</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span>
|
|
<span class="n">character_typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">superuser</span><span class="o">.</span><span class="n">username</span><span class="p">,</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">superuser_character</span><span class="o">.</span><span class="n">db_typeclass_path</span> <span class="o">=</span> <span class="n">character_typeclass</span>
|
|
<span class="n">superuser_character</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="n">_</span><span class="p">(</span><span class="s2">"This is User #1."</span><span class="p">)</span>
|
|
<span class="n">superuser_character</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
|
|
<span class="s2">"examine:perm(Developer);edit:false();delete:false();boot:false();msg:all();puppet:false()"</span>
|
|
<span class="p">)</span>
|
|
<span class="c1"># we set this low so that quelling is more useful</span>
|
|
<span class="n">superuser_character</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"Developer"</span><span class="p">)</span>
|
|
<span class="n">superuser_character</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
|
|
|
<span class="n">superuser</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_first_login"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">superuser</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_last_puppet"</span><span class="p">,</span> <span class="n">superuser_character</span><span class="p">)</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">superuser</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">superuser_character</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|
<span class="n">superuser</span><span class="o">.</span><span class="n">db_playable_characters</span> <span class="o">=</span> <span class="p">[</span><span class="n">superuser_character</span><span class="p">]</span>
|
|
|
|
<span class="n">room_typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ROOM_TYPECLASS</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">limbo_obj</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
|
|
<span class="n">limbo_obj</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="n">room_typeclass</span><span class="p">,</span> <span class="n">_</span><span class="p">(</span><span class="s2">"Limbo"</span><span class="p">),</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
|
|
<span class="n">limbo_obj</span><span class="o">.</span><span class="n">db_typeclass_path</span> <span class="o">=</span> <span class="n">room_typeclass</span>
|
|
<span class="n">limbo_obj</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="n">LIMBO_DESC</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">limbo_obj</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
|
|
|
<span class="c1"># Now that Limbo exists, try to set the user up in Limbo (unless</span>
|
|
<span class="c1"># the creation hooks already fixed this).</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">superuser_character</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
|
|
<span class="n">superuser_character</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="n">limbo_obj</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">superuser_character</span><span class="o">.</span><span class="n">home</span><span class="p">:</span>
|
|
<span class="n">superuser_character</span><span class="o">.</span><span class="n">home</span> <span class="o">=</span> <span class="n">limbo_obj</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="at_initial_setup"><a class="viewcode-back" href="../../../api/evennia.server.initial_setup.html#evennia.server.initial_setup.at_initial_setup">[docs]</a><span class="k">def</span> <span class="nf">at_initial_setup</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Custom hook for users to overload some or all parts of the initial</span>
|
|
<span class="sd"> setup. Called very last in the sequence. It tries to import and</span>
|
|
<span class="sd"> srun a module settings.AT_INITIAL_SETUP_HOOK_MODULE and will fail</span>
|
|
<span class="sd"> silently if this does not exist or fails to load.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">modname</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">AT_INITIAL_SETUP_HOOK_MODULE</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">modname</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">mod</span> <span class="o">=</span> <span class="nb">__import__</span><span class="p">(</span><span class="n">modname</span><span class="p">,</span> <span class="n">fromlist</span><span class="o">=</span><span class="p">[</span><span class="kc">None</span><span class="p">])</span>
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">ImportError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">):</span>
|
|
<span class="k">return</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="s2">"Initial setup: Running at_initial_setup() hook."</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">mod</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"at_initial_setup"</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
|
|
<span class="n">mod</span><span class="o">.</span><span class="n">at_initial_setup</span><span class="p">()</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="collectstatic"><a class="viewcode-back" href="../../../api/evennia.server.initial_setup.html#evennia.server.initial_setup.collectstatic">[docs]</a><span class="k">def</span> <span class="nf">collectstatic</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Run collectstatic to make sure all web assets are loaded.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="kn">from</span> <span class="nn">django.core.management</span> <span class="kn">import</span> <span class="n">call_command</span>
|
|
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="s2">"Initial setup: Gathering static resources using 'collectstatic'"</span><span class="p">)</span>
|
|
<span class="n">call_command</span><span class="p">(</span><span class="s2">"collectstatic"</span><span class="p">,</span> <span class="s2">"--noinput"</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="reset_server"><a class="viewcode-back" href="../../../api/evennia.server.initial_setup.html#evennia.server.initial_setup.reset_server">[docs]</a><span class="k">def</span> <span class="nf">reset_server</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> We end the initialization by resetting the server. This makes sure</span>
|
|
<span class="sd"> the first login is the same as all the following ones,</span>
|
|
<span class="sd"> particularly it cleans all caches for the special objects. It</span>
|
|
<span class="sd"> also checks so the warm-reset mechanism works as it should.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">ServerConfig</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">conf</span><span class="p">(</span><span class="s2">"server_epoch"</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
|
|
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="s2">"Initial setup complete. Restarting Server once."</span><span class="p">)</span>
|
|
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">portal_reset_server</span><span class="p">()</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="handle_setup"><a class="viewcode-back" href="../../../api/evennia.server.initial_setup.html#evennia.server.initial_setup.handle_setup">[docs]</a><span class="k">def</span> <span class="nf">handle_setup</span><span class="p">(</span><span class="n">last_step</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Main logic for the module. It allows for restarting the</span>
|
|
<span class="sd"> initialization at any point if one of the modules should crash.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> last_step (str, None): The last stored successful step, for starting</span>
|
|
<span class="sd"> over on errors. None if starting from scratch. If this is 'done',</span>
|
|
<span class="sd"> the function will exit immediately.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">last_step</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"done"</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
|
|
<span class="c1"># this means we don't need to handle setup since</span>
|
|
<span class="c1"># it already ran sucessfully once. -1 is the legacy</span>
|
|
<span class="c1"># value for existing databases.</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># setup sequence</span>
|
|
<span class="n">setup_sequence</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"create_objects"</span><span class="p">:</span> <span class="n">create_objects</span><span class="p">,</span>
|
|
<span class="s2">"at_initial_setup"</span><span class="p">:</span> <span class="n">at_initial_setup</span><span class="p">,</span>
|
|
<span class="s2">"collectstatic"</span><span class="p">:</span> <span class="n">collectstatic</span><span class="p">,</span>
|
|
<span class="s2">"done"</span><span class="p">:</span> <span class="n">reset_server</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="c1"># determine the sequence so we can skip ahead</span>
|
|
<span class="n">steps</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">setup_sequence</span><span class="p">)</span>
|
|
<span class="n">steps</span> <span class="o">=</span> <span class="n">steps</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">last_step</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">last_step</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="mi">0</span> <span class="p">:]</span>
|
|
|
|
<span class="c1"># step through queue from last completed function. Once completed,</span>
|
|
<span class="c1"># the 'done' key should be set.</span>
|
|
<span class="k">for</span> <span class="n">stepname</span> <span class="ow">in</span> <span class="n">steps</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">setup_sequence</span><span class="p">[</span><span class="n">stepname</span><span class="p">]()</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="c1"># we re-raise to make sure to stop startup</span>
|
|
<span class="k">raise</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># save the step</span>
|
|
<span class="n">ServerConfig</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">conf</span><span class="p">(</span><span class="s2">"last_initial_setup_step"</span><span class="p">,</span> <span class="n">stepname</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">stepname</span> <span class="o">==</span> <span class="s2">"done"</span><span class="p">:</span>
|
|
<span class="c1"># always exit on 'done'</span>
|
|
<span class="k">break</span></div>
|
|
</pre></div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.server.initial_setup</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2020, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
|
</div>
|
|
</body>
|
|
</html> |