Skip to content

Commit 29345a1

Browse files
authored
Merge pull request #470 from KTibow/patch-2
Add GH Actions
2 parents 75e483c + 1799a8c commit 29345a1

File tree

11 files changed

+406
-328
lines changed

11 files changed

+406
-328
lines changed

.github/workflows/flake8.yaml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: Python flake8
2+
3+
on:
4+
push:
5+
branches: [ main, master, dev, development ]
6+
pull_request:
7+
branches: [ main, master, dev, development ]
8+
9+
jobs:
10+
test:
11+
runs-on: ubuntu-latest
12+
strategy:
13+
matrix:
14+
python-version: [3.6, 3.7, 3.8, 3.9]
15+
steps:
16+
- uses: actions/checkout@v2
17+
- name: Set up Python ${{ matrix.python-version }}
18+
uses: actions/setup-python@v2
19+
with:
20+
python-version: ${{ matrix.python-version }}
21+
- name: Install dependencies
22+
run: |
23+
python -m pip install --upgrade pip
24+
pip install flake8 wemake-python-styleguide
25+
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
26+
- name: Lint with flake8
27+
run: |
28+
# stop the build if there are Python syntax errors or undefined names
29+
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
30+
# exit-zero treats all errors as warnings. ignore magic numbers and use double quotes and ignore numbers with zeroes before them.
31+
# and ignore lowercase hex numbers and ignore isort incorrect imports
32+
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=90 --ignore=WPS432,WPS339,WPS341,I --inline-quotes double --statistics

broadlink/__init__.py

