@@ -39,7 +39,7 @@ def draw_robot_position(self, col=(0xDA, 0x36, 0x25, 0xFF), radius=10):
39
39
def draw_room (self , room ):
40
40
self .draw .polygon (
41
41
self .vac_map ._virtual_to_pixel_list (room .get_room_bounds ()),
42
- tuple (random .choices (range (256 ), k = 4 )), # nosec B311
42
+ tuple (random .choices (range (256 ), k = 4 )), # noqa: S311
43
43
(255 , 255 , 0 , 128 ),
44
44
)
45
45
@@ -90,16 +90,14 @@ def get_room_name(self):
90
90
return self .data ["room_name" ]
91
91
return None
92
92
93
- def get_room_bounds (self , tuple = True ):
94
- r = list ()
95
- for i in range ( 0 , len ( self .data ["room_point_x" ]) ):
96
- if tuple :
97
- r .append ((self . data [ "room_point_x" ][ i ], self . data [ "room_point_y" ][ i ] ))
93
+ def get_room_bounds (self , use_tuple = True ):
94
+ bounds = []
95
+ for x , y in zip ( self . data [ "room_point_x" ], self .data ["room_point_y" ] ):
96
+ if use_tuple :
97
+ bounds .append ((x , y ))
98
98
else :
99
- r .append (
100
- list ([self .data ["room_point_x" ][i ], self .data ["room_point_y" ][i ]])
101
- )
102
- return r
99
+ bounds .append ([x , y ])
100
+ return bounds
103
101
104
102
def get_room_label_offset (self ):
105
103
bounds = self .get_room_bounds ()
@@ -113,7 +111,7 @@ def get_room_label_offset(self):
113
111
114
112
def get_xaiomi_vacuum_map_card_rooms (self ):
115
113
label_offset = self .get_room_label_offset ()
116
- ret = {
114
+ return {
117
115
"id" : self .get_room_id (),
118
116
"outline" : self .get_room_bounds (False ),
119
117
"label" : {
@@ -123,8 +121,6 @@ def get_xaiomi_vacuum_map_card_rooms(self):
123
121
},
124
122
}
125
123
126
- return ret
127
-
128
124
129
125
class VacMap :
130
126
MAP_FORMAT_YW_LASER = "yw_ls"
@@ -138,24 +134,22 @@ class VacMap:
138
134
PATH_RELOCATING = 0x40
139
135
PATH_VACUUMING = 0x0
140
136
141
- ALLOW_MAP_FORMATS = {MAP_FORMAT_YW_LASER , MAP_FORMAT_BV_LASER }
137
+ def __init__ (self , data_input ):
138
+ self .load_data (data_input )
142
139
143
- def __init__ (self , input ):
144
- self .load_data (input )
145
-
146
- def load_data (self , input ):
147
- self .data = json .loads (zlib .decompress (base64 .b64decode (input )))
140
+ def load_data (self , data_input ):
141
+ self .data = json .loads (zlib .decompress (base64 .b64decode (data_input )))
148
142
self .map_data = bytearray (base64 .b64decode (self .data ["MapData" ]))
149
143
self .map_bitmap = False
150
144
self .map_scale = 4
151
145
if "PointData" in self .data :
152
146
self .data ["PointData" ] = base64 .b64decode (self .data ["PointData" ])
153
147
self .data ["PointType" ] = base64 .b64decode (self .data ["PointType" ])
154
148
155
- def wss_update (self , input ):
149
+ def wss_update (self , data_input ):
156
150
existing_room_data = self .data ["room_zone_info" ]
157
151
158
- self .load_data (input )
152
+ self .load_data (data_input )
159
153
160
154
for i , room in enumerate (self .data ["room_zone_info" ]):
161
155
existing_room = next (
@@ -171,7 +165,7 @@ def wss_update(self, input):
171
165
def get_map_bitmap (self ):
172
166
"""Parse MapData into 8-Bit lightness (grayscale) bitmap, return it as bytes"""
173
167
self .map_bitmap = bytearray (b"" )
174
- for i in range (0 , len (self .map_data )):
168
+ for i in range (len (self .map_data )):
175
169
byte = self .map_data [i ]
176
170
177
171
self .map_bitmap .append (((byte & 192 ) >> 6 ) * 85 )
@@ -208,14 +202,13 @@ def get_map_image(self, black=(0x1C, 0x89, 0xE3), white=(0xFF, 0xFF, 0xFF)):
208
202
img .putdata (new_img_data )
209
203
del new_img_data
210
204
211
- img = img .resize (
205
+ return img .resize (
212
206
(
213
207
int ((self .get_map_width ()) * self .map_scale ),
214
208
int ((self .get_map_height ()) * self .map_scale ),
215
209
),
216
210
Image .NEAREST ,
217
211
)
218
- return img
219
212
220
213
def get_map_width (self ):
221
214
return self .data ["MapWidth" ]
@@ -231,29 +224,28 @@ def get_room_id_by_name(self, name):
231
224
room for room in self .data ["room_zone_info" ] if room ["room_name" ] == name
232
225
)["room_id" ]
233
226
234
- def get_room_by_id (self , id ):
227
+ def get_room_by_id (self , room_id ):
235
228
return VacMapRoom (
236
- next (room for room in self .data ["room_zone_info" ] if room ["room_id" ] == id )
229
+ next (
230
+ room
231
+ for room in self .data ["room_zone_info" ]
232
+ if room ["room_id" ] == room_id
233
+ ),
237
234
)
238
235
239
236
def get_rooms (self ):
240
- rooms = list ()
241
-
242
- for room in self .data ["room_zone_info" ]:
243
- rooms .append (VacMapRoom (room ))
244
-
245
- return rooms
237
+ return [VacMapRoom (room ) for room in self .data .get ("room_zone_info" )]
246
238
247
239
def get_room_by_name (self , name ):
248
- if id := self .get_room_id_by_name (name ):
249
- return self .get_room_by_id (id )
240
+ if r_id := self .get_room_id_by_name (name ):
241
+ return self .get_room_by_id (r_id )
250
242
return None
251
243
252
244
def get_charger_point_pixel (self ):
253
245
return self ._scale_up_pixel_coords (
254
246
self ._pixel_apply_offset (
255
- (self .data ["ChargerPoint" ][0 ], self .data ["ChargerPoint" ][1 ])
256
- )
247
+ (self .data ["ChargerPoint" ][0 ], self .data ["ChargerPoint" ][1 ]),
248
+ ),
257
249
)
258
250
259
251
def get_charger_point_virtual (self ):
@@ -270,25 +262,24 @@ def get_robot_position_virtual(self):
270
262
271
263
def get_path (self ):
272
264
if "PointData" not in self .data :
273
- return list (), list ()
265
+ return [], []
274
266
275
267
point_data = io .BytesIO (self .data ["PointData" ])
276
- coords = list ()
277
- point_types = list ()
268
+ point_types = []
278
269
279
- coords . append ( self .get_charger_point_pixel ())
270
+ coords = [ self .get_charger_point_pixel ()]
280
271
281
272
while x := point_data .read (2 ):
282
273
coords .append (
283
274
self ._virtual_to_pixel (
284
275
(
285
276
struct .unpack ("h" , x )[0 ],
286
277
struct .unpack ("h" , point_data .read (2 ))[0 ],
287
- )
288
- )
278
+ ),
279
+ ),
289
280
)
290
281
291
- for i , coord in enumerate (coords ):
282
+ for i , _ in enumerate (coords ):
292
283
byte = int (i * 2 / 8 )
293
284
bit = int ((i * 2 / 8 % 1 ) * 8 )
294
285
@@ -312,20 +303,20 @@ def _scale_up_pixel_coords(self, coords):
312
303
return x * self .map_scale , y * self .map_scale
313
304
314
305
def _virtual_to_pixel_list (self , coords ):
315
- ret = list ()
316
- for coord in coords :
317
- ret .append (self ._virtual_to_pixel (coord ))
318
- return ret
306
+ return [self ._virtual_to_pixel (coord ) for coord in coords ]
319
307
320
308
def _virtual_to_pixel (self , coords ):
321
- """Convert virtual (laser map coordinates) to pixel coords, taking origin into account"""
309
+ """
310
+ Convert virtual (laser map coordinates) to pixel coords,
311
+ taking origin into account
312
+ """
322
313
x , y = coords
323
314
x , y = round (
324
315
(self .data ["MapOrigin" ][0 ] + (x * 2 * self .get_map_resolution ()))
325
- * self .map_scale
316
+ * self .map_scale ,
326
317
), round (
327
318
(self .data ["MapOrigin" ][1 ] + (y * 2 * self .get_map_resolution ()))
328
- * self .map_scale
319
+ * self .map_scale ,
329
320
)
330
321
return x , y
331
322
@@ -345,42 +336,36 @@ def calibration_points(self):
345
336
{
346
337
"vacuum" : {"x" : 0 , "y" : 0 },
347
338
"map" : {"x" : int (map_point [0 ]), "y" : int (map_point [1 ])},
348
- }
339
+ },
349
340
)
350
341
351
342
map_point = self ._virtual_to_pixel (
352
- (self .get_map_width (), self .get_map_height ())
343
+ (self .get_map_width (), self .get_map_height ()),
353
344
)
354
345
cal .append (
355
346
{
356
347
"vacuum" : {"x" : self .get_map_width (), "y" : self .get_map_height ()},
357
348
"map" : {"x" : int (map_point [0 ]), "y" : int (map_point [1 ])},
358
- }
349
+ },
359
350
)
360
351
361
352
map_point = self ._virtual_to_pixel ((0 , self .get_map_height ()))
362
353
cal .append (
363
354
{
364
355
"vacuum" : {"x" : 0 , "y" : self .get_map_height ()},
365
356
"map" : {"x" : int (map_point [0 ]), "y" : int (map_point [1 ])},
366
- }
357
+ },
367
358
)
368
359
369
360
map_point = self ._virtual_to_pixel ((self .get_map_width (), 0 ))
370
361
cal .append (
371
362
{
372
363
"vacuum" : {"x" : self .get_map_width (), "y" : 0 },
373
364
"map" : {"x" : int (map_point [0 ]), "y" : int (map_point [1 ])},
374
- }
365
+ },
375
366
)
376
367
377
368
return cal
378
369
379
370
def get_predefined_selections (self ):
380
- all_rooms = self .get_rooms ()
381
- predefined_selections = list ()
382
-
383
- for room in all_rooms :
384
- predefined_selections .append (room .get_xaiomi_vacuum_map_card_rooms ())
385
-
386
- return predefined_selections
371
+ return [room .get_xaiomi_vacuum_map_card_rooms () for room in self .get_rooms ()]
0 commit comments