Skip to content

Commit 2d64523

Browse files
author
gic
committed
issue #85 async client/server enhancements
1 parent 0f07db4 commit 2d64523

File tree

3 files changed

+102
-238
lines changed

3 files changed

+102
-238
lines changed

CHANGES.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Changelog
22
=========
33

4-
* Add async client and server implementation for python >=3.5.
4+
* Add experimental async client and server implementation for python >=3.5.
55

66
* Add IPv6 bind support for client and server.
77

pyrad/client_async.py

Lines changed: 23 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,7 @@ async def __timeout_handler__(self):
4949
secs = (req['send_date'] - now).seconds
5050
if secs > self.timeout:
5151
if req['retries'] == self.retries:
52-
self.logger.debug(
53-
'[%s:%d] For request %d execute all retries.' % (
54-
self.server, self.port, id
55-
)
56-
)
52+
self.logger.debug('[%s:%d] For request %d execute all retries', self.server, self.port, id)
5753
req['future'].set_exception(
5854
TimeoutError('Timeout on Reply')
5955
)
@@ -62,12 +58,7 @@ async def __timeout_handler__(self):
6258
# Send again packet
6359
req['send_date'] = now
6460
req['retries'] += 1
65-
self.logger.debug(
66-
'[%s:%d] For request %d execute retry %d.' % (
67-
self.server, self.port, id,
68-
req['retries']
69-
)
70-
)
61+
self.logger.debug('[%s:%d] For request %d execute retry %d', self.server, self.port, id, req['retries'])
7162
self.transport.sendto(req['packet'].RequestPacket())
7263
elif next_weak_up > secs:
7364
next_weak_up = secs
@@ -84,9 +75,7 @@ async def __timeout_handler__(self):
8475

8576
def send_packet(self, packet, future):
8677
if packet.id in self.pending_requests:
87-
raise Exception('Packet with id %d already present' % (
88-
packet.id
89-
))
78+
raise Exception('Packet with id %d already present' % packet.id)
9079

9180
# Store packet on pending requests map
9281
self.pending_requests[packet.id] = {
@@ -104,11 +93,10 @@ def connection_made(self, transport):
10493
self.transport = transport
10594
socket = transport.get_extra_info('socket')
10695
self.logger.info(
107-
'[%s:%d] Transport created with binding in %s:%d.' % (
96+
'[%s:%d] Transport created with binding in %s:%d',
10897
self.server, self.port,
10998
socket.getsockname()[0],
11099
socket.getsockname()[1]
111-
)
112100
)
113101

114102
pre_loop = asyncio.get_event_loop()
@@ -120,23 +108,13 @@ def connection_made(self, transport):
120108
asyncio.set_event_loop(loop=pre_loop)
121109

122110
def error_received(self, exc):
123-
self.logger.error(
124-
'[%s:%d] Error received: %s.' % (
125-
self.server, self.port, exc
126-
)
127-
)
111+
self.logger.error('[%s:%d] Error received: %s', self.server, self.port, exc)
128112

129113
def connection_lost(self, exc):
130114
if exc:
131-
self.logger.warn(
132-
'[%s:%d] Connection lost: %s.' % (
133-
self.server, self.port, str(exc)
134-
)
135-
)
115+
self.logger.warn('[%s:%d] Connection lost: %s', self.server, self.port, str(exc))
136116
else:
137-
self.logger.info(
138-
'[%s:%d] Transport closed.' % (self.server, self.port)
139-
)
117+
self.logger.info('[%s:%d] Transport closed', self.server, self.port)
140118

141119
# noinspection PyUnusedLocal
142120
def datagram_received(self, data, addr):
@@ -155,32 +133,16 @@ def datagram_received(self, data, addr):
155133
# Remove request for map
156134
del self.pending_requests[reply.id]
157135
else:
158-
self.logger.warn(
159-
'[%s:%d] Received invalid reply for id %d. %s' % (
160-
self.server, self.port, reply.id,
161-
'Ignoring it.'
162-
)
163-
)
136+
self.logger.warn('[%s:%d] Ignore invalid reply for id %d. %s', self.server, self.port, reply.id)
164137
else:
165-
self.logger.warn(
166-
'[%s:%d] Received invalid reply: %d.\nIgnoring it.' % (
167-
self.server, self.port, data,
168-
)
169-
)
138+
self.logger.warn('[%s:%d] Ignore invalid reply: %d', self.server, self.port, data)
170139

171140
except Exception as exc:
172-
self.logger.error(
173-
'[%s:%d] Error on decode packet: %s.' % (
174-
self.server, self.port, exc
175-
)
176-
)
177-
pass
141+
self.logger.error('[%s:%d] Error on decode packet: %s', self.server, self.port, exc)
178142

179143
async def close_transport(self):
180144
if self.transport:
181-
self.logger.debug(
182-
'[%s:%d] Closing transport...' % (self.server, self.port)
183-
)
145+
self.logger.debug('[%s:%d] Closing transport...', self.server, self.port)
184146
self.transport.close()
185147
self.transport = None
186148
if self.timeout_future:
@@ -193,10 +155,7 @@ def create_id(self):
193155
return self.packet_id
194156

195157
def __str__(self):
196-
return 'DatagramProtocolClient: { server: %s, port: %d }' % (
197-
self.server,
198-
self.port
199-
)
158+
return 'DatagramProtocolClient(server?=%s, port=%d)' % (self.server, self.port)
200159

201160
# Used as protocol_factory
202161
def __call__(self):
@@ -222,20 +181,20 @@ def __init__(self, server, auth_port=1812, acct_port=1813,
222181

223182
"""Constructor.
224183
225-
:param server: hostname or IP address of RADIUS server
226-
:type server: string
184+
:param server: hostname or IP address of RADIUS server
185+
:type server: string
227186
:param auth_port: port to use for authentication packets
228187
:type auth_port: integer
229188
:param acct_port: port to use for accounting packets
230189
:type acct_port: integer
231-
:param coa_port: port to use for CoA packets
232-
:type coa_port: integer
233-
:param secret: RADIUS secret
234-
:type secret: string
235-
:param dict: RADIUS dictionary
236-
:type dict: pyrad.dictionary.Dictionary
237-
:param loop: Python loop handler
238-
:type loop: asyncio event loop
190+
:param coa_port: port to use for CoA packets
191+
:type coa_port: integer
192+
:param secret: RADIUS secret
193+
:type secret: string
194+
:param dict: RADIUS dictionary
195+
:type dict: pyrad.dictionary.Dictionary
196+
:param loop: Python loop handler
197+
:type loop: asyncio event loop
239198
"""
240199
if not loop:
241200
self.loop = asyncio.get_event_loop()
@@ -422,7 +381,7 @@ def SendPacket(self, pkt):
422381
"""Send a packet to a RADIUS server.
423382
424383
:param pkt: the packet to send
425-
:type pkt: pyrad.packet.Packet
384+
:type pkt: pyrad.packet.Packet
426385
:return: Future related with packet to send
427386
:rtype: asyncio.Future
428387
"""

0 commit comments

Comments
 (0)