Lines changed: 71 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -20,88 +20,88 @@
2020
0x2716: (sp2, "NEO PRO", "Ankuoo"),
2121
0x2717: (sp2, "NEO", "Ankuoo"),
2222
0x2719: (sp2, "SP2-compatible", "Honeywell"),
23-
0x271a: (sp2, "SP2-compatible", "Honeywell"),
23+
0x271A: (sp2, "SP2-compatible", "Honeywell"),
2424
0x2720: (sp2, "SP mini", "Broadlink"),
2525
0x2728: (sp2, "SP2-compatible", "URANT"),
2626
0x2733: (sp2, "SP3", "Broadlink"),
2727
0x2736: (sp2, "SP mini+", "Broadlink"),
28-
0x273e: (sp2, "SP mini", "Broadlink"),
28+
0x273E: (sp2, "SP mini", "Broadlink"),
2929
0x7530: (sp2, "SP2", "Broadlink (OEM)"),
3030
0x7539: (sp2, "SP2-IL", "Broadlink (OEM)"),
31-
0x753e: (sp2, "SP mini 3", "Broadlink"),
31+
0x753E: (sp2, "SP mini 3", "Broadlink"),
3232
0x7540: (sp2, "MP2", "Broadlink"),
33-
0X7544: (sp2, "SP2-CL", "Broadlink"),
33+
0x7544: (sp2, "SP2-CL", "Broadlink"),
3434
0x7546: (sp2, "SP2-UK/BR/IN", "Broadlink (OEM)"),
3535
0x7547: (sp2, "SC1", "Broadlink"),
3636
0x7918: (sp2, "SP2", "Broadlink (OEM)"),
3737
0x7919: (sp2, "SP2-compatible", "Honeywell"),
38-
0x791a: (sp2, "SP2-compatible", "Honeywell"),
39-
0x7d00: (sp2, "SP3-EU", "Broadlink (OEM)"),
40-
0x7d0d: (sp2, "SP mini 3", "Broadlink (OEM)"),
38+
0x791A: (sp2, "SP2-compatible", "Honeywell"),
39+
0x7D00: (sp2, "SP3-EU", "Broadlink (OEM)"),
40+
0x7D0D: (sp2, "SP mini 3", "Broadlink (OEM)"),
4141
0x9479: (sp2, "SP3S-US", "Broadlink"),
42-
0x947a: (sp2, "SP3S-EU", "Broadlink"),
43-
0x756c: (sp4, "SP4M", "Broadlink"),
42+
0x947A: (sp2, "SP3S-EU", "Broadlink"),
43+
0x756C: (sp4, "SP4M", "Broadlink"),
4444
0x7579: (sp4, "SP4L-EU", "Broadlink"),
4545
0x7583: (sp4, "SP mini 3", "Broadlink"),
46-
0x7d11: (sp4, "SP mini 3", "Broadlink"),
47-
0x648b: (sp4b, "SP4M-US", "Broadlink"),
46+
0x7D11: (sp4, "SP mini 3", "Broadlink"),
47+
0x648B: (sp4b, "SP4M-US", "Broadlink"),
4848
0x2712: (rm, "RM pro/pro+", "Broadlink"),
49-
0x272a: (rm, "RM pro", "Broadlink"),
49+
0x272A: (rm, "RM pro", "Broadlink"),
5050
0x2737: (rm, "RM mini 3", "Broadlink"),
51-
0x273d: (rm, "RM pro", "Broadlink"),
52-
0x277c: (rm, "RM home", "Broadlink"),
51+
0x273D: (rm, "RM pro", "Broadlink"),
52+
0x277C: (rm, "RM home", "Broadlink"),
5353
0x2783: (rm, "RM home", "Broadlink"),
5454
0x2787: (rm, "RM pro", "Broadlink"),
55-
0x278b: (rm, "RM plus", "Broadlink"),
56-
0x278f: (rm, "RM mini", "Broadlink"),
55+
0x278B: (rm, "RM plus", "Broadlink"),
56+
0x278F: (rm, "RM mini", "Broadlink"),
5757
0x2797: (rm, "RM pro+", "Broadlink"),
58-
0x279d: (rm, "RM pro+", "Broadlink"),
59-
0x27a1: (rm, "RM plus", "Broadlink"),
60-
0x27a6: (rm, "RM plus", "Broadlink"),
61-
0x27a9: (rm, "RM pro+", "Broadlink"),
62-
0x27c2: (rm, "RM mini 3", "Broadlink"),
63-
0x27c3: (rm, "RM pro+", "Broadlink"),
64-
0x27c7: (rm, "RM mini 3", "Broadlink"),
65-
0x27cc: (rm, "RM mini 3", "Broadlink"),
66-
0x27cd: (rm, "RM mini 3", "Broadlink"),
67-
0x27d0: (rm, "RM mini 3", "Broadlink"),
68-
0x27d1: (rm, "RM mini 3", "Broadlink"),
69-
0x27de: (rm, "RM mini 3", "Broadlink"),
70-
0x51da: (rm4, "RM4 mini", "Broadlink"),
71-
0x5f36: (rm4, "RM mini 3", "Broadlink"),
58+
0x279D: (rm, "RM pro+", "Broadlink"),
59+
0x27A1: (rm, "RM plus", "Broadlink"),
60+
0x27A6: (rm, "RM plus", "Broadlink"),
61+
0x27A9: (rm, "RM pro+", "Broadlink"),
62+
0x27C2: (rm, "RM mini 3", "Broadlink"),
63+
0x27C3: (rm, "RM pro+", "Broadlink"),
64+
0x27C7: (rm, "RM mini 3", "Broadlink"),
65+
0x27CC: (rm, "RM mini 3", "Broadlink"),
66+
0x27CD: (rm, "RM mini 3", "Broadlink"),
67+
0x27D0: (rm, "RM mini 3", "Broadlink"),
68+
0x27D1: (rm, "RM mini 3", "Broadlink"),
69+
0x27DE: (rm, "RM mini 3", "Broadlink"),
70+
0x51DA: (rm4, "RM4 mini", "Broadlink"),
71+
0x5F36: (rm4, "RM mini 3", "Broadlink"),
7272
0x6026: (rm4, "RM4 pro", "Broadlink"),
7373
0x6070: (rm4, "RM4C mini", "Broadlink"),
74-
0x610e: (rm4, "RM4 mini", "Broadlink"),
75-
0x610f: (rm4, "RM4C mini", "Broadlink"),
76-
0x61a2: (rm4, "RM4 pro", "Broadlink"),
77-
0x62bc: (rm4, "RM4 mini", "Broadlink"),
78-
0x62be: (rm4, "RM4C mini", "Broadlink"),
79-
0x648d: (rm4, "RM4 mini", "Broadlink"),
80-
0x649b: (rm4, "RM4 pro", "Broadlink"),
81-
0x653a: (rm4, "RM4 mini", "Broadlink"),
74+
0x610E: (rm4, "RM4 mini", "Broadlink"),
75+
0x610F: (rm4, "RM4C mini", "Broadlink"),
76+
0x61A2: (rm4, "RM4 pro", "Broadlink"),
77+
0x62BC: (rm4, "RM4 mini", "Broadlink"),
78+
0x62BE: (rm4, "RM4C mini", "Broadlink"),
79+
0x648D: (rm4, "RM4 mini", "Broadlink"),
80+
0x649B: (rm4, "RM4 pro", "Broadlink"),
81+
0x653A: (rm4, "RM4 mini", "Broadlink"),
8282
0x2714: (a1, "e-Sensor", "Broadlink"),
83-
0x4eb5: (mp1, "MP1-1K4S", "Broadlink"),
84-
0x4ef7: (mp1, "MP1-1K4S", "Broadlink (OEM)"),
85-
0x4f1b: (mp1, "MP1-1K3S2U", "Broadlink (OEM)"),
86-
0x4f65: (mp1, "MP1-1K3S2U", "Broadlink"),
83+
0x4EB5: (mp1, "MP1-1K4S", "Broadlink"),
84+
0x4EF7: (mp1, "MP1-1K4S", "Broadlink (OEM)"),
85+
0x4F1B: (mp1, "MP1-1K3S2U", "Broadlink (OEM)"),
86+
0x4F65: (mp1, "MP1-1K3S2U", "Broadlink"),
8787
0x5043: (lb1, "SB800TD", "Broadlink (OEM)"),
88-
0x504e: (lb1, "LB1", "Broadlink"),
89-
0x60c7: (lb1, "LB1", "Broadlink"),
90-
0x60c8: (lb1, "LB1", "Broadlink"),
88+
0x504E: (lb1, "LB1", "Broadlink"),
89+
0x60C7: (lb1, "LB1", "Broadlink"),
90+
0x60C8: (lb1, "LB1", "Broadlink"),
9191
0x6112: (lb1, "LB1", "Broadlink"),
9292
0x2722: (S1C, "S2KIT", "Broadlink"),
93-
0x4ead: (hysen, "HY02B05H", "Hysen"),
94-
0x4e4d: (dooya, "DT360E-45/20", "Dooya"),
95-
0x51e3: (bg1, "BG800/BG900", "BG Electrical"),
93+
0x4EAD: (hysen, "HY02B05H", "Hysen"),
94+
0x4E4D: (dooya, "DT360E-45/20", "Dooya"),
95+
0x51E3: (bg1, "BG800/BG900", "BG Electrical"),
9696
}
9797

