From 54084c0d77e61cc83185dd8d99e6fdf23cee539b Mon Sep 17 00:00:00 2001 From: Tony Zedginidze Date: Tue, 13 Oct 2026 11:58:04 +0200 Subject: [PATCH] docs: visualize the User example dependency graph --- CHANGES | 2 +- MANIFEST.in | 2 + docs/_static/user-dependency-graph.png | Bin 0 -> 11011 bytes docs/_static/user-dependency-graph.svg | 98 +++++++++++++++++++++++++ docs/conf.py | 2 +- docs/terminology.rst | 17 +++++ 6 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 docs/_static/user-dependency-graph.png create mode 100644 docs/_static/user-dependency-graph.svg diff --git a/CHANGES b/CHANGES index 3794d42..5a716fe 100644 --- a/CHANGES +++ b/CHANGES @@ -160,7 +160,7 @@ Backwards incompatible: - Removed previously deprecated constructs: with_injector, Injector.install_into, Binder.bind_scope - Dependencies are no longer injected into Module.configure and raw module functions (previously deprecated) -- Removed unofficial support for injecting into parent class constructors +- Removed unofficial support for injecting into parent class constructors 0.15.0 ------ diff --git a/MANIFEST.in b/MANIFEST.in index fbe3651..5456956 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -10,6 +10,8 @@ include pytest.ini recursive-include docs *.html recursive-include docs *.py recursive-include docs *.rst +recursive-include docs *.png +recursive-include docs *.svg recursive-include docs Makefile exclude .readthedocs.yaml exclude .coveragerc diff --git a/docs/_static/user-dependency-graph.png b/docs/_static/user-dependency-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..753e5a4e6fa018556802e958ede3df596a88be1c GIT binary patch literal 11011 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 literal 0 HcmV?d00001 diff --git a/docs/_static/user-dependency-graph.svg b/docs/_static/user-dependency-graph.svg new file mode 100644 index 0000000..51f4b77 --- /dev/null +++ b/docs/_static/user-dependency-graph.svg @@ -0,0 +1,98 @@ + +Embedded inter font subsets retain the following copyright and SIL OFL 1.1 license. The surrounding diagram retains its repository license. + +Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) Inter-Italic[opsz,wght].ttf: Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +Injector example dependency graphUser depends on Name and Description. Description also depends on Name. Directed links show the dependencies used by the documented User construction example.namedescriptionnameUserDescriptionName diff --git a/docs/conf.py b/docs/conf.py index f7f1c18..6fb7396 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -244,7 +244,7 @@ # Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'http://docs.python.org/': None} +intersphinx_mapping = {'python': ('https://docs.python.org/3', None)} def setup(app): diff --git a/docs/terminology.rst b/docs/terminology.rst index 6e34535..ab9638e 100644 --- a/docs/terminology.rst +++ b/docs/terminology.rst @@ -133,6 +133,23 @@ Or transitively:: >>> user.description 'Sherlock is a man of astounding insight' +The example above forms the following dependency graph. Arrows point from +an object or provider to the binding key it requires: ``User`` needs both +``Name`` and ``Description``, and the ``Description`` provider also needs +``Name``. The same ``Name`` binding supplies both injection sites. + +.. figure:: _static/user-dependency-graph.png + :alt: User depends on Name and Description; the provider for Description also depends on Name. + :width: 854px + + Dependencies in the User example. ``Name`` is bound to ``'Sherlock'``; + ``Description`` is supplied by ``UserAttributeModule.describe``. + :download:`Editable SVG <_static/user-dependency-graph.svg>`. + `Edit diagram `__. + +This graph describes binding dependencies. Instance reuse is controlled by +:ref:`scopes`, so a shared binding key does not by itself imply singleton scope. + Assisted injection ``````````````````