33import pathlib
44import socket
55import ssl
6+ from typing import Any , Dict , List , Union
67
7- import aiohttp
8- from aiohttp import web
9- from aiohttp .resolver import DefaultResolver
10- from aiohttp .test_utils import unused_port
8+ from aiohttp import ClientSession , TCPConnector , resolver , test_utils , web
119
1210
1311class FakeResolver :
1412 _LOCAL_HOST = {0 : "127.0.0.1" , socket .AF_INET : "127.0.0.1" , socket .AF_INET6 : "::1" }
1513
16- def __init__ (self , fakes ) :
14+ def __init__ (self , fakes : Dict [ str , int ]) -> None :
1715 """fakes -- dns -> port dict"""
1816 self ._fakes = fakes
19- self ._resolver = DefaultResolver ()
20-
21- async def resolve (self , host , port = 0 , family = socket .AF_INET ):
17+ self ._resolver = resolver .DefaultResolver ()
18+
19+ async def resolve (
20+ self ,
21+ host : str ,
22+ port : int = 0 ,
23+ family : Union [socket .AddressFamily , int ] = socket .AF_INET ,
24+ ) -> List [Dict [str , Any ]]:
2225 fake_port = self ._fakes .get (host )
2326 if fake_port is not None :
2427 return [
@@ -34,9 +37,12 @@ async def resolve(self, host, port=0, family=socket.AF_INET):
3437 else :
3538 return await self ._resolver .resolve (host , port , family )
3639
40+ async def close (self ) -> None :
41+ self ._resolver .close ()
42+
3743
3844class FakeFacebook :
39- def __init__ (self ):
45+ def __init__ (self ) -> None :
4046 self .app = web .Application ()
4147 self .app .router .add_routes (
4248 [
@@ -51,21 +57,20 @@ def __init__(self):
5157 self .ssl_context = ssl .create_default_context (ssl .Purpose .CLIENT_AUTH )
5258 self .ssl_context .load_cert_chain (str (ssl_cert ), str (ssl_key ))
5359
54- async def start (self ):
55- port = unused_port ()
56- self .runner = web .AppRunner (self .app )
60+ async def start (self ) -> Dict [str , int ]:
61+ port = test_utils .unused_port ()
5762 await self .runner .setup ()
5863 site = web .TCPSite (self .runner , "127.0.0.1" , port , ssl_context = self .ssl_context )
5964 await site .start ()
6065 return {"graph.facebook.com" : port }
6166
62- async def stop (self ):
67+ async def stop (self ) -> None :
6368 await self .runner .cleanup ()
6469
65- async def on_me (self , request ) :
70+ async def on_me (self , request : web . Request ) -> web . StreamResponse :
6671 return web .json_response ({"name" : "John Doe" , "id" : "12345678901234567" })
6772
68- async def on_my_friends (self , request ) :
73+ async def on_my_friends (self , request : web . Request ) -> web . StreamResponse :
6974 return web .json_response (
7075 {
7176 "data" : [
@@ -88,15 +93,15 @@ async def on_my_friends(self, request):
8893 )
8994
9095
91- async def main ():
96+ async def main () -> None :
9297 token = "ER34gsSGGS34XCBKd7u"
9398
9499 fake_facebook = FakeFacebook ()
95100 info = await fake_facebook .start ()
96101 resolver = FakeResolver (info )
97- connector = aiohttp . TCPConnector (resolver = resolver , ssl = False )
102+ connector = TCPConnector (resolver = resolver , ssl = False )
98103
99- async with aiohttp . ClientSession (connector = connector ) as session :
104+ async with ClientSession (connector = connector ) as session :
100105 async with session .get (
101106 "https://graph.facebook.com/v2.7/me" , params = {"access_token" : token }
102107 ) as resp :
0 commit comments