Skip to content

Commit 7428044

Browse files
committed
Fixes for newer python versions.
1 parent c422ebe commit 7428044

File tree

26 files changed

+209
-188
lines changed

26 files changed

+209
-188
lines changed

paradox/connections/protocols.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,21 @@ def __init__(self, handler: ConnectionHandler):
3737

3838
self.handler = handler
3939

40-
self._closed = asyncio.get_event_loop().create_future()
40+
self._closed: asyncio.Future = None # type: ignore[assignment]
4141
self.buffer = b""
4242

4343
def connection_made(self, transport):
44+
self._closed = asyncio.get_running_loop().create_future()
4445
self.transport = transport
4546

4647
self.handler.on_connection()
4748

4849
def is_active(self) -> bool:
49-
return bool(self.transport) and not self._closed.done()
50+
return (
51+
bool(self.transport)
52+
and self._closed is not None
53+
and not self._closed.done()
54+
)
5055

5156
def check_active(self):
5257
if not self.is_active():
@@ -60,7 +65,8 @@ async def close(self):
6065
logger.exception("Connection transport close raised Exception")
6166
self.transport = None
6267

63-
await asyncio.wait_for(self._closed, timeout=cfg.IO_TIMEOUT)
68+
if self._closed is not None:
69+
await asyncio.wait_for(self._closed, timeout=cfg.IO_TIMEOUT)
6470

6571
@abstractmethod
6672
def send_message(self, message):
@@ -71,7 +77,7 @@ def connection_lost(self, exc):
7177
self.buffer = b""
7278
self.transport = None
7379

74-
if not self._closed.done():
80+
if self._closed is not None and not self._closed.done():
7581
if exc is None:
7682
self._closed.set_result(None)
7783
else:
@@ -91,7 +97,7 @@ def __del__(self):
9197
# Prevent reports about unhandled exceptions.
9298
# Better than self._closed._log_traceback = False hack
9399
closed = self._closed
94-
if closed.done() and not closed.cancelled():
100+
if closed is not None and closed.done() and not closed.cancelled():
95101
closed.exception()
96102

97103

paradox/data/memory_storage.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import logging
21
from collections import defaultdict
2+
import logging
33
from typing import Callable
44

55
from paradox.config import config as cfg
@@ -57,7 +57,7 @@ def update_container_object(self, container_name: str, key: str, changes: dict):
5757
): # function to make new value from the old one
5858
try:
5959
property_value = property_value(old)
60-
except:
60+
except Exception:
6161
logger.exception(
6262
'Exception caught during property "%s" convert. Ignoring',
6363
property_name,

paradox/event.py

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
from collections import namedtuple
2+
from copy import copy
13
import datetime
4+
from enum import Enum
25
import logging
36
import time
47
import typing
5-
from collections import namedtuple
6-
from copy import copy
7-
from enum import Enum
88

99
from construct import Container
1010

@@ -70,7 +70,7 @@ def __init__(self, label_provider=None):
7070
if label_provider is not None:
7171
self.label_provider = label_provider
7272
else:
73-
self.label_provider = lambda type, value: "[{}:{}]".format(type, value)
73+
self.label_provider = lambda type, value: f"[{type}:{value}]"
7474

7575
def __repr__(self):
7676
lvars = {}
@@ -81,11 +81,7 @@ def __repr__(self):
8181
str(self.__class__)
8282
+ "\n"
8383
+ "\n".join(
84-
(
85-
"{} = {}".format(item, lvars[item])
86-
for item in lvars
87-
if not item.startswith("_")
88-
)
84+
f"{item} = {lvars[item]}" for item in lvars if not item.startswith("_")
8985
)
9086
)
9187

@@ -126,7 +122,7 @@ def call_hook(self, *args, **kwargs):
126122
kwargs["event"] = self
127123
try:
128124
self.hook_fn(*args, **kwargs)
129-
except:
125+
except Exception:
130126
logger.exception("Failed to call event hook")
131127

