Dependency injection framework designed with Python in mind.
MIT License
picobox.contrib
package is renamed into picobox.ext
. See https://github.com/ikalnytskyi/picobox/pull/70.Python 3.12
support. See https://github.com/ikalnytskyi/picobox/pull/61.Python 3.7
support. It reached its end-of-life recently. See https://github.com/ikalnytskyi/picobox/pull/60.@picobox.pass_()
decorator issue when it was shadowing a return type of the wrapped function breaking code completion in some LSP servers. See https://github.com/ikalnytskyi/picobox/pull/62.picobox.push()
context manager issue when it wasn't announcing properly its return type breaking code completion in some LSP servers for the returned object. See https://github.com/ikalnytskyi/picobox/pull/62.Box.put()
and picobox.put()
to require either value
or factory
argument. Previously, they could have been invoked with key
argument only, which makes no sense and causes runtime issues later on. See https://github.com/ikalnytskyi/picobox/pull/69.Full Changelog: https://github.com/ikalnytskyi/picobox/compare/3.0.0...4.0.0
Published by ikalnytskyi 11 months ago
Python 3.10
& Python 3.11
support. See https://github.com/ikalnytskyi/picobox/pull/51.Python 2.7
support. It's dead for more than a year anyway. Those who want to use picobox with Python 2
should stick with 2.x
branch. See https://github.com/ikalnytskyi/picobox/pull/39.Python 3.4
, Python 3.5
and Python 3.6
support. They reached their end-of-life and are not maintained anymore. See https://github.com/ikalnytskyi/picobox/pull/39 and https://github.com/ikalnytskyi/picobox/pull/52.mypy
to leverage type checking in their code base. See https://github.com/ikalnytskyi/picobox/pull/47.factory
and scope
in Box.put()
, as_
in Box.pass_()
and chain
in picobox.push()
. See https://github.com/ikalnytskyi/picobox/pull/49.pyproject.toml
in a so-called source distribution.Full Changelog: https://github.com/ikalnytskyi/picobox/compare/2.2.0...3.0.0
Published by ikalnytskyi 11 months ago
picobox.singleton
, picobox.threadlocal
& picobox.contextvars
scopes so they do not fail with unexpected exception when non-string formattable missing key is passed. See https://github.com/ikalnytskyi/picobox/pull/30.picobox.contrib.flaskscopes
module with application and request scopes for Flask web framework. See https://github.com/ikalnytskyi/picobox/pull/31 and https://github.com/ikalnytskyi/picobox/pull/37.picobox.Stack
class to create stacks with boxes on demand. Might be useful for third-party developers who want to use picobox yet avoid collisions with main application developers. See https://github.com/ikalnytskyi/picobox/pull/33.Full Changelog: https://github.com/ikalnytskyi/picobox/compare/2.1.0...2.2.0
Published by ikalnytskyi 11 months ago
picobox.contextvars
scope (python 3.7 and above) that can be used in asyncio applications to have a separate set of dependencies in all coroutines of the same task. See https://github.com/ikalnytskyi/picobox/pull/23.picobox.threadlocal
issue when it was impossible to use any hashable key other than str
. See https://github.com/ikalnytskyi/picobox/pull/21.picobox.pass_
calls are now squashed into one in order to improve runtime performance. See https://github.com/ikalnytskyi/picobox/pull/25.Python 2.7
support. See https://github.com/ikalnytskyi/picobox/pull/26.Full Changelog: https://github.com/ikalnytskyi/picobox/compare/2.0.0...2.1.0
Published by ikalnytskyi 11 months ago
picobox.push()
can now be used as a regular function as well, not only as a context manager. This is a breaking change because from now one a box is pushed on stack immediately when calling picobox.push()
, no need to wait for __enter__()
to be called. See https://github.com/ikalnytskyi/picobox/pull/16.picobox.pop()
function, that pops the box from the top of the stack. See https://github.com/ikalnytskyi/picobox/pull/16 and https://github.com/ikalnytskyi/picobox/pull/17.picobox.push()
that may occur in non-CPython implementations. See https://github.com/ikalnytskyi/picobox/pull/16.Full Changelog: https://github.com/ikalnytskyi/picobox/compare/1.1.0...2.0.0
Published by ikalnytskyi 11 months ago
ChainBox
class that can be used similar to ChainMap
but for boxes. This basically means from now on you can group few boxes into one view, and use that view to look up dependencies. See https://github.com/ikalnytskyi/picobox/pull/11.picobox.push()
argument called chain
that can be used to look up keys down the stack on misses. See https://github.com/ikalnytskyi/picobox/pull/14.Full Changelog: https://github.com/ikalnytskyi/picobox/compare/1.0.0...1.1.0
Published by ikalnytskyi 11 months ago
Yep, that's the very first version w/ initial functionality. 🍰