9898

9999
def gendevice(
100-
dev_type: int,
101-
host: Tuple[str, int],
102-
mac: Union[bytes, str],
103-
name: str = None,
104-
is_locked: bool = None,
100+
dev_type: int,
101+
host: Tuple[str, int],
102+
mac: Union[bytes, str],
103+
name: str = None,
104+
is_locked: bool = None,
105105
) -> device:
106106
"""Generate a device."""
107107
try:
@@ -122,10 +122,10 @@ def gendevice(
122122

123123

124124
def hello(
125-
host: str,
126-
port: int = 80,
127-
timeout: int = 10,
128-
local_ip_address: str = None,
125+
host: str,
126+
port: int = 80,
127+
timeout: int = 10,
128+
local_ip_address: str = None,
129129
) -> device:
130130
"""Direct device discovery.
131131
@@ -138,31 +138,27 @@ def hello(
138138

139139

140140
def discover(
141-
timeout: int = 10,
142-
local_ip_address: str = None,
143-
discover_ip_address: str = '255.255.255.255',
144-
discover_ip_port: int = 80,
141+
timeout: int = 10,
142+
local_ip_address: str = None,
143+
discover_ip_address: str = "255.255.255.255",
144+
discover_ip_port: int = 80,
145145
) -> List[device]:
146146
"""Discover devices connected to the local network."""
147-
responses = scan(
148-
timeout, local_ip_address, discover_ip_address, discover_ip_port
149-
)
147+
responses = scan(timeout, local_ip_address, discover_ip_address, discover_ip_port)
150148
return [gendevice(*resp) for resp in responses]
151149

152150

153151
def xdiscover(
154-
timeout: int = 10,
155-
local_ip_address: str = None,
156-
discover_ip_address: str = '255.255.255.255',
157-
discover_ip_port: int = 80,
152+
timeout: int = 10,
153+
local_ip_address: str = None,
154+
discover_ip_address: str = "255.255.255.255",
155+
discover_ip_port: int = 80,
158156
) -> Generator[device, None, None]:
159157
"""Discover devices connected to the local network.
160158
161159
This function returns a generator that yields devices instantly.
162160
"""
163-
responses = scan(
164-
timeout, local_ip_address, discover_ip_address, discover_ip_port
165-
)
161+
responses = scan(timeout, local_ip_address, discover_ip_address, discover_ip_port)
166162
for resp in responses:
167163
yield gendevice(*resp)
168164

@@ -191,13 +187,12 @@ def setup(ssid: str, password: str, security_mode: int) -> None:
191187
payload[0x85] = pass_length # Character length of password
192188
payload[0x86] = security_mode # Type of encryption
193189

194-
checksum = sum(payload, 0xbeaf) & 0xffff
195-
payload[0x20] = checksum & 0xff # Checksum 1 position
190+
checksum = sum(payload, 0xBEAF) & 0xFFFF
191+
payload[0x20] = checksum & 0xFF # Checksum 1 position
196192
payload[0x21] = checksum >> 8 # Checksum 2 position
197193

198-
sock = socket.socket(socket.AF_INET, # Internet
199-
socket.SOCK_DGRAM) # UDP
194+
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Internet # UDP
200195
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
201196
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
202-
sock.sendto(payload, ('255.255.255.255', 80))
197+
sock.sendto(payload, ("255.255.255.255", 80))
203198
sock.close()

broadlink/alarm.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,42 @@ class S1C(device):
77
"""Controls a Broadlink S1C."""
88

99
_SENSORS_TYPES = {
10-
0x31: 'Door Sensor', # 49 as hex
11-
0x91: 'Key Fob', # 145 as hex, as serial on fob corpse
12-
0x21: 'Motion Sensor' # 33 as hex
10+
0x31: "Door Sensor", # 49 as hex
11+
0x91: "Key Fob", # 145 as hex, as serial on fob corpse
12+
0x21: "Motion Sensor", # 33 as hex
1313
}
1414

1515
def __init__(self, *args, **kwargs) -> None:
1616
"""Initialize the controller."""
1717
device.__init__(self, *args, **kwargs)
18-
self.type = 'S1C'
18+
self.type = "S1C"
1919

2020
def get_sensors_status(self) -> dict:
2121
"""Return the state of the sensors."""
2222
packet = bytearray(16)
2323
packet[0] = 0x06 # 0x06 - get sensors info, 0x07 - probably add sensors
24-
response = self.send_packet(0x6a, packet)
24+
response = self.send_packet(0x6A, packet)
2525
check_error(response[0x22:0x24])
2626
payload = self.decrypt(response[0x38:])
2727
if not payload:
2828
return None
2929
count = payload[0x4]
3030
sensor_data = payload[0x6:]
3131
sensors = [
32-
bytearray(sensor_data[i * 83:(i + 1) * 83])
32+
bytearray(sensor_data[i * 83 : (i + 1) * 83])
3333
for i in range(len(sensor_data) // 83)
3434
]
3535
return {
36-
'count': count,
37-
'sensors': [
36+
"count": count,
37+
"sensors": [
3838
{
39-
'status': sensor[0],
40-
'name': sensor[4:26].decode().strip('\x00'),
41-
'type': self._SENSORS_TYPES.get(sensor[3], 'Unknown'),
42-
'order': sensor[1],
43-
'serial': sensor[26:30].hex(),
39+
"status": sensor[0],
40+
"name": sensor[4:26].decode().strip("\x00"),
41+
"type": self._SENSORS_TYPES.get(sensor[3], "Unknown"),
42+
"order": sensor[1],
43+
"serial": sensor[26:30].hex(),
4444
}
4545
for sensor in sensors
4646
if any(sensor[26:30])
47-
]
47+
],
4848
}

0 commit comments

Comments
 (0)