Inkycal/docs/inkycal.html
2024-06-25 23:49:02 +00:00

614 lines
48 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="./">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Inkycal &mdash; inkycal 2.0.4 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=80d5e7a1" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=19f00094" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=adc66a14"></script>
<script src="_static/doctools.js?v=9a2dae69"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="about.html" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="About Inkycal" href="about.html" />
<link rel="prev" title="Inkycal documentation" href="index.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">
inkycal
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="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="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Inkycal</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.main.Inkycal"><code class="docutils literal notranslate"><span class="pre">Inkycal</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.main.Inkycal.calibrate"><code class="docutils literal notranslate"><span class="pre">Inkycal.calibrate()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.main.Inkycal.countdown"><code class="docutils literal notranslate"><span class="pre">Inkycal.countdown()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.main.Inkycal.dry_run"><code class="docutils literal notranslate"><span class="pre">Inkycal.dry_run()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.main.Inkycal.process_module"><code class="docutils literal notranslate"><span class="pre">Inkycal.process_module()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.main.Inkycal.run"><code class="docutils literal notranslate"><span class="pre">Inkycal.run()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#module-inkycal.display.Display">Display</a></li>
<li class="toctree-l1"><a class="reference internal" href="#module-inkycal.custom.functions">Custom functions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.custom.functions.auto_fontsize"><code class="docutils literal notranslate"><span class="pre">auto_fontsize()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.custom.functions.draw_border"><code class="docutils literal notranslate"><span class="pre">draw_border()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.custom.functions.get_fonts"><code class="docutils literal notranslate"><span class="pre">get_fonts()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.custom.functions.get_system_tz"><code class="docutils literal notranslate"><span class="pre">get_system_tz()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.custom.functions.internet_available"><code class="docutils literal notranslate"><span class="pre">internet_available()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.custom.functions.text_wrap"><code class="docutils literal notranslate"><span class="pre">text_wrap()</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.custom.functions.write"><code class="docutils literal notranslate"><span class="pre">write()</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="#module-inkycal.modules.ical_parser">Helper classes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.modules.ical_parser.iCalendar"><code class="docutils literal notranslate"><span class="pre">iCalendar</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.ical_parser.iCalendar.all_day"><code class="docutils literal notranslate"><span class="pre">iCalendar.all_day()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.ical_parser.iCalendar.clear_events"><code class="docutils literal notranslate"><span class="pre">iCalendar.clear_events()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.ical_parser.iCalendar.get_events"><code class="docutils literal notranslate"><span class="pre">iCalendar.get_events()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.ical_parser.iCalendar.get_system_tz"><code class="docutils literal notranslate"><span class="pre">iCalendar.get_system_tz()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.ical_parser.iCalendar.load_from_file"><code class="docutils literal notranslate"><span class="pre">iCalendar.load_from_file()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.ical_parser.iCalendar.load_url"><code class="docutils literal notranslate"><span class="pre">iCalendar.load_url()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.ical_parser.iCalendar.show_events"><code class="docutils literal notranslate"><span class="pre">iCalendar.show_events()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.ical_parser.iCalendar.sort"><code class="docutils literal notranslate"><span class="pre">iCalendar.sort()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.modules.inky_image.Inkyimage"><code class="docutils literal notranslate"><span class="pre">Inkyimage</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.inky_image.Inkyimage.autoflip"><code class="docutils literal notranslate"><span class="pre">Inkyimage.autoflip()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.inky_image.Inkyimage.clear"><code class="docutils literal notranslate"><span class="pre">Inkyimage.clear()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.inky_image.Inkyimage.flip"><code class="docutils literal notranslate"><span class="pre">Inkyimage.flip()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.inky_image.Inkyimage.load"><code class="docutils literal notranslate"><span class="pre">Inkyimage.load()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.inky_image.Inkyimage.merge"><code class="docutils literal notranslate"><span class="pre">Inkyimage.merge()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.inky_image.Inkyimage.preview"><code class="docutils literal notranslate"><span class="pre">Inkyimage.preview()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.inky_image.Inkyimage.remove_alpha"><code class="docutils literal notranslate"><span class="pre">Inkyimage.remove_alpha()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#inkycal.modules.inky_image.Inkyimage.resize"><code class="docutils literal notranslate"><span class="pre">Inkyimage.resize()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#inkycal.modules.inky_image.image_to_palette"><code class="docutils literal notranslate"><span class="pre">image_to_palette()</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="about.html">About Inkycal</a></li>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="dev_doc.html">Developer documentation</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">inkycal</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Inkycal</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/inkycal.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">
<img alt="logo" class="align-center" src="https://raw.githubusercontent.com/aceisace/Inkycal/assets/Repo/logo.png" />
<section id="module-inkycal.main">
<span id="inkycal"></span><h1>Inkycal<a class="headerlink" href="#module-inkycal.main" title="Link to this heading"></a></h1>
<p>Main class for inkycal Project
Copyright by aceinnolab</p>
<dl class="py class">
<dt class="sig sig-object py" id="inkycal.main.Inkycal">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">inkycal.main.</span></span><span class="sig-name descname"><span class="pre">Inkycal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">settings_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">render</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">use_pi_sugar</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">bool</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.main.Inkycal" title="Link to this definition"></a></dt>
<dd><p>Inkycal main class</p>
<p>Main class of Inkycal, test and run the main Inkycal program.</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>settings_path = str -&gt; the full path to your settings.json file
if no path is given, tries looking for settings file in /boot folder.</p></li>
<li><p>render = bool (True/False) -&gt; show the image on the epaper display?</p></li>
</ul>
</dd>
<dt>Attributes:</dt><dd><ul class="simple">
<li><p>optimize = True/False. Reduce number of colours on the generated image
to improve rendering on E-Papers. Set this to False for 9.7” E-Paper.</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.main.Inkycal.calibrate">
<span class="sig-name descname"><span class="pre">calibrate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cycles</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">3</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.main.Inkycal.calibrate" title="Link to this definition"></a></dt>
<dd><p>Calibrate the E-Paper display</p>
<p>Uses the Display class to calibrate the display with the default of 3
cycles. After a refresh cycle, a new image is generated and shown.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.main.Inkycal.countdown">
<span class="sig-name descname"><span class="pre">countdown</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">interval_mins</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#inkycal.main.Inkycal.countdown" title="Link to this definition"></a></dt>
<dd><p>Returns the remaining time in seconds until the next display update based on the interval.</p>
<dl class="simple">
<dt>Args:</dt><dd><dl class="simple">
<dt>interval_mins (int): The interval in minutes for the update. If none is given, the value</dt><dd><p>from the settings file is used.</p>
</dd>
</dl>
</dd>
<dt>Returns:</dt><dd><p>int: The remaining time in seconds until the next update.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.main.Inkycal.dry_run">
<span class="sig-name descname"><span class="pre">dry_run</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.main.Inkycal.dry_run" title="Link to this definition"></a></dt>
<dd><p>Tests if Inkycal can run without issues.</p>
<p>Attempts to import module names from settings file. Loads the config
for each module and initializes the module. Tries to run the module and
checks if the images could be generated correctly.</p>
<p>Generated images can be found in the /images folder of Inkycal.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.main.Inkycal.process_module">
<span class="sig-name descname"><span class="pre">process_module</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">number</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#inkycal.main.Inkycal.process_module" title="Link to this definition"></a></dt>
<dd><p>Process individual module to generate images and handle exceptions.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.main.Inkycal.run">
<em class="property"><span class="pre">async</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">run</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">run_once</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.main.Inkycal.run" title="Link to this definition"></a></dt>
<dd><p>Runs main program in nonstop mode or a single iteration based on the run_once flag.</p>
<dl class="simple">
<dt>Args:</dt><dd><dl class="simple">
<dt>run_once (bool): If True, runs the updating process once and stops. If False,</dt><dd><p>runs indefinitely.</p>
</dd>
</dl>
</dd>
</dl>
<p>Uses an infinity loop to run Inkycal nonstop or a single time based on run_once.
Inkycal generates the image from all modules, assembles them in one image,
refreshes the E-Paper and then sleeps until the next scheduled update or exits.</p>
</dd></dl>
</dd></dl>
</section>
<section id="module-inkycal.display.Display">
<span id="display"></span><h1>Display<a class="headerlink" href="#module-inkycal.display.Display" title="Link to this heading"></a></h1>
<p>Display class for inkycal</p>
<p>Creates an instance of the driver for the selected E-Paper model and allows
rendering images and calibrating the E-Paper display</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>epaper_model: The name of your E-Paper model.</p></li>
</ul>
</dd>
</dl>
</section>
<section id="module-inkycal.custom.functions">
<span id="custom-functions"></span><h1>Custom functions<a class="headerlink" href="#module-inkycal.custom.functions" title="Link to this heading"></a></h1>
<p>Inkycal custom-functions for ease-of-use</p>
<p>Copyright by aceinnolab</p>
<dl class="py function">
<dt class="sig sig-object py" id="inkycal.custom.functions.auto_fontsize">
<span class="sig-prename descclassname"><span class="pre">inkycal.custom.functions.</span></span><span class="sig-name descname"><span class="pre">auto_fontsize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">font</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_height</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.custom.functions.auto_fontsize" title="Link to this definition"></a></dt>
<dd><p>Scales a given font to 80% of max_height.</p>
<p>Gets the height of a font and scales it until 80% of the max_height
is filled.</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>font: A PIL Font object.</p></li>
<li><p>max_height: An integer representing the height to adjust the font to
which the given font should be scaled to.</p></li>
</ul>
</dd>
<dt>Returns:</dt><dd><p>A PIL font object with modified height.</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="inkycal.custom.functions.draw_border">
<span class="sig-prename descclassname"><span class="pre">inkycal.custom.functions.</span></span><span class="sig-name descname"><span class="pre">draw_border</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">image:</span> <span class="pre">&lt;module</span> <span class="pre">'PIL.Image'</span> <span class="pre">from</span> <span class="pre">'/home/runner/work/Inkycal/Inkycal/venv/lib/python3.11/site-packages/PIL/Image.py'&gt;,</span> <span class="pre">xy:</span> <span class="pre">~typing.Tuple[int,</span> <span class="pre">int],</span> <span class="pre">size:</span> <span class="pre">~typing.Tuple[int,</span> <span class="pre">int],</span> <span class="pre">radius:</span> <span class="pre">int</span> <span class="pre">=</span> <span class="pre">5,</span> <span class="pre">thickness:</span> <span class="pre">int</span> <span class="pre">=</span> <span class="pre">1,</span> <span class="pre">shrinkage:</span> <span class="pre">~typing.Tuple[int,</span> <span class="pre">int]</span> <span class="pre">=</span> <span class="pre">(0.1,</span> <span class="pre">0.1)</span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#inkycal.custom.functions.draw_border" title="Link to this definition"></a></dt>
<dd><p>Draws a border at given coordinates.</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>image: The image on which the border should be drawn (usually im_black or
im_colour).</p></li>
<li><p>xy: Tuple representing the top-left corner of the border e.g. (32, 100)
where 32 is the x-coordinate and 100 is the y-coordinate.</p></li>
<li><p>size: Size of the border as a tuple -&gt; (width, height).</p></li>
<li><p>radius: Radius of the corners, where 0 = plain rectangle, 5 = round corners.</p></li>
<li><p>thickness: Thickness of the border in pixels.</p></li>
<li><p>shrinkage: A tuple containing decimals presenting a percentage of shrinking
-&gt; (width_shrink_percentage, height_shrink_percentage).
e.g. (0.1, 0.2) ~ shrinks the width of border by 10%, shrinks height of
border by 20%</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="inkycal.custom.functions.get_fonts">
<span class="sig-prename descclassname"><span class="pre">inkycal.custom.functions.</span></span><span class="sig-name descname"><span class="pre">get_fonts</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.custom.functions.get_fonts" title="Link to this definition"></a></dt>
<dd><p>Print all available fonts by name.</p>
<p>Searches the /font folder in Inkycal and displays all fonts found in
there.</p>
<dl>
<dt>Returns:</dt><dd><p>printed output of all available fonts. To access a fontfile, use the
fonts dictionary to access it.</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">fonts</span><span class="p">[</span><span class="s1">&#39;fontname&#39;</span><span class="p">]</span>
</pre></div>
</div>
</dd>
</dl>
<p>To use a font, use the following sytax, where fontname is one of the
printed fonts of this function:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">ImageFont</span><span class="o">.</span><span class="n">truetype</span><span class="p">(</span><span class="n">fonts</span><span class="p">[</span><span class="s1">&#39;fontname&#39;</span><span class="p">],</span> <span class="n">size</span> <span class="o">=</span> <span class="mi">10</span><span class="p">)</span>
</pre></div>
</div>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="inkycal.custom.functions.get_system_tz">
<span class="sig-prename descclassname"><span class="pre">inkycal.custom.functions.</span></span><span class="sig-name descname"><span class="pre">get_system_tz</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">str</span></span></span><a class="headerlink" href="#inkycal.custom.functions.get_system_tz" title="Link to this definition"></a></dt>
<dd><p>Gets the system-timezone</p>
<p>Gets the timezone set by the system.</p>
<dl class="simple">
<dt>Returns:</dt><dd><ul class="simple">
<li><p>A timezone if a system timezone was found.</p></li>
<li><p>UTC if no timezone was found.</p></li>
</ul>
</dd>
</dl>
<p>The extracted timezone can be used to show the local time instead of UTC. e.g.</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">arrow</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">arrow</span><span class="o">.</span><span class="n">now</span><span class="p">())</span> <span class="c1"># returns non-timezone-aware time</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">arrow</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">tz</span><span class="o">=</span><span class="n">get_system_tz</span><span class="p">()))</span> <span class="c1"># prints timezone aware time.</span>
</pre></div>
</div>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="inkycal.custom.functions.internet_available">
<span class="sig-prename descclassname"><span class="pre">inkycal.custom.functions.</span></span><span class="sig-name descname"><span class="pre">internet_available</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#inkycal.custom.functions.internet_available" title="Link to this definition"></a></dt>
<dd><p>checks if the internet is available.</p>
<p>Attempts to connect to google.com with a timeout of 5 seconds to check
if the network can be reached.</p>
<dl class="simple">
<dt>Returns:</dt><dd><ul class="simple">
<li><p>True if connection could be established.</p></li>
<li><p>False if the internet could not be reached.</p></li>
</ul>
</dd>
</dl>
<p>Returned output can be used to add a check for internet availability:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">if</span> <span class="n">internet_available</span><span class="p">():</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1">#...do something that requires internet connectivity</span>
</pre></div>
</div>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="inkycal.custom.functions.text_wrap">
<span class="sig-prename descclassname"><span class="pre">inkycal.custom.functions.</span></span><span class="sig-name descname"><span class="pre">text_wrap</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">text</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">font</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_width</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.custom.functions.text_wrap" title="Link to this definition"></a></dt>
<dd><p>Splits a very long text into smaller parts</p>
<p>Splits a long text to smaller lines which can fit in a line with max_width.
Uses a Font object for more accurate calculations.</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>text -&gt; Text as a string</p></li>
<li><p>font: A PIL font object which is used to calculate the size.</p></li>
<li><p>max_width: int-&gt; a width in pixels defining the maximum width before
splitting the text into the next chunk.</p></li>
</ul>
</dd>
<dt>Returns:</dt><dd><p>A list containing chunked strings of the full text.</p>
</dd>
</dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="inkycal.custom.functions.write">
<span class="sig-prename descclassname"><span class="pre">inkycal.custom.functions.</span></span><span class="sig-name descname"><span class="pre">write</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">image:</span> <span class="pre">&lt;module</span> <span class="pre">'PIL.Image'</span> <span class="pre">from</span> <span class="pre">'/home/runner/work/Inkycal/Inkycal/venv/lib/python3.11/site-packages/PIL/Image.py'&gt;,</span> <span class="pre">xy:</span> <span class="pre">~typing.Tuple[int,</span> <span class="pre">int],</span> <span class="pre">box_size:</span> <span class="pre">~typing.Tuple[int,</span> <span class="pre">int],</span> <span class="pre">text:</span> <span class="pre">str,</span> <span class="pre">font=None,</span> <span class="pre">**kwargs</span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.custom.functions.write" title="Link to this definition"></a></dt>
<dd><p>Writes text on an image.</p>
<p>Writes given text at given position on the specified image.</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>image: The image to draw this text on, usually im_black or im_colour.</p></li>
<li><p>xy: tuple-&gt; (x,y) representing the x and y co-ordinate.</p></li>
<li><p>box_size: tuple -&gt; (width, height) representing the size of the text box.</p></li>
<li><p>text: string, the actual text to add on the image.</p></li>
<li><p>font: A PIL Font object e.g.
ImageFont.truetype(fonts[fontname], size = 10).</p></li>
</ul>
</dd>
<dt>Args: (optional)</dt><dd><ul class="simple">
<li><p>alignment: alignment of the text, use center, left, right.</p></li>
<li><p>autofit: bool (True/False). Automatically increases fontsize to fill in
as much of the box-height as possible.</p></li>
<li><p>colour: black by default, do not change as it causes issues with rendering
on e-Paper.</p></li>
<li><p>rotation: Rotate the text with the text-box by a given angle anti-clockwise.</p></li>
<li><p>fill_width: Decimal representing a percentage e.g. 0.9 # 90%. Fill
maximum of 90% of the size of the full width of text-box.</p></li>
<li><p>fill_height: Decimal representing a percentage e.g. 0.9 # 90%. Fill
maximum of 90% of the size of the full height of the text-box.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</section>
<section id="module-inkycal.modules.ical_parser">
<span id="helper-classes"></span><h1>Helper classes<a class="headerlink" href="#module-inkycal.modules.ical_parser" title="Link to this heading"></a></h1>
<p>Inkycal iCalendar parsing module
Copyright by aceinnolab</p>
<dl class="py class">
<dt class="sig sig-object py" id="inkycal.modules.ical_parser.iCalendar">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">inkycal.modules.ical_parser.</span></span><span class="sig-name descname"><span class="pre">iCalendar</span></span><a class="headerlink" href="#inkycal.modules.ical_parser.iCalendar" title="Link to this definition"></a></dt>
<dd><p>iCalendar parsing moudule for inkycal.
Parses events from given iCalendar URLs / paths</p>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.ical_parser.iCalendar.all_day">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">all_day</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">event</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.ical_parser.iCalendar.all_day" title="Link to this definition"></a></dt>
<dd><p>Check if an event is an all day event.
Returns True if event is all day, else False</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.ical_parser.iCalendar.clear_events">
<span class="sig-name descname"><span class="pre">clear_events</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.ical_parser.iCalendar.clear_events" title="Link to this definition"></a></dt>
<dd><p>clear previously parsed events</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.ical_parser.iCalendar.get_events">
<span class="sig-name descname"><span class="pre">get_events</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">timeline_start</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeline_end</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timezone</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.ical_parser.iCalendar.get_events" title="Link to this definition"></a></dt>
<dd><p>Input an arrow (time) object for:
* the beginning of timeline (events have to end after this time)
* the end of the timeline (events have to begin before this time)
* timezone if events should be formatted to local time
Returns a list of events sorted by date</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.ical_parser.iCalendar.get_system_tz">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">get_system_tz</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.ical_parser.iCalendar.get_system_tz" title="Link to this definition"></a></dt>
<dd><p>Get the timezone set by the system</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.ical_parser.iCalendar.load_from_file">
<span class="sig-name descname"><span class="pre">load_from_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filepath</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.ical_parser.iCalendar.load_from_file" title="Link to this definition"></a></dt>
<dd><p>Input a string or list of strings containing valid iCalendar filepaths
example: path1 (single file) OR [path1, path2] (multiple files)
returns a list of iCalendars as string (raw)</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.ical_parser.iCalendar.load_url">
<span class="sig-name descname"><span class="pre">load_url</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">url</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">username</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">password</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.ical_parser.iCalendar.load_url" title="Link to this definition"></a></dt>
<dd><p>Input a string or list of strings containing valid iCalendar URLs
example: URL1 (single url) OR [URL1, URL2] (multiple URLs)
add username and password to access protected files</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.ical_parser.iCalendar.show_events">
<span class="sig-name descname"><span class="pre">show_events</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fmt</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'DD</span> <span class="pre">MMM</span> <span class="pre">YY</span> <span class="pre">HH:mm'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.ical_parser.iCalendar.show_events" title="Link to this definition"></a></dt>
<dd><p>print all parsed events in a more readable way
use the format (fmt) parameter to specify the date format
see <a class="reference external" href="https://arrow.readthedocs.io/en/latest/#supported-tokens">https://arrow.readthedocs.io/en/latest/#supported-tokens</a>
for more info tokens</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.ical_parser.iCalendar.sort">
<span class="sig-name descname"><span class="pre">sort</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.ical_parser.iCalendar.sort" title="Link to this definition"></a></dt>
<dd><p>Sort all parsed events in order of beginning time</p>
</dd></dl>
</dd></dl>
<p id="module-inkycal.modules.inky_image">Custom image class for Inkycal Project
Takes care of handling images. Made to be used by other modules to handle
images.</p>
<p>Copyright by aceinnolab</p>
<dl class="py class">
<dt class="sig sig-object py" id="inkycal.modules.inky_image.Inkyimage">
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">inkycal.modules.inky_image.</span></span><span class="sig-name descname"><span class="pre">Inkyimage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">image</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.inky_image.Inkyimage" title="Link to this definition"></a></dt>
<dd><p>Custom Imgae class written for commonly used image operations.</p>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.inky_image.Inkyimage.autoflip">
<span class="sig-name descname"><span class="pre">autoflip</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">layout</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#inkycal.modules.inky_image.Inkyimage.autoflip" title="Link to this definition"></a></dt>
<dd><p>flips the image automatically to the given layout.</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>layout:-&gt; str. Choose <cite>horizontal</cite> or <cite>vertical</cite>.</p></li>
</ul>
</dd>
</dl>
<p>Checks the images width and height.</p>
<p>In horizontal mode, the image is flipped if the image height is greater
than the image width.</p>
<p>In vertical mode, the image is flipped if the image width is greater
than the image height.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.inky_image.Inkyimage.clear">
<span class="sig-name descname"><span class="pre">clear</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.inky_image.Inkyimage.clear" title="Link to this definition"></a></dt>
<dd><p>Removes currently saved image if present.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.inky_image.Inkyimage.flip">
<span class="sig-name descname"><span class="pre">flip</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">angle</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.inky_image.Inkyimage.flip" title="Link to this definition"></a></dt>
<dd><p>Flips the image by the given angle.</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>angle:-&gt;int. A multiple of 90, e.g. 90, 180, 270, 360.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.inky_image.Inkyimage.load">
<span class="sig-name descname"><span class="pre">load</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None</span></span></span><a class="headerlink" href="#inkycal.modules.inky_image.Inkyimage.load" title="Link to this definition"></a></dt>
<dd><p>loads an image from a URL or filepath.</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>path:The full path or url of the image file
e.g. <cite>https://sample.com/logo.png</cite> or <cite>/home/pi/Downloads/nice_pic.png</cite></p></li>
</ul>
</dd>
<dt>Raises:</dt><dd><ul class="simple">
<li><p>FileNotFoundError: This Exception is raised when the file could not be
found.</p></li>
<li><p>OSError: A OSError is raised when the URL doesnt point to the correct
file-format, i.e. is not an image</p></li>
<li><p>TypeError: if the URLS doesnt start with htpp</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.inky_image.Inkyimage.merge">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">merge</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">image1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">image2</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.inky_image.Inkyimage.merge" title="Link to this definition"></a></dt>
<dd><p>Merges two images into one.</p>
<p>Replaces white pixels of the first image with transparent ones. Then pastes
the first image on the second one.</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>image1: A PIL Image object in RGBA mode.</p></li>
<li><p>image2: A PIL Image object in RGBA mode.</p></li>
</ul>
</dd>
<dt>Returns:</dt><dd><ul class="simple">
<li><p>A single image.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.inky_image.Inkyimage.preview">
<em class="property"><span class="pre">static</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">preview</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">image</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.inky_image.Inkyimage.preview" title="Link to this definition"></a></dt>
<dd><p>Previews an image on gpicview (only works on Rapsbian with Desktop).</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.inky_image.Inkyimage.remove_alpha">
<span class="sig-name descname"><span class="pre">remove_alpha</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.inky_image.Inkyimage.remove_alpha" title="Link to this definition"></a></dt>
<dd><p>Removes transparency if image has transparency.</p>
<p>Checks if an image has an alpha band and replaces the transparency with
white pixels.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="inkycal.modules.inky_image.Inkyimage.resize">
<span class="sig-name descname"><span class="pre">resize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">height</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.inky_image.Inkyimage.resize" title="Link to this definition"></a></dt>
<dd><p>Resize an image to desired width or height</p>
</dd></dl>
</dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="inkycal.modules.inky_image.image_to_palette">
<span class="sig-prename descclassname"><span class="pre">inkycal.modules.inky_image.</span></span><span class="sig-name descname"><span class="pre">image_to_palette</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">image:</span> <span class="pre">&lt;module</span> <span class="pre">'PIL.Image'</span> <span class="pre">from</span> <span class="pre">'/home/runner/work/Inkycal/Inkycal/venv/lib/python3.11/site-packages/PIL/Image.py'&gt;,</span> <span class="pre">palette:</span> <span class="pre">~typing.Literal</span> <span class="pre">=</span> <span class="pre">['bwr',</span> <span class="pre">'bwy',</span> <span class="pre">'bw',</span> <span class="pre">'16gray'],</span> <span class="pre">dither:</span> <span class="pre">bool</span> <span class="pre">=</span> <span class="pre">True)</span> <span class="pre">-&gt;</span> <span class="pre">(&lt;module</span> <span class="pre">'PIL.Image'</span> <span class="pre">from</span> <span class="pre">'/home/runner/work/Inkycal/Inkycal/venv/lib/python3.11/site-packages/PIL/Image.py'&gt;,</span> <span class="pre">&lt;module</span> <span class="pre">'PIL.Image'</span> <span class="pre">from</span> <span class="pre">'/home/runner/work/Inkycal/Inkycal/venv/lib/python3.11/site-packages/PIL/Image.py'&gt;</span></em><span class="sig-paren">)</span><a class="headerlink" href="#inkycal.modules.inky_image.image_to_palette" title="Link to this definition"></a></dt>
<dd><p>Maps an image to a given colour palette.</p>
<p>Maps each pixel from the image to a colour from the palette.</p>
<dl class="simple">
<dt>Args:</dt><dd><ul class="simple">
<li><p>palette: A supported token. (see below)</p></li>
<li><p>dither:-&gt;bool. Use dithering? Set to <cite>False</cite> for solid colour fills.</p></li>
</ul>
</dd>
<dt>Returns:</dt><dd><ul class="simple">
<li><p>two images: one for the coloured band and one for the black band.</p></li>
</ul>
</dd>
<dt>Raises:</dt><dd><ul class="simple">
<li><p>ValueError if palette token is not supported</p></li>
</ul>
</dd>
</dl>
<p>Supported palette tokens:</p>
<div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="s1">&#39;bwr&#39;</span> <span class="c1"># black-white-red</span>
<span class="gp">&gt;&gt;&gt; </span><span class="s1">&#39;bwy&#39;</span> <span class="c1"># black-white-yellow</span>
<span class="gp">&gt;&gt;&gt; </span><span class="s1">&#39;bw&#39;</span> <span class="c1"># black-white</span>
<span class="gp">&gt;&gt;&gt; </span><span class="s1">&#39;16gray&#39;</span> <span class="c1"># 16 shades of gray</span>
</pre></div>
</div>
</dd></dl>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="index.html" class="btn btn-neutral float-left" title="Inkycal documentation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="about.html" class="btn btn-neutral float-right" title="About Inkycal" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2018-2023, aceinnolab.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>