1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00
royalnet/docs/html/apireference.html

1658 lines
133 KiB
HTML
Raw Normal View History

2019-12-03 18:26:23 +00:00
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
2020-08-09 23:31:12 +00:00
<title>API Reference &mdash; Royalnet 5.10.4 documentation</title>
2019-12-03 18:26:23 +00:00
<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
2020-08-09 23:31:12 +00:00
<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>
2019-12-03 18:26:23 +00:00
<script type="text/javascript" src="_static/js/theme.js"></script>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/rygdocs.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="prev" title="Random discoveries" href="randomdiscoveries.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> Royalnet
</a>
<div class="version">
2020-08-09 23:31:12 +00:00
5.10.4
2019-12-03 18:26:23 +00:00
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
2020-03-10 17:58:26 +00:00
<li class="toctree-l1"><a class="reference internal" href="packs/pack.html">Royalnet Packs</a></li>
2019-12-03 18:26:23 +00:00
<li class="toctree-l1"><a class="reference internal" href="randomdiscoveries.html">Random discoveries</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">API Reference</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.alchemy">Alchemy</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.backpack">Backpack</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.bard">Bard</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.commands">Commands</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.constellation">Constellation</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.herald">Herald</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.serf">Serf</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.utils">Utils</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Royalnet</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>API Reference</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/apireference.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="api-reference">
<h1>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this headline"></a></h1>
<p>This page is autogenerated from the docstrings inside the code.</p>
<div class="section" id="module-royalnet.alchemy">
<span id="alchemy"></span><h2>Alchemy<a class="headerlink" href="#module-royalnet.alchemy" title="Permalink to this headline"></a></h2>
2020-02-03 17:23:31 +00:00
<p>The subpackage providing all functions and classes related to databases and tables.</p>
<p>It requires either the <code class="docutils literal notranslate"><span class="pre">alchemy_easy</span></code> or the <code class="docutils literal notranslate"><span class="pre">alchemy_hard</span></code> extras to be installed.</p>
<p>You can install <code class="docutils literal notranslate"><span class="pre">alchemy_easy</span></code> with:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">royalnet</span><span class="p">[</span><span class="n">alchemy_easy</span><span class="p">]</span>
</pre></div>
</div>
<p>To install <code class="docutils literal notranslate"><span class="pre">alchemy_hard</span></code>, refer to the <a href="#id5"><span class="problematic" id="id6">`psycopg2 &lt;https://pypi.org/project/psycopg2/&gt;}`_</span></a> installation instructions,
then run:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">royalnet</span><span class="p">[</span><span class="n">alchemy_hard</span><span class="p">]</span>
</pre></div>
</div>
2019-12-03 18:26:23 +00:00
<dl class="class">
<dt id="royalnet.alchemy.Alchemy">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.alchemy.</code><code class="sig-name descname">Alchemy</code><span class="sig-paren">(</span><em class="sig-param">database_uri: str</em>, <em class="sig-param">tables: Set</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.alchemy.Alchemy" title="Permalink to this definition"></a></dt>
2020-08-09 23:31:12 +00:00
<dd><p>A wrapper around <code class="xref py py-mod docutils literal notranslate"><span class="pre">sqlalchemy.orm</span></code> that allows the instantiation of multiple engines at once while
maintaining a single declarative class for all of them.</p>
2019-12-03 18:26:23 +00:00
<dl class="method">
<dt id="royalnet.alchemy.Alchemy.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">database_uri: str</em>, <em class="sig-param">tables: Set</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.alchemy.Alchemy.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Create a new <a class="reference internal" href="#royalnet.alchemy.Alchemy" title="royalnet.alchemy.Alchemy"><code class="xref py py-class docutils literal notranslate"><span class="pre">Alchemy</span></code></a> object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>database_uri</strong> The <a class="reference external" href="https://docs.sqlalchemy.org/en/13/core/engines.html">database URI</a> .</p></li>
<li><p><strong>tables</strong> The <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#set" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">set</span></code></a> of tables to be created and used in the selected database.
Check the tables submodule for more details.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.alchemy.Alchemy.get">
2020-03-10 17:58:26 +00:00
<code class="sig-name descname">get</code><span class="sig-paren">(</span><em class="sig-param">table: Union[str, type]</em><span class="sig-paren">)</span> &#x2192; sqlalchemy.ext.declarative.api.DeclarativeMeta<a class="headerlink" href="#royalnet.alchemy.Alchemy.get" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>Get the table with a specified name or class.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>table</strong> The table name or table class you want to get.</p>
</dd>
<dt class="field-even">Raises</dt>
<dd class="field-even"><p><a class="reference internal" href="#royalnet.alchemy.TableNotFoundError" title="royalnet.alchemy.TableNotFoundError"><strong>TableNotFoundError</strong></a> if the requested table was not found.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.alchemy.Alchemy.session_acm">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">session_acm</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; AsyncIterator[sqlalchemy.orm.session.Session]<a class="headerlink" href="#royalnet.alchemy.Alchemy.session_acm" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>Create a Session as a async context manager (that can be used in <code class="docutils literal notranslate"><span class="pre">async</span> <span class="pre">with</span></code> statements).</p>
<p>The Session will be closed safely when the context manager exits (even in case of error).</p>
<p class="rubric">Example</p>
<p>You can use the async context manager like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">async</span> <span class="k">with</span> <span class="n">alchemy</span><span class="o">.</span><span class="n">session_acm</span><span class="p">()</span> <span class="k">as</span> <span class="n">session</span><span class="p">:</span>
<span class="c1"># Do some stuff</span>
<span class="o">...</span>
<span class="c1"># Commit the session</span>
<span class="k">await</span> <span class="n">asyncify</span><span class="p">(</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">)</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="royalnet.alchemy.Alchemy.session_cm">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">session_cm</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; Iterator[sqlalchemy.orm.session.Session]<a class="headerlink" href="#royalnet.alchemy.Alchemy.session_cm" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>Create a Session as a context manager (that can be used in <code class="docutils literal notranslate"><span class="pre">with</span></code> statements).</p>
<p>The Session will be closed safely when the context manager exits (even in case of error).</p>
<p class="rubric">Example</p>
<p>You can use the context manager like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">alchemy</span><span class="o">.</span><span class="n">session_cm</span><span class="p">()</span> <span class="k">as</span> <span class="n">session</span><span class="p">:</span>
<span class="c1"># Do some stuff</span>
<span class="o">...</span>
<span class="c1"># Commit the session</span>
<span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
</pre></div>
</div>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="royalnet.alchemy.table_dfs">
<code class="sig-prename descclassname">royalnet.alchemy.</code><code class="sig-name descname">table_dfs</code><span class="sig-paren">(</span><em class="sig-param">starting_table: sqlalchemy.sql.schema.Table</em>, <em class="sig-param">ending_table: sqlalchemy.sql.schema.Table</em><span class="sig-paren">)</span> &#x2192; tuple<a class="headerlink" href="#royalnet.alchemy.table_dfs" title="Permalink to this definition"></a></dt>
<dd><p>Depth-first-search for the path from the starting table to the ending table.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#tuple" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">tuple</span></code></a> containing the path, starting from the starting table and ending at the ending table.</p>
</dd>
</dl>
</dd></dl>
<dl class="exception">
<dt id="royalnet.alchemy.AlchemyException">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.alchemy.</code><code class="sig-name descname">AlchemyException</code><a class="headerlink" href="#royalnet.alchemy.AlchemyException" title="Permalink to this definition"></a></dt>
<dd><p>Base class for Alchemy exceptions.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.alchemy.TableNotFoundError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.alchemy.</code><code class="sig-name descname">TableNotFoundError</code><a class="headerlink" href="#royalnet.alchemy.TableNotFoundError" title="Permalink to this definition"></a></dt>
<dd><p>The requested table was not found.</p>
</dd></dl>
</div>
<div class="section" id="module-royalnet.backpack">
<span id="backpack"></span><h2>Backpack<a class="headerlink" href="#module-royalnet.backpack" title="Permalink to this headline"></a></h2>
<p>A Pack that is imported by default by all Royalnet instances.</p>
</div>
<div class="section" id="module-royalnet.bard">
<span id="bard"></span><h2>Bard<a class="headerlink" href="#module-royalnet.bard" title="Permalink to this headline"></a></h2>
2020-02-03 17:23:31 +00:00
<p>The subpackage providing all classes related to music files.</p>
<p>It requires the <code class="docutils literal notranslate"><span class="pre">bard</span></code> extra to be installed (the <code class="xref py py-mod docutils literal notranslate"><span class="pre">ffmpeg_python</span></code>, <code class="xref py py-mod docutils literal notranslate"><span class="pre">youtube_dl</span></code> and <code class="xref py py-mod docutils literal notranslate"><span class="pre">eyed3</span></code> packages).</p>
<p>You can install it with:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">royalnet</span><span class="p">[</span><span class="n">bard</span><span class="p">]</span>
</pre></div>
</div>
2019-12-03 18:26:23 +00:00
<dl class="class">
<dt id="royalnet.bard.YtdlInfo">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.bard.</code><code class="sig-name descname">YtdlInfo</code><span class="sig-paren">(</span><em class="sig-param">info: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bard.YtdlInfo" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper around <a class="reference external" href="https://ytdl-org.github.io/youtube-dl/index.html">youtube_dl</a> extracted info.</p>
<dl class="method">
<dt id="royalnet.bard.YtdlInfo.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">info: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bard.YtdlInfo.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Create a <a class="reference internal" href="#royalnet.bard.YtdlInfo" title="royalnet.bard.YtdlInfo"><code class="xref py py-class docutils literal notranslate"><span class="pre">YtdlInfo</span></code></a> from the dict returned by the <code class="xref py py-func docutils literal notranslate"><span class="pre">YoutubeDL.extract_info()</span></code> function.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Does not download the info, to do that use <code class="xref py py-func docutils literal notranslate"><span class="pre">retrieve_for_url()</span></code>.</p>
</div>
</dd></dl>
<dl class="method">
<dt id="royalnet.bard.YtdlInfo.from_url">
2020-08-09 23:31:12 +00:00
<em class="property">async classmethod </em><code class="sig-name descname">from_url</code><span class="sig-paren">(</span><em class="sig-param">url</em>, <em class="sig-param">loop: Optional[asyncio.events.AbstractEventLoop] = None</em>, <em class="sig-param">**ytdl_args</em><span class="sig-paren">)</span> &#x2192; List[royalnet.bard.ytdlinfo.YtdlInfo]<a class="headerlink" href="#royalnet.bard.YtdlInfo.from_url" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>Fetch the info for an url through <code class="xref py py-class docutils literal notranslate"><span class="pre">YoutubeDL</span></code>.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#list" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a> containing the infos for the requested videos.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.bard.YtdlFile">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.bard.</code><code class="sig-name descname">YtdlFile</code><span class="sig-paren">(</span><em class="sig-param">url: str</em>, <em class="sig-param">info: Optional[royalnet.bard.ytdlinfo.YtdlInfo] = None</em>, <em class="sig-param">filename: Optional[str] = None</em>, <em class="sig-param">ytdl_args: Optional[Dict[str</em>, <em class="sig-param">Any]] = None</em>, <em class="sig-param">loop: Optional[asyncio.events.AbstractEventLoop] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bard.YtdlFile" title="Permalink to this definition"></a></dt>
<dd><p>A representation of a file download with <a class="reference external" href="https://ytdl-org.github.io/youtube-dl/index.html">youtube_dl</a>.</p>
<dl class="method">
<dt id="royalnet.bard.YtdlFile.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">url: str</em>, <em class="sig-param">info: Optional[royalnet.bard.ytdlinfo.YtdlInfo] = None</em>, <em class="sig-param">filename: Optional[str] = None</em>, <em class="sig-param">ytdl_args: Optional[Dict[str</em>, <em class="sig-param">Any]] = None</em>, <em class="sig-param">loop: Optional[asyncio.events.AbstractEventLoop] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bard.YtdlFile.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Create a <a class="reference internal" href="#royalnet.bard.YtdlFile" title="royalnet.bard.YtdlFile"><code class="xref py py-class docutils literal notranslate"><span class="pre">YtdlFile</span></code></a> instance.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Please avoid using directly <a class="reference internal" href="#royalnet.bard.YtdlFile.__init__" title="royalnet.bard.YtdlFile.__init__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__init__()</span></code></a>, use <a class="reference internal" href="#royalnet.bard.YtdlFile.from_url" title="royalnet.bard.YtdlFile.from_url"><code class="xref py py-meth docutils literal notranslate"><span class="pre">from_url()</span></code></a> instead!</p>
</div>
</dd></dl>
<dl class="method">
<dt id="royalnet.bard.YtdlFile.aopen">
<code class="sig-name descname">aopen</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bard.YtdlFile.aopen" title="Permalink to this definition"></a></dt>
<dd><p>Open the downloaded file as an async context manager (and download it if it isnt available yet).</p>
<p class="rubric">Example</p>
<p>You can use the async context manager like this:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">async</span> <span class="k">with</span> <span class="n">ytdlfile</span><span class="o">.</span><span class="n">aopen</span><span class="p">()</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
<span class="n">b</span><span class="p">:</span> <span class="nb">bytes</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</pre></div>
</div>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.bard.YtdlFile.default_ytdl_args">
<code class="sig-name descname">default_ytdl_args</code><em class="property"> = {'ignoreerrors': True, 'no_warnings': False, 'noplaylist': True, 'outtmpl': './downloads/%(epoch)s-%(title)s-%(id)s.%(ext)s', 'quiet': False}</em><a class="headerlink" href="#royalnet.bard.YtdlFile.default_ytdl_args" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bard.YtdlFile.delete_asap">
<em class="property">async </em><code class="sig-name descname">delete_asap</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bard.YtdlFile.delete_asap" title="Permalink to this definition"></a></dt>
<dd><p>As soon as nothing is using the file, delete it.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bard.YtdlFile.download_file">
<em class="property">async </em><code class="sig-name descname">download_file</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.bard.YtdlFile.download_file" title="Permalink to this definition"></a></dt>
<dd><p>Download the file.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bard.YtdlFile.from_url">
2020-08-09 23:31:12 +00:00
<em class="property">async classmethod </em><code class="sig-name descname">from_url</code><span class="sig-paren">(</span><em class="sig-param">url: str</em>, <em class="sig-param">**ytdl_args</em><span class="sig-paren">)</span> &#x2192; List[royalnet.bard.ytdlfile.YtdlFile]<a class="headerlink" href="#royalnet.bard.YtdlFile.from_url" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>Create a <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#list" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a> of <a class="reference internal" href="#royalnet.bard.YtdlFile" title="royalnet.bard.YtdlFile"><code class="xref py py-class docutils literal notranslate"><span class="pre">YtdlFile</span></code></a> from a URL.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bard.YtdlFile.has_info">
<em class="property">property </em><code class="sig-name descname">has_info</code><a class="headerlink" href="#royalnet.bard.YtdlFile.has_info" title="Permalink to this definition"></a></dt>
<dd><p>Does the <a class="reference internal" href="#royalnet.bard.YtdlFile" title="royalnet.bard.YtdlFile"><code class="xref py py-class docutils literal notranslate"><span class="pre">YtdlFile</span></code></a> have info available?</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bard.YtdlFile.is_downloaded">
<em class="property">property </em><code class="sig-name descname">is_downloaded</code><a class="headerlink" href="#royalnet.bard.YtdlFile.is_downloaded" title="Permalink to this definition"></a></dt>
<dd><p>Has the file been downloaded yet?</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bard.YtdlFile.retrieve_info">
<em class="property">async </em><code class="sig-name descname">retrieve_info</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.bard.YtdlFile.retrieve_info" title="Permalink to this definition"></a></dt>
<dd><p>Retrieve info about the <a class="reference internal" href="#royalnet.bard.YtdlFile" title="royalnet.bard.YtdlFile"><code class="xref py py-class docutils literal notranslate"><span class="pre">YtdlFile</span></code></a> through <code class="xref py py-class docutils literal notranslate"><span class="pre">YoutubeDL</span></code>.</p>
</dd></dl>
2020-01-30 18:33:15 +00:00
<dl class="method">
<dt id="royalnet.bard.YtdlFile.set_ytdlinfo_from_id3_tags">
<code class="sig-name descname">set_ytdlinfo_from_id3_tags</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bard.YtdlFile.set_ytdlinfo_from_id3_tags" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2019-12-03 18:26:23 +00:00
</dd></dl>
2020-02-03 17:23:31 +00:00
<dl class="exception">
<dt id="royalnet.bard.BardError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.bard.</code><code class="sig-name descname">BardError</code><a class="headerlink" href="#royalnet.bard.BardError" title="Permalink to this definition"></a></dt>
<dd><p>Base class for <code class="xref py py-mod docutils literal notranslate"><span class="pre">bard</span></code> errors.</p>
2019-12-03 18:26:23 +00:00
</dd></dl>
2020-02-03 17:23:31 +00:00
<dl class="exception">
<dt id="royalnet.bard.YtdlError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.bard.</code><code class="sig-name descname">YtdlError</code><a class="headerlink" href="#royalnet.bard.YtdlError" title="Permalink to this definition"></a></dt>
<dd><p>Base class for errors caused by <code class="xref py py-mod docutils literal notranslate"><span class="pre">youtube_dl</span></code>.</p>
2019-12-03 18:26:23 +00:00
</dd></dl>
2020-02-03 17:23:31 +00:00
<dl class="exception">
<dt id="royalnet.bard.NotFoundError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.bard.</code><code class="sig-name descname">NotFoundError</code><a class="headerlink" href="#royalnet.bard.NotFoundError" title="Permalink to this definition"></a></dt>
<dd><p>The requested resource wasnt found.</p>
2019-12-03 18:26:23 +00:00
</dd></dl>
2020-02-03 17:23:31 +00:00
<dl class="exception">
<dt id="royalnet.bard.MultipleFilesError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.bard.</code><code class="sig-name descname">MultipleFilesError</code><a class="headerlink" href="#royalnet.bard.MultipleFilesError" title="Permalink to this definition"></a></dt>
<dd><p>The resource contains multiple media files.</p>
2019-12-03 18:26:23 +00:00
</dd></dl>
</div>
<div class="section" id="module-royalnet.commands">
<span id="commands"></span><h2>Commands<a class="headerlink" href="#module-royalnet.commands" title="Permalink to this headline"></a></h2>
2020-02-03 17:23:31 +00:00
<p>The subpackage providing all classes related to Royalnet commands.</p>
2019-12-03 18:26:23 +00:00
<dl class="class">
<dt id="royalnet.commands.Command">
2020-08-09 23:31:12 +00:00
<em class="property">class </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">Command</code><span class="sig-paren">(</span><em class="sig-param">serf: Serf</em>, <em class="sig-param">config: ConfigDict</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.Command" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><dl class="method">
<dt id="royalnet.commands.Command.alchemy">
<em class="property">property </em><code class="sig-name descname">alchemy</code><a class="headerlink" href="#royalnet.commands.Command.alchemy" title="Permalink to this definition"></a></dt>
<dd><p>A shortcut for <code class="xref py py-attr docutils literal notranslate"><span class="pre">interface.alchemy</span></code>.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.Command.aliases">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">aliases</code><em class="property">: List[str]</em><em class="property"> = []</em><a class="headerlink" href="#royalnet.commands.Command.aliases" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>A list of possible aliases for a command.</p>
<p class="rubric">Example</p>
<p>To be able to call <code class="docutils literal notranslate"><span class="pre">/e</span></code> as an alias for <code class="docutils literal notranslate"><span class="pre">/example</span></code>, one should set aliases to <code class="docutils literal notranslate"><span class="pre">[&quot;e&quot;]</span></code>.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.Command.description">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">description</code><em class="property">: str</em><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.Command.description" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>A small description of the command, to be displayed when the command is being autocompleted.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.Command.loop">
<em class="property">property </em><code class="sig-name descname">loop</code><a class="headerlink" href="#royalnet.commands.Command.loop" title="Permalink to this definition"></a></dt>
<dd><p>A shortcut for <code class="xref py py-attr docutils literal notranslate"><span class="pre">interface.loop</span></code>.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.Command.name">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">name</code><em class="property">: str</em><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.Command.name" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The main name of the command.</p>
<p class="rubric">Example</p>
<p>To be able to call <code class="docutils literal notranslate"><span class="pre">/example</span></code> on Telegram, the name should be <code class="docutils literal notranslate"><span class="pre">&quot;example&quot;</span></code>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.Command.run">
2020-08-09 23:31:12 +00:00
<em class="property">abstract async </em><code class="sig-name descname">run</code><span class="sig-paren">(</span><em class="sig-param">args: royalnet.commands.commandargs.CommandArgs</em>, <em class="sig-param">data: royalnet.commands.commanddata.CommandData</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.commands.Command.run" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd></dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.Command.syntax">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">syntax</code><em class="property">: str</em><em class="property"> = ''</em><a class="headerlink" href="#royalnet.commands.Command.syntax" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The syntax of the command, to be displayed when a <a class="reference internal" href="#royalnet.commands.InvalidInputError" title="royalnet.commands.InvalidInputError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">InvalidInputError</span></code></a> is raised,
in the format <code class="docutils literal notranslate"><span class="pre">(required_arg)</span> <span class="pre">[optional_arg]</span></code>.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.commands.CommandData">
2020-08-09 23:31:12 +00:00
<em class="property">class </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">CommandData</code><span class="sig-paren">(</span><em class="sig-param">command</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandData" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><dl class="method">
<dt id="royalnet.commands.CommandData.delete_invoking">
<em class="property">async </em><code class="sig-name descname">delete_invoking</code><span class="sig-paren">(</span><em class="sig-param">error_if_unavailable=False</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.commands.CommandData.delete_invoking" title="Permalink to this definition"></a></dt>
<dd><p>Delete the invoking message, if supported by the interface.</p>
<p>The invoking message is the message send by the user that contains the command.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>error_if_unavailable</strong> if True, raise an exception if the message cannot been deleted.</p>
</dd>
</dl>
</dd></dl>
2020-03-10 17:58:26 +00:00
<dl class="method">
<dt id="royalnet.commands.CommandData.find_user">
2020-08-09 23:31:12 +00:00
<em class="property">async </em><code class="sig-name descname">find_user</code><span class="sig-paren">(</span><em class="sig-param">alias: str</em><span class="sig-paren">)</span> &#x2192; Optional[royalnet.backpack.tables.users.User]<a class="headerlink" href="#royalnet.commands.CommandData.find_user" title="Permalink to this definition"></a></dt>
2020-03-10 17:58:26 +00:00
<dd><p>Find the User having a specific Alias.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>alias</strong> the Alias to search for.</p>
</dd>
</dl>
</dd></dl>
2019-12-03 18:26:23 +00:00
<dl class="method">
<dt id="royalnet.commands.CommandData.get_author">
<em class="property">async </em><code class="sig-name descname">get_author</code><span class="sig-paren">(</span><em class="sig-param">error_if_none: bool = False</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandData.get_author" title="Permalink to this definition"></a></dt>
<dd><p>Try to find the identifier of the user that sent the message.
That probably means, the database row identifying the user.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>error_if_none</strong> Raise an exception if this is True and the call has no author.</p>
</dd>
</dl>
</dd></dl>
2020-01-30 18:33:15 +00:00
<dl class="method">
<dt id="royalnet.commands.CommandData.keyboard">
<code class="sig-name descname">keyboard</code><span class="sig-paren">(</span><em class="sig-param">text, keys: List[KeyboardKey]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandData.keyboard" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2020-08-09 23:31:12 +00:00
<dl class="method">
<dt id="royalnet.commands.CommandData.loop">
<em class="property">property </em><code class="sig-name descname">loop</code><a class="headerlink" href="#royalnet.commands.CommandData.loop" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandData.register_keyboard_key">
<em class="property">classmethod </em><code class="sig-name descname">register_keyboard_key</code><span class="sig-paren">(</span><em class="sig-param">identifier: str</em>, <em class="sig-param">key: KeyboardKey</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandData.register_keyboard_key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2019-12-03 18:26:23 +00:00
<dl class="method">
<dt id="royalnet.commands.CommandData.reply">
<em class="property">async </em><code class="sig-name descname">reply</code><span class="sig-paren">(</span><em class="sig-param">text: str</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.commands.CommandData.reply" title="Permalink to this definition"></a></dt>
<dd><p>Send a text message to the channel where the call was made.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>text</strong> The text to be sent, possibly formatted in the weird undescribed markup that Im using.</p>
</dd>
</dl>
</dd></dl>
2020-08-09 23:31:12 +00:00
<dl class="method">
<dt id="royalnet.commands.CommandData.reply_image">
<em class="property">async </em><code class="sig-name descname">reply_image</code><span class="sig-paren">(</span><em class="sig-param">image: io.IOBase</em>, <em class="sig-param">caption: Optional[str] = None</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.commands.CommandData.reply_image" title="Permalink to this definition"></a></dt>
<dd><p>Send an image (with optionally a caption) to the channel where the call was made.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>image</strong> The bytes of the image to send.</p></li>
<li><p><strong>caption</strong> The caption to attach to the image.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
2019-12-03 18:26:23 +00:00
<dl class="method">
<dt id="royalnet.commands.CommandData.session">
<em class="property">property </em><code class="sig-name descname">session</code><a class="headerlink" href="#royalnet.commands.CommandData.session" title="Permalink to this definition"></a></dt>
2020-01-30 18:33:15 +00:00
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandData.session_close">
<em class="property">async </em><code class="sig-name descname">session_close</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandData.session_close" title="Permalink to this definition"></a></dt>
2020-08-09 23:31:12 +00:00
<dd><p>Asyncronously close the <a class="reference internal" href="#royalnet.commands.CommandData.session" title="royalnet.commands.CommandData.session"><code class="xref py py-attr docutils literal notranslate"><span class="pre">session</span></code></a> of this object.</p>
2020-02-03 17:23:31 +00:00
</dd></dl>
2019-12-03 18:26:23 +00:00
<dl class="method">
<dt id="royalnet.commands.CommandData.session_commit">
<em class="property">async </em><code class="sig-name descname">session_commit</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandData.session_commit" title="Permalink to this definition"></a></dt>
2020-08-09 23:31:12 +00:00
<dd><p>Asyncronously commit the <a class="reference internal" href="#royalnet.commands.CommandData.session" title="royalnet.commands.CommandData.session"><code class="xref py py-attr docutils literal notranslate"><span class="pre">session</span></code></a> of this object.</p>
2020-02-03 17:23:31 +00:00
</dd></dl>
2019-12-03 18:26:23 +00:00
2020-08-09 23:31:12 +00:00
<dl class="method">
<dt id="royalnet.commands.CommandData.unregister_keyboard_key">
<em class="property">classmethod </em><code class="sig-name descname">unregister_keyboard_key</code><span class="sig-paren">(</span><em class="sig-param">identifier: str</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandData.unregister_keyboard_key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2019-12-03 18:26:23 +00:00
</dd></dl>
<dl class="class">
<dt id="royalnet.commands.CommandArgs">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">CommandArgs</code><a class="headerlink" href="#royalnet.commands.CommandArgs" title="Permalink to this definition"></a></dt>
<dd><p>An interface to easily access the arguments of a command.</p>
<p>Inherits from <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#list" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a>.</p>
<dl class="method">
<dt id="royalnet.commands.CommandArgs.__getitem__">
<code class="sig-name descname">__getitem__</code><span class="sig-paren">(</span><em class="sig-param">item</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandArgs.__getitem__" title="Permalink to this definition"></a></dt>
<dd><p>Access arguments as if they were a <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#list" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a>.</p>
<dl class="field-list simple">
<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><a class="reference internal" href="#royalnet.commands.InvalidInputError" title="royalnet.commands.InvalidInputError"><strong>InvalidInputError</strong></a> if the requested argument does not exist.</p>
</dd>
</dl>
<p class="rubric">Examples</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># /pasta spaghetti aldente</span>
<span class="o">&gt;&gt;&gt;</span> <span class="bp">self</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="s2">&quot;spaghetti&quot;</span>
<span class="o">&gt;&gt;&gt;</span> <span class="bp">self</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="s2">&quot;aldente&quot;</span>
<span class="o">&gt;&gt;&gt;</span> <span class="bp">self</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="c1"># InvalidInputError: Missing argument #3.</span>
<span class="o">&gt;&gt;&gt;</span> <span class="bp">self</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
<span class="p">[</span><span class="s2">&quot;spaghetti&quot;</span><span class="p">,</span> <span class="s2">&quot;aldente&quot;</span><span class="p">]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandArgs.joined">
<code class="sig-name descname">joined</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">require_at_least=0</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.commands.CommandArgs.joined" title="Permalink to this definition"></a></dt>
<dd><p>Get the arguments as a space-joined string.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>require_at_least</strong> the minimum amount of arguments required.</p>
</dd>
<dt class="field-even">Raises</dt>
<dd class="field-even"><p><a class="reference internal" href="#royalnet.commands.InvalidInputError" title="royalnet.commands.InvalidInputError"><strong>InvalidInputError</strong></a> if there are less than <code class="docutils literal notranslate"><span class="pre">require_at_least</span></code> arguments.</p>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The space-joined string.</p>
</dd>
</dl>
<p class="rubric">Examples</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># /pasta spaghetti aldente</span>
<span class="o">&gt;&gt;&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">joined</span><span class="p">()</span>
<span class="s2">&quot;spaghetti aldente&quot;</span>
<span class="o">&gt;&gt;&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">joined</span><span class="p">(</span><span class="n">require_at_least</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="c1"># InvalidInputError: Not enough arguments specified (minimum is 3).</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandArgs.match">
<code class="sig-name descname">match</code><span class="sig-paren">(</span><em class="sig-param">pattern: Union[str, Pattern], *flags</em><span class="sig-paren">)</span> &#x2192; Sequence[AnyStr]<a class="headerlink" href="#royalnet.commands.CommandArgs.match" title="Permalink to this definition"></a></dt>
<dd><p>Match the <a class="reference internal" href="#royalnet.commands.CommandArgs.joined" title="royalnet.commands.CommandArgs.joined"><code class="xref py py-meth docutils literal notranslate"><span class="pre">joined()</span></code></a> string to a <code class="xref py py-class docutils literal notranslate"><span class="pre">re.Pattern</span></code>-like object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>pattern</strong> The regex pattern to be passed to <a class="reference external" href="https://docs.python.org/3.8/library/re.html#re.match" title="(in Python v3.8)"><code class="xref py py-func docutils literal notranslate"><span class="pre">re.match()</span></code></a>.</p>
</dd>
<dt class="field-even">Raises</dt>
<dd class="field-even"><p><a class="reference internal" href="#royalnet.commands.InvalidInputError" title="royalnet.commands.InvalidInputError"><strong>InvalidInputError</strong></a> if the pattern doesnt match.</p>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The matched groups, as returned by <code class="xref py py-func docutils literal notranslate"><span class="pre">re.Match.groups()</span></code>.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandArgs.optional">
<code class="sig-name descname">optional</code><span class="sig-paren">(</span><em class="sig-param">index: int</em>, <em class="sig-param">default=None</em><span class="sig-paren">)</span> &#x2192; Optional[str]<a class="headerlink" href="#royalnet.commands.CommandArgs.optional" title="Permalink to this definition"></a></dt>
<dd><p>Get the argument at a specific index, but dont raise an error if nothing is found, instead returning the
<code class="docutils literal notranslate"><span class="pre">default</span></code> value.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>index</strong> The index of the argument you want to retrieve.</p></li>
<li><p><strong>default</strong> The value returned if the argument is missing.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Either the argument or the <code class="docutils literal notranslate"><span class="pre">default</span></code> value, defaulting to <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
</dd>
</dl>
<p class="rubric">Examples</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># /pasta spaghetti aldente</span>
<span class="o">&gt;&gt;&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">optional</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="s2">&quot;spaghetti&quot;</span>
<span class="o">&gt;&gt;&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">optional</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="kc">None</span>
<span class="o">&gt;&gt;&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">optional</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">&quot;carbonara&quot;</span><span class="p">)</span>
<span class="s2">&quot;carbonara&quot;</span>
</pre></div>
</div>
</dd></dl>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.CommandError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">CommandError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandError" title="Permalink to this definition"></a></dt>
<dd><p>Something went wrong during the execution of this command.</p>
<p>Display an error message to the user, explaining what went wrong.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.InvalidInputError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">InvalidInputError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.InvalidInputError" title="Permalink to this definition"></a></dt>
<dd><p>The command has received invalid input and cannot complete.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.UnsupportedError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">UnsupportedError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.UnsupportedError" title="Permalink to this definition"></a></dt>
<dd><p>A requested feature is not available on this interface.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.ConfigurationError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">ConfigurationError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.ConfigurationError" title="Permalink to this definition"></a></dt>
<dd><p>The command cannot work because of a wrong configuration by part of the Royalnet admin.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.ExternalError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">ExternalError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.ExternalError" title="Permalink to this definition"></a></dt>
<dd><p>The command failed to execute, but the problem was because of an external factor (such as an external API going
down).</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.UserError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">UserError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.UserError" title="Permalink to this definition"></a></dt>
<dd><p>The command failed to execute, and the error is because of something that the user did.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.ProgramError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">ProgramError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.ProgramError" title="Permalink to this definition"></a></dt>
<dd><p>The command encountered an error in the program.</p>
</dd></dl>
<dl class="class">
2020-08-09 23:31:12 +00:00
<dt id="royalnet.commands.HeraldEvent">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">HeraldEvent</code><span class="sig-paren">(</span><em class="sig-param">parent: Union[Serf, Constellation], config</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.HeraldEvent" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>A remote procedure call triggered by a <a class="reference internal" href="#module-royalnet.herald" title="royalnet.herald"><code class="xref py py-mod docutils literal notranslate"><span class="pre">royalnet.herald</span></code></a> request.</p>
<dl class="method">
2020-08-09 23:31:12 +00:00
<dt id="royalnet.commands.HeraldEvent.alchemy">
<em class="property">property </em><code class="sig-name descname">alchemy</code><a class="headerlink" href="#royalnet.commands.HeraldEvent.alchemy" title="Permalink to this definition"></a></dt>
<dd><p>A shortcut for <code class="xref py py-attr docutils literal notranslate"><span class="pre">parent.alchemy</span></code>.</p>
2019-12-03 18:26:23 +00:00
</dd></dl>
<dl class="method">
2020-08-09 23:31:12 +00:00
<dt id="royalnet.commands.HeraldEvent.loop">
<em class="property">property </em><code class="sig-name descname">loop</code><a class="headerlink" href="#royalnet.commands.HeraldEvent.loop" title="Permalink to this definition"></a></dt>
<dd><p>A shortcut for <code class="xref py py-attr docutils literal notranslate"><span class="pre">parent.loop</span></code>.</p>
2019-12-03 18:26:23 +00:00
</dd></dl>
<dl class="attribute">
2020-08-09 23:31:12 +00:00
<dt id="royalnet.commands.HeraldEvent.name">
<code class="sig-name descname">name</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.HeraldEvent.name" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The event_name that will trigger this event.</p>
</dd></dl>
<dl class="method">
2020-08-09 23:31:12 +00:00
<dt id="royalnet.commands.HeraldEvent.run">
<em class="property">async </em><code class="sig-name descname">run</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.HeraldEvent.run" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd></dd></dl>
</dd></dl>
2020-01-30 18:33:15 +00:00
<dl class="class">
<dt id="royalnet.commands.KeyboardKey">
2020-08-09 23:31:12 +00:00
<em class="property">class </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">KeyboardKey</code><span class="sig-paren">(</span><em class="sig-param">short: str, text: str, callback: Callable[[royalnet.commands.commanddata.CommandData], Awaitable[None]]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.KeyboardKey" title="Permalink to this definition"></a></dt>
2020-01-30 18:33:15 +00:00
<dd><dl class="method">
<dt id="royalnet.commands.KeyboardKey.press">
<em class="property">async </em><code class="sig-name descname">press</code><span class="sig-paren">(</span><em class="sig-param">data: royalnet.commands.commanddata.CommandData</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.KeyboardKey.press" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
2020-08-09 23:31:12 +00:00
<dl class="class">
<dt id="royalnet.commands.ConfigDict">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">ConfigDict</code><a class="headerlink" href="#royalnet.commands.ConfigDict" title="Permalink to this definition"></a></dt>
<dd><dl class="method">
<dt id="royalnet.commands.ConfigDict.convert">
<em class="property">classmethod </em><code class="sig-name descname">convert</code><span class="sig-paren">(</span><em class="sig-param">item</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.ConfigDict.convert" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
2019-12-03 18:26:23 +00:00
</div>
<div class="section" id="module-royalnet.constellation">
<span id="constellation"></span><h2>Constellation<a class="headerlink" href="#module-royalnet.constellation" title="Permalink to this headline"></a></h2>
2020-02-03 17:23:31 +00:00
<p>The subpackage providing all functions and classes that handle the webserver and the webpages.</p>
<p>It requires the <code class="docutils literal notranslate"><span class="pre">constellation</span></code> extra to be installed (<code class="xref py py-mod docutils literal notranslate"><span class="pre">starlette</span></code>).</p>
<p>You can install it with:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">royalnet</span><span class="p">[</span><span class="n">constellation</span><span class="p">]</span>
</pre></div>
</div>
<p>It optionally uses the <code class="docutils literal notranslate"><span class="pre">sentry</span></code> extra for error reporting.</p>
<p>You can install them with:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">royalnet</span><span class="p">[</span><span class="n">constellation</span><span class="p">,</span><span class="n">sentry</span><span class="p">]</span>
</pre></div>
</div>
2019-12-03 18:26:23 +00:00
<dl class="class">
<dt id="royalnet.constellation.Constellation">
2020-01-30 18:33:15 +00:00
<em class="property">class </em><code class="sig-prename descclassname">royalnet.constellation.</code><code class="sig-name descname">Constellation</code><span class="sig-paren">(</span><em class="sig-param">alchemy_cfg: Dict[str, Any], herald_cfg: Dict[str, Any], packs_cfg: Dict[str, Any], constellation_cfg: Dict[str, Any], logging_cfg: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.constellation.Constellation" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The class that represents the webserver.</p>
<p>It runs multiple <a class="reference internal" href="#royalnet.constellation.Star" title="royalnet.constellation.Star"><code class="xref py py-class docutils literal notranslate"><span class="pre">Star</span></code></a>, which represent the routes of the website.</p>
<p>It also handles the <code class="xref py py-class docutils literal notranslate"><span class="pre">Alchemy</span></code> connection, and Herald connections too.</p>
<dl class="attribute">
<dt id="royalnet.constellation.Constellation.address">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">address</code><em class="property">: str</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.constellation.Constellation.address" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The address that the <a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a> will bind to when run.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.constellation.Constellation.alchemy">
<code class="sig-name descname">alchemy</code><em class="property"> = None</em><a class="headerlink" href="#royalnet.constellation.Constellation.alchemy" title="Permalink to this definition"></a></dt>
<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">Alchemy</span></code> of this Constellation.</p>
</dd></dl>
2020-08-09 23:31:12 +00:00
<dl class="method">
<dt id="royalnet.constellation.Constellation.call_herald_event">
<em class="property">async </em><code class="sig-name descname">call_herald_event</code><span class="sig-paren">(</span><em class="sig-param">destination: str</em>, <em class="sig-param">event_name: str</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span> &#x2192; Dict<a class="headerlink" href="#royalnet.constellation.Constellation.call_herald_event" title="Permalink to this definition"></a></dt>
<dd><p>Send a <code class="xref py py-class docutils literal notranslate"><span class="pre">royalherald.Request</span></code> to a specific destination, and wait for a
<code class="xref py py-class docutils literal notranslate"><span class="pre">royalherald.Response</span></code>.</p>
</dd></dl>
2019-12-03 18:26:23 +00:00
<dl class="attribute">
<dt id="royalnet.constellation.Constellation.events">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">events</code><em class="property">: Dict[str, rc.HeraldEvent]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.constellation.Constellation.events" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>A dictionary containing all <code class="xref py py-class docutils literal notranslate"><span class="pre">Event</span></code> that can be handled by this <a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a>.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.constellation.Constellation.herald">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">herald</code><em class="property">: Optional[rh.Link]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.constellation.Constellation.herald" title="Permalink to this definition"></a></dt>
2020-01-30 18:33:15 +00:00
<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">Link</span></code> object connecting the <a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a> to the rest of the herald network.
As is the case with the logging module, it will be started on the first request received by the
<a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a>, as the event loop wont be available before that.</p>
2019-12-03 18:26:23 +00:00
</dd></dl>
<dl class="attribute">
<dt id="royalnet.constellation.Constellation.herald_task">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">herald_task</code><em class="property">: Optional[aio.Task]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.constellation.Constellation.herald_task" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>A reference to the <code class="xref py py-class docutils literal notranslate"><span class="pre">aio.Task</span></code> that runs the <code class="xref py py-class docutils literal notranslate"><span class="pre">rh.Link</span></code>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.constellation.Constellation.init_herald">
<code class="sig-name descname">init_herald</code><span class="sig-paren">(</span><em class="sig-param">herald_cfg: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.constellation.Constellation.init_herald" title="Permalink to this definition"></a></dt>
<dd><p>Create a <code class="xref py py-class docutils literal notranslate"><span class="pre">rh.Link</span></code>.</p>
</dd></dl>
2020-01-30 18:33:15 +00:00
<dl class="attribute">
<dt id="royalnet.constellation.Constellation.loop">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">loop</code><em class="property">: Optional[aio.AbstractEventLoop]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.constellation.Constellation.loop" title="Permalink to this definition"></a></dt>
2020-01-30 18:33:15 +00:00
<dd><p>The event loop of the <a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a>.</p>
<p>Because of how <code class="xref py py-mod docutils literal notranslate"><span class="pre">uvicorn</span></code> runs, it will stay <code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code> until the first page is requested.</p>
</dd></dl>
2019-12-03 18:26:23 +00:00
<dl class="method">
<dt id="royalnet.constellation.Constellation.network_handler">
<em class="property">async </em><code class="sig-name descname">network_handler</code><span class="sig-paren">(</span><em class="sig-param">message: Union[royalnet.herald.request.Request, royalnet.herald.broadcast.Broadcast]</em><span class="sig-paren">)</span> &#x2192; royalnet.herald.response.Response<a class="headerlink" href="#royalnet.constellation.Constellation.network_handler" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="royalnet.constellation.Constellation.port">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">port</code><em class="property">: int</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.constellation.Constellation.port" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The port on which the <a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a> will listen for connection on.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.constellation.Constellation.register_events">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">register_events</code><span class="sig-paren">(</span><em class="sig-param">events: List[Type[royalnet.commands.heraldevent.HeraldEvent]], pack_cfg: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.constellation.Constellation.register_events" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.constellation.Constellation.register_page_stars">
2020-03-10 17:58:26 +00:00
<code class="sig-name descname">register_page_stars</code><span class="sig-paren">(</span><em class="sig-param">page_stars: List[Type[royalnet.constellation.pagestar.PageStar]], pack_cfg: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.constellation.Constellation.register_page_stars" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.constellation.Constellation.run_blocking">
<code class="sig-name descname">run_blocking</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.constellation.Constellation.run_blocking" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.constellation.Constellation.run_process">
<em class="property">classmethod </em><code class="sig-name descname">run_process</code><span class="sig-paren">(</span><em class="sig-param">alchemy_cfg: Dict[str, Any], herald_cfg: Dict[str, Any], sentry_cfg: Dict[str, Any], packs_cfg: Dict[str, Any], constellation_cfg: Dict[str, Any], logging_cfg: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.constellation.Constellation.run_process" title="Permalink to this definition"></a></dt>
<dd><p>Blockingly create and run the Constellation.</p>
<p>This should be used as the target of a <a class="reference external" href="https://docs.python.org/3.8/library/multiprocessing.html#multiprocessing.Process" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">multiprocessing.Process</span></code></a>.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.constellation.Constellation.running">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">running</code><em class="property">: bool</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.constellation.Constellation.running" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>Is the <a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a> server currently running?</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.constellation.Constellation.starlette">
<code class="sig-name descname">starlette</code><em class="property"> = None</em><a class="headerlink" href="#royalnet.constellation.Constellation.starlette" title="Permalink to this definition"></a></dt>
<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">Starlette</span></code> app.</p>
</dd></dl>
2020-03-10 17:58:26 +00:00
<dl class="attribute">
<dt id="royalnet.constellation.Constellation.stars">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">stars</code><em class="property">: List[PageStar]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.constellation.Constellation.stars" title="Permalink to this definition"></a></dt>
2020-03-10 17:58:26 +00:00
<dd><p>A list of all the <a class="reference internal" href="#royalnet.constellation.PageStar" title="royalnet.constellation.PageStar"><code class="xref py py-class docutils literal notranslate"><span class="pre">PageStar</span></code></a> registered to this <a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a>.</p>
</dd></dl>
2019-12-03 18:26:23 +00:00
</dd></dl>
<dl class="class">
<dt id="royalnet.constellation.Star">
2020-08-09 23:31:12 +00:00
<em class="property">class </em><code class="sig-prename descclassname">royalnet.constellation.</code><code class="sig-name descname">Star</code><span class="sig-paren">(</span><em class="sig-param">constellation: Constellation</em>, <em class="sig-param">config: ConfigDict</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.constellation.Star" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>A Star is a class representing a part of the website.</p>
2020-03-10 17:58:26 +00:00
<p>It shouldnt be used directly: please use <a class="reference internal" href="#royalnet.constellation.PageStar" title="royalnet.constellation.PageStar"><code class="xref py py-class docutils literal notranslate"><span class="pre">PageStar</span></code></a> and <code class="xref py py-class docutils literal notranslate"><span class="pre">ExceptionStar</span></code> instead!</p>
2019-12-03 18:26:23 +00:00
<dl class="method">
<dt id="royalnet.constellation.Star.Session">
<em class="property">property </em><code class="sig-name descname">Session</code><a class="headerlink" href="#royalnet.constellation.Star.Session" title="Permalink to this definition"></a></dt>
<dd><p>A shortcut for the <a class="reference internal" href="#royalnet.alchemy.Alchemy" title="royalnet.alchemy.Alchemy"><code class="xref py py-class docutils literal notranslate"><span class="pre">Alchemy</span></code></a> <a class="reference internal" href="#royalnet.constellation.Star.Session" title="royalnet.constellation.Star.Session"><code class="xref py py-class docutils literal notranslate"><span class="pre">Session</span></code></a> of the <a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.constellation.Star.alchemy">
<em class="property">property </em><code class="sig-name descname">alchemy</code><a class="headerlink" href="#royalnet.constellation.Star.alchemy" title="Permalink to this definition"></a></dt>
<dd><p>A shortcut for the <a class="reference internal" href="#royalnet.alchemy.Alchemy" title="royalnet.alchemy.Alchemy"><code class="xref py py-class docutils literal notranslate"><span class="pre">Alchemy</span></code></a> of the <a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.constellation.Star.page">
2020-08-09 23:31:12 +00:00
<em class="property">abstract async </em><code class="sig-name descname">page</code><span class="sig-paren">(</span><em class="sig-param">request: starlette.requests.Request</em><span class="sig-paren">)</span> &#x2192; starlette.responses.Response<a class="headerlink" href="#royalnet.constellation.Star.page" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The function generating the <code class="xref py py-class docutils literal notranslate"><span class="pre">Response</span></code> to a web <code class="xref py py-class docutils literal notranslate"><span class="pre">Request</span></code>.</p>
2020-03-10 17:58:26 +00:00
<p>If it raises an error, the corresponding <code class="xref py py-class docutils literal notranslate"><span class="pre">ExceptionStar</span></code> will be used to handle the request instead.</p>
2019-12-03 18:26:23 +00:00
</dd></dl>
<dl class="method">
<dt id="royalnet.constellation.Star.session_acm">
<em class="property">property </em><code class="sig-name descname">session_acm</code><a class="headerlink" href="#royalnet.constellation.Star.session_acm" title="Permalink to this definition"></a></dt>
<dd><p>A shortcut for <code class="xref py py-func docutils literal notranslate"><span class="pre">alchemy.session_acm()</span></code> of the <a class="reference internal" href="#royalnet.constellation.Constellation" title="royalnet.constellation.Constellation"><code class="xref py py-class docutils literal notranslate"><span class="pre">Constellation</span></code></a>.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.constellation.PageStar">
2020-08-09 23:31:12 +00:00
<em class="property">class </em><code class="sig-prename descclassname">royalnet.constellation.</code><code class="sig-name descname">PageStar</code><span class="sig-paren">(</span><em class="sig-param">constellation: Constellation</em>, <em class="sig-param">config: ConfigDict</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.constellation.PageStar" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>A PageStar is a class representing a single route of the website (for example, <code class="docutils literal notranslate"><span class="pre">/api/user/get</span></code>).</p>
<p>To create a new website route you should create a new class inheriting from this class with a function overriding
2020-03-10 17:58:26 +00:00
<a class="reference internal" href="#royalnet.constellation.Star.page" title="royalnet.constellation.Star.page"><code class="xref py py-meth docutils literal notranslate"><span class="pre">page()</span></code></a>, <a class="reference internal" href="#royalnet.constellation.PageStar.path" title="royalnet.constellation.PageStar.path"><code class="xref py py-attr docutils literal notranslate"><span class="pre">path</span></code></a> and optionally <a class="reference internal" href="#royalnet.constellation.PageStar.methods" title="royalnet.constellation.PageStar.methods"><code class="xref py py-attr docutils literal notranslate"><span class="pre">methods</span></code></a>.</p>
2020-08-09 23:31:12 +00:00
<dl class="method">
2019-12-03 18:26:23 +00:00
<dt id="royalnet.constellation.PageStar.methods">
2020-08-09 23:31:12 +00:00
<em class="property">classmethod </em><code class="sig-name descname">methods</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.constellation.PageStar.methods" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The HTTP methods supported by the Star, in form of a list.</p>
<p>By default, a Star only supports the <code class="docutils literal notranslate"><span class="pre">GET</span></code> method, but more can be added.</p>
<p class="rubric">Example</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">methods</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">,</span> <span class="s2">&quot;POST&quot;</span><span class="p">,</span> <span class="s2">&quot;PUT&quot;</span><span class="p">,</span> <span class="s2">&quot;DELETE&quot;</span><span class="p">]</span>
</pre></div>
</div>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.constellation.PageStar.path">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">path</code><em class="property">: str</em><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.constellation.PageStar.path" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The route of the star.</p>
<p class="rubric">Example</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;/api/user/get&#39;</span>
</pre></div>
</div>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-royalnet.herald">
<span id="herald"></span><h2>Herald<a class="headerlink" href="#module-royalnet.herald" title="Permalink to this headline"></a></h2>
2020-02-03 17:23:31 +00:00
<p>The subpackage providing all functions and classes to handle communication between process (even over the Internet).</p>
<p>It is based on <code class="xref py py-mod docutils literal notranslate"><span class="pre">websockets</span></code>.</p>
<p>It requires the <code class="docutils literal notranslate"><span class="pre">herald</span></code> extra to be installed.</p>
<p>You can install it with:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">pip</span> <span class="n">install</span> <span class="n">royalnet</span><span class="p">[</span><span class="n">herald</span><span class="p">]</span>
</pre></div>
</div>
2019-12-03 18:26:23 +00:00
<dl class="class">
<dt id="royalnet.herald.Config">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">Config</code><span class="sig-paren">(</span><em class="sig-param">name: str</em>, <em class="sig-param">address: str</em>, <em class="sig-param">port: int</em>, <em class="sig-param">secret: str</em>, <em class="sig-param">secure: bool = False</em>, <em class="sig-param">path: str = '/'</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Config" title="Permalink to this definition"></a></dt>
<dd><dl class="method">
<dt id="royalnet.herald.Config.copy">
<code class="sig-name descname">copy</code><span class="sig-paren">(</span><em class="sig-param">name: Optional[str] = None</em>, <em class="sig-param">address: Optional[str] = None</em>, <em class="sig-param">port: Optional[int] = None</em>, <em class="sig-param">secret: Optional[str] = None</em>, <em class="sig-param">secure: Optional[bool] = None</em>, <em class="sig-param">path: Optional[str] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Config.copy" title="Permalink to this definition"></a></dt>
<dd><p>Create an exact copy of this configuration, but with different parameters.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Config.from_config">
<em class="property">classmethod </em><code class="sig-name descname">from_config</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">name: str</em>, <em class="sig-param">address: str</em>, <em class="sig-param">port: int</em>, <em class="sig-param">secret: str</em>, <em class="sig-param">secure: bool = False</em>, <em class="sig-param">path: str = '/'</em>, <em class="sig-param">enabled: ... = Ellipsis</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Config.from_config" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.herald.Config.url">
<em class="property">property </em><code class="sig-name descname">url</code><a class="headerlink" href="#royalnet.herald.Config.url" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="exception">
<dt id="royalnet.herald.HeraldError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">HeraldError</code><a class="headerlink" href="#royalnet.herald.HeraldError" title="Permalink to this definition"></a></dt>
<dd><p>A generic <a class="reference internal" href="#module-royalnet.herald" title="royalnet.herald"><code class="xref py py-mod docutils literal notranslate"><span class="pre">royalnet.herald</span></code></a> error.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.herald.ConnectionClosedError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">ConnectionClosedError</code><a class="headerlink" href="#royalnet.herald.ConnectionClosedError" title="Permalink to this definition"></a></dt>
<dd><p>The <a class="reference internal" href="#royalnet.herald.Link" title="royalnet.herald.Link"><code class="xref py py-class docutils literal notranslate"><span class="pre">Link</span></code></a>s connection was closed unexpectedly. The link cant be used anymore.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.herald.LinkError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">LinkError</code><a class="headerlink" href="#royalnet.herald.LinkError" title="Permalink to this definition"></a></dt>
<dd><p>An error for something that happened in a <a class="reference internal" href="#royalnet.herald.Link" title="royalnet.herald.Link"><code class="xref py py-class docutils literal notranslate"><span class="pre">Link</span></code></a>.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.herald.InvalidServerResponseError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">InvalidServerResponseError</code><a class="headerlink" href="#royalnet.herald.InvalidServerResponseError" title="Permalink to this definition"></a></dt>
<dd><p>The <a class="reference internal" href="#royalnet.herald.Server" title="royalnet.herald.Server"><code class="xref py py-class docutils literal notranslate"><span class="pre">Server</span></code></a> sent invalid data to the <a class="reference internal" href="#royalnet.herald.Link" title="royalnet.herald.Link"><code class="xref py py-class docutils literal notranslate"><span class="pre">Link</span></code></a>.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.herald.ServerError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">ServerError</code><a class="headerlink" href="#royalnet.herald.ServerError" title="Permalink to this definition"></a></dt>
<dd><p>An error for something that happened in a <a class="reference internal" href="#royalnet.herald.Server" title="royalnet.herald.Server"><code class="xref py py-class docutils literal notranslate"><span class="pre">Server</span></code></a>.</p>
</dd></dl>
<dl class="class">
<dt id="royalnet.herald.Link">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">Link</code><span class="sig-paren">(</span><em class="sig-param">config: royalnet.herald.config.Config</em>, <em class="sig-param">request_handler</em>, <em class="sig-param">*</em>, <em class="sig-param">loop: asyncio.events.AbstractEventLoop = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Link" title="Permalink to this definition"></a></dt>
<dd><dl class="method">
<dt id="royalnet.herald.Link.broadcast">
<em class="property">async </em><code class="sig-name descname">broadcast</code><span class="sig-paren">(</span><em class="sig-param">destination: str</em>, <em class="sig-param">broadcast: royalnet.herald.broadcast.Broadcast</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.herald.Link.broadcast" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.herald.Link.connect">
<em class="property">async </em><code class="sig-name descname">connect</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Link.connect" title="Permalink to this definition"></a></dt>
<dd><p>Connect to the <a class="reference internal" href="#royalnet.herald.Server" title="royalnet.herald.Server"><code class="xref py py-class docutils literal notranslate"><span class="pre">Server</span></code></a> at <code class="xref py py-attr docutils literal notranslate"><span class="pre">config.url</span></code>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Link.identify">
<em class="property">async </em><code class="sig-name descname">identify</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.herald.Link.identify" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.herald.Link.receive">
<em class="property">async </em><code class="sig-name descname">receive</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; royalnet.herald.package.Package<a class="headerlink" href="#royalnet.herald.Link.receive" title="Permalink to this definition"></a></dt>
<dd><p>Recieve a <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a> from the <a class="reference internal" href="#royalnet.herald.Server" title="royalnet.herald.Server"><code class="xref py py-class docutils literal notranslate"><span class="pre">Server</span></code></a>.</p>
<dl class="field-list simple">
<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><a class="reference internal" href="#royalnet.herald.ConnectionClosedError" title="royalnet.herald.ConnectionClosedError"><strong>ConnectionClosedError</strong></a> </p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Link.request">
<em class="property">async </em><code class="sig-name descname">request</code><span class="sig-paren">(</span><em class="sig-param">destination: str</em>, <em class="sig-param">request: royalnet.herald.request.Request</em><span class="sig-paren">)</span> &#x2192; royalnet.herald.response.Response<a class="headerlink" href="#royalnet.herald.Link.request" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.herald.Link.run">
<em class="property">async </em><code class="sig-name descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Link.run" title="Permalink to this definition"></a></dt>
<dd><p>Blockingly run the Link.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Link.send">
<em class="property">async </em><code class="sig-name descname">send</code><span class="sig-paren">(</span><em class="sig-param">package: royalnet.herald.package.Package</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Link.send" title="Permalink to this definition"></a></dt>
<dd><p>Send a package to the <a class="reference internal" href="#royalnet.herald.Server" title="royalnet.herald.Server"><code class="xref py py-class docutils literal notranslate"><span class="pre">Server</span></code></a>.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.herald.Package">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">Package</code><span class="sig-paren">(</span><em class="sig-param">data: dict</em>, <em class="sig-param">*</em>, <em class="sig-param">source: str</em>, <em class="sig-param">destination: str</em>, <em class="sig-param">source_conv_id: Optional[str] = None</em>, <em class="sig-param">destination_conv_id: Optional[str] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Package" title="Permalink to this definition"></a></dt>
<dd><p>A data type with which a <a class="reference internal" href="#royalnet.herald.Link" title="royalnet.herald.Link"><code class="xref py py-class docutils literal notranslate"><span class="pre">Link</span></code></a> communicates with a <a class="reference internal" href="#royalnet.herald.Server" title="royalnet.herald.Server"><code class="xref py py-class docutils literal notranslate"><span class="pre">Server</span></code></a> or
another Link.</p>
<p>Contains info about the source and the destination.</p>
<dl class="method">
<dt id="royalnet.herald.Package.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">data: dict</em>, <em class="sig-param">*</em>, <em class="sig-param">source: str</em>, <em class="sig-param">destination: str</em>, <em class="sig-param">source_conv_id: Optional[str] = None</em>, <em class="sig-param">destination_conv_id: Optional[str] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Package.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Create a Package.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>data</strong> The data that should be sent.</p></li>
<li><p><strong>source</strong> The <code class="docutils literal notranslate"><span class="pre">nid</span></code> of the node that created this Package.</p></li>
<li><p><strong>destination</strong> The <code class="docutils literal notranslate"><span class="pre">link_type</span></code> of the destination node, or alternatively, the <code class="docutils literal notranslate"><span class="pre">nid</span></code> of the node.
Can also be the <code class="docutils literal notranslate"><span class="pre">NULL</span></code> value to send the message to nobody.</p></li>
<li><p><strong>source_conv_id</strong> The conversation id of the node that created this package.
Akin to the sequence number on IP packets.</p></li>
<li><p><strong>destination_conv_id</strong> The conversation id of the node that this Package is a reply to.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Package.from_dict">
<em class="property">static </em><code class="sig-name descname">from_dict</code><span class="sig-paren">(</span><em class="sig-param">d</em><span class="sig-paren">)</span> &#x2192; royalnet.herald.package.Package<a class="headerlink" href="#royalnet.herald.Package.from_dict" title="Permalink to this definition"></a></dt>
<dd><p>Create a <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a> from a dictionary.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Package.from_json_bytes">
<em class="property">static </em><code class="sig-name descname">from_json_bytes</code><span class="sig-paren">(</span><em class="sig-param">b: bytes</em><span class="sig-paren">)</span> &#x2192; royalnet.herald.package.Package<a class="headerlink" href="#royalnet.herald.Package.from_json_bytes" title="Permalink to this definition"></a></dt>
<dd><p>Create a <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a> from UTF-8-encoded JSON bytes.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Package.from_json_string">
<em class="property">static </em><code class="sig-name descname">from_json_string</code><span class="sig-paren">(</span><em class="sig-param">string: str</em><span class="sig-paren">)</span> &#x2192; royalnet.herald.package.Package<a class="headerlink" href="#royalnet.herald.Package.from_json_string" title="Permalink to this definition"></a></dt>
<dd><p>Create a <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a> from a JSON string.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Package.reply">
<code class="sig-name descname">reply</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span> &#x2192; royalnet.herald.package.Package<a class="headerlink" href="#royalnet.herald.Package.reply" title="Permalink to this definition"></a></dt>
<dd><p>Reply to this <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a> with another <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a>.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> The data that should be sent. Usually a <a class="reference internal" href="#royalnet.herald.Request" title="royalnet.herald.Request"><code class="xref py py-class docutils literal notranslate"><span class="pre">Request</span></code></a>.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The reply <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a>.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Package.to_dict">
<code class="sig-name descname">to_dict</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; dict<a class="headerlink" href="#royalnet.herald.Package.to_dict" title="Permalink to this definition"></a></dt>
<dd><p>Convert the <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a> into a dictionary.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Package.to_json_bytes">
<code class="sig-name descname">to_json_bytes</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; bytes<a class="headerlink" href="#royalnet.herald.Package.to_json_bytes" title="Permalink to this definition"></a></dt>
<dd><p>Convert the <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a> into UTF-8-encoded JSON bytes.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Package.to_json_string">
<code class="sig-name descname">to_json_string</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.herald.Package.to_json_string" title="Permalink to this definition"></a></dt>
<dd><p>Convert the <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a> into a JSON string.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.herald.Request">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">Request</code><span class="sig-paren">(</span><em class="sig-param">handler: str</em>, <em class="sig-param">data: dict</em>, <em class="sig-param">msg_type: Optional[str] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Request" title="Permalink to this definition"></a></dt>
<dd><p>A request sent from a <a class="reference internal" href="#royalnet.herald.Link" title="royalnet.herald.Link"><code class="xref py py-class docutils literal notranslate"><span class="pre">Link</span></code></a> to another.</p>
<p>It contains the name of the requested handler, in addition to the data.</p>
<dl class="method">
<dt id="royalnet.herald.Request.from_dict">
<em class="property">classmethod </em><code class="sig-name descname">from_dict</code><span class="sig-paren">(</span><em class="sig-param">d: dict</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Request.from_dict" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.herald.Request.to_dict">
<code class="sig-name descname">to_dict</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Request.to_dict" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.herald.Response">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">Response</code><a class="headerlink" href="#royalnet.herald.Response" title="Permalink to this definition"></a></dt>
<dd><p>A base class to be inherited by all other response types.</p>
<dl class="method">
<dt id="royalnet.herald.Response.from_dict">
<em class="property">classmethod </em><code class="sig-name descname">from_dict</code><span class="sig-paren">(</span><em class="sig-param">d: dict</em><span class="sig-paren">)</span> &#x2192; royalnet.herald.response.Response<a class="headerlink" href="#royalnet.herald.Response.from_dict" title="Permalink to this definition"></a></dt>
<dd><p>Recreate the response from a received <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#dict" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Response.to_dict">
<code class="sig-name descname">to_dict</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; dict<a class="headerlink" href="#royalnet.herald.Response.to_dict" title="Permalink to this definition"></a></dt>
<dd><p>Prepare the Response to be sent by converting it to a JSONable <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#dict" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a>.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.herald.ResponseSuccess">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">ResponseSuccess</code><span class="sig-paren">(</span><em class="sig-param">data: Optional[dict] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.ResponseSuccess" title="Permalink to this definition"></a></dt>
<dd><p>A response to a successful <a class="reference internal" href="#royalnet.herald.Request" title="royalnet.herald.Request"><code class="xref py py-class docutils literal notranslate"><span class="pre">Request</span></code></a>.</p>
</dd></dl>
<dl class="class">
<dt id="royalnet.herald.ResponseFailure">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">ResponseFailure</code><span class="sig-paren">(</span><em class="sig-param">name: str</em>, <em class="sig-param">description: str</em>, <em class="sig-param">extra_info: Optional[dict] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.ResponseFailure" title="Permalink to this definition"></a></dt>
<dd><p>A response to a invalid <a class="reference internal" href="#royalnet.herald.Request" title="royalnet.herald.Request"><code class="xref py py-class docutils literal notranslate"><span class="pre">Request</span></code></a>.</p>
</dd></dl>
<dl class="class">
<dt id="royalnet.herald.Server">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">Server</code><span class="sig-paren">(</span><em class="sig-param">config: royalnet.herald.config.Config</em>, <em class="sig-param">*</em>, <em class="sig-param">loop: asyncio.events.AbstractEventLoop = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Server" title="Permalink to this definition"></a></dt>
<dd><dl class="method">
<dt id="royalnet.herald.Server.find_client">
<code class="sig-name descname">find_client</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">nid: str = None</em>, <em class="sig-param">link_type: str = None</em><span class="sig-paren">)</span> &#x2192; List[royalnet.herald.server.ConnectedClient]<a class="headerlink" href="#royalnet.herald.Server.find_client" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.herald.Server.find_destination">
<code class="sig-name descname">find_destination</code><span class="sig-paren">(</span><em class="sig-param">package: royalnet.herald.package.Package</em><span class="sig-paren">)</span> &#x2192; List[royalnet.herald.server.ConnectedClient]<a class="headerlink" href="#royalnet.herald.Server.find_destination" title="Permalink to this definition"></a></dt>
<dd><p>Find a list of destinations for the package.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>package</strong> The package to find the destination of.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>A <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#list" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a> of <code class="xref py py-class docutils literal notranslate"><span class="pre">ConnectedClient</span></code> to send the package to.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Server.listener">
<em class="property">async </em><code class="sig-name descname">listener</code><span class="sig-paren">(</span><em class="sig-param">websocket: websockets.server.WebSocketServerProtocol</em>, <em class="sig-param">path</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Server.listener" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.herald.Server.route_package">
<em class="property">async </em><code class="sig-name descname">route_package</code><span class="sig-paren">(</span><em class="sig-param">package: royalnet.herald.package.Package</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.herald.Server.route_package" title="Permalink to this definition"></a></dt>
<dd><p>Executed every time a <a class="reference internal" href="#royalnet.herald.Package" title="royalnet.herald.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a> is received and must be routed somewhere.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.herald.Server.run">
<em class="property">async </em><code class="sig-name descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Server.run" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.herald.Server.run_blocking">
<code class="sig-name descname">run_blocking</code><span class="sig-paren">(</span><em class="sig-param">logging_cfg: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Server.run_blocking" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.herald.Server.serve">
<code class="sig-name descname">serve</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Server.serve" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.herald.Broadcast">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.herald.</code><code class="sig-name descname">Broadcast</code><span class="sig-paren">(</span><em class="sig-param">handler: str</em>, <em class="sig-param">data: dict</em>, <em class="sig-param">msg_type: Optional[str] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Broadcast" title="Permalink to this definition"></a></dt>
<dd><dl class="method">
<dt id="royalnet.herald.Broadcast.from_dict">
<em class="property">classmethod </em><code class="sig-name descname">from_dict</code><span class="sig-paren">(</span><em class="sig-param">d: dict</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Broadcast.from_dict" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.herald.Broadcast.to_dict">
<code class="sig-name descname">to_dict</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.herald.Broadcast.to_dict" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
<div class="section" id="module-royalnet.serf">
<span id="serf"></span><h2>Serf<a class="headerlink" href="#module-royalnet.serf" title="Permalink to this headline"></a></h2>
2020-02-03 17:23:31 +00:00
<p>The subpackage providing all Serf implementations.</p>
2019-12-03 18:26:23 +00:00
<dl class="class">
<dt id="royalnet.serf.Serf">
2020-08-09 23:31:12 +00:00
<em class="property">class </em><code class="sig-prename descclassname">royalnet.serf.</code><code class="sig-name descname">Serf</code><span class="sig-paren">(</span><em class="sig-param">loop: asyncio.events.AbstractEventLoop</em>, <em class="sig-param">alchemy_cfg: royalnet.commands.configdict.ConfigDict</em>, <em class="sig-param">herald_cfg: royalnet.commands.configdict.ConfigDict</em>, <em class="sig-param">packs_cfg: royalnet.commands.configdict.ConfigDict</em>, <em class="sig-param">**_</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.serf.Serf" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>An abstract class, to be used as base to implement Royalnet bots on multiple interfaces (such as Telegram or
Discord).</p>
<dl class="attribute">
<dt id="royalnet.serf.Serf.alchemy">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">alchemy</code><em class="property">: Optional[ra.Alchemy]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.serf.Serf.alchemy" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">Alchemy</span></code> object connecting this <a class="reference internal" href="#royalnet.serf.Serf" title="royalnet.serf.Serf"><code class="xref py py-class docutils literal notranslate"><span class="pre">Serf</span></code></a> to a database.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.serf.Serf.call">
<em class="property">async </em><code class="sig-name descname">call</code><span class="sig-paren">(</span><em class="sig-param">command: royalnet.commands.command.Command, data: royalnet.commands.commanddata.CommandData, parameters: List[str]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.serf.Serf.call" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2020-08-09 23:31:12 +00:00
<dl class="method">
<dt id="royalnet.serf.Serf.call_herald_event">
<em class="property">async </em><code class="sig-name descname">call_herald_event</code><span class="sig-paren">(</span><em class="sig-param">destination: str</em>, <em class="sig-param">event_name: str</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span> &#x2192; Dict<a class="headerlink" href="#royalnet.serf.Serf.call_herald_event" title="Permalink to this definition"></a></dt>
<dd><p>Send a <code class="xref py py-class docutils literal notranslate"><span class="pre">royalherald.Request</span></code> to a specific destination, and wait for a
<code class="xref py py-class docutils literal notranslate"><span class="pre">royalherald.Response</span></code>.</p>
</dd></dl>
2019-12-03 18:26:23 +00:00
<dl class="attribute">
<dt id="royalnet.serf.Serf.commands">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">commands</code><em class="property">: Dict[str, rc.Command]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.serf.Serf.commands" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#dict" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a> connecting each command name to its <code class="xref py py-class docutils literal notranslate"><span class="pre">Command</span></code> object.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.serf.Serf.events">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">events</code><em class="property">: Dict[str, rc.HeraldEvent]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.serf.Serf.events" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>A dictionary containing all <code class="xref py py-class docutils literal notranslate"><span class="pre">Event</span></code> that can be handled by this <a class="reference internal" href="#royalnet.serf.Serf" title="royalnet.serf.Serf"><code class="xref py py-class docutils literal notranslate"><span class="pre">Serf</span></code></a>.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.serf.Serf.herald">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">herald</code><em class="property">: Optional[rh.Link]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.serf.Serf.herald" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The <code class="xref py py-class docutils literal notranslate"><span class="pre">Link</span></code> object connecting the <a class="reference internal" href="#royalnet.serf.Serf" title="royalnet.serf.Serf"><code class="xref py py-class docutils literal notranslate"><span class="pre">Serf</span></code></a> to the rest of the Herald network.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.serf.Serf.herald_task">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">herald_task</code><em class="property">: Optional[aio.Task]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.serf.Serf.herald_task" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>A reference to the <a class="reference external" href="https://docs.python.org/3.8/library/asyncio-task.html#asyncio.Task" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">asyncio.Task</span></code></a> that runs the <code class="xref py py-class docutils literal notranslate"><span class="pre">Link</span></code>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.serf.Serf.identity_chain">
<em class="property">property </em><code class="sig-name descname">identity_chain</code><a class="headerlink" href="#royalnet.serf.Serf.identity_chain" title="Permalink to this definition"></a></dt>
<dd><p>Find a relationship path starting from the master table and ending at the identity table, and return it.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.serf.Serf.identity_table">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">identity_table</code><em class="property">: Optional[Table]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.serf.Serf.identity_table" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The identity table containing the interface data (such as the Telegram user data) and that is in a
many-to-one relationship with the master table.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.serf.Serf.init_alchemy">
<code class="sig-name descname">init_alchemy</code><span class="sig-paren">(</span><em class="sig-param">alchemy_cfg: Dict[str, Any], tables: Set[type]</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.serf.Serf.init_alchemy" title="Permalink to this definition"></a></dt>
<dd><p>Create and initialize the <code class="xref py py-class docutils literal notranslate"><span class="pre">Alchemy</span></code> with the required tables, and find the link between the master
table and the identity table.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.serf.Serf.init_herald">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">init_herald</code><span class="sig-paren">(</span><em class="sig-param">herald_cfg: royalnet.commands.configdict.ConfigDict</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.serf.Serf.init_herald" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>Create a <code class="xref py py-class docutils literal notranslate"><span class="pre">Link</span></code> and bind <code class="xref py py-class docutils literal notranslate"><span class="pre">Event</span></code>.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.serf.Serf.interface_name">
<code class="sig-name descname">interface_name</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.serf.Serf.interface_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="royalnet.serf.Serf.loop">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">loop</code><em class="property">: Optional[aio.AbstractEventLoop]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.serf.Serf.loop" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The event loop this Serf is running on.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.serf.Serf.master_table">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">master_table</code><em class="property">: Optional[Table]</em><em class="property"> = None</em><a class="headerlink" href="#royalnet.serf.Serf.master_table" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>The central table listing all users. It usually is <code class="xref py py-class docutils literal notranslate"><span class="pre">User</span></code>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.serf.Serf.network_handler">
<em class="property">async </em><code class="sig-name descname">network_handler</code><span class="sig-paren">(</span><em class="sig-param">message: Union[royalnet.herald.request.Request, royalnet.herald.broadcast.Broadcast]</em><span class="sig-paren">)</span> &#x2192; royalnet.herald.response.Response<a class="headerlink" href="#royalnet.serf.Serf.network_handler" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2020-08-09 23:31:12 +00:00
<dl class="attribute">
<dt id="royalnet.serf.Serf.prefix">
<code class="sig-name descname">prefix</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.serf.Serf.prefix" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2020-01-30 18:33:15 +00:00
<dl class="method">
<dt id="royalnet.serf.Serf.press">
2020-08-09 23:31:12 +00:00
<em class="property">async static </em><code class="sig-name descname">press</code><span class="sig-paren">(</span><em class="sig-param">key: royalnet.commands.keyboardkey.KeyboardKey</em>, <em class="sig-param">data: royalnet.commands.commanddata.CommandData</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.serf.Serf.press" title="Permalink to this definition"></a></dt>
2020-01-30 18:33:15 +00:00
<dd></dd></dl>
2019-12-03 18:26:23 +00:00
<dl class="method">
<dt id="royalnet.serf.Serf.register_commands">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">register_commands</code><span class="sig-paren">(</span><em class="sig-param">commands: List[Type[royalnet.commands.command.Command]], pack_cfg: royalnet.commands.configdict.ConfigDict</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.serf.Serf.register_commands" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd><p>Initialize and register all commands passed as argument.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.serf.Serf.register_events">
2020-08-09 23:31:12 +00:00
<code class="sig-name descname">register_events</code><span class="sig-paren">(</span><em class="sig-param">events: List[Type[royalnet.commands.heraldevent.HeraldEvent]], pack_cfg: royalnet.commands.configdict.ConfigDict</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.serf.Serf.register_events" title="Permalink to this definition"></a></dt>
2019-12-03 18:26:23 +00:00
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.serf.Serf.run">
<em class="property">async </em><code class="sig-name descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.serf.Serf.run" title="Permalink to this definition"></a></dt>
<dd><p>A coroutine that starts the event loop and handles command calls.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.serf.Serf.run_process">
<em class="property">classmethod </em><code class="sig-name descname">run_process</code><span class="sig-paren">(</span><em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.serf.Serf.run_process" title="Permalink to this definition"></a></dt>
<dd><p>Blockingly create and run the Serf.</p>
<p>This should be used as the target of a <a class="reference external" href="https://docs.python.org/3.8/library/multiprocessing.html#multiprocessing.Process" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">multiprocessing.Process</span></code></a>.</p>
</dd></dl>
</dd></dl>
<dl class="exception">
<dt id="royalnet.serf.SerfError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.serf.</code><code class="sig-name descname">SerfError</code><a class="headerlink" href="#royalnet.serf.SerfError" title="Permalink to this definition"></a></dt>
<dd><p>Base class for all <a class="reference internal" href="#module-royalnet.serf" title="royalnet.serf"><code class="xref py py-mod docutils literal notranslate"><span class="pre">royalnet.serf</span></code></a> errors.</p>
</dd></dl>
</div>
<div class="section" id="module-royalnet.utils">
<span id="utils"></span><h2>Utils<a class="headerlink" href="#module-royalnet.utils" title="Permalink to this headline"></a></h2>
<dl class="function">
<dt id="royalnet.utils.asyncify">
<em class="property">async </em><code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">asyncify</code><span class="sig-paren">(</span><em class="sig-param">function: Callable</em>, <em class="sig-param">*args</em>, <em class="sig-param">loop: Optional[asyncio.events.AbstractEventLoop] = None</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.utils.asyncify" title="Permalink to this definition"></a></dt>
2020-01-30 18:33:15 +00:00
<dd><p>Asyncronously run the function in a executor, allowing it to run asyncronously.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>function</strong> The function to call.</p></li>
<li><p><strong>args</strong> The arguments to pass to the function.</p></li>
<li><p><strong>kwargs</strong> The keyword arguments to pass to the function.</p></li>
<li><p><strong>loop</strong> The loop to run the function in. If <code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code>, run it in in the current event loop.</p></li>
</ul>
</dd>
</dl>
2019-12-03 18:26:23 +00:00
<div class="admonition warning">
<p class="admonition-title">Warning</p>
2020-01-30 18:33:15 +00:00
<p>The called function must be thread-safe!</p>
2019-12-03 18:26:23 +00:00
</div>
2020-08-09 23:31:12 +00:00
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Calling a function this way might be significantly slower than calling its blocking counterpart!</p>
</div>
2019-12-03 18:26:23 +00:00
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.sleep_until">
<em class="property">async </em><code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">sleep_until</code><span class="sig-paren">(</span><em class="sig-param">dt: datetime.datetime</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.utils.sleep_until" title="Permalink to this definition"></a></dt>
<dd><p>Sleep until the specified datetime.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Accurate only to seconds.</p>
</div>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.andformat">
2020-08-09 23:31:12 +00:00
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">andformat</code><span class="sig-paren">(</span><em class="sig-param">coll: Collection[str], middle=', ', final=' and '</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.andformat" title="Permalink to this definition"></a></dt>
<dd><p>Convert a collection (such as a <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#list" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a>) to a <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#str" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> by adding <code class="docutils literal notranslate"><span class="pre">final</span></code> between the last two
elements and <code class="docutils literal notranslate"><span class="pre">middle</span></code> between the others.</p>
2019-12-03 18:26:23 +00:00
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
2020-08-09 23:31:12 +00:00
<li><p><strong>coll</strong> the input collection.</p></li>
2019-12-03 18:26:23 +00:00
<li><p><strong>middle</strong> the <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#str" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> to be added between the middle elements.</p></li>
<li><p><strong>final</strong> the <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#str" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> to be added between the last two elements.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The resulting <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#str" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>.</p>
</dd>
</dl>
<p class="rubric">Examples</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">andformat</span><span class="p">([</span><span class="s2">&quot;Steffo&quot;</span><span class="p">,</span> <span class="s2">&quot;Kappa&quot;</span><span class="p">,</span> <span class="s2">&quot;Proto&quot;</span><span class="p">])</span>
<span class="go">&quot;Steffo, Kappa and Proto&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">andformat</span><span class="p">([</span><span class="s2">&quot;Viktya&quot;</span><span class="p">,</span> <span class="s2">&quot;Sensei&quot;</span><span class="p">,</span> <span class="s2">&quot;Cate&quot;</span><span class="p">],</span> <span class="n">final</span><span class="o">=</span><span class="s2">&quot; e &quot;</span><span class="p">)</span>
<span class="go">&quot;Viktya, Sensei e Cate&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">andformat</span><span class="p">([</span><span class="s2">&quot;Paltri&quot;</span><span class="p">,</span> <span class="s2">&quot;Spaggia&quot;</span><span class="p">,</span> <span class="s2">&quot;Gesù&quot;</span><span class="p">,</span> <span class="s2">&quot;Mallllco&quot;</span><span class="p">],</span> <span class="n">middle</span><span class="o">=</span><span class="s2">&quot;+&quot;</span><span class="p">,</span> <span class="n">final</span><span class="o">=</span><span class="s2">&quot;+&quot;</span><span class="p">)</span>
<span class="go">&quot;Paltri+Spaggia+Gesù+Mallllco&quot;</span>
</pre></div>
</div>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.underscorize">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">underscorize</code><span class="sig-paren">(</span><em class="sig-param">string: str</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.underscorize" title="Permalink to this definition"></a></dt>
<dd><p>Replace all non-word characters in a <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#str" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> with underscores.</p>
<p>It is particularly useful when you want to use random strings from the Internet as filenames.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>string</strong> the input string.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The resulting string.</p>
</dd>
</dl>
<p class="rubric">Example</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">underscorize</span><span class="p">(</span><span class="s2">&quot;LE EPIC PRANK [GONE WRONG!?!?]&quot;</span><span class="p">)</span>
2020-08-09 23:31:12 +00:00
<span class="go">&quot;LE_EPIC_PRANK__GONE_WRONG_____&quot;</span>
2019-12-03 18:26:23 +00:00
</pre></div>
</div>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.ytdldateformat">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">ytdldateformat</code><span class="sig-paren">(</span><em class="sig-param">string: Optional[str], separator: str = '-'</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.ytdldateformat" title="Permalink to this definition"></a></dt>
<dd><dl class="simple">
<dt>Convert the date <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#str" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> returned by <a class="reference external" href="https://ytdl-org.github.io/youtube-dl/index.html">youtube_dl</a> into</dt><dd><p>the <code class="docutils literal notranslate"><span class="pre">YYYY-MM-DD</span></code> format.</p>
</dd>
</dl>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>string</strong> the input <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#str" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>, in the <code class="docutils literal notranslate"><span class="pre">YYYYMMDD</span></code> format used by youtube_dl.</p></li>
<li><p><strong>separator</strong> the <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#str" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> to add between the years, the months and the days. Defaults to <code class="docutils literal notranslate"><span class="pre">&quot;-&quot;</span></code>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The resulting <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#str" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> in the new format.</p>
</dd>
</dl>
<p class="rubric">Example</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">ytdldateformat</span><span class="p">(</span><span class="s2">&quot;20111111&quot;</span><span class="p">)</span>
<span class="go">&quot;2011-11-11&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ytdldateformat</span><span class="p">(</span><span class="s2">&quot;20200202&quot;</span><span class="p">,</span> <span class="n">separator</span><span class="o">=</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
<span class="go">&quot;2020.02.02&quot;</span>
</pre></div>
</div>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.numberemojiformat">
2020-08-09 23:31:12 +00:00
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">numberemojiformat</code><span class="sig-paren">(</span><em class="sig-param">li: Collection[str]</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.numberemojiformat" title="Permalink to this definition"></a></dt>
<dd><p>Convert a collection to a string with one item on every line numbered with emojis.</p>
2019-12-03 18:26:23 +00:00
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
2020-08-09 23:31:12 +00:00
<dd class="field-odd"><p><strong>li</strong> the list to convert.</p>
2019-12-03 18:26:23 +00:00
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The resulting Unicode string.</p>
</dd>
</dl>
<p class="rubric">Examples</p>
<p>Cannot be displayed, as Sphinx does not render emojis properly.</p>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.ordinalformat">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">ordinalformat</code><span class="sig-paren">(</span><em class="sig-param">number: int</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.ordinalformat" title="Permalink to this definition"></a></dt>
<dd><p>Convert a <a class="reference external" href="https://docs.python.org/3.8/library/functions.html#int" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a> to the corresponding English ordinal <a class="reference external" href="https://docs.python.org/3.8/library/stdtypes.html#str" title="(in Python v3.8)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>number</strong> the number to convert.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>//en.wikipedia.org/wiki/Ordinal_numeral&gt;`_.</p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>The corresponding English <a href="#id3"><span class="problematic" id="id4">`</span></a>ordinal numeral &lt;https</p>
</dd>
</dl>
<p class="rubric">Examples</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">ordinalformat</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="go">&quot;1st&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ordinalformat</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="go">&quot;2nd&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ordinalformat</span><span class="p">(</span><span class="mi">11</span><span class="p">)</span>
<span class="go">&quot;11th&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ordinalformat</span><span class="p">(</span><span class="mi">101</span><span class="p">)</span>
<span class="go">&quot;101st&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ordinalformat</span><span class="p">(</span><span class="mi">112</span><span class="p">)</span>
<span class="go">&quot;112th&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ordinalformat</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="go">&quot;0th&quot;</span>
</pre></div>
</div>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.to_urluuid">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">to_urluuid</code><span class="sig-paren">(</span><em class="sig-param">uuid: uuid.UUID</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.to_urluuid" title="Permalink to this definition"></a></dt>
<dd><p>Return a base64 url-friendly short UUID.</p>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.from_urluuid">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">from_urluuid</code><span class="sig-paren">(</span><em class="sig-param">b: str</em><span class="sig-paren">)</span> &#x2192; uuid.UUID<a class="headerlink" href="#royalnet.utils.from_urluuid" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="class">
<dt id="royalnet.utils.MultiLock">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">MultiLock</code><a class="headerlink" href="#royalnet.utils.MultiLock" title="Permalink to this definition"></a></dt>
<dd><p>A lock that can allow both simultaneous access and exclusive access to a resource.</p>
<dl class="method">
<dt id="royalnet.utils.MultiLock.exclusive">
<code class="sig-name descname">exclusive</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.utils.MultiLock.exclusive" title="Permalink to this definition"></a></dt>
<dd><p>Acquire the lock for exclusive access.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.utils.MultiLock.normal">
<code class="sig-name descname">normal</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.utils.MultiLock.normal" title="Permalink to this definition"></a></dt>
<dd><p>Acquire the lock for simultaneous access.</p>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.init_sentry">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">init_sentry</code><span class="sig-paren">(</span><em class="sig-param">sentry_cfg: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.utils.init_sentry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="royalnet.utils.sentry_exc">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">sentry_exc</code><span class="sig-paren">(</span><em class="sig-param">exc: Exception</em>, <em class="sig-param">level: str = 'ERROR'</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.utils.sentry_exc" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2020-08-09 23:31:12 +00:00
<dl class="function">
<dt id="royalnet.utils.sentry_wrap">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">sentry_wrap</code><span class="sig-paren">(</span><em class="sig-param">level: str = 'ERROR'</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.utils.sentry_wrap" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="royalnet.utils.sentry_async_wrap">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">sentry_async_wrap</code><span class="sig-paren">(</span><em class="sig-param">level: str = 'ERROR'</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.utils.sentry_async_wrap" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2019-12-03 18:26:23 +00:00
<dl class="function">
<dt id="royalnet.utils.init_logging">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">init_logging</code><span class="sig-paren">(</span><em class="sig-param">logging_cfg: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.utils.init_logging" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2020-08-09 23:31:12 +00:00
<dl class="function">
<dt id="royalnet.utils.strip_tabs">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">strip_tabs</code><span class="sig-paren">(</span><em class="sig-param">s: str</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.strip_tabs" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
2019-12-03 18:26:23 +00:00
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="randomdiscoveries.html" class="btn btn-neutral float-left" title="Random discoveries" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
2020-08-09 23:31:12 +00:00
&copy; Copyright 2020, Stefano Pigozzi
2019-12-03 18:26:23 +00:00
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>