33
33
from . import events
34
34
from . import futures
35
35
from . import tasks
36
- from .coroutines import coroutine
37
36
from .log import logger
38
37
39
38
@@ -220,13 +219,12 @@ def _wakeup(self):
220
219
if not waiter .done ():
221
220
waiter .set_result (waiter )
222
221
223
- @coroutine
224
- def wait_closed (self ):
222
+ async def wait_closed (self ):
225
223
if self .sockets is None or self ._waiters is None :
226
224
return
227
225
waiter = self ._loop .create_future ()
228
226
self ._waiters .append (waiter )
229
- yield from waiter
227
+ await waiter
230
228
231
229
232
230
class BaseEventLoop (events .AbstractEventLoop ):
@@ -330,10 +328,9 @@ def _make_write_pipe_transport(self, pipe, protocol, waiter=None,
330
328
"""Create write pipe transport."""
331
329
raise NotImplementedError
332
330
333
- @coroutine
334
- def _make_subprocess_transport (self , protocol , args , shell ,
335
- stdin , stdout , stderr , bufsize ,
336
- extra = None , ** kwargs ):
331
+ async def _make_subprocess_transport (self , protocol , args , shell ,
332
+ stdin , stdout , stderr , bufsize ,
333
+ extra = None , ** kwargs ):
337
334
"""Create subprocess transport."""
338
335
raise NotImplementedError
339
336
@@ -371,8 +368,7 @@ def _asyncgen_firstiter_hook(self, agen):
371
368
372
369
self ._asyncgens .add (agen )
373
370
374
- @coroutine
375
- def shutdown_asyncgens (self ):
371
+ async def shutdown_asyncgens (self ):
376
372
"""Shutdown all active asynchronous generators."""
377
373
self ._asyncgens_shutdown_called = True
378
374
@@ -384,12 +380,11 @@ def shutdown_asyncgens(self):
384
380
closing_agens = list (self ._asyncgens )
385
381
self ._asyncgens .clear ()
386
382
387
- shutdown_coro = tasks .gather (
383
+ results = await tasks .gather (
388
384
* [ag .aclose () for ag in closing_agens ],
389
385
return_exceptions = True ,
390
386
loop = self )
391
387
392
- results = yield from shutdown_coro
393
388
for result , agen in zip (results , closing_agens ):
394
389
if isinstance (result , Exception ):
395
390
self .call_exception_handler ({
@@ -671,10 +666,10 @@ def getaddrinfo(self, host, port, *,
671
666
def getnameinfo (self , sockaddr , flags = 0 ):
672
667
return self .run_in_executor (None , socket .getnameinfo , sockaddr , flags )
673
668
674
- @ coroutine
675
- def create_connection ( self , protocol_factory , host = None , port = None , * ,
676
- ssl = None , family = 0 , proto = 0 , flags = 0 , sock = None ,
677
- local_addr = None , server_hostname = None ):
669
+ async def create_connection ( self , protocol_factory , host = None , port = None ,
670
+ * , ssl = None , family = 0 ,
671
+ proto = 0 , flags = 0 , sock = None ,
672
+ local_addr = None , server_hostname = None ):
678
673
"""Connect to a TCP server.
679
674
680
675
Create a streaming transport connection to a given Internet host and
@@ -722,7 +717,7 @@ def create_connection(self, protocol_factory, host=None, port=None, *,
722
717
else :
723
718
f2 = None
724
719
725
- yield from tasks .wait (fs , loop = self )
720
+ await tasks .wait (fs , loop = self )
726
721
727
722
infos = f1 .result ()
728
723
if not infos :
@@ -755,7 +750,7 @@ def create_connection(self, protocol_factory, host=None, port=None, *,
755
750
continue
756
751
if self ._debug :
757
752
logger .debug ("connect %r to %r" , sock , address )
758
- yield from self .sock_connect (sock , address )
753
+ await self .sock_connect (sock , address )
759
754
except OSError as exc :
760
755
if sock is not None :
761
756
sock .close ()
@@ -793,7 +788,7 @@ def create_connection(self, protocol_factory, host=None, port=None, *,
793
788
raise ValueError (
794
789
'A Stream Socket was expected, got {!r}' .format (sock ))
795
790
796
- transport , protocol = yield from self ._create_connection_transport (
791
+ transport , protocol = await self ._create_connection_transport (
797
792
sock , protocol_factory , ssl , server_hostname )
798
793
if self ._debug :
799
794
# Get the socket from the transport because SSL transport closes
@@ -803,9 +798,8 @@ def create_connection(self, protocol_factory, host=None, port=None, *,
803
798
sock , host , port , transport , protocol )
804
799
return transport , protocol
805
800
806
- @coroutine
807
- def _create_connection_transport (self , sock , protocol_factory , ssl ,
808
- server_hostname , server_side = False ):
801
+ async def _create_connection_transport (self , sock , protocol_factory , ssl ,
802
+ server_hostname , server_side = False ):
809
803
810
804
sock .setblocking (False )
811
805
@@ -820,19 +814,18 @@ def _create_connection_transport(self, sock, protocol_factory, ssl,
820
814
transport = self ._make_socket_transport (sock , protocol , waiter )
821
815
822
816
try :
823
- yield from waiter
817
+ await waiter
824
818
except :
825
819
transport .close ()
826
820
raise
827
821
828
822
return transport , protocol
829
823
830
- @coroutine
831
- def create_datagram_endpoint (self , protocol_factory ,
832
- local_addr = None , remote_addr = None , * ,
833
- family = 0 , proto = 0 , flags = 0 ,
834
- reuse_address = None , reuse_port = None ,
835
- allow_broadcast = None , sock = None ):
824
+ async def create_datagram_endpoint (self , protocol_factory ,
825
+ local_addr = None , remote_addr = None , * ,
826
+ family = 0 , proto = 0 , flags = 0 ,
827
+ reuse_address = None , reuse_port = None ,
828
+ allow_broadcast = None , sock = None ):
836
829
"""Create datagram connection."""
837
830
if sock is not None :
838
831
if not _is_dgram_socket (sock ):
@@ -872,7 +865,7 @@ def create_datagram_endpoint(self, protocol_factory,
872
865
assert isinstance (addr , tuple ) and len (addr ) == 2 , (
873
866
'2-tuple is expected' )
874
867
875
- infos = yield from _ensure_resolved (
868
+ infos = await _ensure_resolved (
876
869
addr , family = family , type = socket .SOCK_DGRAM ,
877
870
proto = proto , flags = flags , loop = self )
878
871
if not infos :
@@ -918,7 +911,7 @@ def create_datagram_endpoint(self, protocol_factory,
918
911
if local_addr :
919
912
sock .bind (local_address )
920
913
if remote_addr :
921
- yield from self .sock_connect (sock , remote_address )
914
+ await self .sock_connect (sock , remote_address )
922
915
r_addr = remote_address
923
916
except OSError as exc :
924
917
if sock is not None :
@@ -948,32 +941,30 @@ def create_datagram_endpoint(self, protocol_factory,
948
941
remote_addr , transport , protocol )
949
942
950
943
try :
951
- yield from waiter
944
+ await waiter
952
945
except :
953
946
transport .close ()
954
947
raise
955
948
956
949
return transport , protocol
957
950
958
- @coroutine
959
- def _create_server_getaddrinfo (self , host , port , family , flags ):
960
- infos = yield from _ensure_resolved ((host , port ), family = family ,
961
- type = socket .SOCK_STREAM ,
962
- flags = flags , loop = self )
951
+ async def _create_server_getaddrinfo (self , host , port , family , flags ):
952
+ infos = await _ensure_resolved ((host , port ), family = family ,
953
+ type = socket .SOCK_STREAM ,
954
+ flags = flags , loop = self )
963
955
if not infos :
964
956
raise OSError ('getaddrinfo({!r}) returned empty list' .format (host ))
965
957
return infos
966
958
967
- @coroutine
968
- def create_server (self , protocol_factory , host = None , port = None ,
969
- * ,
970
- family = socket .AF_UNSPEC ,
971
- flags = socket .AI_PASSIVE ,
972
- sock = None ,
973
- backlog = 100 ,
974
- ssl = None ,
975
- reuse_address = None ,
976
- reuse_port = None ):
959
+ async def create_server (self , protocol_factory , host = None , port = None ,
960
+ * ,
961
+ family = socket .AF_UNSPEC ,
962
+ flags = socket .AI_PASSIVE ,
963
+ sock = None ,
964
+ backlog = 100 ,
965
+ ssl = None ,
966
+ reuse_address = None ,
967
+ reuse_port = None ):
977
968
"""Create a TCP server.
978
969
979
970
The host parameter can be a string, in that case the TCP server is bound
@@ -1011,7 +1002,7 @@ def create_server(self, protocol_factory, host=None, port=None,
1011
1002
fs = [self ._create_server_getaddrinfo (host , port , family = family ,
1012
1003
flags = flags )
1013
1004
for host in hosts ]
1014
- infos = yield from tasks .gather (* fs , loop = self )
1005
+ infos = await tasks .gather (* fs , loop = self )
1015
1006
infos = set (itertools .chain .from_iterable (infos ))
1016
1007
1017
1008
completed = False
@@ -1068,8 +1059,8 @@ def create_server(self, protocol_factory, host=None, port=None,
1068
1059
logger .info ("%r is serving" , server )
1069
1060
return server
1070
1061
1071
- @ coroutine
1072
- def connect_accepted_socket ( self , protocol_factory , sock , * , ssl = None ):
1062
+ async def connect_accepted_socket ( self , protocol_factory , sock ,
1063
+ * , ssl = None ):
1073
1064
"""Handle an accepted connection.
1074
1065
1075
1066
This is used by servers that accept connections outside of
@@ -1082,7 +1073,7 @@ def connect_accepted_socket(self, protocol_factory, sock, *, ssl=None):
1082
1073
raise ValueError (
1083
1074
'A Stream Socket was expected, got {!r}' .format (sock ))
1084
1075
1085
- transport , protocol = yield from self ._create_connection_transport (
1076
+ transport , protocol = await self ._create_connection_transport (
1086
1077
sock , protocol_factory , ssl , '' , server_side = True )
1087
1078
if self ._debug :
1088
1079
# Get the socket from the transport because SSL transport closes
@@ -1091,14 +1082,13 @@ def connect_accepted_socket(self, protocol_factory, sock, *, ssl=None):
1091
1082
logger .debug ("%r handled: (%r, %r)" , sock , transport , protocol )
1092
1083
return transport , protocol
1093
1084
1094
- @coroutine
1095
- def connect_read_pipe (self , protocol_factory , pipe ):
1085
+ async def connect_read_pipe (self , protocol_factory , pipe ):
1096
1086
protocol = protocol_factory ()
1097
1087
waiter = self .create_future ()
1098
1088
transport = self ._make_read_pipe_transport (pipe , protocol , waiter )
1099
1089
1100
1090
try :
1101
- yield from waiter
1091
+ await waiter
1102
1092
except :
1103
1093
transport .close ()
1104
1094
raise
@@ -1108,14 +1098,13 @@ def connect_read_pipe(self, protocol_factory, pipe):
1108
1098
pipe .fileno (), transport , protocol )
1109
1099
return transport , protocol
1110
1100
1111
- @coroutine
1112
- def connect_write_pipe (self , protocol_factory , pipe ):
1101
+ async def connect_write_pipe (self , protocol_factory , pipe ):
1113
1102
protocol = protocol_factory ()
1114
1103
waiter = self .create_future ()
1115
1104
transport = self ._make_write_pipe_transport (pipe , protocol , waiter )
1116
1105
1117
1106
try :
1118
- yield from waiter
1107
+ await waiter
1119
1108
except :
1120
1109
transport .close ()
1121
1110
raise
@@ -1138,11 +1127,13 @@ def _log_subprocess(self, msg, stdin, stdout, stderr):
1138
1127
info .append ('stderr=%s' % _format_pipe (stderr ))
1139
1128
logger .debug (' ' .join (info ))
1140
1129
1141
- @coroutine
1142
- def subprocess_shell (self , protocol_factory , cmd , * , stdin = subprocess .PIPE ,
1143
- stdout = subprocess .PIPE , stderr = subprocess .PIPE ,
1144
- universal_newlines = False , shell = True , bufsize = 0 ,
1145
- ** kwargs ):
1130
+ async def subprocess_shell (self , protocol_factory , cmd , * ,
1131
+ stdin = subprocess .PIPE ,
1132
+ stdout = subprocess .PIPE ,
1133
+ stderr = subprocess .PIPE ,
1134
+ universal_newlines = False ,
1135
+ shell = True , bufsize = 0 ,
1136
+ ** kwargs ):
1146
1137
if not isinstance (cmd , (bytes , str )):
1147
1138
raise ValueError ("cmd must be a string" )
1148
1139
if universal_newlines :
@@ -1157,17 +1148,16 @@ def subprocess_shell(self, protocol_factory, cmd, *, stdin=subprocess.PIPE,
1157
1148
# (password) and may be too long
1158
1149
debug_log = 'run shell command %r' % cmd
1159
1150
self ._log_subprocess (debug_log , stdin , stdout , stderr )
1160
- transport = yield from self ._make_subprocess_transport (
1151
+ transport = await self ._make_subprocess_transport (
1161
1152
protocol , cmd , True , stdin , stdout , stderr , bufsize , ** kwargs )
1162
1153
if self ._debug :
1163
1154
logger .info ('%s: %r' , debug_log , transport )
1164
1155
return transport , protocol
1165
1156
1166
- @coroutine
1167
- def subprocess_exec (self , protocol_factory , program , * args ,
1168
- stdin = subprocess .PIPE , stdout = subprocess .PIPE ,
1169
- stderr = subprocess .PIPE , universal_newlines = False ,
1170
- shell = False , bufsize = 0 , ** kwargs ):
1157
+ async def subprocess_exec (self , protocol_factory , program , * args ,
1158
+ stdin = subprocess .PIPE , stdout = subprocess .PIPE ,
1159
+ stderr = subprocess .PIPE , universal_newlines = False ,
1160
+ shell = False , bufsize = 0 , ** kwargs ):
1171
1161
if universal_newlines :
1172
1162
raise ValueError ("universal_newlines must be False" )
1173
1163
if shell :
@@ -1186,7 +1176,7 @@ def subprocess_exec(self, protocol_factory, program, *args,
1186
1176
# (password) and may be too long
1187
1177
debug_log = 'execute program %r' % program
1188
1178
self ._log_subprocess (debug_log , stdin , stdout , stderr )
1189
- transport = yield from self ._make_subprocess_transport (
1179
+ transport = await self ._make_subprocess_transport (
1190
1180
protocol , popen_args , False , stdin , stdout , stderr ,
1191
1181
bufsize , ** kwargs )
1192
1182
if self ._debug :
0 commit comments