Skip to content

Commit

Permalink
Update docs and examples to use typing.Annotated
Browse files Browse the repository at this point in the history
  • Loading branch information
roo-oliv committed Aug 5, 2024
1 parent f5e5db2 commit 01a2c2d
Show file tree
Hide file tree
Showing 61 changed files with 491 additions and 341 deletions.
11 changes: 6 additions & 5 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,17 @@ and designed for Humans.

* - .. code:: python

from typing import Annotated, List
from injectable import Autowired, autowired
from typing import List
from models import Database
from messaging import Broker

class Service:
@autowired
def __init__(
self,
database: Autowired(Database),
message_brokers: Autowired(List[Broker]),
database: Annotated[Database, Autowired],
message_brokers: Annotated[List[Broker], Autowired],
):
pending = database.get_pending_messages()
for broker in message_brokers:
Expand Down Expand Up @@ -149,7 +149,8 @@ Features you'll love ❤️

* **Qualifier overloading**: declare as many injectables as you like for a single
qualifier or extending the same base class. You can inject all of them just by
specifying a :python:`typing.List` to :python:`Autowired`: :python:`deps: Autowired(List["qualifier"])`.
specifying a :python:`typing.List` to :python:`Autowired`:
:python:`deps: Annotated[List["qualifier"], Autowired]`.

* **Transparent lazy initialization**: passing the argument :python:`lazy=True` for
:python:`Autowired` will make your dependency to be initialized only when actually used, all
Expand All @@ -160,7 +161,7 @@ Features you'll love ❤️

* **Namespaces**: specify different namespaces for injectables as in
:python:`@injectable(namespace="foo")` and then just use them when annotating your
parameters as in :python:`dep: Autowired(..., namespace="foo")`.
parameters as in :python:`dep: Annotated[..., Autowired(namespace="foo")]`.

* **Linters friendly**: :python:`Autowired` is carefully designed to comply with static linter
analysis such as PyCharm's to preserve the parameter original type hint.
Expand Down
2 changes: 1 addition & 1 deletion docs/.buildinfo
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 927fa4b8772f27b8ef95b7056f132ebc
config: c23d413b855c1456020e10f46639280c
tags: 645f666f9bcd5a90fca523b33c5a78b7
6 changes: 3 additions & 3 deletions docs/_modules/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Overview: module code &#8212; injectable 4.0.0 documentation</title>
<title>Overview: module code &#8212; injectable 4.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css" />

Expand All @@ -28,7 +28,7 @@
<h3>Navigation</h3>
<ul>
<li class="responsive-menu"><a href="#sidebar-anchor" title="Navigation">&#9776;</a></li>
<li><a href="../index.html">injectable-4.0.0</a> &#187;</li>
<li><a href="../index.html">injectable-4.0.1</a> &#187;</li>
</ul>
</div>

Expand Down Expand Up @@ -108,7 +108,7 @@ <h3>Navigation</h3>

<div class="footer" role="contentinfo">
&#169; Copyright 2018, Rodrigo Martins de Oliveira.
Last updated on Jul 12, 2024.
Last updated on Aug 05, 2024.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.5.0.
</div>
</body>
Expand Down
14 changes: 7 additions & 7 deletions docs/_modules/injectable/autowiring/autowired_decorator.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>injectable.autowiring.autowired_decorator &#8212; injectable 4.0.0 documentation</title>
<title>injectable.autowiring.autowired_decorator &#8212; injectable 4.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/pydoctheme.css" />

Expand All @@ -28,7 +28,7 @@
<h3>Navigation</h3>
<ul>
<li class="responsive-menu"><a href="#sidebar-anchor" title="Navigation">&#9776;</a></li>
<li><a href="../../../index.html">injectable-4.0.0</a> &#187;</li>
<li><a href="../../../index.html">injectable-4.0.1</a> &#187;</li>
<li><a href="../../index.html" accesskey="U">Module code</a> &#187;</li>
</ul>
</div>
Expand All @@ -48,15 +48,15 @@ <h3>Navigation</h3>
<h1>Source code for injectable.autowiring.autowired_decorator</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">inspect</span>
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span>
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">TypeVar</span><span class="p">,</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">Any</span><span class="p">,</span> <span class="n">get_args</span><span class="p">,</span> <span class="n">_AnnotatedAlias</span><span class="p">,</span> <span class="n">Union</span>
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">TypeVar</span><span class="p">,</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">get_args</span><span class="p">,</span> <span class="n">_AnnotatedAlias</span><span class="p">,</span> <span class="n">Union</span>

<span class="kn">from</span> <span class="nn">injectable.autowiring.autowired_type</span> <span class="kn">import</span> <span class="n">_Autowired</span><span class="p">,</span> <span class="n">Autowired</span>
<span class="kn">from</span> <span class="nn">injectable.errors</span> <span class="kn">import</span> <span class="n">AutowiringError</span>

<span class="n">T</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s2">&quot;T&quot;</span><span class="p">,</span> <span class="n">bound</span><span class="o">=</span><span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">Any</span><span class="p">])</span>
<span class="n">R</span> <span class="o">=</span> <span class="n">TypeVar</span><span class="p">(</span><span class="s2">&quot;R&quot;</span><span class="p">)</span>


