mirror of
https://github.com/evennia/evennia.git
synced 2026-03-22 15:56:30 +01:00
284 lines
No EOL
20 KiB
HTML
284 lines
No EOL
20 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>evennia.accounts.manager — 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.accounts.manager</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for evennia.accounts.manager</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">The managers for the custom Account object and permissions.</span>
|
|
<span class="sd">"""</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">datetime</span>
|
|
<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">timezone</span>
|
|
<span class="kn">from</span> <span class="nn">django.contrib.auth.models</span> <span class="k">import</span> <span class="n">UserManager</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="k">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
|
|
|
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"AccountManager"</span><span class="p">,)</span>
|
|
|
|
|
|
<span class="c1">#</span>
|
|
<span class="c1"># Account Manager</span>
|
|
<span class="c1">#</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">AccountDBManager</span><span class="p">(</span><span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">UserManager</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This AccountManager implements methods for searching</span>
|
|
<span class="sd"> and manipulating Accounts directly from the database.</span>
|
|
|
|
<span class="sd"> Evennia-specific search methods (will return Characters if</span>
|
|
<span class="sd"> possible or a Typeclass/list of Typeclassed objects, whereas</span>
|
|
<span class="sd"> Django-general methods will return Querysets or database objects):</span>
|
|
|
|
<span class="sd"> dbref (converter)</span>
|
|
<span class="sd"> dbref_search</span>
|
|
<span class="sd"> get_dbref_range</span>
|
|
<span class="sd"> object_totals</span>
|
|
<span class="sd"> typeclass_search</span>
|
|
<span class="sd"> num_total_accounts</span>
|
|
<span class="sd"> get_connected_accounts</span>
|
|
<span class="sd"> get_recently_created_accounts</span>
|
|
<span class="sd"> get_recently_connected_accounts</span>
|
|
<span class="sd"> get_account_from_email</span>
|
|
<span class="sd"> get_account_from_uid</span>
|
|
<span class="sd"> get_account_from_name</span>
|
|
<span class="sd"> account_search (equivalent to evennia.search_account)</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="nf">num_total_accounts</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get total number of accounts.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> count (int): The total number of registered accounts.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_connected_accounts</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get all currently connected accounts.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> count (list): Account objects with currently</span>
|
|
<span class="sd"> connected sessions.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_is_connected</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_recently_created_accounts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">days</span><span class="o">=</span><span class="mi">7</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get accounts recently created.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> days (int, optional): How many days in the past "recently" means.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> accounts (list): The Accounts created the last `days` interval.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">end_date</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
|
|
<span class="n">tdelta</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="p">)</span>
|
|
<span class="n">start_date</span> <span class="o">=</span> <span class="n">end_date</span> <span class="o">-</span> <span class="n">tdelta</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">date_joined__range</span><span class="o">=</span><span class="p">(</span><span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">))</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_recently_connected_accounts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">days</span><span class="o">=</span><span class="mi">7</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get accounts recently connected to the game.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> days (int, optional): Number of days backwards to check</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> accounts (list): The Accounts connected to the game in the</span>
|
|
<span class="sd"> last `days` interval.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">end_date</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
|
|
<span class="n">tdelta</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="p">)</span>
|
|
<span class="n">start_date</span> <span class="o">=</span> <span class="n">end_date</span> <span class="o">-</span> <span class="n">tdelta</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">last_login__range</span><span class="o">=</span><span class="p">(</span><span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">"-last_login"</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_account_from_email</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uemail</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Search account by</span>
|
|
<span class="sd"> Returns an account object based on email address.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> uemail (str): An email address to search for.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> account (Account): A found account, if found.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">email__iexact</span><span class="o">=</span><span class="n">uemail</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_account_from_uid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uid</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get an account by id.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> uid (int): Account database id.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> account (Account): The result.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</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="n">uid</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">None</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_account_from_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">uname</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get account object based on name.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> uname (str): The Account name to search for.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> account (Account): The found account.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">username__iexact</span><span class="o">=</span><span class="n">uname</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="kc">None</span>
|
|
|
|
<span class="k">def</span> <span class="nf">search_account</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ostring</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Searches for a particular account by name or</span>
|
|
<span class="sd"> database id.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ostring (str or int): A key string or database id.</span>
|
|
<span class="sd"> exact (bool, optional): Only valid for string matches. If</span>
|
|
<span class="sd"> `True`, requires exact (non-case-sensitive) match,</span>
|
|
<span class="sd"> otherwise also match also keys containing the `ostring`</span>
|
|
<span class="sd"> (non-case-sensitive fuzzy match).</span>
|
|
<span class="sd"> typeclass (str or Typeclass, optional): Limit the search only to</span>
|
|
<span class="sd"> accounts of this typeclass.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">ostring</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">dbref</span> <span class="ow">or</span> <span class="n">dbref</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="c1"># bref search is always exact</span>
|
|
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">matches</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"username__iexact"</span> <span class="k">if</span> <span class="n">exact</span> <span class="k">else</span> <span class="s2">"username__icontains"</span><span class="p">:</span> <span class="n">ostring</span><span class="p">}</span>
|
|
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
|
|
<span class="c1"># we accept both strings and actual typeclasses</span>
|
|
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">typeclass</span><span class="p">):</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"</span><span class="si">{typeclass.__module__}</span><span class="s2">.</span><span class="si">{typeclass.__name__}</span><span class="s2">"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">typeclass</span><span class="p">)</span>
|
|
<span class="n">query</span><span class="p">[</span><span class="s2">"db_typeclass_path"</span><span class="p">]</span> <span class="o">=</span> <span class="n">typeclass</span>
|
|
<span class="k">if</span> <span class="n">exact</span><span class="p">:</span>
|
|
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="o">**</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="o">**</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">matches</span><span class="p">:</span>
|
|
<span class="c1"># try alias match</span>
|
|
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
|
<span class="n">db_tags__db_tagtype__iexact</span><span class="o">=</span><span class="s2">"alias"</span><span class="p">,</span>
|
|
<span class="o">**</span><span class="p">{</span><span class="s2">"db_tags__db_key__iexact"</span> <span class="k">if</span> <span class="n">exact</span> <span class="k">else</span> <span class="s2">"db_tags__db_key__icontains"</span><span class="p">:</span> <span class="n">ostring</span><span class="p">},</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">matches</span>
|
|
|
|
<span class="c1"># back-compatibility alias</span>
|
|
<span class="n">account_search</span> <span class="o">=</span> <span class="n">search_account</span>
|
|
|
|
|
|
<div class="viewcode-block" id="AccountManager"><a class="viewcode-back" href="../../../api/evennia.accounts.manager.html#evennia.accounts.accounts.AccountManager">[docs]</a><span class="k">class</span> <span class="nc">AccountManager</span><span class="p">(</span><span class="n">AccountDBManager</span><span class="p">,</span> <span class="n">TypeclassManager</span><span class="p">):</span>
|
|
<span class="k">pass</span></div>
|
|
</pre></div>
|
|
|
|
<div class="clearer"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<p class="logo"><a href="../../../index.html">
|
|
<img class="logo" src="../../../_static/evennia_logo.png" alt="Logo"/>
|
|
</a></p>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" />
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>$('#searchbox').show(0);</script>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="manager.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../0.9.5/index.html">0.9.5 (master branch)</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.accounts.manager</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> |