Commit Graph

78 Commits

Author SHA1 Message Date
Illia Volochii
daca85d555
Fix a few issues in the introduction (#580)
* Fix a statement about coupling and cohesion that is not always true

https://enterprisecraftsmanship.com/posts/cohesion-coupling-difference/#_types_of_code_from_a_cohesion_and_coupling_perspective

* Fix a typing issue in an example

`ApiClient` expects timeout to be an integer (based on a type hint), but `os.getenv` returns a string when `TIMEOUT` is set.

* Specify the `None` return type where it is missed

* Fix typing issues in some other places

* Edit a statement about coupling and cohesion

Co-authored-by: Roman Mogylatov <rmogilatov@gmail.com>

Co-authored-by: Roman Mogylatov <rmogilatov@gmail.com>
2022-04-16 21:29:35 -04:00
Roman Mogylatov
cfadd8c3fa
Add config.from_env(as_=...) (#541)
* Add implementation and typing stub

* Add unit tests

* Update demo example

* Add typing tests

* Update changelog

* Update docs

* Add tests for an empty environment variable

* Improve wording in di_in_python.rst

* Update wording in changelog and docs

* Update doc blocks
2021-12-20 23:46:51 +01:00
Roman Mogylatov
7d160cb4a5
Wiring with string module names (#515)
* Update main example

* Updating wiring module

* Update wiring test case name

* Implement string imports for wiring

* Update example

* Refactor implementation

* Update front example

* Fix a typo in README

* Update wiring docs

* Update single container example

* Update multiple containers example

* Update quotes in multiple containers example

* Update quotes in single container example

* Update decoupled-packages example

* Update single and multiple containers example

* Update quotes

* Update fastapi+redis example

* Update resource docs

* Update quotes in CLI tutorial

* Update CLI application (movie lister) tutorial

* Update monitoring daemon example

* Update python version in asyncio daemon example

* Update asyncio daemon tutorial

* Update quotes in wiring docs

* Update wiring docs
2021-09-30 15:03:19 -04:00
Roman Mogylatov
15fa6c301e
Pydantic settings support (#388)
* Add implementation and basic test

* Add full test coverage + bugfix

* Add test coverage for .from_yaml() method

* Update setup.py, tox and dev requirements

* Stop running pydantic tests on Python 3.5 and below

* Remove pydantic from tox Python < 3.6

* Add example and docs

* Update features block

* Add extra test

* Update changelog
2021-02-03 09:21:32 -05:00
Roman Mogylatov
7b33733bdf Update badge 2021-01-27 07:38:35 -05:00
Roman Mogylatov
feed916f46
Async resources and injections (#352)
* Add support of async injections into wiring

* Add support of async functions and async generators for resources

* Update resource provider typing stub for stutdown

* Add resource base class for async resources

* Fix tests

* Add tests for async injections in wiring @inject

* Refactor provider tests

* Add tests for async resources

* Rework async resources callbacks to .add_done_callback() style (fixes pypy3 issue)

* Add awaits into async resource class test

* Refactor FastAPI tests

* Implement async resources initialization in container

* Move container async resource tests to a separate module for Python 3.6+

* Fix init async resources in container on Python 2

* Add first dirty async injections implementation

* Fix isawaitable error

* Turm asyncio import to conditional for safer Py2 usage

* Refactor kwargs injections

* Implement positional injections, add tests and make refactoring

* Implement attribute injections and add tests

* Add singleton implementation + tests for all singleton types

* Implement injections in thread-local and thread-safe singleton providers

* Update .provided + fix resource concurent initialization issue

* Implement async mode for Dependency provider

* Add async mode for the provider

* Add overload for Factory typing

* Add typing stubs for async resource

* Refactor abstract* providers __call__()

* Add async mode API + tests

* Add typing stubs & tests for async mode API

* Add tests for async mode auto configuration

* Refactor Provider.__call__() to use async mode api

* Refactor Dependency provider to use async mode api

* Add tests for Dependency provider async mode

* Add support of async mode for FactoryAggregate provider + tests

* Refactor Singleton provider to use async mode api

* Refactor ThreadSafeSingleton provider to use async mode api

* Refactor ThreadLocalSingleton provider to use async mode api

* Finish Singleton refactoring to use async mode api

* Refactor Resource provider to use async mode api

* Add Provider.async_() method + tests

* Add typing stubs for async_() method + tests

* Refactor Singleton typing stubs to return singleton from argument methods

* Refactor provider typing stubs

* Improve resource typing stub

* Add tests for async context kwargs injections

* Fix typo in resource provider tests

* Cover shutdown of not initialized resource

* Add test to cover resource initialization with an error

* Fix Singleton and ThreadLocalSingleton to handle initialization errors

* Add FastAPI + Redis example

* Make cosmetic fixes to FastAPI + Redis example

* Add missing development requirements

* Update module docblock in fastapi + redis example

* Add FastAPI + Redis example docs

* Add references to FastAPI + Redis example

* Refactor resource docs

* Add asynchronous resources docs

* Refactor wiring docs

* Add async injections docs for wiring

* Add async injections page and update docs index, readme, and key features pages

* Add providers async injections example

* Add docs on provider async mode enabling

* Reword async provider docs

* Add provider async mode docs

* Add cross links to async docs

* Mute flake8 errors in async provider examples

* Update changelog

* Make cosmetic fix to containers.pyx
2021-01-10 19:26:15 -05:00
Roman Mogylatov
ae3024588c
Wiring reengineering (#324)
* Bump version to 4.3.9: FastAPI example

* Reengineer wiring

* Add @inject decorator

* Add .workspace dir to gitignore

* Add generic typing for @inject

* Add type cast for @inject

* Update movie lister example

* Update cli application tutorial

* Update demo example

* Update wiring docs and examples

* Update aiohttp example and tutorial

* Update multiple containers example

* Update single container example

* Update decoupled packages example

* Update django example

* Update asyncio daemon example and tutorial

* Update FastAPI example

* Update flask example and tutorial

* Update sanic example

* Add wiring registry

* Add new line to .gitignore

* Add @inject to the test samples

* Fix flake8 errors
2020-11-15 16:06:42 -05:00
Roman Mogylatov
707446a70f
Closing wiring marker (#315)
* Add closing marker

* Add example

* Fix flake8 errors

* Add test

* Update docs and README
2020-10-29 22:55:09 -04:00
Roman Mogylatov
30bc505b79 Update README and docs index 2020-10-29 15:46:43 -04:00
Roman Mogylatov
25d626e92f Migrate from travis-ci.org to travis-ci.com 2020-10-27 14:02:50 -04:00
Roman Mogylatov
47c79b2772
Resources (#312)
* Add prototype

* Add example

* Remove typing erros in Python 2.7 and 3.4

* Move resources example

* Draft resources docs

* Update resources docs

* Fix repr

* Rename dict provider test

* Add more tests

* Add tests + refactoring

* Add more tests

* Update tests to run only on 3.5+

* Update setup.py

* Add typing tests

* Update changelog

* Fix generator iteration

* Remove contextlib

* Hotfix aiohttp issue

* Move aiohttp fix to tox.ini

* Move aiohttp fix to a different place in tox
2020-10-24 20:56:32 -04:00
Roman Mogylatov
b54bcb7b31
Dict provider (#311)
* Add tests

* Add implementation and typing stubs

* Update README and docs pages

* Add example and docs

* Update changelog

* Add long description to the doc block
2020-10-22 14:49:39 -04:00
Roman Mogylatov
c81194682b Remove redirect in bages 2020-10-21 16:55:28 -04:00
Roman Mogylatov
452a13c9f7
Update all links to docs to use https (#305)
* Update README

* Update docs

* Update examples

* Update changelog
2020-10-19 17:18:39 -04:00
Roman Mogylatov
07d4f7e74f
Develop 4.0 (#298)
* Add wiring (#294)

* Add wiring module

* Fix code style

* Fix package test

* Add version fix

* Try spike for 3.6

* Try another fix with metaclass

* Downsample required version to 3.6

* Introduce concept with annotations

* Fix bugs

* Add debug message

* Add extra tests

* Add extra debugging

* Update config resolving

* Remove 3.6 generic meta fix

* Fix Flake8

* Add spike for 3.6

* Add Python 3.6 spike

* Add unwire functionality

* Add support of corouting functions

* Bump version to 4.0

* Updaet demo example

* Add pydocstyle ignore for demo

* Add flake8 ignore for demo

* Update aiohttp example

* Update flask example

* Rename aiohttp example directory

* Rename views module to handlers in aiohttp example

* Add sanic example

* Remove not needed images

* Update demo

* Implement wiring for Provide[foo.provider]

* Implement Provide[foo.provided.bar.baz.call()]

* Make flake8 happy

* Wiring refactoring (#296)

* Refactor wiring

* Add todos to wiring

* Implement wiring of config invariant

* Implement sub containers wiring + add tests

* Add test for wiring config invariant

* Add container.unwire() typing stub

* Deprecate ext package modules and remove types module

* Deprecate provider.delegate() method

* Add __all__ for wiring module

* Add protection for wiring only declarative container instances

* Bump version to 4.0.0a2

* Add wiring docs

* Add wiring of class methods

* Remove unused import

* Add a note on individuals import to wiring docs

* Add minor improvement to wiring doc

* Update DI in Python page

* Update key features

* Update README concep and FAQ

* Add files via upload

* Update README.rst

* Update README.rst

* Update README.rst

* Update docs index page

* Update README

* Remove API docs for flask and aiohttp ext

* Add wiring API docs

* Update docs index

* Update README

* Update readme and docs index

* Change wording in README

* Django example (#297)

* Add rough django example

* Remove sqlite db

* Add gitignore

* Fix flake8 and pydocstyle errors

* Add tests

* Refactor settings

* Move web app to to the root of the project

* Add bootstrap 4

* Add doc blocks for web app

* Add coverage

* Fix typo in flask

* Remove not needed newlines

* Add screenshot

* Update django app naming

* Add django example to the docs

* Update changelog

* Update Aiohttp example

* Add sanic example to the docs

* Make a little fix in django example docs page

* Add flask example to the docs

* Add aiohttp example to the docs

* Update installation docs page

* Fix .delegate() deprecation

* Refactor movie lister to use wiring

* Make micro cosmetic changes to flask, aiohttp & sanic examples

* Refactor single container example to use wiring

* Refactor multiple container example to use wiring

* Add return type to main() in application examples

* Refactor decoupled packages example to use wiring

* Refactor code layout for DI demo example

* Update wiring feature message

* Add more links to the examples

* Change code layout in miniapps

* Update sanic example

* Update miniapp READMEs

* Update wiring docs

* Refactor part of cli tutorial

* Refactor CLI app tutorial

* Update test coverage results in movie lister example and tutorial

* Make some minor updates to aiohttp and cli tutorials

* Refactor flask tutorial

* Make cosmetic fix in flask example

* Refactor Flask tutorial: Connect to the GitHub

* Refactor Flask tutorial: Search service

* Refactor Flask tutorial: Inject search service into view

* Refactor Flask tutorial: Make some refactoring

* Finish flask tutorial refactoring

* Update tutorials

* Refactor  asyncio monitoring daemon example application

* Fix tutorial links

* Rename asyncio miniapp

* Rename tutorial image dirs

* Rename api docs tol-level page

* Refactor initial sections of asyncio daemon tutorial

* Refactor asyncio tutorial till Example.com monitor section

* Refactor asyncio tutorial example.com monitor section

* Refactor asyncio tutorial httpbin.org monitor tutorial

* Refactor tests section of asyncio daemon tutorial

* Update conclusion of asyncio daemon tutorial

* Rename tutorial images

* Make cosmetic update to flask tutorial

* Refactor aiohttp tutorial: Minimal application section

* Refactor aiohttp tutorial: Giphy API client secion

* Refactor aiohttp tutorial secion: Make the search work

* Refactor aiohttp tutorial tests section

* Refactor aiohttp tutorial conclusion

* Upgrade  Cython to 0.29.21

* Update changelog

* Update demo example

* Update wording on index pages

* Update changelog

* Update code layout for main demo
2020-10-09 15:16:27 -04:00
Roman Mogylatov
d8439a28b1
Make provider generic type (#293)
* Add __class_getitem__ for Provider to null the typing in runtime

* Make Provider stub generic and remove types module

* Update types module tests

* Return types module with deprecation warning

* Return types module with deprecation warning

* Update changelog

* Add docs page
2020-09-13 20:32:21 -04:00
Roman Mogylatov
203427aa97 Fix few typos 2020-09-09 23:34:59 -04:00
Roman Mogylatov
bf978601ba
Refactor services miniapps (#291)
* Refactor services mini app with single container

* Make few little fixes to single container app

* Update requirements.txt for single container example

* Refactor multiple containers example

* Add single container docs page

* Create multiple containers page
2020-09-04 23:19:32 -04:00
Roman Mogylatov
913ce01475 Update key features 2020-09-03 18:03:21 -04:00
Roman Mogylatov
ca986698e9 Update key features page and remove structure page 2020-09-03 16:20:04 -04:00
Roman Mogylatov
15acccf48f Bump version to 3.32.3 2020-08-26 16:35:31 -04:00
Roman Mogylatov
bb1403b5e9 Update docs index and key features page 2020-08-10 22:29:25 -04:00
Roman Mogylatov
3a61457be7
Asyncio daemon tutorial (#278)
* Fix a typo in the docblock of the Configuration provider

* Update the changelog

* Add tutorial sections

* Switch to use https for httpbin.org requests

* Add what we are going to build section

* Fix ``Makefile`` to run ``aiohttp`` integration tests on Python 3.5+

* Add prerequisities and prepare the env sections

* Add logging, config and the dispacher sections

* Change logging

* Fix multiple typos in the ``flask`` and ``aiohttp`` tutorials

* Add the initial and dirty version

* Fix multiple typos in the ``flask`` and ``aiohttp`` tutorials

* Fix the 3.27.0 changelog

* Finish all the parts before the dispatcher

* Finish dispatcher section

* Update http monitor logging format

* Finish the tutorial

* Fix docblock in the dispatcher module

* Update changelog

* Add meta keywords and description
2020-08-08 14:48:05 -04:00
Roman Mogylatov
4ca385d73b Bump version to 3.24.1 2020-07-29 12:18:09 -04:00
Roman Mogylatov
1674cecc8d
Flask tutorial (#265)
* Add a piece of the tutorial

* Add "Make it pretty" tutorial step

* Add section about github client setup

* Make minor fixes

* Add search service section + table of contents

* Make various fixes

* Make more fixes

* Update make the search section

* Update ghnav-flask example & README

* Update base.html markup

* Finish section: Make the search work

* Update ghnav-flask screenshot

* Update tutorials

* Add flaks tutorial link to the DI in Python page
2020-07-20 16:58:18 -04:00
Roman Mogylatov
6eff213a68
Migrate to alabaster (#264)
* Add bootstrap and remove created at from ghnav-flask app

* Update readme

* Add logo to the docs

* Update key features description

* Update README

* Change headers of API docs

* Add alabaster theme config

* Update docs index

* Add tutorials section

* Update what is DI page

* Update DI in Python page

* Update tutorials index page

* Update provider docs

* Update container docs

* Update examples docs
2020-07-18 00:40:14 -04:00
Roman Mogylatov
fa469618dd
Readme update (#263)
* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Add files via upload

* Update README.rst

* Rename Blank Diagram (1).svg to di-map.svg

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Add files via upload

* Rename Blank Diagram (2).svg to di-map2.svg

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Add files via upload

* Add files via upload

* Rename README.svg to di-map3.svg

* Update README.rst

* Add files via upload

* Rename README - Page 3.svg to di-map4.svg

* Update README.rst

* Add files via upload

* Rename README - Copy of Page 3.svg to di-map5.svg

* Update README.rst

* Delete di-map.svg

* Delete di-map2.svg

* Delete di-map3.svg

* Delete di-map4.svg

* Update README.rst

* Update README.rst

* Add Github Navigator - Flask application

* Do more refactoring for ghnav-flask

* More refactoring

* Update README

* Add tests

* Update readme

* Add Flask extension

* Add Factory.provides attribute

* Add Flask extension module

* User flask extension in githubnavigator example

* Add README for ghnav-flask

* Update ghnav-flask README

* Update ghnav-flask README

* Update README with ghnav container example

* Move ghnav-flask to miniapps/ folder

* Fix auth token reading from env for ghnav-flask

* Update readme

* Fix ghnav-flask linter errors

* Add downloads and wheel badge

* Add tests for flask extension

* Fix flask tests

* Add requirements-ext.txt installation to tox.ini

* Add API docs for ext.flask module

* Update setup.py

* Add Flask to the list of keywords

* Update badges on docs README

* Update docs README title

* Fix ext.flask tests

* Fix syntax of ext.flask for Python 2.7, 3.4, 3.5

* Fix syntax of ext.flask for Python 2.7, 3.4, 3.5

* Fix imports in ext.flask for Python 2.7, 3.4, 3.5

* Update ghfnav-flask README

* Update ghfnav-flask README

* Remove setting of empty github token

* Add flask extras

* Update requirements

* Update requirements

* Add flask extra to python 3.4 tox.ini

* Update changelog

* Update changelog
2020-07-11 12:15:00 -04:00
Roman Mogylatov
f130d41dbc
Logo (#261)
* Try logo placement

* Remove readme header

* Experiment with badges

* Add space

* Update logo

* Remove spaces

* Update README.rst

* Remove header

* Update README.rst

* Move logo to wiki

* Add github badges

* Remove github badges

* Update docs index page
2020-07-02 22:07:07 -04:00
Roman Mogylatov
a0349305db Update downloads link 2020-02-18 17:49:37 -05:00
Roman Mogylatov
68a0f4b5f0 Add downloads badge 2020-02-18 17:48:20 -05:00
Roman Mogylatov
78dd3ec744 Add more docs fixes for 3.15.3 2020-01-26 20:32:16 -05:00
Roman Mogylatov
f8ddf1b19b Bump version to 3.15.3 2020-01-26 19:53:06 -05:00
Roman Mogylatov
3f15640e55 Add docs badge 2017-12-25 20:34:39 +02:00
Roman Mogilatov
46a7eb0f3f Update source of coveralls.io badge 2017-05-08 19:05:02 +03:00
Roman Mogilatov
9926ac33cc Update README and docs index page 2017-03-26 22:45:05 +03:00
Roman Mogilatov
b05b673108 Add some improvements to the documentation 2017-02-01 13:07:44 +02:00
Roman Mogilatov
bf00e5c0fa Update docs 2016-11-11 17:05:25 +02:00
Roman Mogilatov
63bc3f95e7 Fix status table on docs index page 2016-10-19 19:26:46 +03:00
Roman Mogilatov
a62ddf8265 Add github badges to readme and docs index page 2016-10-19 15:15:29 +03:00
Roman Mogilatov
e22dd14596 Update project title and description 2016-10-12 10:41:50 +03:00
Roman Mogilatov
6c25c91146 Update short description on docs index page 2016-10-06 23:25:14 +03:00
Roman Mogilatov
38c9d2f18a Update docs 2016-09-23 00:24:45 +03:00
Roman Mogilatov
b86760e467 Make huge updates for docs (not atomic commit) 2016-06-03 00:48:06 +03:00
Roman Mogilatov
0cb197802a Remove dowloads-counter badge from README and index page of docs 2016-05-30 22:34:29 +03:00
Roman Mogilatov
4e70d138fe Change some links due repository name switching 2016-04-25 11:39:35 +03:00
Roman Mogilatov
9e5c6a13c4 Release 1.16.2 2016-04-23 15:00:06 +03:00
Roman Mogilatov
4cf3bdb1fb Update examples and docs 2016-04-20 14:19:54 +03:00
Roman Mogilatov
3204582143 Move introduction docs to the top level 2016-04-04 23:40:28 +03:00
Roman Mogilatov
6b1dd3aef6 Update key features list and key features page in docs 2016-03-31 00:40:49 +03:00
Roman Mogilatov
08b00d71d4 Update introduction docs 2016-03-29 20:17:12 +03:00