Skip to content

Commit

Permalink
refactor: _itypes to interfaces
Browse files Browse the repository at this point in the history
  • Loading branch information
raceychan committed Jan 8, 2025
1 parent 8f57c83 commit 4fe6038
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 60 deletions.
7 changes: 3 additions & 4 deletions ididi/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,15 @@

__version__ = VERSION

from ._itypes import GraphConfig as GraphConfig
from ._itypes import INode as INode
from ._itypes import INodeConfig as INodeConfig
from ._itypes import NodeConfig as NodeConfig
from .interfaces import INode as INode
from .interfaces import INodeConfig as INodeConfig
from .api import entry as entry
from .api import resolve as resolve
from .graph import AsyncScope as AsyncScope
from .graph import DependencyGraph as DependencyGraph
from .graph import SyncScope as SyncScope
from .node import DependentNode as DependentNode
from .node import NodeConfig as NodeConfig
from .node import use as use
from .utils.typing_utils import AsyncResource as AsyncResource
from .utils.typing_utils import Resource as Resource
Expand Down
2 changes: 1 addition & 1 deletion ididi/_type_resolve.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

from typing_extensions import ParamSpec, TypeGuard

from ._itypes import AsyncClosable, Closable
from .interfaces import AsyncClosable, Closable
from .errors import (
ForwardReferenceNotFoundError,
GenericDependencyNotSupportedError,
Expand Down
2 changes: 1 addition & 1 deletion ididi/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from typing_extensions import Unpack

from ._itypes import IAsyncFactory, IFactory, INodeConfig, TEntryDecor
from .interfaces import IAsyncFactory, IFactory, INodeConfig, TEntryDecor
from .graph import DependencyGraph as DependencyGraph
from .utils.typing_utils import P, T

Expand Down
27 changes: 24 additions & 3 deletions ididi/graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@
TypeVar,
Union,
cast,
final,
get_origin,
overload,
)

from typing_extensions import Self, Unpack

from ._ds import GraphNodes, GraphNodesView, ResolutionRegistry, TypeRegistry, Visitor
from ._itypes import (
from .interfaces import (
INSPECT_EMPTY,
GraphConfig,
GraphIgnoreConfig,
IAnyFactory,
IAsyncFactory,
Expand All @@ -36,7 +36,6 @@
INode,
INodeConfig,
INodeFactory,
NodeConfig,
TDecor,
TEntryDecor,
)
Expand Down Expand Up @@ -66,6 +65,7 @@
from .node import (
DependentNode,
LazyDependent,
NodeConfig,
resolve_annotated,
resolve_inject,
should_override,
Expand Down Expand Up @@ -301,6 +301,27 @@ async def __aexit__(
self._graph.reset_context_scope(self._token)


class GraphConfig:
__slots__ = ("self_inject", "ignore", "partial_resolve")

def __init__(
self,
*,
self_inject: bool,
ignore: Maybe[GraphIgnoreConfig],
partial_resolve: bool,
):
self.self_inject = self_inject
if not is_provided(ignore):
ignore = tuple()
elif not isinstance(ignore, tuple):
ignore = (ignore,)

self.ignore = ignore
self.partial_resolve = partial_resolve


@final
class DependencyGraph:
"""
### Description:
Expand Down
Empty file added ididi/interface.py
Empty file.
48 changes: 0 additions & 48 deletions ididi/_itypes.py → ididi/interfaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
)

from typing_extensions import TypeAliasType

from .utils.param_utils import MISSING, Maybe, is_provided
from .utils.typing_utils import P, R, T

EMPTY_SIGNATURE = Signature()
Expand Down Expand Up @@ -113,52 +111,6 @@ class INodeConfig(TypedDict, total=False):
reuse: bool


class NodeConfig:
__slots__ = ("reuse", "lazy", "ignore")

ignore: NodeIgnore

def __init__(
self,
*,
reuse: bool = True,
lazy: bool = False,
ignore: Maybe[NodeIgnoreConfig] = MISSING,
):
self.lazy = lazy

if not is_provided(ignore):
ignore = tuple()
elif not isinstance(ignore, tuple):
ignore = (ignore,)

self.ignore = ignore
self.reuse = reuse

def __repr__(self):
return f"{self.__class__.__name__}({self.reuse=}, {self.lazy=}, {self.ignore=})"


class GraphConfig:
__slots__ = ("self_inject", "ignore", "partial_resolve")

def __init__(
self,
*,
self_inject: bool,
ignore: Maybe[GraphIgnoreConfig],
partial_resolve: bool,
):
self.self_inject = self_inject
if not is_provided(ignore):
ignore = tuple()
elif not isinstance(ignore, tuple):
ignore = (ignore,)

self.ignore = ignore
self.partial_resolve = partial_resolve


@runtime_checkable
class Closable(Protocol):
def close(self) -> None: ...
Expand Down
30 changes: 28 additions & 2 deletions ididi/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@

from typing_extensions import Unpack

from ._itypes import (
from .interfaces import (
EMPTY_SIGNATURE,
INSPECT_EMPTY,
INode,
INodeAnyFactory,
INodeConfig,
INodeFactory,
NodeConfig,
NodeIgnore,
NodeIgnoreConfig,
)
from ._type_resolve import (
IDIDI_INJECT_RESOLVE_MARK,
Expand Down Expand Up @@ -63,6 +63,32 @@
from .utils.typing_utils import P, T, get_factory_sig_from_cls


class NodeConfig:
__slots__ = ("reuse", "lazy", "ignore")

ignore: NodeIgnore

def __init__(
self,
*,
reuse: bool = True,
lazy: bool = False,
ignore: Maybe[NodeIgnoreConfig] = MISSING,
):
self.lazy = lazy

if not is_provided(ignore):
ignore = tuple()
elif not isinstance(ignore, tuple):
ignore = (ignore,)

self.ignore = ignore
self.reuse = reuse

def __repr__(self):
return f"{self.__class__.__name__}({self.reuse=}, {self.lazy=}, {self.ignore=})"


def use(
factory: INodeFactory[P, T],
**iconfig: Unpack[INodeConfig],
Expand Down
1 change: 0 additions & 1 deletion tests/features/test_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,6 @@ def test_entry_reuse():
def create_user(
user_name: str, user_email: str, service: UserService
) -> UserService:
print("f")
return service

services = set[UserService]()
Expand Down

0 comments on commit 4fe6038

Please sign in to comment.