4343@overload
4444def safe_decode (s :None )-> None : ...
4545
46+
4647@overload
47- def safe_decode (s :Union [IO [str ],AnyStr ])-> str : ...
48+ def safe_decode (s :AnyStr )-> str : ...
49+
4850
49- def safe_decode (s :Union [IO [ str ], AnyStr ,None ])-> Optional [str ]:
51+ def safe_decode (s :Union [AnyStr ,None ])-> Optional [str ]:
5052"""Safely decodes a binary string to unicode"""
5153if isinstance (s ,str ):
5254return s
@@ -61,9 +63,11 @@ def safe_decode(s: Union[IO[str], AnyStr, None]) -> Optional[str]:
6163@overload
6264def safe_encode (s :None )-> None : ...
6365
66+
6467@overload
6568def safe_encode (s :AnyStr )-> bytes : ...
6669
70+
6771def safe_encode (s :Optional [AnyStr ])-> Optional [bytes ]:
6872"""Safely encodes a binary string to unicode"""
6973if isinstance (s ,str ):
@@ -79,9 +83,11 @@ def safe_encode(s: Optional[AnyStr]) -> Optional[bytes]:
7983@overload
8084def win_encode (s :None )-> None : ...
8185
86+
8287@overload
8388def win_encode (s :AnyStr )-> bytes : ...
8489
90+
8591def win_encode (s :Optional [AnyStr ])-> Optional [bytes ]:
8692"""Encode unicodes for process arguments on Windows."""
8793if isinstance (s ,str ):
@@ -93,7 +99,8 @@ def win_encode(s: Optional[AnyStr]) -> Optional[bytes]:
9399return None
94100
95101
96- def with_metaclass (meta :Type [Any ],* bases :Any )-> TBD :# type: ignore ## mypy cannot understand dynamic class creation
102+ # type: ignore ## mypy cannot understand dynamic class creation
103+ def with_metaclass (meta :Type [Any ],* bases :Any )-> TBD :
97104"""copied from https://github.com/Byron/bcore/blob/master/src/python/butility/future.py#L15"""
98105
99106class metaclass (meta ):# type: ignore
@@ -105,4 +112,4 @@ def __new__(cls, name: str, nbases: Optional[Tuple[int, ...]], d: Dict[str, Any]
105112return type .__new__ (cls ,name , (),d )
106113return meta (name ,bases ,d )
107114
108- return metaclass (meta .__name__ + 'Helper' ,None , {})# type: ignore
115+ return metaclass (meta .__name__ + 'Helper' ,None , {})# type: ignore