132128

@@ -138,9 +134,9 @@ def __init__(self, event: Container, event_map: dict, label_provider=None):
138134

139135
# parse event map
140136
if raw.event.major not in event_map:
141-
raise AssertionError("Unknown event major: {}".format(raw))
137+
raise AssertionError(f"Unknown event major: {raw}")
142138

143-
super(LiveEvent, self).__init__(label_provider=label_provider)
139+
super().__init__(label_provider=label_provider)
144140

145141
self.major = raw.event.major # Event major code
146142
self.minor = raw.event.minor # Event minor code
@@ -177,9 +173,7 @@ def __init__(self, event: Container, event_map: dict, label_provider=None):
177173
for k in sub:
178174
if k == "message":
179175
event_map[k] = (
180-
"{}: {}".format(event_map[k], sub[k])
181-
if k in event_map
182-
else sub[k]
176+
f"{event_map[k]}: {sub[k]}" if k in event_map else sub[k]
183177
)
184178
elif isinstance(sub[k], typing.List): # for tags or other lists
185179
event_map[k] = event_map.get(k, []) + sub[k]

paradox/hardware/panel.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
import binascii
2-
import inspect
3-
import logging
4-
import typing
51
from abc import abstractmethod
2+
import binascii
63
from collections import defaultdict, namedtuple
4+
import inspect
75
from itertools import chain
6+
import logging
87
from time import time
8+
import typing
99

1010
from construct import Construct, Container, EnumIntegerString
1111

1212
from paradox.config import config as cfg, get_limits_for_type
1313
from paradox.lib.utils import construct_free, sanitize_key
1414

15-
from ..lib import ps
1615
from . import parsers
16+
from ..lib import ps
1717

1818
logger = logging.getLogger("PAI").getChild(__name__)
1919

@@ -54,7 +54,7 @@ def get_message(self, name) -> Construct:
5454
if name in clsmembers:
5555
return clsmembers[name]
5656
else:
57-
raise ResourceWarning("{} parser not found".format(name))
57+
raise ResourceWarning(f"{name} parser not found")
5858

5959
@staticmethod
6060
def get_error_message(error_code) -> str:
@@ -170,7 +170,9 @@ async def load_definitions(self):
170170
if definition != "disabled":
171171
enabled_indexes.add(index)
172172

173-
cfg.LIMITS[elem_type] = get_limits_for_type(elem_type, list(enabled_indexes))
173+
cfg.LIMITS[elem_type] = get_limits_for_type(
174+
elem_type, list(enabled_indexes)
175+
)
174176
cfg.LIMITS[elem_type] = list(
175177
set(cfg.LIMITS[elem_type]).intersection(enabled_indexes)
176178
)
@@ -339,10 +341,8 @@ def handle_status(message: Container, parser_map):
339341
if cfg.LOGGING_DUMP_MESSAGES:
340342
logger.debug(f"Status parsed({mvars.address}): {res}")
341343
return res
342-
except:
343-
logger.exception(
344-
"Unable to parse RAM Status Block ({})".format(mvars.address)
345-
)
344+
except Exception:
345+
logger.exception(f"Unable to parse RAM Status Block ({mvars.address})")
346346
return
347347

348348
@abstractmethod

paradox/hardware/spectra_magellan/panel.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# -*- coding: utf-8 -*-
2-
31
import asyncio
42
import binascii
53
import inspect
@@ -10,10 +8,11 @@
108

119
from paradox.config import config as cfg
1210
from paradox.exceptions import AuthenticationFailed, StatusRequestException
11+
1312
from . import parsers
13+
from ..panel import Panel as PanelBase
1414
from .event import event_map
1515
from .property import property_map
16-
from ..panel import Panel as PanelBase
1716

1817
logger = logging.getLogger("PAI").getChild(__name__)
1918