<div class="viewcode-block" id="autowired"><a class="viewcode-back" href="../../../reference/injectable.html#injectable.autowired">[docs]</a><span class="k">def</span> <span class="nf">autowired</span><span class="p">(</span><span class="n">func</span><span class="p">:</span> <span class="n">T</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">T</span><span class="p">:</span>
<div class="viewcode-block" id="autowired"><a class="viewcode-back" href="../../../reference/injectable.html#injectable.autowired">[docs]</a><span class="k">def</span> <span class="nf">autowired</span><span class="p">(</span><span class="n">func</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">R</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">Callable</span><span class="p">[</span><span class="o">...</span><span class="p">,</span> <span class="n">R</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Function decorator to setup dependency injection autowiring.</span>

Expand Down Expand Up @@ -112,7 +112,7 @@ <h1>Source code for injectable.autowiring.autowired_decorator</h1><div class="hi
<span class="k">raise</span> <span class="n">AutowiringError</span><span class="p">(</span><span class="s2">&quot;No parameter is typed with &#39;Autowired&#39;&quot;</span><span class="p">)</span>

<span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">wrapper</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">wrapper</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">R</span><span class="p">:</span>
<span class="n">bound_arguments</span> <span class="o">=</span> <span class="n">signature</span><span class="o">.</span><span class="n">bind_partial</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span><span class="o">.</span><span class="n">arguments</span>
<span class="n">args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
<span class="k">for</span> <span class="n">parameter</span> <span class="ow">in</span> <span class="n">autowired_parameters</span><span class="p">:</span>
Expand Down Expand Up @@ -209,7 +209,7 @@ <h3>Navigation</h3>

<div class="footer" role="contentinfo">
&#169; Copyright 2018, Rodrigo Martins de Oliveira.
Last updated on Jul 12, 2024.
Last updated on Aug 05, 2024.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.5.0.
</div>
</body>
Expand Down
3 changes: 3 additions & 0 deletions docs/_sources/usage/namespaces.rst.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ Namespaces Example
:caption: namespaces_example.py
:start-after: sphinx-start

.. literalinclude:: ../../examples/namespaces/measuring_service_abc.py
:caption: measuring_service_abc.py

.. literalinclude:: ../../examples/namespaces/intl_measuring_service.py
:caption: intl_measuring_service.py

Expand Down
3 changes: 3 additions & 0 deletions docs/_sources/usage/optional_injection.rst.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,6 @@ Optional Injection Example
.. literalinclude:: ../../examples/optional_injection/optional_injection_example.py
:caption: optional_injection_example.py
:start-after: sphinx-start

.. literalinclude:: ../../examples/optional_injection/service_xyz.py
:caption: service_xyz.py
2 changes: 1 addition & 1 deletion docs/_static/documentation_options.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '4.0.0',
VERSION: '4.0.1',
LANGUAGE: 'None',
COLLAPSE_INDEX: false,
BUILDER: 'html',
Expand Down
6 changes: 3 additions & 3 deletions docs/authors.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />

<title>Authors &#8212; injectable 4.0.0 documentation</title>
<title>Authors &#8212; injectable 4.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/pydoctheme.css" />

Expand All @@ -31,7 +31,7 @@
<h3>Navigation</h3>
<ul>
<li class="responsive-menu"><a href="#sidebar-anchor" title="Navigation">&#9776;</a></li>
<li><a href="index.html">injectable-4.0.0</a> &#187;</li>
<li><a href="index.html">injectable-4.0.1</a> &#187;</li>
</ul>
</div>

Expand Down Expand Up @@ -119,7 +119,7 @@ <h3>Navigation</h3>

<div class="footer" role="contentinfo">
&#169; Copyright 2018, Rodrigo Martins de Oliveira.
Last updated on Jul 12, 2024.
Last updated on Aug 05, 2024.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.5.0.
</div>
</body>
Expand Down
6 changes: 3 additions & 3 deletions docs/caveats.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />

<title>Caveats &#8212; injectable 4.0.0 documentation</title>
<title>Caveats &#8212; injectable 4.0.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/pydoctheme.css" />

Expand All @@ -31,7 +31,7 @@
<h3>Navigation</h3>
<ul>
<li class="responsive-menu"><a href="#sidebar-anchor" title="Navigation">&#9776;</a></li>
<li><a href="index.html">injectable-4.0.0</a> &#187;</li>
<li><a href="index.html">injectable-4.0.1</a> &#187;</li>
</ul>
</div>

Expand Down Expand Up @@ -149,7 +149,7 @@ <h3>Navigation</h3>

<div class="footer" role="contentinfo">
&#169; Copyright 2018, Rodrigo Martins de Oliveira.
Last updated on Jul 12, 2024.
Last updated on Aug 05, 2024.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.5.0.
</div>
</body>
Expand Down
Loading

0 comments on commit 01a2c2d

Please sign in to comment.