Skip to content

Commit 7df692f

Browse files
authored
Merge pull request #642 from ably/more-linting
Add more linting rules
2 parents f46c52d + 33b9d3c commit 7df692f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+326
-329
lines changed

ably/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
from ably.rest.rest import AblyRest
1+
import logging
2+
23
from ably.realtime.realtime import AblyRealtime
34
from ably.rest.auth import Auth
45
from ably.rest.push import Push
6+
from ably.rest.rest import AblyRest
57
from ably.types.capability import Capability
68
from ably.types.channelsubscription import PushChannelSubscription
79
from ably.types.device import DeviceDetails
810
from ably.types.options import Options, VCDiffDecoder
911
from ably.util.crypto import CipherParams
10-
from ably.util.exceptions import AblyException, AblyAuthException, IncompatibleClientIdException
12+
from ably.util.exceptions import AblyAuthException, AblyException, IncompatibleClientIdException
1113
from ably.vcdiff.default_vcdiff_decoder import AblyVCDiffDecoder
1214

13-
import logging
14-
1515
logger = logging.getLogger(__name__)
1616
logger.addHandler(logging.NullHandler())
1717

ably/http/http.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import functools
2+
import json
23
import logging
34
import time
4-
import json
55
from urllib.parse import urljoin
66

77
import httpx
88
import msgpack
99

10-
from ably.rest.auth import Auth
1110
from ably.http.httputils import HttpUtils
11+
from ably.rest.auth import Auth
1212
from ably.transport.defaults import Defaults
1313
from ably.util.exceptions import AblyException
14-
from ably.util.helper import is_token_error, extract_url_params
14+
from ably.util.helper import extract_url_params, is_token_error
1515

1616
log = logging.getLogger(__name__)
1717