@@ -43,7 +42,8 @@ class Panel(PanelBase):
4342
"status_base2": 0x1FE0,
4443
"definitions": {
4544
"zone": {"addresses": [range(0x730, 0x7A0, 0x03)]},
46-
"pgm": {"addresses": [range(0x7A0, 0x800, 0x06)]}},
45+
"pgm": {"addresses": [range(0x7A0, 0x800, 0x06)]},
46+
},
4747
"labels": {
4848
"zone": {"label_offset": 0, "addresses": [range(0x010, 0x210, 0x10)]},
4949
"pgm": {
@@ -64,7 +64,7 @@ class Panel(PanelBase):
6464
def __init__(
6565
self, core, start_communication_response, variable_message_length=True
6666
):
67-
super(Panel, self).__init__(core, variable_message_length)
67+
super().__init__(core, variable_message_length)
6868

6969
self.settings = start_communication_response.fields.value
7070

@@ -101,17 +101,17 @@ async def dump_memory_to_file(self, file, range_, ram=False):
101101
else:
102102
args = dict(address=address)
103103

104-
logger.info("Dumping %s: address %x" % (mem_type, address))
104+
logger.info(f"Dumping {mem_type}: address {address:x}")
105105

106106
reply = await self.core.send_wait(
107107
parsers.ReadEEPROM,
108108
args,
109-
reply_expected=lambda m: m.fields.value.po.command == 0x5
110-
and m.fields.value.address == address,
109+
reply_expected=lambda m, a=address: m.fields.value.po.command == 0x5
110+
and m.fields.value.address == a,
111111
)
112112

113113
if reply is None:
114-
logger.error("Could not read %s: address %x" % (mem_type, address))
114+
logger.error(f"Could not read {mem_type}: address {address:x}")
115115
return
116116

117117
data = reply.fields.value.data
@@ -126,7 +126,7 @@ def get_message(self, name: str) -> Construct:
126126
except ResourceWarning:
127127
pass
128128

129-
return super(Panel, self).get_message(name)
129+
return super().get_message(name)
130130

131131
def parse_message(
132132
self, message: bytes, direction="topanel"
@@ -135,7 +135,7 @@ def parse_message(
135135
if message is None or len(message) == 0:
136136
return None
137137

138-
parent_parsed = super(Panel, self).parse_message(message, direction)
138+
parent_parsed = super().parse_message(message, direction)
139139
if parent_parsed:
140140
return parent_parsed
141141

@@ -174,9 +174,11 @@ def parse_message(
174174

175175
except ChecksumError as e:
176176
logger.error(
177-
"ChecksumError %s, message: %s" % (str(e), binascii.hexlify(message))
177+
"ChecksumError {}, message: {}".format(
178+
str(e), binascii.hexlify(message)
179+
)
178180
)
179-
except:
181+
except Exception:
180182
logger.exception(
181183
"Exception parsing message: %s" % (binascii.hexlify(message))
182184
)

paradox/interfaces/__init__.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
# -*- coding: utf-8 -*-
2-
31
import asyncio
42
import logging
53
import threading
4+
from typing import Optional
65

76
logger = logging.getLogger("PAI").getChild(__name__)
87

@@ -22,7 +21,7 @@ def __init__(self, alarm):
2221
super().__init__(alarm)
2322

2423
self._loop = asyncio.get_event_loop()
25-
self._running_task = None # type: asyncio.Task
24+
self._running_task: Optional[asyncio.Task] = None
2625

2726
def start(self):
2827
self._running_task = self._loop.create_task(self.run())
@@ -56,7 +55,7 @@ def run(self):
5655
except (KeyboardInterrupt, SystemExit):
5756
logger.debug("Interface loop stopping")
5857
self.stop()
59-
except:
58+
except Exception:
6059
logger.exception("Interface loop")
6160

6261
def _run(self):

0 commit comments

Comments
 (0)