25
25
Type ,
26
26
TypeVar ,
27
27
Union ,
28
+ assert_never ,
28
29
cast ,
29
30
)
30
31
from warnings import warn
@@ -791,6 +792,9 @@ def modify(
791
792
) -> providers .Provider :
792
793
return provider .as_ (self .type_ )
793
794
795
+ def __repr__ (self ) -> str :
796
+ return f"{ self .__class__ .__name__ } ({ self .type_ !r} )"
797
+
794
798
795
799
def as_int () -> TypeModifier :
796
800
"""Return int type modifier."""
@@ -809,8 +813,8 @@ def as_(type_: Type) -> TypeModifier:
809
813
810
814
class RequiredModifier (Modifier ):
811
815
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
814
818
815
819
def as_int (self ) -> Self :
816
820
self .type_modifier = TypeModifier (int )
@@ -834,6 +838,11 @@ def modify(
834
838
provider = provider .as_ (self .type_modifier .type_ )
835
839
return provider
836
840
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
+
837
846
838
847
def required () -> RequiredModifier :
839
848
"""Return required modifier."""
@@ -853,6 +862,9 @@ def modify(
853
862
invariant_segment = providers_map .resolve_provider (self .id )
854
863
return provider [invariant_segment ]
855
864
865
+ def __repr__ (self ) -> str :
866
+ return f"{ self .__class__ .__name__ } ({ self .id !r} )"
867
+
856
868
857
869
def invariant (id : str ) -> InvariantModifier :
858
870
"""Return invariant modifier."""
@@ -893,8 +905,28 @@ def modify(
893
905
provider = provider [value ]
894
906
elif type_ == ProvidedInstance .TYPE_CALL :
895
907
provider = provider .call ()
908
+ else :
909
+ assert_never (type_ )
896
910
return provider
897
911
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
+
898
930
899
931
def provided () -> ProvidedInstance :
900
932
"""Return provided instance modifier."""
@@ -910,14 +942,15 @@ def provided() -> ProvidedInstance:
910
942
]
911
943
912
944
913
- if TYPE_CHECKING :
945
+ if TYPE_CHECKING : # noqa
914
946
915
947
class _Marker (Protocol ):
916
948
__IS_MARKER__ : bool
917
949
918
950
def __call__ (self ) -> Self : ...
919
951
def __getattr__ (self , item : str ) -> Self : ...
920
952
def __getitem__ (self , item : Any ) -> Any : ...
953
+ def __repr__ (self ) -> str : ...
921
954
922
955
Provide : _Marker
923
956
Provider : _Marker
@@ -946,6 +979,12 @@ def __class_getitem__(cls, item: MarkerItem) -> Self:
946
979
def __call__ (self ) -> Self :
947
980
return self
948
981
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
+
949
988
class Provide (_Marker ): ...
950
989
951
990
class Provider (_Marker ): ...
0 commit comments