@@ -188,14 +188,12 @@ async def make_request(self, method, path, version=None, headers=None, body=None
188188

189189
hosts = self.get_rest_hosts()
190190
for retry_count, host in enumerate(hosts):
191-
def should_stop_retrying():
191+
def should_stop_retrying(retry_count=retry_count):
192192
time_passed = time.time() - requested_at
193193
# if it's the last try or cumulative timeout is done, we stop retrying
194194
return retry_count == len(hosts) - 1 or time_passed > http_max_retry_duration
195195

196-
base_url = "%s://%s:%d" % (self.preferred_scheme,
197-
host,
198-
self.preferred_port)
196+
base_url = f"{self.preferred_scheme}://{host}:{self.preferred_port}"
199197
url = urljoin(base_url, path)
200198

201199
(clean_url, url_params) = extract_url_params(url)

ably/http/httputils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def default_headers(version=None):
4242
version = ably.api_version
4343
return {
4444
"X-Ably-Version": version,
45-
"Ably-Agent": 'ably-python/%s python/%s' % (ably.lib_version, platform.python_version())
45+
"Ably-Agent": f'ably-python/{ably.lib_version} python/{platform.python_version()}'
4646
}
4747

4848
@staticmethod

ably/http/paginatedresult.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
def format_time_param(t):
1212
try:
13-
return '%d' % (calendar.timegm(t.utctimetuple()) * 1000)
13+
return f'{calendar.timegm(t.utctimetuple()) * 1000}'
1414
except Exception:
1515
return str(t)
1616

@@ -33,7 +33,7 @@ def format_params(params=None, direction=None, start=None, end=None, limit=None,
3333
if limit:
3434
if limit > 1000:
3535
raise ValueError("The maximum allowed limit is 1000")
36-
params['limit'] = '%d' % limit
36+
params['limit'] = f'{limit}'
3737

3838
if 'start' in params and 'end' in params and params['start'] > params['end']:
3939
raise ValueError("'end' parameter has to be greater than or equal to 'start'")

ably/realtime/connection.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
from __future__ import annotations
2+
23
import functools
34
import logging
5+
from typing import TYPE_CHECKING
6+
47
from ably.realtime.connectionmanager import ConnectionManager
58
from ably.types.connectiondetails import ConnectionDetails
69
from ably.types.connectionstate import ConnectionEvent, ConnectionState, ConnectionStateChange
710
from ably.util.eventemitter import EventEmitter
811
from ably.util.exceptions import AblyException
9-
from typing import TYPE_CHECKING, Optional
1012

1113
if TYPE_CHECKING:
1214
from ably.realtime.realtime import AblyRealtime
@@ -39,7 +41,7 @@ class Connection(EventEmitter): # RTN4
3941

4042
def __init__(self, realtime: AblyRealtime):
4143
self.__realtime = realtime
42-
self.__error_reason: Optional[AblyException] = None
44+
self.__error_reason: AblyException | None = None
4345
self.__state = ConnectionState.CONNECTING if realtime.options.auto_connect else ConnectionState.INITIALIZED
4446
self.__connection_manager = ConnectionManager(self.__realtime, self.state)
4547
self.__connection_manager.on('connectionstate', self._on_state_update) # RTN4a
@@ -102,7 +104,7 @@ def state(self) -> ConnectionState:
102104

103105
# RTN25
104106
@property
105-
def error_reason(self) -> Optional[AblyException]:
107+
def error_reason(self) -> AblyException | None:
106108
"""An object describing the last error which occurred on the channel, if any."""
107109
return self.__error_reason
108110

@@ -115,5 +117,5 @@ def connection_manager(self) -> ConnectionManager:
115117
return self.__connection_manager
116118

117119
@property
118-
def connection_details(self) -> Optional[ConnectionDetails]:
120+
def connection_details(self) -> ConnectionDetails | None:
119121
return self.__connection_manager.connection_details

ably/realtime/connectionmanager.py

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
from __future__ import annotations
2-
import logging
2+
33
import asyncio
4+
import logging
5+
from datetime import datetime
6+
from queue import Queue
7+
from typing import TYPE_CHECKING
8+
49
import httpx
5-
from ably.transport.websockettransport import WebSocketTransport, ProtocolMessageAction
10+
611
from ably.transport.defaults import Defaults
12+
from ably.transport.websockettransport import ProtocolMessageAction, WebSocketTransport
13+
from ably.types.connectiondetails import ConnectionDetails
714
from ably.types.connectionerrors import ConnectionErrors
815
from ably.types.connectionstate import ConnectionEvent, ConnectionState, ConnectionStateChange
916
from ably.types.tokendetails import TokenDetails
10-
from ably.util.exceptions import AblyException, IncompatibleClientIdException
1117
from ably.util.eventemitter import EventEmitter
12-
from datetime import datetime
13-
from ably.util.helper import get_random_id, Timer, is_token_error
14-
from typing import Optional, TYPE_CHECKING
15-
from ably.types.connectiondetails import ConnectionDetails
16-
from queue import Queue
18+
from ably.util.exceptions import AblyException, IncompatibleClientIdException
19+
from ably.util.helper import Timer, get_random_id, is_token_error
1720

1821
if TYPE_CHECKING:
1922
from ably.realtime.realtime import AblyRealtime
@@ -26,23 +29,23 @@ def __init__(self, realtime: AblyRealtime, initial_state):
2629
self.options = realtime.options
2730
self.__ably = realtime
2831
self.__state: ConnectionState = initial_state
29-
self.__ping_future: Optional[asyncio.Future] = None
32+
self.__ping_future: asyncio.Future | None = None
3033
self.__timeout_in_secs: float = self.options.realtime_request_timeout / 1000
31-
self.transport: Optional[WebSocketTransport] = None
32-
self.__connection_details: Optional[ConnectionDetails] = None
33-
self.connection_id: Optional[str] = None
34+
self.transport: WebSocketTransport | None = None
35+
self.__connection_details: ConnectionDetails | None = None
36+
self.connection_id: str | None = None
3437
self.__fail_state = ConnectionState.DISCONNECTED
35-
self.transition_timer: Optional[Timer] = None
36-
self.suspend_timer: Optional[Timer] = None
37-
self.retry_timer: Optional[Timer] = None
38-
self.connect_base_task: Optional[asyncio.Task] = None
39-
self.disconnect_transport_task: Optional[asyncio.Task] = None
38+
self.transition_timer: Timer | None = None
39+
self.suspend_timer: Timer | None = None
40+
self.retry_timer: Timer | None = None
41+
self.connect_base_task: asyncio.Task | None = None
42+
self.disconnect_transport_task: asyncio.Task | None = None
4043
self.__fallback_hosts: list[str] = self.options.get_fallback_realtime_hosts()
4144
self.queued_messages: Queue = Queue()
42-
self.__error_reason: Optional[AblyException] = None
45+
self.__error_reason: AblyException | None = None
4346
super().__init__()
4447

45-
def enact_state_change(self, state: ConnectionState, reason: Optional[AblyException] = None) -> None:
48+
def enact_state_change(self, state: ConnectionState, reason: AblyException | None = None) -> None:
4649
current_state = self.__state
4750
log.debug(f'ConnectionManager.enact_state_change(): {current_state} -> {state}; reason = {reason}')
4851
self.__state = state
@@ -122,7 +125,7 @@ async def ping(self) -> float:
122125
try:
123126
response = await self.__ping_future
124127
except asyncio.CancelledError:
125-
raise AblyException("Ping request cancelled due to request timeout", 504, 50003)
128+
raise AblyException("Ping request cancelled due to request timeout", 504, 50003) from None
126129
return response
127130

128131
self.__ping_future = asyncio.Future()
@@ -136,14 +139,14 @@ async def ping(self) -> float:
136139
try:
137140
await asyncio.wait_for(self.__ping_future, self.__timeout_in_secs)
138141
except asyncio.TimeoutError:
139-
raise AblyException("Timeout waiting for ping response", 504, 50003)
142+
raise AblyException("Timeout waiting for ping response", 504, 50003) from None
140143

141144
ping_end_time = datetime.now().timestamp()
142145
response_time_ms = (ping_end_time - ping_start_time) * 1000
143146
return round(response_time_ms, 2)
144147

145148
def on_connected(self, connection_details: ConnectionDetails, connection_id: str,
146-
reason: Optional[AblyException] = None) -> None:
149+
reason: AblyException | None = None) -> None:
147150
self.__fail_state = ConnectionState.DISCONNECTED
148151

149152
self.__connection_details = connection_details
@@ -233,15 +236,15 @@ async def on_closed(self) -> None:
233236
def on_channel_message(self, msg: dict) -> None:
234237
self.__ably.channels._on_channel_message(msg)
235238

236-
def on_heartbeat(self, id: Optional[str]) -> None:
239+
def on_heartbeat(self, id: str | None) -> None:
237240
if self.__ping_future:
238241
# Resolve on heartbeat from ping request.
239242
if self.__ping_id == id:
240243
if not self.__ping_future.cancelled():
241244
self.__ping_future.set_result(None)
242245
self.__ping_future = None
243246

244-
def deactivate_transport(self, reason: Optional[AblyException] = None):
247+
def deactivate_transport(self, reason: AblyException | None = None):
245248
self.transport = None
246249
self.notify_state(ConnectionState.DISCONNECTED, reason)
247250

@@ -275,7 +278,7 @@ def start_connect(self) -> None:
275278
self.start_transition_timer(ConnectionState.CONNECTING)
276279
self.connect_base_task = asyncio.create_task(self.connect_base())
277280

278-
async def connect_with_fallback_hosts(self, fallback_hosts: list) -> Optional[Exception]:
281+
async def connect_with_fallback_hosts(self, fallback_hosts: list) -> Exception | None:
279282
for host in fallback_hosts:
280283
try:
281284
if self.check_connection():
@@ -343,8 +346,8 @@ async def on_transport_failed(exception):
343346
except asyncio.CancelledError:
344347
return
345348

346-
def notify_state(self, state: ConnectionState, reason: Optional[AblyException] = None,
347-
retry_immediately: Optional[bool] = None) -> None:
349+
def notify_state(self, state: ConnectionState, reason: AblyException | None = None,
350+
retry_immediately: bool | None = None) -> None:
348351
# RTN15a
349352
retry_immediately = (retry_immediately is not False) and (
350353
state == ConnectionState.DISCONNECTED and self.__state == ConnectionState.CONNECTED)
@@ -383,7 +386,7 @@ def notify_state(self, state: ConnectionState, reason: Optional[AblyException] =
383386
self.fail_queued_messages(reason)
384387
self.ably.channels._propagate_connection_interruption(state, reason)
385388

386-
def start_transition_timer(self, state: ConnectionState, fail_state: Optional[ConnectionState] = None) -> None:
389+
def start_transition_timer(self, state: ConnectionState, fail_state: ConnectionState | None = None) -> None:
387390
log.debug(f'ConnectionManager.start_transition_timer(): transition state = {state}')
388391

389392
if self.transition_timer:
@@ -520,5 +523,5 @@ def state(self) -> ConnectionState:
520523
return self.__state
521524

522525
@property
523-
def connection_details(self) -> Optional[ConnectionDetails]:
526+
def connection_details(self) -> ConnectionDetails | None:
524527
return self.__connection_details

ably/realtime/realtime.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import logging
21
import asyncio
2+
import logging
33
from typing import Optional
4-
from ably.realtime.realtime_channel import Channels
4+
55
from ably.realtime.connection import Connection, ConnectionState
6+
from ably.realtime.realtime_channel import Channels
67
from ably.rest.rest import AblyRest
78

8-
99
log = logging.getLogger(__name__)
1010

1111

0 commit comments

Comments
 (0)