1+ from base64 import b64encode
12from collections .abc import Awaitable , Callable
23from typing import Generic , TypeVar
34
@@ -28,8 +29,9 @@ async def need_retry(self, response: Response[T]) -> tuple[bool, float | None]:
2829 return True , None
2930 return False , None
3031
31- async def enrich (self , request : RequestData ) -> None :
32- request .headers = request .headers or CIMultiDict ()
32+ async def before_request (self , request : RequestData ) -> None :
33+ if request .headers is None :
34+ request .headers = CIMultiDict ()
3335
3436 token = await execute_sync_async (self ._token_getter )
3537 request .headers ["Authorization" ] = f"Bearer { token } "
@@ -41,3 +43,30 @@ def __init__(self, token: str):
4143
4244 async def need_retry (self , response : Response [T ]) -> tuple [bool , float | None ]:
4345 return False , None
46+
47+
48+ class StaticBasicAuthAddon (Addon [T ], Retryable [T ], Generic [T ]):
49+ __slots__ = ("_login" , "_password" )
50+
51+ def __init__ (
52+ self ,
53+ * ,
54+ login : str ,
55+ password : str ,
56+ ):
57+ self ._login = login
58+ self ._password = password
59+ self .__header_value = "Basic " + self ._generate_auth (
60+ self ._login , self ._password
61+ )
62+
63+ def _generate_auth (self , login : str , password : str ) -> str :
64+ return b64encode (f"{ login } :{ password } " .encode ("utf-8" )).decode ("utf-8" )
65+
66+ async def need_retry (self , response : Response [T ]) -> tuple [bool , float | None ]:
67+ return False , None
68+
69+ async def before_request (self , request : RequestData ) -> None :
70+ if request .headers is None :
71+ request .headers = CIMultiDict ()
72+ request .headers ["Authorization" ] = self .__header_value
0 commit comments