2525 Type ,
2626 TypeVar ,
2727 Union ,
28+ assert_never ,
2829 cast ,
2930)
3031from warnings import warn
@@ -791,6 +792,9 @@ def modify(
791792 ) -> providers .Provider :
792793 return provider .as_ (self .type_ )
793794
795+ def __repr__ (self ) -> str :
796+ return f"{ self .__class__ .__name__ } ({ self .type_ !r} )"
797+
794798
795799def as_int () -> TypeModifier :
796800 """Return int type modifier."""
@@ -809,8 +813,8 @@ def as_(type_: Type) -> TypeModifier:
809813
810814class RequiredModifier (Modifier ):
811815
812- def __init__ (self ) -> None :
813- self .type_modifier = None
816+ def __init__ (self , type_modifier : Optional [ TypeModifier ] = None ) -> None :
817+ self .type_modifier = type_modifier
814818
815819 def as_int (self ) -> Self :
816820 self .type_modifier = TypeModifier (int )
@@ -834,6 +838,11 @@ def modify(
834838 provider = provider .as_ (self .type_modifier .type_ )
835839 return provider
836840
841+ def __repr__ (self ) -> str :
842+ if self .type_modifier :
843+ return f"{ self .__class__ .__name__ } ({ self .type_modifier !r} )"
844+ return f"{ self .__class__ .__name__ } ()"
845+
837846
838847def required () -> RequiredModifier :
839848 """Return required modifier."""
@@ -853,6 +862,9 @@ def modify(
853862 invariant_segment = providers_map .resolve_provider (self .id )
854863 return provider [invariant_segment ]
855864
865+ def __repr__ (self ) -> str :
866+ return f"{ self .__class__ .__name__ } ({ self .id !r} )"
867+
856868
857869def invariant (id : str ) -> InvariantModifier :
858870 """Return invariant modifier."""
@@ -893,8 +905,28 @@ def modify(
893905 provider = provider [value ]
894906 elif type_ == ProvidedInstance .TYPE_CALL :
895907 provider = provider .call ()
908+ else :
909+ assert_never (type_ )
896910 return provider
897911
912+ def _format_segments (self ) -> str :
913+ segments = []
914+ for type_ , value in self .segments :
915+ if type_ == ProvidedInstance .TYPE_ATTRIBUTE :
916+ segments .append (f".{ value } " )
917+ elif type_ == ProvidedInstance .TYPE_ITEM :
918+ segments .append (f"[{ value !r} ]" )
919+ elif type_ == ProvidedInstance .TYPE_CALL :
920+ segments .append (".call()" )
921+ else :
922+ assert_never (type_ )
923+ return "" .join (segments )
924+
925+ __str__ = _format_segments
926+
927+ def __repr__ (self ) -> str :
928+ return f"{ self .__class__ .__name__ } (){ self ._format_segments ()} "
929+
898930
899931def provided () -> ProvidedInstance :
900932 """Return provided instance modifier."""
@@ -910,14 +942,15 @@ def provided() -> ProvidedInstance:
910942]
911943
912944
913- if TYPE_CHECKING :
945+ if TYPE_CHECKING : # noqa
914946
915947 class _Marker (Protocol ):
916948 __IS_MARKER__ : bool
917949
918950 def __call__ (self ) -> Self : ...
919951 def __getattr__ (self , item : str ) -> Self : ...
920952 def __getitem__ (self , item : Any ) -> Any : ...
953+ def __repr__ (self ) -> str : ...
921954
922955 Provide : _Marker
923956 Provider : _Marker
@@ -946,6 +979,12 @@ def __class_getitem__(cls, item: MarkerItem) -> Self:
946979 def __call__ (self ) -> Self :
947980 return self
948981
982+ def __repr__ (self ) -> str :
983+ cls_name = self .__class__ .__name__
984+ if self .modifier :
985+ return f"{ cls_name } [{ self .provider !r} , { self .modifier !r} ]"
986+ return f"{ cls_name } [{ self .provider !r} ]"
987+
949988 class Provide (_Marker ): ...
950989
951990 class Provider (_Marker ): ...
0 commit comments