Ididi

Latest version: v1.4.2

Safety actively analyzes 703125 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 5 of 10

1.1.0

Feat:

- add a special mark so that users don't need to specifically mark `dg.node`

py
async def create_user(user_repo: inject(repo_factory)):
...

so that user does not have to explicitly declear repo_factory as a node

dg = DependencyGraph()

dg.node
def repo_factory():
...


- support config to entry

- support DependencyGraph as dependency

py
def get_user_service(dg: DependencyGraph) -> UserService:
return dg.resolve(UserService)

dg.resolve(get_user_service)
this would pass the same graph into function

1.0.10

- fix a bug where error would happen when user use `dg.resolve` to resolve a resource factor, example:

py
def user_factory() -> ty.Generator[User, None, None]:
u = User(1, "test")
yield u
dg.analyze(user_factory)
with dg.scope() as scope:
this would fail before 1.0.10
u = scope.resolve(user_factory)


improvement
improve typing support for scope.resolve, now it recognize resource better.

1.0.9

- remove `import typing as ty`, `import typing_extensions as tyex` to reduce global lookup

- add an `ignore` field to node config, where these ignored param names or types will be ignored at statical resolve / resolve phase

py
dg.node(ignore=("name", int))
class User:
name: str
age: int

dg = DependencyGraph()
dg.node(ignore=("name", int))(User)
with pytest.raises(TypeError):
dg.resolve(User)

n = dg.resolve(User, name="test", age=3)
assert n.name == "test"
assert n.age == 3


- fix a potential bug where when resolve dependent return None or False it could be re-resolved

- rasie error when a factory returns a builtin type

py
dg.node
def create_user() -> str:
...

1.0.8

improvements:

now ididi will look for conflict in reusability,
For example,
when a dependency with `reuse=False` has a dependent with `reuse=True`, ididi would raise ReusabilityConflictError when statically resolve the nodes.

bash
ididi.errors.ReusabilityConflictError: Transient dependency `Database` with reuse dependents
make sure each of AuthService -> Repository is configured as `reuse=False`

1.0.7

adding support for python 3.13

1.0.5

improvements:
DependencyGraph now supports `__contains__` operator, `a in dg` is the equivalent to `a in dg.nodes`

features:
DependencyGraph now supports a `merge` operator, example:

py
from app.features.users import user_dg

dg = DependencyGraph()
dg.merge(user_dg)


you might choose to merge one or more DependencyGraph into the main graph, so that you don't have to import a single dg to register all your classes.

Page 5 of 10

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.