valetudo-map-parser 0.1.9b23__tar.gz → 0.1.9b25__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/PKG-INFO +1 -1
  2. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/auto_crop.py +13 -30
  3. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/shared.py +4 -7
  4. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/types.py +29 -7
  5. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/hypfer_handler.py +13 -5
  6. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/rand25_handler.py +13 -4
  7. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/pyproject.toml +1 -1
  8. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/LICENSE +0 -0
  9. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/NOTICE.txt +0 -0
  10. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/README.md +0 -0
  11. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/__init__.py +0 -0
  12. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/__init__.py +0 -0
  13. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/colors.py +0 -0
  14. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/drawable.py +0 -0
  15. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/rand25_parser.py +0 -0
  16. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/utils.py +0 -0
  17. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/hypfer_draw.py +0 -0
  18. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/map_data.py +0 -0
  19. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/py.typed +0 -0
  20. {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/reimg_draw.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: valetudo-map-parser
3
- Version: 0.1.9b23
3
+ Version: 0.1.9b25
4
4
  Summary: A Python library to parse Valetudo map data returning a PIL Image object.
5
5
  License: Apache-2.0
6
6
  Author: Sandro Cantarella
@@ -8,7 +8,7 @@ import logging
8
8
  import numpy as np
9
9
  from numpy import rot90
10
10
 
11
- from .types import Color, NumpyArray, TrimCropData
11
+ from .types import Color, NumpyArray, TrimCropData, TrimsData
12
12
 
13
13
 
14
14
  _LOGGER = logging.getLogger(__name__)
@@ -28,9 +28,6 @@ class AutoCrop:
28
28
  def __init__(self, image_handler):
29
29
  self.imh = image_handler
30
30
  self.file_name = self.imh.file_name
31
- # self.path_to_data = self.hass.config.path(
32
- # STORAGE_DIR, CAMERA_STORAGE, f"auto_crop_{self.file_name}.json"
33
- # )
34
31
 
35
32
  def check_trim(
36
33
  self, trimmed_height, trimmed_width, margin_size, image_array, file_name, rotate
@@ -71,19 +68,18 @@ class AutoCrop:
71
68
  )
72
69
  return trimmed_width, trimmed_height
73
70
 
74
- async def _async_auto_crop_data(self): # , tdata=None
71
+ async def _async_auto_crop_data(self, tdata: TrimsData = None): # , tdata=None
75
72
  """Load the auto crop data from the Camera config."""
76
- # todo: implement this method but from config data
77
- # if not self.imh.auto_crop:
78
- # trims_data = TrimCropData.from_dict(dict(tdata)).to_list()
79
- # (
80
- # self.imh.trim_left,
81
- # self.imh.trim_up,
82
- # self.imh.trim_right,
83
- # self.imh.trim_down,
84
- # ) = trims_data
85
- # self._calculate_trimmed_dimensions()
86
- # return trims_data
73
+ if not self.imh.auto_crop:
74
+ trims_data = TrimCropData.from_dict(dict(tdata.to_dict())).to_list()
75
+ (
76
+ self.imh.trim_left,
77
+ self.imh.trim_up,
78
+ self.imh.trim_right,
79
+ self.imh.trim_down,
80
+ ) = trims_data
81
+ self._calculate_trimmed_dimensions()
82
+ return trims_data
87
83
  return None
88
84
 
89
85
  def auto_crop_offset(self):
@@ -97,26 +93,13 @@ class AutoCrop:
97
93
  async def _init_auto_crop(self):
98
94
  """Initialize the auto crop data."""
99
95
  if not self.imh.auto_crop and self.imh.shared.vacuum_state == "docked":
100
- self.imh.auto_crop = await self._async_auto_crop_data()
96
+ self.imh.auto_crop = await self._async_auto_crop_data(self.imh.shared.trims)
101
97
  if self.imh.auto_crop:
102
98
  self.auto_crop_offset()
103
99
  else:
104
100
  self.imh.max_frames = 5
105
101
  return self.imh.auto_crop
106
102
 
107
- # async def _async_save_auto_crop_data(self):
108
- # """Save the auto crop data to the disk."""
109
- # try:
110
- # if not os.path.exists(self.path_to_data):
111
- # data = TrimCropData(
112
- # self.imh.trim_left,
113
- # self.imh.trim_up,
114
- # self.imh.trim_right,
115
- # self.imh.trim_down,
116
- # ).to_dict()
117
- # except Exception as e:
118
- # _LOGGER.error(f"Failed to save trim data due to an error: {e}")
119
-
120
103
  async def async_image_margins(
121
104
  self, image_array: NumpyArray, detect_colour: Color
122
105
  ) -> tuple[int, int, int, int]:
@@ -104,12 +104,7 @@ class CameraShared:
104
104
  self.map_old_path = None # Old path data
105
105
  self.user_language = None # User language
106
106
  self.trim_crop_data = None
107
- self.trims: Dict[TrimsData, int] = {
108
- TrimsData.TRIM_LEFT: 0,
109
- TrimsData.TRIM_UP: 0,
110
- TrimsData.TRIM_RIGHT: 0,
111
- TrimsData.TRIM_DOWN: 0,
112
- }
107
+ self.trims = TrimsData # Trims data
113
108
  self.skip_room_ids: List[str] = []
114
109
 
115
110
  def update_user_colors(self, user_colors):
@@ -228,11 +223,13 @@ class CameraSharedManager:
228
223
  instance.vacuum_status_position = device_info.get(
229
224
  CONF_VAC_STAT_POS, DEFAULT_VALUES["vac_status_position"]
230
225
  )
231
-
232
226
  # If enable_snapshots, check for png in www.
233
227
  instance.enable_snapshots = device_info.get(
234
228
  CONF_SNAPSHOTS_ENABLE, DEFAULT_VALUES["enable_www_snapshots"]
235
229
  )
230
+ instance.trims.from_dict(
231
+ device_info.get("trims_data", DEFAULT_VALUES["trims_data"])
232
+ )
236
233
 
237
234
  except TypeError as ex:
238
235
  _LOGGER.error("Shared data can't be initialized due to a TypeError! %s", ex)
@@ -6,7 +6,7 @@ Version 0.0.1
6
6
  import asyncio
7
7
  import json
8
8
  import logging
9
- from dataclasses import dataclass
9
+ from dataclasses import dataclass, asdict
10
10
  from enum import Enum
11
11
  from typing import Any, Dict, Tuple, Union
12
12
 
@@ -285,6 +285,7 @@ DEFAULT_VALUES = {
285
285
  "vac_status_position": True,
286
286
  "get_svg_file": False,
287
287
  "save_trims": True,
288
+ "trims_data": {"trim_left": 0, "trim_up": 0, "trim_right": 0, "trim_down": 0},
288
289
  "enable_www_snapshots": False,
289
290
  "color_charger": [255, 128, 0],
290
291
  "color_move": [238, 247, 255],
@@ -346,6 +347,7 @@ KEYS_TO_UPDATE = [
346
347
  "offset_bottom",
347
348
  "offset_left",
348
349
  "offset_right",
350
+ "trims_data",
349
351
  "auto_zoom",
350
352
  "zoom_lock_ratio",
351
353
  "show_vac_status",
@@ -591,10 +593,30 @@ class CameraModes:
591
593
  CAMERA_ON = True
592
594
 
593
595
 
594
- class TrimsData(Enum):
595
- """Constants for the trims data."""
596
+ @dataclass
597
+ class TrimsData:
598
+ """Dataclass to store and manage trims data."""
599
+
600
+ trim_left: int = 0
601
+ trim_up: int = 0
602
+ trim_right: int = 0
603
+ trim_down: int = 0
596
604
 
597
- TRIM_LEFT = "trim_left"
598
- TRIM_UP = "trim_up"
599
- TRIM_RIGHT = "trim_right"
600
- TRIM_DOWN = "trim_down"
605
+ @classmethod
606
+ def from_json(cls, json_data: str):
607
+ """Create a TrimsConfig instance from a JSON string."""
608
+ data = json.loads(json_data)
609
+ return cls(
610
+ trim_left=data.get("trim_left", 0),
611
+ trim_up=data.get("trim_up", 0),
612
+ trim_right=data.get("trim_right", 0),
613
+ trim_down=data.get("trim_down", 0),
614
+ )
615
+
616
+ def to_json(self) -> str:
617
+ """Convert TrimsConfig instance to a JSON string."""
618
+ return json.dumps(asdict(self))
619
+
620
+ def to_dict(self) -> dict:
621
+ """Convert TrimsConfig instance to a dictionary."""
622
+ return asdict(self)
@@ -15,7 +15,7 @@ from PIL import Image
15
15
  from .config.auto_crop import AutoCrop
16
16
  from .config.drawable import Drawable
17
17
  from .config.shared import CameraShared
18
- from .config.types import COLORS, CalibrationPoints, Colors, RoomsProperties
18
+ from .config.types import COLORS, CalibrationPoints, Colors, RoomsProperties, TrimsData
19
19
  from .config.utils import BaseHandler, prepare_resize_params
20
20
  from .hypfer_draw import ImageDraw as ImDraw
21
21
  from .map_data import ImageData
@@ -42,10 +42,18 @@ class HypferMapImageHandler(BaseHandler):
42
42
  self.img_base_layer = None # numpy array store the map base layer.
43
43
  self.active_zones = None # vacuum active zones.
44
44
  self.svg_wait = False # SVG image creation wait.
45
- self.trim_down = 0 # memory stored trims calculated once.
46
- self.trim_left = 0 # memory stored trims calculated once.
47
- self.trim_right = 0 # memory stored trims calculated once.
48
- self.trim_up = 0 # memory stored trims calculated once.
45
+ self.trim_up = self.shared.trims.get(
46
+ TrimsData.TRIM_UP, 0
47
+ ) # memory stored trims calculated once.
48
+ self.trim_down = self.shared.trims.get(
49
+ TrimsData.TRIM_DOWN, 0
50
+ ) # memory stored trims calculated once.
51
+ self.trim_left = self.shared.trims.get(
52
+ TrimsData.TRIM_LEFT, 0
53
+ ) # memory stored trims calculated once.
54
+ self.trim_right = self.shared.trims.get(
55
+ TrimsData.TRIM_RIGHT, 0
56
+ ) # memory stored trims calculated once.
49
57
  self.offset_top = self.shared.offset_top # offset top
50
58
  self.offset_bottom = self.shared.offset_down # offset bottom
51
59
  self.offset_left = self.shared.offset_left # offset left
@@ -23,6 +23,7 @@ from .config.types import (
23
23
  PilPNG,
24
24
  RobotPosition,
25
25
  RoomsProperties,
26
+ TrimsData,
26
27
  )
27
28
  from .config.utils import BaseHandler, prepare_resize_params
28
29
  from .map_data import RandImageData
@@ -52,10 +53,18 @@ class ReImageHandler(BaseHandler):
52
53
  self.room_propriety = None # Room propriety data
53
54
  self.shared = camera_shared # Shared data
54
55
  self.active_zones = None # Active zones
55
- self.trim_down = None # Trim down
56
- self.trim_left = None # Trim left
57
- self.trim_right = None # Trim right
58
- self.trim_up = None # Trim up
56
+ self.trim_up = self.shared.trims.get(
57
+ TrimsData.TRIM_UP, 0
58
+ ) # memory stored trims calculated once.
59
+ self.trim_down = self.shared.trims.get(
60
+ TrimsData.TRIM_DOWN, 0
61
+ ) # memory stored trims calculated once.
62
+ self.trim_left = self.shared.trims.get(
63
+ TrimsData.TRIM_LEFT, 0
64
+ ) # memory stored trims calculated once.
65
+ self.trim_right = self.shared.trims.get(
66
+ TrimsData.TRIM_RIGHT, 0
67
+ ) # memory stored trims calculated once.
59
68
  self.file_name = self.shared.file_name # File name
60
69
  self.offset_top = self.shared.offset_top # offset top
61
70
  self.offset_bottom = self.shared.offset_down # offset bottom
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "valetudo-map-parser"
3
- version = "0.1.9.b23"
3
+ version = "0.1.9.b25"
4
4
  description = "A Python library to parse Valetudo map data returning a PIL Image object."
5
5
  authors = ["Sandro Cantarella <gsca075@gmail.com>"]
6
6
  license = "Apache-2.0"